Label Printing with WMS

Wednesday, November 21, 2012 by Ajay Atre


Label Printing with WMS
Together with MSCA (Mobile supply chain application) and WMS (warehouse management system) have capabilities built into to produce labels using the various points of the business process.
Oracle WMS produces label XML files as a part of transaction or an event such as a Purchase order receipt, Pick confirmation, work order completion or licenace plate transaction such as consolidate, generate etc.
To print oracle generated label XML, you will need actual label printer, label design application to define the graphical layout of the label.
Oracle supports two kinds of label printing configurations
1.   Printing using third party label software and a print server
2.   Printing using XML enabled direct label printers
The printing strategy depends upon factors like ROI, real time latency, volume of label, network infrastructure etc.

Printer server solution
In this strategy it requires to have a configuration of Oracle WMS, third party label printing software, printer server and network printers.
The LDA (Label design application) allows you to define different label printing formats. The printer server manages the print queue. Finally the label printer prints the label.
The label printer and LDA can come from same vendor or you can have different vendors for it.
This approach is recommended when you have high volume of labels to print form each printer.

Oracle WMS allows you to have two choices of integration with third party software.
This can be done by setting the profile WMS Label Print Mode- Asynchronous
1.   Asynchronous mode
2.   Synchronous mode

In Asynchronous mode of architecture oracle WMS generated the label XML and drops in it a specified directory. Third party label software monitors this directory for any new XML file and processes them.
Profile WMS: Label output directory – specify where the XML file needs to stored
WMS: Label file prefix- Label prefix.


Disadvantages of asynchronous label printing
Include latency security issues to FTP files across severs and no possibility for response/

Synchronous mode-
Set profile as WMS Label Print Mode- Synchronous – Generic
In synchronous mode of integration, Oracle WMS generates a label XML and sends it directly to the partner via one of two synchronous methods. In the first method, the integration is via an API implemented by the third party application that replaces an empty stub provided by Oracle (INV_TXNSTUB_PUB.POSTTRANSACTION).


Optionally, you can set ‘WMS Label Print Mode’ to ‘Synchronous – TCP/IP’ and define the IP address and port on which the print server is listening.

Synchronous - TCP/IP

Profile setup as 'WMS: Label Print Mode' to Synchronous - TCP/IP. Profile setup as 'WMS: Label Print Mode' to Synchronous - TCP/IP. Here you do not need to create any concurrent program for XML generation rather Oracle will create it as seeded. Additionally if you need to get labels printed distinctly and not want then getting overlapped (rare scenario wherein you fire multiple prints at given time and actual prints gets mingled) while printing its advised to set the profile either at responsibility or site level 'WMS: Synchronous TCP/IP label request delay' to 100. For TCP/IP this is a required step and found not much documentation about it. Still facing issues then please check printer/style/drivers as driver has Unix printing LP command into SRW driver.
XML DIRECT PRINTER
In this strategy Oracle WMS sends the XML directly to the printer. The label printer is capable of receiving XML that meets Oracle’s label specification and merges with pre-defined label formats to print a label.

XML PUBLISHER
Using XML publisher, you can configure your label layout in MS Word and map the data content to Oracle XML. You can print these labels on normal printers.
However, you cannot deploy Oracle XML publisher as a printing solution because it does not have printer drivers for industrial label printers like Zebra, Intermec etc.

Transaction Manager Stub (INV_TXNSTUB_PUB.POSTTRANSACTION)
The transaction manager calls an empty stub when each transaction processes, regardless of processing mode. It can include any additional business logic to perform for each record in the transaction interface tables.


Label print test case
I am explaining a test case based on the synchronous mode
Utilizing
INV stub - INV_TXNSTUB_PUB.POSTTRANSACTION
And WMS synchronous stub - INV_SYNC_PRINT_REQUEST.SYNC_PRINT_REQUEST





Where
INV_TXNSTUB_PUB.POSTTRANSACTION is getting called at the end of inventory transactions like PO receipt, ship confirm etc.

INV_SYNC_PRINT_REQUEST.SYNC_PRINT_REQUEST is getting called when you set profile WMS Label Print Mode- as “Synchronous – Generic”

Having custom label re-print program by which users can reprint the labels if needed.

Prerequisites-
Oracle printer setups – setting up the Intermec printer in oracle and on network.
Oracle WMS setup - for label format and assigning to a particular business flows.

Demonstration-
1-  PO receipt label printing
Purchasing Navigation:- Purchase order
Create the PO and approve it.

Receive the PO by MSCA



Note – As we are calling ora_label_print_pkg.inv_trx_label_print inside INV_TXNSTUB_PUB.POSTTRANSACTION, the custom procedure calls collects the data and inserts a record into custom table (ORA_LABEL_PRINT_TAB) on which we have trigger which fires custom label print program.
 This program prints a label as


2-  LPN Transactions – lpn consolidate label print
Prerequisite
Set the WMS label processing mode profile (WMS: Label Print Mode) to synchronous


Label format
Warehouse manager Navigation:- Setup/Warehouse Configuration/Define label format
You can define you own format or use existing format once defined make it default
For example I have defined custom format under LPN content label type as “Custom LPN Content”
The label format contents minimum fields which I wanted.




Assign label types to Business flows
Warehouse manager Navigation:- Setup/Warehouse Configuration/Assign label types to Business flows
Here I am assigning label type to business flow. Business flow is actually transactions like ship confirm, po receipt or pack/unpack lpns.




Complete the lpn consolidate transaction from MSCA as below


Once success check the label history
You will see the xml generated under LPN Content which is essentially same passed to package INV_SYNC_PRINT_REQUEST.SYNC_PRINT_REQUEST parameter p_xml_content




  
Label content

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE labels SYSTEM "label.dtd">
<labels _FORMAT="Custom LPN Content" _QUANTITY="1" _PRINTERNAME="LabelPDF" _JOBNAME="LBL17603">
<label>
<variable name= "ITEM">ORATEST_WMS_ITEM</variable>
<variable name= "LOT">04MAR11</variable>
<variable name= "LPN">LPN402A</variable>
<variable name= "WHS">OWH</variable>
<variable name= "QTY">1</variable>
<variable name= "REQUEST_USER">ORATEST</variable>
</label>
</labels>

Note: - The custom package ora_label_print_pkg.lpnsplit_consolidate_data (p_xml_content)
Processes the received xml data with parameter p_xml_content and loads into custom label print table which then fires the label print program.
Label generated as



1-  Label Reprint
Considering we have done the plumbing work to get the labels generated during various part of process, we will still need the label re-print mechanism.
Using the reprinting mechanism user can re-print the label whenever needs to be.
Re-printing is needed in case where original label is lost or any other reason.

I have defined a plsql concurrent program based procedure ora_label_print_pkg.reprint_label_data.

The idea behind the re-print label program is show all onhand lpn’s available (you can have lot number as well) and let user select which lpn it needs to be reprinted.

To do this I have created a table value set based on below view
CREATE OR REPLACE FORCE VIEW ORA_GET_LPN_ONHNAD
as
   SELECT ROWIDTOCHAR (moqd.ROWID) row_id,
          wlpn.license_plate_number lpn,
          msib.segment1 item_number,
          moqd.lot_number,
          mp.organization_code whs,
          moqd.subinventory_code,
          (SELECT mil.segment1 LOCATION
             FROM mtl_item_locations mil
            WHERE     moqd.locator_id = mil.inventory_location_id
                  AND moqd.organization_id = mil.organization_id)
             LOCATOR,
          moqd.transaction_quantity qty,
          moqd.inventory_item_id,
          moqd.organization_id,
          moqd.locator_id,
          moqd.lpn_id
     FROM mtl_onhand_quantities_detail moqd,
          mtl_parameters mp,
          mtl_system_items_b msib,
          wms_license_plate_numbers wlpn
    WHERE     moqd.organization_id = mp.organization_id
          AND moqd.inventory_item_id = msib.inventory_item_id
          AND moqd.organization_id = msib.organization_id
          AND moqd.lpn_id = wlpn.lpn_id

The value set lets user to select the lpn number and then passes the rowed of onhand quantities table.



The reprint program then picks required columns from onhand table and then inserts record into custom label print program which eventually files the actual label print.



Label reprinted as


Printer Setups
System administrator Navigation:- Install/Printer/Register
 System administrator Navigation:- Install/Printer/types
 System administrator Navigation:- Install/Printer/style
 System administrator Navigation:- Install/Printer/Driver


Technical insight-
Explained as shown below.


Concurrent programs created
ORA Label Print Program
Make sure the label print program has the style selected as Intermec.





Concurrent programs created
ORA Label Print Program





Read the XML and place the values in oracle table
I have defined a procedure which reads the XML data and inserts the values into table
For example see below



Table data

DROP SEQUENCE ORA_LABEL_PRINT_TAB_s;

CREATE SEQUENCE ora_label_print_tab_s
  START WITH 1
  MAXVALUE 9999999999999999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  ORDER;


DROP TABLE ora_label_print_tab;

CREATE TABLE ora_label_print_tab
(
  TAG_PRINT_ID           NUMBER,
  TRANSACTION_ID         NUMBER,
  TRANSACTION_DATE       DATE,
  TRANSACTION_TYPE_ID    NUMBER,
  TRANSACTION_TYPE_NAME  VARCHAR2(100 BYTE),
  INVENTORY_ITEM_ID      NUMBER,
  ITEM_NUMBER            VARCHAR2(100 BYTE),
  CASE_UPC_CODE          VARCHAR2(100 BYTE),
  ITEM_DESCRIPTION       VARCHAR2(200 BYTE),
  LOT_NUMBER             VARCHAR2(100 BYTE),
  LPN_ID                 NUMBER,
  TRANSFER_LPN_ID        NUMBER,
  INNER_LPN              VARCHAR2(100 BYTE),
  OUTER_LPN              VARCHAR2(100 BYTE),
  TRANSACTION_QUANTITY   NUMBER,
  TRANSACTION_UOM        VARCHAR2(100 BYTE),
  ORGANIZATION_ID        NUMBER,
  ORGANIZATION_CODE      VARCHAR2(100 BYTE),
  SUBINVENTORY_CODE      VARCHAR2(100 BYTE),
  LOCATOR_ID             NUMBER,
  LOCATOR                VARCHAR2(100 BYTE),
  LOT_EXPIRATION_DATE    DATE,
  TRANSACTION_SOURCE_ID  NUMBER,
  BATCH_NO               VARCHAR2(100 BYTE),
  BATCH_MACHINE          VARCHAR2(100 BYTE),
  BATCH_LINE             VARCHAR2(100 BYTE),
  BATCH_SHIFT            VARCHAR2(100 BYTE),
  PALLET_ID              VARCHAR2(100 BYTE),
  ITEM_TAG_TYPE          VARCHAR2(100 BYTE),
  REQUEST_USER           VARCHAR2(2000 BYTE),
  PRINTER_NAME           VARCHAR2(100 BYTE),
  PRINT_COPIES           VARCHAR2(100 BYTE),
  REPRINT_REQUEST_ID     NUMBER,
  REQUEST_ID             NUMBER,
  CREATION_DATE          DATE,
  CREATED_BY             NUMBER,
  LAST_UPDATE_DATE       DATE,
  LAST_UPDATED_BY        NUMBER,
  ORIG_SYS_REFERENCE     VARCHAR2(200 BYTE),
  STATUS                 VARCHAR2(10 BYTE),
  ERROR_MESSAGE          VARCHAR2(2000 BYTE)
)

Trigger code-
CREATE OR REPLACE TRIGGER ora_label_print_tab_trg
   BEFORE INSERT
   ON ora_label_print_tab
   FOR EACH ROW
DECLARE
   -- +------------------------------------------------------------+
   -- +  Variable Declaration                                      +
   -- +------------------------------------------------------------+
   g_debug_point                           VARCHAR2 (50);
   l_resp_id                               NUMBER := NULL;
   l_resp_appl_id                          NUMBER := NULL;
   l_request_id                            NUMBER := NULL;
   l_result                                BOOLEAN;
   l_result1                               BOOLEAN;
   e_user_null                             EXCEPTION;
BEGIN
   g_debug_point                               := 'TRG_1000';

   --   IF :NEW.created_by is null then
   --      raise e_user_null;
   --   END IF;
      -- +------------------------------------------------------------+
      -- +  Get the Resp ID for 'Warehouse Manager', aka the 'WMS' key
      -- +------------------------------------------------------------+
   BEGIN
      g_debug_point                                := 'TRG_1020';
      l_resp_id                                    := NULL;
      l_resp_appl_id                               := NULL;

      SELECT responsibility_id
            ,application_id
        INTO l_resp_id
            ,l_resp_appl_id
        FROM apps.fnd_responsibility
       WHERE responsibility_key = 'WMS'
         AND ROWNUM = 1;
   EXCEPTION
      WHEN OTHERS
      THEN
         l_resp_id                                    := 0;
         l_resp_appl_id                               := 0;
   END;

   -- +------------------------------------------------------------+
   -- + Initialize APPS Environment                                +
   -- +------------------------------------------------------------+
   g_debug_point                               := 'TRG_1030';

   /*
      BEGIN
         fnd_global.apps_initialize (:NEW.created_by, l_resp_id, l_resp_appl_id);
      EXCEPTION
         WHEN OTHERS
         THEN
            NULL;
      END;
   */
   IF     l_resp_id IS NOT NULL
      AND l_resp_appl_id IS NOT NULL
   THEN
      --fnd_global.apps_initialize (:NEW.created_by, l_resp_id, l_resp_appl_id);
      NULL;
   ELSE
      :NEW.status                                         := 'E';
      :NEW.error_message                                  :=
                                'Error at (' || g_debug_point || '):' || ' Error getting the responsibility id for responsibility key- WMS';
      :NEW.last_update_date                               := SYSDATE;
      :NEW.last_updated_by                                := :NEW.created_by;
   END IF;

   -- +------------------------------------------------------------+
   -- + Launch the printing program
   -- +------------------------------------------------------------+
   g_debug_point                               := 'TRG_1100';
   l_result                                    := fnd_request.set_mode (TRUE);
   l_result1                                   := fnd_request.set_print_options (printer =>                       :NEW.printer_name
                                                                                ,copies =>                        :NEW.print_copies);
   g_debug_point                               := 'TRG_1110';
   l_request_id                                :=
      fnd_request.submit_request ('WMS'   -- application_short_name
                                 ,'ORA_LABEL_PRINT'   -- concurrent program name
                                 ,NULL   -- description
                                 ,NULL   -- start time
                                 ,FALSE   -- sub_request
                                 ,:NEW.tag_print_id
                                 ,CHR (0)
                                 );

   --COMMIT;
   IF NVL (l_request_id, -1) > 0
   THEN
      g_debug_point                                       := 'TRG_1120';
      :NEW.request_id                                     := l_request_id;
      :NEW.last_update_date                               := SYSDATE;
      :NEW.last_updated_by                                := :NEW.created_by;
   ELSE
      :NEW.status                                         := 'E';
      :NEW.error_message                                  :=
         SUBSTR (   'Error at ('
                 || g_debug_point
                 || '):'
                 || '1Error submitting conc program- ORA_LABEL_PRINT printer '
                 || :NEW.printer_name
                 || ' SQLMSG: '
                 || SQLERRM
                ,1
                ,2000
                );
      :NEW.last_update_date                               := SYSDATE;
      :NEW.last_updated_by                                := :NEW.created_by;
   END IF;
EXCEPTION
   WHEN e_user_null
   THEN
      NULL;
   WHEN OTHERS
   THEN
      :NEW.status                                         := 'E';
      :NEW.error_message                                  :=
         SUBSTR ('Error at (' || g_debug_point || '):' || '2Error submitting conc program- ORA_LABEL_PRINT ' || 'SQLMSG: ' || SQLERRM
                ,1
                ,2000
                );
      :NEW.last_update_date                               := SYSDATE;
      :NEW.last_updated_by                                := :NEW.created_by;
END ora_label_print_tab_trg;
/


Package code-
CREATE OR REPLACE PACKAGE apps.ora_label_print_pkg AUTHID CURRENT_USER
AS
   -- +------------------------------------------------------------+
   -- Reprinting the lable procedure called by reprint conc program
   -- +------------------------------------------------------------+
   PROCEDURE reprint_label_data (
      p_errbuf                   OUT      VARCHAR2
     ,p_retcode                  OUT      NUMBER
     ,p_onhand_qty_rec_rowid     IN       VARCHAR2
   );

   -- +------------------------------------------------------------+
   -- called inside INV_TXNSTUB_PUB.POSTTRANSACTION for label prints like po receipt WOL completion
   -- +------------------------------------------------------------+
   PROCEDURE inv_trx_label_print (
      p_transaction_id           IN       NUMBER
   );

   -- +------------------------------------------------------------+
   -- called inside INV_SYNC_PRINT_REQUEST.SYNC_PRINT_REQUEST  for lpn transactions label print
   -- +------------------------------------------------------------+
   PROCEDURE lpnsplit_consolidate_data (
      p_xml_content              IN       LONG
   );


   PROCEDURE print_label (
      p_errbuf                   OUT      VARCHAR2
     ,p_retcode                  OUT      NUMBER
     ,p_tag_print_id             IN       NUMBER
   );
END ora_label_print_pkg;
/

CREATE OR REPLACE PACKAGE BODY apps.ora_label_print_pkg
AS
   g_printer_name                 CONSTANT VARCHAR2 (50) := 'D41';

   PROCEDURE write_line (
      p_buffer_line              IN       VARCHAR2
   )
   IS
   BEGIN
      -- +------------------------------------------------------------+
      -- Write the buffer.
      -- +------------------------------------------------------------+
      -- Write buffer to the Concurrent Manager output.
      fnd_file.put_line (fnd_file.output, p_buffer_line);
      DBMS_OUTPUT.put_line (p_buffer_line);
   END write_line;

   FUNCTION get_xml_variable (
      p_xml                      IN       LONG
     ,p_variable_name            IN       VARCHAR
   )
      RETURN VARCHAR2
   IS
      x_xml_value                             VARCHAR2 (100) := NULL;
      l_session                               VARCHAR2 (1000) := NULL;
   BEGIN
      BEGIN
         x_xml_value                               := NULL;
         -- +------------------------------------------------------------+
         -- +
         -- +------------------------------------------------------------+
         l_session                                 := 'alter session set events =''31156 trace name context forever, level 2''';

         EXECUTE IMMEDIATE l_session;

         SELECT TRIM (EXTRACTVALUE (VALUE (x), '//variable'))
           INTO x_xml_value
           FROM (SELECT XMLTYPE (p_xml) xml
                   FROM DUAL), TABLE (XMLSEQUENCE (EXTRACT (xml, 'labels/label/variable'))) x
          WHERE UPPER (EXTRACTVALUE (VALUE (x), '//@name')) = UPPER (p_variable_name);
      EXCEPTION
         WHEN OTHERS
         THEN
            x_xml_value                               := NULL;
      END;

      RETURN x_xml_value;
   END get_xml_variable;

   -- +------------------------------------------------------------+
   -- | get the extracted values from xml_content
   -- +------------------------------------------------------------+
   PROCEDURE lpnsplit_consolidate_data (
      p_xml_content              IN       LONG
   )
   IS
      r_ora_label_print_tab                   ora_label_print_tab%ROWTYPE;
   BEGIN
      fnd_file.put_line (fnd_file.LOG, '+----------------------------------------------+');
      fnd_file.put_line
         (fnd_file.LOG
         ,'Uses LPNSPLIT_CONSOLIDATE_DATA- Tags printing from INV_SYNC_PRINT_REQUEST.SYNC_PRINT_REQUEST (WMS LABEL PRINTING) for trx types LPN split(89) and LPN pack(87)');
      r_ora_label_print_tab.lot_number                                         := get_xml_variable (p_xml_content, 'LOT');
      r_ora_label_print_tab.request_user                                       := get_xml_variable (p_xml_content, 'REQUEST_USER');
      r_ora_label_print_tab.inner_lpn                                          := get_xml_variable (p_xml_content, 'LPN');
      r_ora_label_print_tab.item_number                                        := get_xml_variable (p_xml_content, 'ITEM');
      r_ora_label_print_tab.organization_code                                  := get_xml_variable (p_xml_content, 'WHS');
      r_ora_label_print_tab.transaction_quantity                               := get_xml_variable (p_xml_content, 'QTY');

      INSERT INTO ORA_LABEL_PRINT_TAB
                  (tag_print_id
                  ,item_number
                  ,lot_number
                  ,inner_lpn
                  ,printer_name
                  ,print_copies
                  ,created_by
                  )
           VALUES (ora_label_print_tab_s.nextval
                  ,r_ora_label_print_tab.item_number
                  ,r_ora_label_print_tab.lot_number
                  ,r_ora_label_print_tab.inner_lpn
                  ,g_printer_name
                  ,1
                  ,6895
                  );
   END;

   -- +------------------------------------------------------------+
   -- | reprint_label_data
   -- +------------------------------------------------------------+
   PROCEDURE reprint_label_data (
      p_errbuf                   OUT      VARCHAR2
     ,p_retcode                  OUT      NUMBER
     ,p_onhand_qty_rec_rowid     IN       VARCHAR2
   )
   IS
      CURSOR c_get_onhand_details
      IS
         SELECT msi.segment1 item_number
               , (SELECT wlpn.license_plate_number
                    FROM wms_license_plate_numbers wlpn
                   WHERE wlpn.lpn_id = moqd.lpn_id) inner_lpn
               , (SELECT mil.segment1 LOCATION
                    FROM mtl_item_locations mil
                   WHERE moqd.locator_id = mil.inventory_location_id
                     AND moqd.organization_id = mil.organization_id) LOCATOR
               ,moqd.*
           FROM mtl_onhand_quantities_detail moqd, mtl_system_items msi
          WHERE moqd.inventory_item_id = msi.inventory_item_id
            AND moqd.organization_id = msi.organization_id
            AND moqd.ROWID = p_onhand_qty_rec_rowid;
   BEGIN
      fnd_file.put_line (fnd_file.LOG, '+----------------------------------------------+');
      fnd_file.put_line (fnd_file.LOG, 'Reprinting the label');

      FOR r_get_onhand_details IN c_get_onhand_details
      LOOP
         INSERT INTO ora_label_print_tab
                     (tag_print_id
                     ,item_number
                     ,lot_number
                     ,inner_lpn
                     ,printer_name
                     ,print_copies
                     ,created_by
                     )
              VALUES (ora_label_print_tab_s.nextval
                     ,r_get_onhand_details.item_number
                     ,r_get_onhand_details.lot_number
                     ,r_get_onhand_details.inner_lpn
                     ,g_printer_name
                     ,1
                     ,6895
                     );
      END LOOP;
   END reprint_label_data;

   -- +------------------------------------------------------------+
   -- | INVSTUB procedure
   -- +------------------------------------------------------------+
   PROCEDURE inv_trx_label_print (
      p_transaction_id           IN       NUMBER
   )
   IS
      CURSOR c_get_onhand_details
      IS
         SELECT mmt.transaction_id
               ,mmt.creation_date transaction_date
               ,mtt.transaction_type_id
               ,mtt.transaction_type_name
               ,msi.inventory_item_id
               ,msi.segment1 item_number
               ,mtln.lot_number
               ,ABS (mmt.transaction_quantity) transaction_quantity
               ,mmt.transaction_uom
               ,mmt.organization_id
               ,mp.organization_code
               ,mmt.subinventory_code
               , (SELECT wlpn.license_plate_number
                    FROM wms_license_plate_numbers wlpn
                   WHERE wlpn.lpn_id = NVL (NVL (mmt.lpn_id, mmt.transfer_lpn_id), mmt.content_lpn_id)) inner_lpn
               , (SELECT mil.segment1 LOCATION
                    FROM mtl_item_locations mil
                   WHERE mmt.locator_id = mil.inventory_location_id
                     AND mmt.organization_id = mil.organization_id) LOCATOR
               ,1 print_copies
               ,fu.user_name request_user
               ,mmt.created_by
           FROM mtl_system_items msi
               ,mtl_material_transactions mmt
               ,mtl_transaction_types mtt
               ,mtl_parameters mp
               ,fnd_user fu
               ,mtl_transaction_lot_numbers mtln
          WHERE msi.organization_id = mmt.organization_id
            AND msi.inventory_item_id = mmt.inventory_item_id
            AND mmt.transaction_type_id = mtt.transaction_type_id
            AND mmt.organization_id = mp.organization_id
            AND fu.user_id = mmt.created_by
            AND mmt.inventory_item_id = mtln.inventory_item_id
            AND mmt.organization_id = mtln.organization_id
            AND mmt.transaction_id = mtln.transaction_id
            AND mmt.transaction_id = p_transaction_id;
   BEGIN
      fnd_file.put_line (fnd_file.LOG, '+----------------------------------------------+');
      fnd_file.put_line (fnd_file.LOG
                        ,'Tags printing from INV_TXNSTUB_PUB.POSTTRANSACTION for trx types like PO Receipt(18) and WIP Completion(44)');

      FOR r_get_onhand_details IN c_get_onhand_details
      LOOP
         INSERT INTO ora_label_print_tab
                     (tag_print_id
                     ,item_number
                     ,lot_number
                     ,inner_lpn
                     ,printer_name
                     ,print_copies
                     ,created_by
                     )
              VALUES (ora_label_print_tab_s.nextval
                     ,r_get_onhand_details.item_number
                     ,r_get_onhand_details.lot_number
                     ,r_get_onhand_details.inner_lpn
                     ,g_printer_name
                     ,1
                     ,6895
                     );
      END LOOP;
   END inv_trx_label_print;

   PROCEDURE print_label (
      p_errbuf                   OUT      VARCHAR2
     ,p_retcode                  OUT      NUMBER
     ,p_tag_print_id             IN       NUMBER
   )
   IS
      CURSOR c_label_data
      IS
         SELECT *
           FROM ora_label_print_tab
               WHERE tag_print_id = p_tag_print_id;
   BEGIN
      FOR r_label_data IN c_label_data
      LOOP
         fnd_file.put_line (fnd_file.LOG, '+----------------------------------------------+');
         fnd_file.put_line (fnd_file.LOG, ' TAG PRINTING STARTS');
         fnd_file.put_line (fnd_file.LOG, '+----------------------------------------------+');
         write_line ('<STX><ESC>c<ETX>');   -- Set 86xx emulation mode.
         write_line ('<STX><ESC>P<ETX>');   -- Enter program mode.
         write_line ('<STX>E4;F4;<ETX>');   -- Erase previous format #4.
         write_line ('<STX>H1;o580,20;f3;c20;h1;w1;d3, Custom Lable Print - ORATEST;<ETX>');
         write_line ('<STX>B2;o550,30;f3;c6,0,1;h100;w2.85;i0;d3,' || r_label_data.inner_lpn || ';p@;<ETX>');
         -- Print LPN barcode
         write_line ('<STX>H3;o450,20;f3;c20;h1;w1;d3,' || 'LPN Number:' || r_label_data.inner_lpn || ';<ETX>');
         write_line ('<STX>L4;o425,10;f3;l440;w2;<ETX>');   -- Line below barcode and item number
         write_line ('<STX>B5;o400,30;f3;c6,0,1;h100;w2.85;i0;d3,' || r_label_data.item_number || ';p@;<ETX>');
         -- Print item barcode
         write_line ('<STX>H6;o300,20;f3;c20;h1;w1;d3,' || 'Item Number:' || r_label_data.item_number || ';<ETX>');
         write_line ('<STX>B7;o250,30;f3;c6,0,1;h100;w2.85;i0;d3,' || r_label_data.lot_number || ';p@;<ETX>');
         -- Print lot barcode
         write_line ('<STX>H8;o150,20;f3;c20;h1;w1;d3,' || 'LOT Number:' || r_label_data.lot_number || ';<ETX>');
         write_line ('<STX>H16;o53,20;f3;c30;h1;w1;d3,' || r_label_data.inner_lpn || ';<ETX>');
         write_line ('<STX>B17;o35,20;f3;c6,0,1;h30;w1;i0;d3,' || r_label_data.inner_lpn || ';p@;<ETX>');
         write_line ('<STX>H18;o38,225;f3;c30;h2;w1;d3,' || TO_CHAR (SYSDATE, 'MON/DD/RR HH24:MI:SS') || ';<ETX>');
         write_line ('<STX>R<ETX>');   -- Enter data mode
         write_line ('<STX><ESC>E4<CAN><ETX>');   -- Access format #4/clear data
         write_line ('<STX><ETB><ETX>');   -- Print the label
      END LOOP;
   END print_label;
END ora_label_print_pkg;
/

Whereas code below is an actual code which gives printing instructions to Intermec printer.

         fnd_file.put_line (fnd_file.LOG, '+----------------------------------------------+');
         fnd_file.put_line (fnd_file.LOG, ' TAG PRINTING STARTS');
         fnd_file.put_line (fnd_file.LOG, '+----------------------------------------------+');
         write_line ('<STX><ESC>c<ETX>');   -- Set 86xx emulation mode.
         write_line ('<STX><ESC>P<ETX>');   -- Enter program mode.
         write_line ('<STX>E4;F4;<ETX>');   -- Erase previous format #4.
         write_line ('<STX>H1;o580,20;f3;c20;h1;w1;d3, Custom Lable Print - ORATEST;<ETX>');
         write_line ('<STX>B2;o550,30;f3;c6,0,1;h100;w2.85;i0;d3,' || r_label_data.inner_lpn || ';p@;<ETX>');
         -- Print LPN barcode
         write_line ('<STX>H3;o450,20;f3;c20;h1;w1;d3,' || 'LPN Number:' || r_label_data.inner_lpn || ';<ETX>');
         write_line ('<STX>L4;o425,10;f3;l440;w2;<ETX>');   -- Line below barcode and item number
         write_line ('<STX>B5;o400,30;f3;c6,0,1;h100;w2.85;i0;d3,' || r_label_data.item_number || ';p@;<ETX>');
         -- Print item barcode
         write_line ('<STX>H6;o300,20;f3;c20;h1;w1;d3,' || 'Item Number:' || r_label_data.item_number || ';<ETX>');
         write_line ('<STX>B7;o250,30;f3;c6,0,1;h100;w2.85;i0;d3,' || r_label_data.lot_number || ';p@;<ETX>');
         -- Print lot barcode
         write_line ('<STX>H8;o150,20;f3;c20;h1;w1;d3,' || 'LOT Number:' || r_label_data.lot_number || ';<ETX>');
         write_line ('<STX>H16;o53,20;f3;c30;h1;w1;d3,' || r_label_data.inner_lpn || ';<ETX>');
         write_line ('<STX>B17;o35,20;f3;c6,0,1;h30;w1;i0;d3,' || r_label_data.inner_lpn || ';p@;<ETX>');
         write_line ('<STX>H18;o38,225;f3;c30;h2;w1;d3,' || TO_CHAR (SYSDATE, 'MON/DD/RR HH24:MI:SS') || ';<ETX>');
         write_line ('<STX>R<ETX>');   -- Enter data mode
         write_line ('<STX><ESC>E4<CAN><ETX>');   -- Access format #4/clear data
         write_line ('<STX><ETB><ETX>');   -- Print the label


Trigger code (Tigger on table ora_label_print_tab)

CREATE OR REPLACE TRIGGER ora_label_print_tab_trg
   BEFORE INSERT
   ON ora_label_print_tab
   FOR EACH ROW
DECLARE
   -- +------------------------------------------------------------+
   -- +  Variable Declaration                                      +
   -- +------------------------------------------------------------+
   g_debug_point                           VARCHAR2 (50);
   l_resp_id                               NUMBER := NULL;
   l_resp_appl_id                          NUMBER := NULL;
   l_request_id                            NUMBER := NULL;
   l_result                                BOOLEAN;
   l_result1                               BOOLEAN;
   e_user_null                             EXCEPTION;
BEGIN
   g_debug_point                               := 'TRG_1000';

   --   IF :NEW.created_by is null then
   --      raise e_user_null;
   --   END IF;
      -- +------------------------------------------------------------+
      -- +  Get the Resp ID for 'Warehouse Manager', aka the 'WMS' key
      -- +------------------------------------------------------------+
   BEGIN
      g_debug_point                                := 'TRG_1020';
      l_resp_id                                    := NULL;
      l_resp_appl_id                               := NULL;

      SELECT responsibility_id
            ,application_id
        INTO l_resp_id
            ,l_resp_appl_id
        FROM apps.fnd_responsibility
       WHERE responsibility_key = 'WMS'
         AND ROWNUM = 1;
   EXCEPTION
      WHEN OTHERS
      THEN
         l_resp_id                                    := 0;
         l_resp_appl_id                               := 0;
   END;

   -- +------------------------------------------------------------+
   -- + Initialize APPS Environment                                +
   -- +------------------------------------------------------------+
   g_debug_point                               := 'TRG_1030';

   /*
      BEGIN
         fnd_global.apps_initialize (:NEW.created_by, l_resp_id, l_resp_appl_id);
      EXCEPTION
         WHEN OTHERS
         THEN
            NULL;
      END;
   */
   IF     l_resp_id IS NOT NULL
      AND l_resp_appl_id IS NOT NULL
   THEN
      --fnd_global.apps_initialize (:NEW.created_by, l_resp_id, l_resp_appl_id);
      NULL;
   ELSE
      :NEW.status                                         := 'E';
      :NEW.error_message                                  :=
                                'Error at (' || g_debug_point || '):' || ' Error getting the responsibility id for responsibility key- WMS';
      :NEW.last_update_date                               := SYSDATE;
      :NEW.last_updated_by                                := :NEW.created_by;
   END IF;

   -- +------------------------------------------------------------+
   -- + Launch the printing program
   -- +------------------------------------------------------------+
   g_debug_point                               := 'TRG_1100';
   l_result                                    := fnd_request.set_mode (TRUE);
   l_result1                                   := fnd_request.set_print_options (printer =>                       :NEW.printer_name
                                                                                ,copies =>                        :NEW.print_copies);
   g_debug_point                               := 'TRG_1110';
   l_request_id                                :=
      fnd_request.submit_request ('WMS'   -- application_short_name
                                 ,'ORA_LABEL_PRINT'   -- concurrent program name
                                 ,NULL   -- description
                                 ,NULL   -- start time
                                 ,FALSE   -- sub_request
                                 ,:NEW.tag_print_id
                                 ,CHR (0)
                                 );

   --COMMIT;
   IF NVL (l_request_id, -1) > 0
   THEN
      g_debug_point                                       := 'TRG_1120';
      :NEW.request_id                                     := l_request_id;
      :NEW.last_update_date                               := SYSDATE;
      :NEW.last_updated_by                                := :NEW.created_by;
   ELSE
      :NEW.status                                         := 'E';
      :NEW.error_message                                  :=
         SUBSTR (   'Error at ('
                 || g_debug_point
                 || '):'
                 || '1Error submitting conc program- ORA_LABEL_PRINT printer '
                 || :NEW.printer_name
                 || ' SQLMSG: '
                 || SQLERRM
                ,1
                ,2000
                );
      :NEW.last_update_date                               := SYSDATE;
      :NEW.last_updated_by                                := :NEW.created_by;
   END IF;
EXCEPTION
   WHEN e_user_null
   THEN
      NULL;
   WHEN OTHERS
   THEN
      :NEW.status                                         := 'E';
      :NEW.error_message                                  :=
         SUBSTR ('Error at (' || g_debug_point || '):' || '2Error submitting conc program- ORA_LABEL_PRINT ' || 'SQLMSG: ' || SQLERRM
                ,1
                ,2000
                );
      :NEW.last_update_date                               := SYSDATE;
      :NEW.last_updated_by                                := :NEW.created_by;
END ora_label_print_tab_trg;
/


This explains WMS Label print in Oracle R12

Thanks,
Ajay






Filed under , having

47 comments:

Anonymous said...

I like your idea and information shows through the snap shots. that is very helpful for the job of label printing...many thanks
label printing

Anonymous said...

hi
We are going to setup 3rd party software loftware for label priting. Is there any FTP program need for publishing the FTP file in server directoy in Asynchronous mode?

Ajay said...

If you set mode as Asynchronous it will write a XML file in a specified directory(which can be a FTP directory). Specified directory can be mentioned in a profile option.
The way I have worked with Asynchronous mode is having a java program which was constantly checking the directory and if the file found then load it into PLSQL table.
Again with Asynchronous mode you loose real time tags printing.
Let me know if this answers your question.

Jaydeep said...

Hi Ajay,
The information on label printing is really helpfull.
I am facing an issue with label printing need your advice.
i am creating a PO approving it and then receiving it in the MSCA application.
I have written a trigger on RCV_TRANSACTIONS_INTERFACE .From the trigger I am calling a custom PKG.In the PKG I am trying to capture the LOT_NUM from table RCV_LOTS_INTERFACE. But the select query is giving me null even though in the RCV_LOT_TRANSACTIONS table i can see the LOT_NUM for the transaction.
Can you please suggest what is the solution for it.

Ajay Atre said...

Jaydeep-
Sorry for late reply if the issue still persists please see if the transaction is committed or not.

VMukhara said...

Hello Ajay,
Thanks for the information and taking the time to compilation it.

I have a a question regarding label customization in R12. We have a requirement for label type: LPN Content in R12.2.4 to override the value of _QUANTITY(number of copies to print) attribute at the LABEL element with some custom logic. By default, _QUANTITY is set to 1 at the LABELS element or header level. R12 enhancement only allows for custom sql for the VARIABLE element. I was wondering if you have any insight on how to achieve this.

Thanks in advance,
Vakula

VMukhara said...

Hello Ajay,
Thanks for the information and taking the time to compilation it.

I have a a question regarding label customization in R12. We have a requirement for label type: LPN Content in R12.2.4 to override the value of _QUANTITY(number of copies to print) attribute at the LABEL element with some custom logic. By default, _QUANTITY is set to 1 at the LABELS element or header level. R12 enhancement only allows for custom sql for the VARIABLE element. I was wondering if you have any insight on how to achieve this.

Thanks in advance,
Vakula

Unknown said...

Hello Ajay,

I have created the print_label procedure to have a test on the Lable Printing in Zebra.But the Concurrent Program got completed without Error but no print out.

What will be the Argument in the Printer Driver?

Please help me on this

Thanks
Saugata

Abhishek Jain said...

Hi Ajay,

Can we have label printing with out implementing WMS/MSCA I mean we have only normal Inventory implemented and want to print label with a third party software BarTender.

Unknown said...

Hi Ajay,

We are Synchronous - TCP/IP architecture to print label. We are able to see in inquiry screen that label XML generated but label not printed on printer. When we tried to print it manually it is printing label. then don't know why even is triggering XML but not printing label.

Thanks for your help.
D.

Unknown said...

Can Label functionality be use without WMS as my client wants to use MSCA to receive, issue and cycle count through MSCA with RF device, please advice

my email is ebasecon@yahoo.com

Unknown said...

Joseph, the website you gave does not work

Shagul.H said...

HI Ajay ,

Your document looks nice very helpful , Can you help me on printing multiple lot for single item

Unknown said...

good one..
business card printing
online business cards
business card printing online

lg said...

Abhi print is No. 1 label printerlabel printing in Delhi custom stickers, sticker printing and Printing press Company in Delhi. meta name="abstract" Abhi print provides high quality creative services and offset printing, Book printing, Brochures printing , Commercial Printing to its clients based in Delhi and NCR.

lg said...

Sticker Wholesaler in Delhi Delhi India - Abhiprint is well established Wholesale Supplier of Serial No Stickersticker printing in Delhi in Delhi, Serial No Sticker Distributor in Delhi, Serial No Sticker Trader in Delhi.

lg said...

Abhiprint offer different type of business cardBusiness card in Delhi in Delhi ,INDIA Best business card service in Delhi, business card design in Delhi, visiting card in Delhi, visiting card maker in Delhi ,printer price in Delhi, color printer in Delhi, business card printing in Delhi, card printer in Delhi ,business card maker in Delhi, A full services with guaranteed quality & on time delivery.

lg said...


Our company (Abhiprint) is one of the prominent Manufacturers, Exporters & Suppliers of Sticker Printing https://www.abhiprint.com/sticker-printing.php from Delhi, India. We use modern printing techniques and high-quality, thick paper material for fabricating the sticker PrintingINDIA Best sticker printing. The stickers printing are quite adhesive and get stuck to a surface firmly without the risk of being torn. Widely used for depicting the serial number of various items, we offer Sticker Printing in standard rectangular shapes sticker custom stickers vinyl sticker sticker printing sticker maker stickers online sticker design label printer car stickers sticker labels sticker printing near me photo stickers sticker paper sticker paper car sticker design laptop stickers personal sticker maker sticker, colors, etc. and nominal rates.

lg said...



The Abhi Print offers the most comprehensive sticker printing sticker printing press solutions in offset printing of: stickers online abel printer car stickers sticker labels sticker printing near me photo stickers We are catalog printers and provide a complete catalog printing service, regardless of size, style or quantity; We can produce your printed catalog. Additionally, we offer a wide range of catalog printing options, including two fold catalogs, three folding catalogs, and customized catalogs in different designs, colors, materials, and fonts. We make sure to pair your catalog with logos and photographs as per your requirement.

lg said...


Stickers use a substance called an adhesive—a kind of glue or paste that makes them stick to a surface. ... In adhesives, the molecular ropes are arranged so that their little sticky parts are all lined up. With all those sticky parts working together, the molecules stick very tightly to one another and to many surfacessticker printing in DelhiThe Abhi Print offers the most comprehensive sticker printing solutions in offset printing of stickers online label printer car stickers sticker labels sticker printing near me photo stickerssticker custom stickers vinyl sticker printing sticker maker stickers online sticker design label printer car stickers sticker labels sticker printing.

lg said...

The printing press allows us to share large amounts of information quickly and in huge numbers. In fact, the printing press is so significant that it has come to be known as one of the most important inventions of our time. It drastically changed the way society evolved.Best Printing Press Company in DelhiPrinting Press, Catalog Printing, Sticker Printing, Brochure Printing, Pamphlet Printing, Booklet Printing, Printing Services Digital Printing Services, Catalog Printing Services, Magazines Publishing, Books Printing, Web Offset Printing, Print Media, Typesetting Services, Color Printing, Books Binding, Abhi print printing Press has enjoyed the reputation of being one of the frontline names in the Indian printing industry. We are providing all types of printing services

Change Mohit Dedhia said...

I appreciate the way you have formatted the article. It looks like a proper guide to label printing. Keep it up!

lg said...

At AbhiPrint we assure you to provide some great paintings to create a uniquely compact catalog. We provide all printing service like catalogue Printing We provide all printing service like catalogue PrintingThe elegant product is just a small with a bare minimum copy of the text. With our minimalist design, your list will look attractive, informative and vague which will help attract the attention of potential customers. size. Best Catalog Printing Services In Delhi NCR, Catalog Printing In Rohini, Catalog Printing In Gurgaon Best Catalog Printing Services In All Over IndiaOur Catalog Designing in Delhi provides creative Online Product Catalog design Printing with guaranteed quality and on-time delivery at low prices with expert support.And background color as well as counts to achieve the desired result.Our Catalog Designing in Delhi provides creative Online Product Catalog design Printing with guaranteed quality and on-time delivery at low prices with expert support.

Ppriyakumar said...

Thanks for sharing,get an affordable metal labels stickers at best quality.

Umamahesh said...

its excellent information, can you please let me know is it possible to print a label in multiple page using zebra with oracle apps.

Yeyes Ristintares said...

Salam kepada semua warga negara Indonesia, nama saya Yeyes Ristintares tolong, saya ingin membagikan kesaksian hidup saya di sini di platform ini agar semua warga negara Indonesia berhati-hati dengan pemberi pinjaman di internet, Allah benar-benar mendukung saya melalui kebaikan Ibu Ny. Helen Wilson. Setelah beberapa periode mencoba untuk mendapatkan pinjaman dari lembaga keuangan, dan ditolak, jadi saya memutuskan untuk mendaftar melalui pinjaman online tetapi saya ditipu dan saya kehilangan lebih dari 32 juta Rupiah dengan pemberi pinjaman yang berbeda setelah membayar beberapa biaya dan tidak mendapatkan pinjaman. Saya menjadi sangat putus asa dalam mendapatkan pinjaman, jadi saya berdiskusi dengan seorang teman saya yang kemudian memperkenalkan saya kepada Ny. Helen Wilson, pemberi pinjaman di perusahaan, jadi teman saya meminta saya untuk melamar dari ibu Helen, jadi saya memanggil keberanian dan menghubungi Ibu Helen.

Saya mengajukan pinjaman 900 juta dengan tingkat bunga 2%, sehingga pinjaman itu disetujui tanpa tekanan dan semua pengaturan dibuat pada transfer kredit, karena fakta bahwa itu tidak memerlukan jaminan dan jaminan untuk pinjaman transfer saya hanya diberitahu untuk mendapatkan sertifikat perjanjian lisensi aplikasi mereka untuk mentransfer kredit saya dan dalam waktu kurang dari 48 jam uang pinjaman telah disetorkan ke rekening bank saya.

Saya pikir itu lelucon sampai saya menerima telepon dari bank saya bahwa akun saya dikreditkan dengan jumlah 900 juta. Saya sangat senang bahwa Allah akhirnya menjawab doa saya dengan memesan pinjaman saya dengan pinjaman asli saya, yang memberi saya keinginan hati saya. mereka juga memiliki tim ahli yang akan memberi tahu Anda tentang jenis bisnis yang ingin Anda investasikan dan cara menginvestasikan uang Anda, sehingga Anda tidak akan pernah bangkrut lagi dalam hidup Anda. Semoga ALLAH memberkati Ny. Helen Wilson untuk membuat hidup saya mudah, jadi saya menyarankan siapa pun yang tertarik mendapatkan pinjaman untuk menghubungi Ny. Helen melalui email: (helenwilson719@gmail.com) atau Whatsapp: +1-585-326-2165 untuk Anda pinjaman

Ada perusahaan palsu lain yang menggunakan kesaksian saya secara online untuk mencapai keinginan egois mereka, saya satu-satunya dengan kesaksian yang benar ini, harap berhati-hati terhadap orang-orang ini. Akhirnya saya ingin berterima kasih kepada Anda semua karena telah meluangkan waktu untuk membaca kesaksian sejati hidup saya tentang kesuksesan saya dan saya berdoa Allah akan melakukan kehendak-Nya dalam hidup Anda. Sekali lagi nama saya Yeyes Ristintares, Anda dapat menghubungi saya untuk informasi lebih lanjut melalui email saya: yristintares@gmail.com

Ppriyakumar said...

Nice to read this blog. thanks for sharing.
vinyl sticker
polycarbonate sticker

Ppriyakumar said...

Nice blog.
Dome stickers

Randika Robby Farel said...

HALO

Mendapatkan pinjaman menjadi lebih mudah hanya jika Anda mengajukan pinjaman dengan ONE BILLION RISING FUND

 Mereka 100% dapat diandalkan dan dapat dipercaya dan saya adalah saksi hidup dari kemurahan hati organisasi keuangan yang hebat ini.
Anda yang sedang mencari bantuan keuangan dan Anda merasa kesulitan untuk mendapatkan pinjaman karena terlalu banyak pemberi pinjaman palsu online menunggu siapa yang akan menjadi korban niat jahat mereka, tetapi saya memberi tahu Anda hari ini untuk tidak khawatir lagi

Jadilah cerdas dan ajukan pinjaman dengan ONE BILLION RISING FUND karena mereka dapat membantu Anda mencapai potensi dalam hidup Anda setelah Anda memenuhi syarat dan ketentuan pinjaman mereka.

CATATAN
ONE BILLION RISING FUND hanya akan memberi Anda pinjaman jika tujuan peminjaman adalah sebagai berikut

1) TINGKATKAN ARUS KAS BISNIS ANDA
2) PERALATAN PEMBELIAN
3) MEMBAYAR UNTUK PERLUASAN PROYEK
4) INVENTARISASI PEMBELIAN
5) GUNAKAN PEMBAYARAN

Jika niat Anda untuk meminjam uang bukan dari alasan yang tercantum di atas, maka ONE BILLION RISING FUND dapat menolak permintaan pengajuan pinjaman Anda.

ONE BILLION RISING FUND mungkin tidak memberi Anda pinjaman untuk hal-hal berikut ini

1) Pinjaman Mobil
2) Pinjaman Rumah
3) Biaya Pernikahan
4) Pinjaman Pemodelan Rumah
5) Pinjaman Uang Sekolah
6) Pinjaman Darurat
7) Pinjaman Pembelian Alat
8) Biaya Makan
9) Beban Tunas Kendaraan
10) Konsolidasi Hutang


Hubungi ONE BILLION RISING FUND dan dapatkan pinjaman untuk meningkatkan pendapatan tunangan Anda dan jadilah saksi seperti saya.

Hal termanis dalam arsip adalah ketika Anda memiliki bantuan tunangan yang dapat diandalkan untuk membantu Anda meningkatkan standar hidup dan bisnis Anda.

Hubungi organisasi keuangan besar ini dan jadikan hidup Anda diatur oleh syarat dan ketentuan pinjaman mereka


NAMA PERUSAHAAN: ONE BILLION RISING FUND
GMAIL PERUSAHAAN: onebillionrisingfund@gmail.com
lokasi: San Francisco. California. BARAT AMERIKA SERIKAT
NOMOR TEL: +1 267 526 5352
NOMOR WHATSAPP: +1 267 526 5352

India's super printing store said...

thanks for sharing this blog! Printland offer! Buy our multi-purpose stickers, Custom Stickers, kid's sticker's, Car Sticker etc. online to market your brand or products by printing custom stickers with your business logo or company name. Free designs!

Ny. SISKA WIBOWO said...

Halo semuanya, Nama saya Siska wibowo saya tinggal di Surabaya di Indonesia, saya seorang mahasiswa, saya ingin menggunakan kesempatan ini untuk mengingatkan semua pencari pinjaman untuk sangat berhati-hati karena ada banyak perusahaan pinjaman penipuan dan kejahatan di sini di internet , Sampai saya melihat posting Bapak Suryanto tentang Nyonya Esther Patrick dan saya menghubunginya melalui email: (estherpatrick83@gmail.com)

Beberapa bulan yang lalu, saya putus asa untuk membantu biaya sekolah dan proyek saya tetapi tidak ada yang membantu dan ayah saya hanya dapat memperbaiki beberapa hal yang bahkan tidak cukup, jadi saya mencari pinjaman online tetapi scammed.

Saya hampir tidak menyerah sampai saya mencari saran dari teman saya Pak Suryanto memanggil saya pemberi pinjaman yang sangat andal yang meminjamkan dengan pinjaman tanpa jaminan sebesar Rp200.000.000 dalam waktu kurang dari 24 jam tanpa tekanan atau tekanan dengan tingkat bunga rendah 2 %. Saya sangat terkejut ketika saya memeriksa rekening bank saya dan menemukan bahwa nomor saya diterapkan langsung ditransfer ke rekening bank saya tanpa penundaan atau kekecewaan, segera saya menghubungi ibu melalui (estherpatrick83@gmail.com)

Dan juga saya diberi pilihan apakah saya ingin cek kertas dikirim kepada saya melalui jasa kurir, tetapi saya mengatakan kepada mereka untuk mentransfer uang ke rekening bank saya, karena saya berjanji bahwa saya akan membagikan kabar baik sehingga orang bisa mendapatkan pinjaman mudah tanpa stres atau penundaan.

Yakin dan yakin bahwa ini asli karena saya memiliki semua bukti pemrosesan pinjaman ini termasuk kartu ID, dokumen perjanjian pinjaman, dan semua dokumen. Saya sangat mempercayai Madam ESTHER PATRICK dengan penghargaan dan kepercayaan perusahaan yang sepenuh hati karena dia benar-benar telah membantu hidup saya membayar proyek saya. Anda sangat beruntung memiliki kesempatan untuk membaca kesaksian ini hari ini. Jadi, jika Anda membutuhkan pinjaman, silakan hubungi Madam melalui email: (estherpatrick83@gmail.com)

Anda juga dapat menghubungi saya melalui email saya di (siskawibowo71@gmail.com) jika Anda merasa kesulitan atau menginginkan prosedur untuk mendapatkan pinjaman

Sekarang, yang saya lakukan adalah mencoba untuk memenuhi pembayaran pinjaman bulanan yang saya kirim langsung ke rekening bulanan Nyonya seperti yang diarahkan. Tuhan akan memberkati Nyonya ESTHER PATRICK untuk Segalanya. Saya bersyukur

Yanti Ari said...

Nama saya Bu Yanti Ari. Saya adalah pemilik bisnis yang menjual kosmetik. Untuk beberapa waktu, saya telah mencari pemberi pinjaman pinjaman yang andal yang dapat saya pinjam untuk mengembangkan bisnis saya dan juga menciptakan pekerjaan untuk orang lain. Pengalaman pertama saya dengan pemberi pinjaman pinjaman internet sangat buruk dan saya kehilangan jumlah 28 juta karena saya mengajukan pinjaman sebesar 600 juta untuk meningkatkan bisnis saya. Setelah pengalaman saya, saya berjanji pada diri sendiri bahwa saya tidak akan pernah meminjam dari internet karena saya ditipu.

Jadi, pada suatu hari yang setia saya membaca artikel di blog dan setelah saya selesai membaca, saya pergi untuk memeriksa bagian komentar untuk mengetahui pendapat mereka. Saya melihat komentar dari "Dian Pelangi", perancang busana terkenal dan dia berbagi cerita tentang bagaimana dia meminjam pinjaman besar dari perusahaan tempat Nyonya Ana Michael bekerja.

Kemudian, saya memutuskan untuk menghubungi Dian Pelangi, perancang busana terkenal dan saya menceritakan kisah saya tentang bagaimana saya kehilangan 28 juta karena pemberi pinjaman buruk kepadanya. Saya masih ingat dengan jelas bagaimana dia memberi tahu saya bahwa semua pencarian saya untuk pemberi pinjaman yang andal sudah berakhir. dia mengirimi saya nomor teleponnya dan saya meneleponnya untuk memastikan karena saya tidak ingin kehilangan uang lagi. Dia berbicara dengan saya dan mengatakan saya harus menghubungi detail perusahaan tempat Nyonya Ana Michael bekerja dan saya akan menerima pinjaman saya tanpa penundaan dan saya harus mencoba untuk berbagi kabar baik saya agar orang lain diselamatkan dari pemberi pinjaman yang buruk.

Maka saya menghubungi Bu Ana Michael melalui email: (ANAMICHAELGUARANTYTRUSTLOANS@GMAIL.COM)
Ini email Dian Pelangi: (DIANPELANGIINDONESIA@GMAIL.COM) yang saya hubungi.
Setelah saya menghubungi perusahaan pinjaman, saya diminta untuk menyerahkan semua yang diperlukan dari saya sebagai peminjam dan setelah beberapa saat, pinjaman tersebut disetujui untuk saya dan saya menerima pinjaman saya tanpa penundaan atau segala bentuk stres.
jadi, saya menambahkan informasi pribadi saya untuk siapa saja yang mencari pemberi pinjaman yang dapat dipercaya untuk menghubungi saya dan saya siap membantu Anda karena saya ingin orang lain diselamatkan dari pemberi pinjaman yang buruk.

Nama: Yanti Ari
Nomor telepon saya: +62 82116440184
Nomor Whatsapp: +62 82116440184
Kota: Medan
Email saya: ARIY6261@GMAIL.COM

Saya berdoa semoga Allah mengabulkan orang yang membutuhkan pinjaman untuk melihat kisah saya ini sehingga mereka dapat diselamatkan saat saya diselamatkan. Saya selalu siap membantu siapa saja yang membutuhkan jadi jangan ragu untuk menghubungi saya kapan saja karena saya tidak ingin orang-orang saya jatuh ke tangan pencuri !!!

RAFIFAPRIANI said...

Nama saya Rafif Apriani, saya membaca cerita bagaimana ibu Yanti Ari meminjam dari PINJAMAN KEPERCAYAAN GARANSI dengan bantuan perancang busana ternama DIAN PELANGI. Dalam kisahnya, dia menceritakan bagaimana dia kehilangan banyak uang (Rp28.000.000,00) dari pemberi pinjaman yang buruk karena dia membutuhkan pinjaman untuk meningkatkan usahanya.
Dia juga menceritakan bagaimana dia menghubungi Dian Pelangi yang menginstruksikan dia untuk menghubungi Ibu Ana Micheal dari PINJAMAN KEPERCAYAAN GARANSI dan itulah cara dia meminjam pinjaman yang dia butuhkan untuk meningkatkan usahanya. Jadi saya melihat cerita ibu Yanti Ari dengan detailnya, detail Dian Pelangi dan Ibu Ana Michael dari PINJAMAN KEPERCAYAAN GARANSI yang mereka semua pinjam.

Detil Dian Pelangi :: email: (DIANPELANGIINDONESIA@GMAIL.COM)
dia tinggal di Jakarta.
Detil Ibu Yanti Ari :: Nomor teleponnya: +62821-1644-0184
Nomor Whatsapp: +62821-1644-0184
dia tinggal di Kota Medan, emailnya: ARIY6261@GMAIL.COM
Dan akhirnya perusahaan pinjaman asli yang saya ingin siapa saja yang membutuhkan pinjaman dapat menghubungi karena saya sekarang menjadi saksi yang hidup dan semoga Allah selalu memberkati hari saya menghubungi mereka.
Nama perusahaan: PINJAMAN KEPERCAYAAN GARANSI, alamat email: (ANAMICHAELGUARANTYTRUSTLOANS@GMAIL.COM)

Ketika saya menghubungi ibu yanti dia memberi tahu saya bagaimana dia meminjam dari ibu Ana Michael tentang PINJAMAN KEPERCAYAAN GARANSI dan seluruh prosesnya. Dengan senang hati saya sampaikan kepada masyarakat umum bahwa Ibu Ana Michael dari GUARANTY TRUST LOANS adalah yang terbaik dan terpercaya.
Anda dapat menghubungi saya untuk lebih jelasnya melalui email saya: rafifapriani@gmail.com
Saya berharap orang-orang yang menginginkan pemberi pinjaman yang andal melihat ini.

Rizky Indah said...

LEMBAGA KEUANGAN INI BERADA PADA KEBAKARAN

TINGKATKAN FILE FINANSIAL ANDA

Saya Rizky Indah dan penduduk asli Indonesia dan saya di sini untuk memberi tahu Anda tentang bagaimana saya mendapatkan pinjaman saya dari pemberi pinjaman terpercaya ONE BILLION RISING FUND


         KONTAK PERUSAHAAN
NAMA PERUSAHAAN: ONE BILLION RISING FUND
GMAIL PERUSAHAAN: onebillionrisingfund@gmail.com
NOMOR TEL: +1 267 526 5352
NOMOR WHATSAPP: +1 267 526 5352


Dalam pandemi ini hidup menjadi lebih sulit bagi saya dan keluarga saya dan pekerjaan saya hancur oleh pandemi Covid 19 ini dan Hidup nyaman adalah dambaan semua orang dan saya menginginkan yang terbaik untuk keluarga saya jadi saya memutuskan untuk meminjamkan uang dari bank dan bank mengubah saya turun berkali-kali sampai teman saya yang mendapat pinjaman dari ONE BILLION RISING FUND memperkenalkan pemberi pinjaman kepada saya dan meyakinkan saya bahwa mereka dapat membantu saya secara finansial, saya sangat percaya kepada mereka karena teman saya baru saja mendapat pinjaman dari ONE BILLION RISING FUND jadi saya mendaftar dan mereka membawa saya melalui proses mereka yang memakan waktu beberapa hari dan yang paling mengejutkan saya, akun saya dikreditkan dengan jumlah pinjaman
Pengalaman yang saya dapatkan dari ONE BILLION RISING FUND ini telah mengubah hidup saya menjadi lebih baik dan sekarang saya memiliki perusahaan keramik
Jika Anda tahu Anda membutuhkan pinjaman, saya akan menyarankan Anda menghubungi perusahaan keuangan dan saya sangat yakin bahwa mereka dapat membantu Anda dengan pinjaman


Harap perhatikan pemberi pinjaman yang Anda hubungi secara online karena sebagian besar pemberi pinjaman keuangan online palsu dan mereka akan membuat hidup Anda lebih sulit dan mereka tidak berniat baik untuk membantu Anda karena mereka adalah penipu yang ingin mencari nafkah dari Anda.

                              KONTAK SAYA
Nama Saya ::: Rizky Indah
Email :: indahrizky490@gmail.com
Jumlah Pinjaman ::: $ 30.000.00
WA saya ::: + 62858 8161 8874

BIJAKLAH

Rina Mariana said...

Yang mana kamu?

KEPEMILIKAN SATU-SATUNYA
KEMITRAAN
KERJA SAMA
PERSEROAN TERBATAS
KOOPERATIF

Saya ingin menggunakan media ini agar Anda semua tahu bahwa mendapatkan pinjaman tidak sesulit dan stres seperti yang Anda pikirkan

Saya Rina Mariana asli bandung. Indonesia
Saya mendapat pinjaman saya dari ONE BILLION RISING FUND dan proses aplikasi saya mudah, lancar dan dapat dimengerti dan saya telah diberkati sejak saya baru di perusahaan pinjaman dan hidup saya tidak lagi menjadi bahan tertawaan bagi orang-orang melainkan mereka datang kepada saya sekarang untuk meminta nasihat dan bagaimana membantu mereka secara finansial dan sejauh ini saya telah memperkenalkan cukup banyak orang ke perusahaan pinjaman dan mereka juga mendapatkan pinjaman dari ONE BILLION RISING FUND
Saya akan menyarankan jika Anda sedang membutuhkan pinjaman dan ingin mendapatkan bantuan karena kami telah mendapatkan bantuan dari ONE BILLION RISING FUND kemudian hubungi perusahaan pinjaman melalui gmail di bawah ini dan dapatkan transformasi dalam hidup Anda secara finansial dan bisnis Anda seperti yang kami lakukan
Mereka yakin, aman, andal, dan terbuka untuk pelanggan
Mengapa saya menyukai mereka adalah karena Anda sangat bebas bertanya tentang pinjaman Anda dan layanan mereka 24/7

Nama Perusahaan:::ONE BILLION RISING FUND
Gmail: onebillionrisingfund@gmail.com

Hubungi saya

Nama ::::::::::: Unung Rina Marian
Gmail :::::::::::: rinamariana874@gmail.com
Pekerjaan ::::: KEPEMILIKAN SATU-SATUNYA
Jumlah pinjaman ::::: ;; $ 10.000,00
Kota Saat Ini :::::::::: Jakarta

Bernard CALLAIS said...

BANTUAN KREDIT BAGI ORANG YANG MEMBUTUHKAN UANG

Siapapun yang membutuhkan pinjaman untuk mengatasi kesulitan
keuangan Saya adalah ahli keuangan khusus yang dapat membantu Anda membuat pinjaman dengan tingkat bunga 1,5% dengan syarat yang akan membuat hidup Anda lebih mudah. Namun Anda tidak memiliki dukungan bank atau lebih disukai Anda memiliki proyek dan membutuhkan pembiayaan, hutang atau butuh uang untuk membayar tagihan, jangan ragu untuk menghubungi saya untuk mengetahui lebih lanjut tentang kondisi kepercayaan kami. Untuk informasi lainnya, hubungi kami dengan alamat pribadi kami: callaisbernard91@gmail.com
Nomor Whatsapp: +33780935232

Ahmed Neni said...

Nama Perusahaan::"":":":"ONE BILLION RISING FUND
Gmail Perusahaan:":":":":"::"onebillionrisingfund@gmail.com                       
Selamat siang
Namaku Nyonya Ahmed Neni dan saya berbicara sebagai salah satu orang paling bahagia di dunia saat ini dan saya mengatakan kepada diri sendiri bahwa pemberi pinjaman yang menyelamatkan keluarga saya dari situasi buruk kami, saya akan menceritakan namanya kepada dunia dan saya sangat bahagia dengan katakan bahwa keluarga saya kembali untuk selamanya karenaa saya membutuhkan pinjaman sebesar Rp150.000.000.00 untuk memulai hidup saya sejak saya adalah satu ibu dengan 3 anak dan dunia sepertinya sedang bergantung pada saya saat saya mencoba untuk mendapatkan pinjaman Dari bank dan online bank menolak saya pinjaman mereka mengatakan bahwa penghasilan saya rendah dan saya tidak memiliki jaminan untuk pinjaman jadi saya pergi online dan hal-hal menjadi lebih sulit karena mereka merobek uang saya dari saya dengan janji manis untuk membantu saya sampai saya bertemu dengan ALLAH mengirim pinjaman pinjaman yang mengubah hidup saya dan keluarga saya, ONE BILLION RISING FUND dimana Juruselamat ALLAH dikirim untuk menyelamatkan keluarga saya dan pada awalnya saya pikir ini tidak akan mungkin terjadi karena pengalaman masa lalu saya dan janji palsu tapi untuk mengejutkan saya, saya menerima pinjaman saya sebesar Rp150.000.000.00 dan saya akan menyarankan siapa saja yang benar-benar membutuhkan pinjaman untuk menghubungi perusahaan tersebut, melalui email di: """""""(((((onebillionrisingfund@gmail.com))))))))"""""""karena mereka adalah pemberi pinjaman yang paling pengertian dan baik hati. Jika Anda melihat bagaimana memastikan pinjaman atau bagaimana mendapatkan pinjaman asli, perusahaan dapat membantu Anda. "

BBM: D8E814FC 


Sebagai penerima manfaat dari perusahaan saya adalah bukti hidup dari kerja baik perusahaan dan saya meyakinkan Anda bahwa Anda akan mendapatkan formulir pinjaman ONE BILLION RISING FUND. cukup hubungi mereka dan ikuti proses pemberian pinjaman yang mudah

Anda dapat menghubungi saya Ahmed Neni pada informasi lebih lanjut ((ahmedneni48@gmail.com))

Allahu akbar
     

Anda dapat menghubungi saya Ahmed Neni pada informasi lebih lanjut ((ahmedneni48@gmail.com))
Allahu akbar

indux printing said...

A good way to say your words. Please also visit my site and let me know what do you think about my thoughts. printing press in uk

worldw MOHAMED said...

Hello semua,
Nama saya Mr, Rugare Sim. Saya tinggal di Belanda dan saya seorang yang bahagia hari ini? dan saya memberitahu diri saya bahawa mana-mana pemberi pinjaman yang menyelamatkan saya dan keluarga saya dari keadaan buruk kita, saya akan merujuk kepada mana-mana orang yang mencari pinjaman kepadanya, dia memberikan kebahagiaan kepada saya dan keluarga saya, saya memerlukan pinjaman sebanyak € 300,000.00 untuk memulakan hidup saya secara keseluruhan kerana saya seorang Bapa tunggal dengan 2 anak saya bertemu dengan pemberi pinjaman lelaki yang jujur ​​dan takut kepada Allah yang menolong saya dengan pinjaman € 300,000.00, dia adalah orang yang takut kepada Allah, jika anda memerlukan pinjaman dan anda akan membayar balik pinjaman sila hubungi dia memberitahunya bahawa (Mr, Rugare Sim) merujuk anda kepadanya. Hubungi Encik, Mohamed Careen melalui e-mel: (arabloanfirmserves@gmail.com)


BORANG MAKLUMAT PERMOHONAN PINJAMAN
Nama pertama......
Nama tengah.....
2) Jantina: ………
3) Jumlah Pinjaman Yang Diperlukan: ………
4) Tempoh Pinjaman: ………
5) Negara: ………
6) Alamat Rumah: ………
7) Nombor Mudah Alih: ………
8) Alamat e-mel ..........
9) Pendapatan Bulanan: ………………….
10) Pekerjaan: ………………………
11) Laman web manakah anda di sini mengenai ………………….
Terima kasih dan salam mesra.
E-mel arabloanfirmserves@gmail.com

printland said...

This information has many things to read and I am glad to read more impressive information about it. Thank you so much for the share.If you searching sticker printing Then Vist us.

Eric john said...

Appreciate your valuable information regarding stickers and printing.Premium custom boxes is a company,they make evergreen unique designs of stickers for any kind of products.

anjali said...

Since the beginning of civilization the practice of gift-giving has been accepted as a beauty of royalty and a solemn oath. Today's generation is within the same track too; the only representation that changed the flamboyance wrap, that was the new addition. Therefore, the fashion of custom-made pens has gained explicit popularity. However, to get a
pierre cardin pen
, one has to follow a certain pen print.

Justin said...

Nice. Thanks for sharing the information. Just a month back I'm in desperate need of color label printers. But I'm looking for a budget friendly color label printer. After searching online, I have landed up on primera. I have found so many color label printers collections over there at the expected price compared to anyone else. I picked one color label printer for me. Quality of the color label printer is awesome.

doctor said...

this content is very informative i am sure this will help where to buy zebra printersmore to deliver information

Anonymous said...

QUICK EASY EMERGENCY URGENT LOANS LOAN OFFER EVERYONE APPLY NOW +918929509036 financialserviceoffer876@gmail.com Dr. James Eric

Aart Stroke said...

Enhance your branding with professional product label printing that ensures your products stand out on the shelves!

Aart Stroke said...

High-quality product label printing enhances product presentation, making it stand out on store shelves and online platforms.

Post a Comment