Monday 29 December 2014

AR - Receipt Creation in Receivables R12

API to be used :

Application.

Account Receivables AR.
Validations.

. Receipt Number should not be null.

. Receipt amount should not be null.

. Customer should be available.

. Receipt Date should not be null.

. Invoice number should not be null.

. Receipt amount and total amount of all invoices related to a particular receipt should match.

. Invoice amount should not be null.

. Check if receipt is already applied to the invoice.

. Receipt Apply date should not less than the Transaction Date.

. Transaction date should exist for the invoice.
Interface Tables.

We do not have interface table for Receipts.
Base Tables.

AR_CASH_RECEIPTS_ALL
API i.e. Application Program Interface.

Create Receipts:
ar_receipt_api_pub.create_cash

Apply Amount:
ar_receipt_api_pub.apply

Apply on Account:
ar_receipt_api_pub.apply_on_account




1. AR_RECEIPT_API_PUB

Required Tables :

1.  ar_receipt_methods
2.  ar_cash_receipts_all
3.  ar_receivable_applications_all 
4.  ar_payment_schedules_all 
5.  ra_customer_trx_all
6.  hz_parties
7.  hz_cust_accounts

Validations Need to Perform  :

1. Validating Receipt  Method :
   
  The receipt method ID is validated per the following conditions:
It must be a valid receipt method ID in the AR_RECEIPT_METHOD table.
Receipt date must lie between the receipt method start date and end date (if not
null).
 The creation method code for the receipt class of this particular receipt method
ID should be ’AUTOMATIC,’ the remit flag =’Y,’ and the confirm flag = ’N’ or
’MANUAL.’
 At least one remittance bank account associated with this receipt method ID
must have either the multi-currency flag set to ’Y’ or the same currency as the
receipt currency. In addition, this should have a bank account type =
’INTERNAL’ and its inactive date (if specified) greater than the receipt_date.

2.  Validating Receipt Number  to Avoid Duplication .


Find the Below Sample Code Used to Create Oracle AR Receipt .
---------------------------------------------------------------------------------------------------------------------------------

 CREATE OR REPLACE PACKAGE BODY APPS.xxfin_ar_receipts_pkg
AS
-----------validate Receipt Method
   FUNCTION validate_receipt_method (p_receipt_method_name   IN     VARCHAR2,
                                     p_receipt_date          IN     DATE,
                                     p_receipt_method_id        OUT NUMBER,
                                     p_error_loc                OUT VARCHAR2,
                                     p_error_msg                OUT VARCHAR2)
      RETURN BOOLEAN
   IS
   --lc_receipt_method_var VARCHAR2(1);
   BEGIN
      p_error_loc := 'Function: VALIDATE_RECEIPT_METHOD';

      BEGIN
         SELECT receipt_method_id
           INTO p_receipt_method_id
           FROM ar_receipt_methods
          WHERE UPPER (TRIM (NAME)) = TRIM (p_receipt_method_name)
           AND NVL (p_receipt_date, SYSDATE) BETWEEN start_date
                                                     AND NVL (end_date,
                                                              '31-DEC-4712');
       RETURN TRUE;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            p_error_msg :=
                  'Error: Receipt Method '
               || p_receipt_method_name
               || ' is not defined in the System';
            fnd_file.put_line (fnd_file.LOG, p_error_msg);
            DBMS_OUTPUT.put_line (p_error_msg);
            RETURN FALSE;
      END;
   EXCEPTION
      WHEN OTHERS
      THEN
         p_error_msg :=
               'Error while validating Receipt Method: '
            || p_receipt_method_name
            || ' '
            || SUBSTR (SQLERRM, 1, 255);
         fnd_file.put_line (fnd_file.LOG, p_error_msg);
         DBMS_OUTPUT.put_line (p_error_msg);
         RETURN FALSE;
   END;
 -------------Validating for duplicate Receipt  ------------------------------
   FUNCTION validate_receipt_number (p_receipt_number   IN     VARCHAR2,
                                     p_org_id           IN     NUMBER,
                                     p_error_loc           OUT VARCHAR2,
                                     p_error_msg           OUT VARCHAR2)
      RETURN BOOLEAN
   IS
      lc_receipt_var   VARCHAR2 (1);
   BEGIN
      p_error_loc := 'Function: VALIDATE_RECEIPT_NUMBER';

      BEGIN
         SELECT 'X'
           INTO lc_receipt_var
           FROM ar_cash_receipts_all
          WHERE receipt_number = p_receipt_number AND org_id = p_org_id; -- added by ranjeet 15/05/2012

         p_error_msg :=
               'Error: Receipt Number '
            || p_receipt_number
            || ' already in the System';
         fnd_file.put_line (fnd_file.LOG, p_error_msg);
         DBMS_OUTPUT.put_line (p_error_msg);
         RETURN FALSE;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            --p_error_msg := 'Error: Customer '||p_customer_name||' is not defined in the System';
            --Fnd_File.PUT_LINE(Fnd_File.LOG,p_error_msg);
            --DBMS_OUTPUT.PUT_LINE(p_error_msg);
            RETURN TRUE;
      END;
   EXCEPTION
      WHEN OTHERS
      THEN
         p_error_msg :=
               'Error while validating Receipt: '
            || p_receipt_number
            || ' '
            || SUBSTR (SQLERRM, 1, 255);
         fnd_file.put_line (fnd_file.LOG, p_error_msg);
         DBMS_OUTPUT.put_line (p_error_msg);
         RETURN FALSE;
   END;
 ------------ Validating for Receipt Existence  for invoice Number---------------------
   FUNCTION validate_receipt_existence (p_chr_trx_number   IN     VARCHAR2,
                                        p_org_id           IN     NUMBER,
                                        p_error_loc           OUT VARCHAR2,
                                        p_error_msg           OUT VARCHAR2)
      RETURN BOOLEAN
   IS
      lc_receipt_var   VARCHAR2 (1);
   BEGIN
      p_error_loc := 'Function: VALIDATE_RECEIPT_EXISTENCE';

      BEGIN
    
         SELECT 'X'
           INTO lc_receipt_var
           FROM ar_payment_schedules_all apsa,
                ar_receivable_applications_all araa,
                ar_cash_receipts_all acra,
                ra_customer_trx_all racta
          WHERE     apsa.payment_schedule_id = araa.payment_schedule_id
                AND apsa.cash_receipt_id = araa.cash_receipt_id
                AND acra.cash_receipt_id = apsa.cash_receipt_id
                AND racta.customer_trx_id = araa.applied_customer_trx_id
                AND racta.org_id = apsa.org_id
                AND araa.APPLICATION_TYPE = 'CASH'
                AND racta.trx_number = p_chr_trx_number
                AND apsa.org_id = p_org_id;

         p_error_msg :=
               'Error: Receipt  for invoice number '
            || p_chr_trx_number
            || '  is already in the System';
         fnd_file.put_line (fnd_file.LOG, p_error_msg);
         DBMS_OUTPUT.put_line (p_error_msg);
         RETURN TRUE;
      EXCEPTION
         WHEN NO_DATA_FOUND
         THEN
            --p_error_msg := 'Error: Customer '||p_customer_name||' is not defined in the System';
            --Fnd_File.PUT_LINE(Fnd_File.LOG,p_error_msg);
            --DBMS_OUTPUT.PUT_LINE(p_error_msg);
            RETURN FALSE;
      END;
   EXCEPTION
      WHEN OTHERS
      THEN
         p_error_msg :=
               'Error while validating Receipt Existence: '
            || p_chr_trx_number
            || ' '
            || SUBSTR (SQLERRM, 1, 255);
         fnd_file.put_line (fnd_file.LOG, p_error_msg);
         DBMS_OUTPUT.put_line (p_error_msg);
         RETURN FALSE;
   END;
   PROCEDURE imp_values (p_trx_in_number   IN     VARCHAR2,
                         errbuf               OUT VARCHAR2,
                         retcode              OUT NUMBER)
   AS
      --              Variable Declaration
      lc_program_name        VARCHAR2 (150);
      ln_user_id             NUMBER;
      ln_login_id            NUMBER;
      ln_org_id              NUMBER;
      lc_error_flag          VARCHAR2 (1);
      ln_total_rec_cnt       NUMBER;                -- count for total records
      ln_success_rec_cnt     NUMBER;
      -- count for successfully processed records
      ln_error_rec_cnt       NUMBER;              -- count fro errored records
      lc_error_loc           VARCHAR2 (50);
      lc_error_msg           VARCHAR2 (500);
      ln_request_id          NUMBER;
      ld_request_date        DATE;
      ln_record_insert       NUMBER;
      lc_errbuf              VARCHAR2 (24000);
      v_n_msg_index_out      VARCHAR2 (32000);
      lc_retcode             VARCHAR2 (10);
      lc_return_status       VARCHAR2 (1);
      lc_msg_data            VARCHAR2 (255);
      ln_err_count           NUMBER := 0;
      ln_count               NUMBER;
      ln_receipt_method_id   NUMBER;
      ln_customer_number     NUMBER;
      ln_cr_id               NUMBER;
      ln_msg_count           NUMBER;
      lb_receipt_method      BOOLEAN;
      lb_receipt_exists      BOOLEAN;
      lb_invoice_number      BOOLEAN;
      lb_customer            BOOLEAN;
      ln_cust_site_use_id    NUMBER;
      ld_gl_date             DATE;
      lc_account_name        VARCHAR2 (240);
      ln_amt                 NUMBER (14, 3);
      l_receipt_number       VARCHAR2 (250);
      l_recpt_methd_name     VARCHAR2 (300);


      CURSOR lci_rec                        --(receipt_num varchar2,ou NUMBER)
      IS
           SELECT apsa.TRX_DATE AS "TRX_DATE",
                  apsa.GL_DATE AS "GL_DATE",
                  apsa.trx_number AS "INVOICE_NUMBER",
                  apsa.INVOICE_CURRENCY_CODE AS "INVOICE_CURRENCY_CODE",
                  apsa.AMOUNT_DUE_REMAINING AS "AMOUNT_DUE_REMAINING",
                  rcta.BILL_TO_CUSTOMER_ID AS "BILL_TO_CUSTOMER_ID",
                  hz.party_name AS "PARTY_NAME",
                  hz.PARTY_NUMBER "PARTY_NUMBER",
                  apsa.org_id AS "ORG_ID",
                  rcta.EXCHANGE_RATE AS "EXCHANGE_RATE",
                  rcta.EXCHANGE_RATE_TYPE AS "EXCHANGE_RATE_TYPE",
                  rcta.EXCHANGE_DATE AS "EXCHANGE_DATE"
             FROM ar_payment_schedules_all apsa,
                  ra_customer_trx_all rcta,
                  abpom.sd64_invoiceheader lsd,
                  hz_parties HZ,
                  hz_cust_accounts hca
            WHERE     apsa.customer_trx_id = rcta.customer_trx_id
                  AND apsa.org_id = rcta.org_id
                  AND TRIM (LSD.INVOICENUMBER) = TRIM (rcta.trx_number)
                  AND TRIM (lsd.INVOICENUMBER) =
                         NVL (p_trx_in_number, TRIM (rcta.trx_number))
                  AND HZ.PARTY_ID = HCA.PARTY_ID
                  AND HCA.CUST_ACCOUNT_ID = rcta.BILL_TO_CUSTOMER_ID
                  --AND TRUNC(apsa.TRX_DATE)       =TRUNC(SYSDATE)
                  AND lsd.CASH_INVOICE = 'Y'
         GROUP BY apsa.TRX_DATE,
                  apsa.GL_DATE,
                  apsa.trx_number,
                  apsa.INVOICE_CURRENCY_CODE,
                  apsa.AMOUNT_DUE_REMAINING,
                  rcta.BILL_TO_CUSTOMER_ID,
                  hz.party_name,
                  hz.PARTY_NUMBER,
                  apsa.org_id,
                   rcta.EXCHANGE_RATE,
                  rcta.EXCHANGE_RATE_TYPE,
                  rcta.EXCHANGE_DATE ;
   BEGIN
      -- Apps Initialize
      mo_global.init ('AR');
      mo_global.set_policy_context ('S',
                                    TO_NUMBER (fnd_profile.VALUE ('ORG_ID')));
      lc_program_name := 'Conversion Program Name: ABP Auto  Receipt Creation';
      ln_user_id := fnd_profile.VALUE ('USER_ID');
      ln_login_id := fnd_profile.VALUE ('LOGIN_ID');
      ln_org_id := fnd_profile.VALUE ('ORG_ID');
      --Hardcoding the Receipt mathod Name
  
      fnd_file.put_line (
         fnd_file.LOG,
         '---------------------------------------------------------------------- ');
      DBMS_OUTPUT.put_line (
         '---------------------------------------------------------------------- ');
      fnd_file.put_line (fnd_file.LOG, lc_program_name);
      DBMS_OUTPUT.put_line (lc_program_name);
      fnd_file.put_line (fnd_file.LOG, 'Start of Log Messages: ');
      DBMS_OUTPUT.put_line ('Start of Log Messages: ');
      fnd_file.put_line (
         fnd_file.LOG,
         '---------------------------------------------------------------------- '
         || CHR (10));
      DBMS_OUTPUT.put_line (
         '---------------------------------------------------------------------- '
         || CHR (10));

      FOR cur IN lci_rec
      LOOP
         lc_error_loc := NULL;
         lc_error_msg := NULL;
         lc_errbuf := NULL;
         lc_retcode := NULL;
         ln_cust_site_use_id := NULL;
         ld_gl_date := NULL;
         lc_account_name := NULL;
         lc_error_flag := 'N';
         ln_amt := NULL;
         fnd_file.put_line (
            fnd_file.LOG,
            'Insertion Process Start for Receipt  number:'
            || cur.INVOICE_NUMBER);
  l_recpt_methd_name := TRIM ('AUTO_CASH_RECEIPT');
         --Receipt Number

         BEGIN
            SELECT 'REC0' || xxabp_receipt_seq.NEXTVAL
              INTO l_receipt_number
              FROM DUAL;
         EXCEPTION
            WHEN NO_DATA_FOUND
            THEN
               lc_error_flag := 'Y';
               lc_error_msg := lc_error_msg || SUBSTR (lc_error_msg, 1, 255);
               DBMS_OUTPUT.put_line (SUBSTR (lc_error_msg, 1, 255));
               fnd_file.put_line (fnd_file.LOG, lc_error_msg);
         END;

         --Check for Dulicate Recept Existence
         IF cur.INVOICE_NUMBER IS NOT NULL
         THEN
            lb_receipt_exists :=
               validate_receipt_existence (cur.INVOICE_NUMBER,
                                           cur.ORG_ID,
                                           lc_error_loc,
                                           lc_error_msg);

            IF lb_receipt_exists
            THEN
               fnd_file.put_line (
                  fnd_file.LOG,
                  'Receipt  already Exists for this Transaction'||cur.INVOICE_NUMBER);
                    lc_error_flag := 'Y';
               lc_error_msg := lc_error_msg || SUBSTR (lc_error_msg, 1, 255);
                 DBMS_OUTPUT.put_line (SUBSTR (lc_error_msg, 1, 255));
               fnd_file.put_line (fnd_file.LOG, lc_error_msg);
            ELSE
                lc_error_flag := 'N';
           
            END IF;
         ELSE
            lc_error_flag := 'Y';
            fnd_file.put_line (fnd_file.LOG, 'Receipt Number Cant be null.');
            lc_error_msg := (lc_error_msg || 'Receipt Number Cant be null.');
         END IF;

         --check for duplicate Receipt
         IF l_receipt_number IS NOT NULL
         THEN
            lb_invoice_number :=
               validate_receipt_number (l_receipt_number,
                                        cur.ORG_ID,
                                        lc_error_loc,
                                        lc_error_msg);

            IF lb_invoice_number
            THEN
               fnd_file.put_line (
                  fnd_file.LOG,
                  'Receipt Number Does not exists in Base table i.e no duplicasy');
            ELSE
               lc_error_flag := 'Y';
               lc_error_msg := lc_error_msg || SUBSTR (lc_error_msg, 1, 255);
               DBMS_OUTPUT.put_line (SUBSTR (lc_error_msg, 1, 255));
               fnd_file.put_line (fnd_file.LOG, lc_error_msg);
            END IF;
         ELSE
            lc_error_flag := 'Y';
            fnd_file.put_line (fnd_file.LOG, 'Receipt Number Cant be null.');
            lc_error_msg := (lc_error_msg || 'Receipt Number Cant be null.');
         END IF;



         --validate for receipts method
         IF l_recpt_methd_name IS NOT NULL
         THEN
            lb_receipt_method :=
               validate_receipt_method (l_recpt_methd_name,
                                        cur.TRX_DATE,
                                        ln_receipt_method_id,
                                        lc_error_loc,
                                        lc_error_msg);

            IF lb_receipt_method
            THEN
               IF ln_receipt_method_id IS NOT NULL
               THEN
                  --                  UPDATE xxran_ar_receipts_interim
                  --                     SET li_receipt_method_id = ln_receipt_method_id
                  --                   WHERE li_receipt_num = cur.receipt_number;
                  fnd_file.put_line (
                     fnd_file.LOG,
                     'The Receipt Method ' || l_recpt_methd_name || 'exists.');
                     DBMS_OUTPUT.put_line ( 'The Receipt Method ' || l_recpt_methd_name || 'exists.');
               ELSE
                  fnd_file.put_line (
                     fnd_file.LOG,
                        'The Receipt Method ID  for '
                     || l_recpt_methd_name
                     || ' does not exist.');
                  DBMS_OUTPUT.put_line (
                        'The Receipt Method ID  for '
                     || l_recpt_methd_name
                     || ' does not exist.');
                      lc_error_flag := 'Y';
                    lc_error_msg := lc_error_msg || SUBSTR (lc_error_msg, 1, 255);
               DBMS_OUTPUT.put_line (SUBSTR (lc_error_msg, 1, 255));
               END IF;
            ELSE
               lc_error_flag := 'Y';
               lc_error_msg := lc_error_msg || SUBSTR (lc_error_msg, 1, 255);
               DBMS_OUTPUT.put_line (SUBSTR (lc_error_msg, 1, 255));
               fnd_file.put_line (fnd_file.LOG, lc_error_msg);
            END IF;
         ELSE
            fnd_file.put_line (
               fnd_file.LOG,
               'Receipt Method does Not exists for Receipt Number: '
               || l_receipt_number);
         END IF;


         DBMS_OUTPUT.put_line (
            'ln_amt  ' || ln_amt || '  lc_error_flag: ' || lc_error_flag);

         -- calling create cash api
         IF lc_error_flag = 'N'
         THEN
            ln_cr_id := NULL;
            lc_return_status := NULL;
            ln_msg_count := NULL;
            lc_msg_data := NULL;
            DBMS_OUTPUT.put_line ('ln_amt  ' || ln_amt);
            ar_receipt_api_pub.create_cash (
               p_api_version          => 1.0,
               p_init_msg_list        => fnd_api.g_true,
               p_amount               => cur.AMOUNT_DUE_REMAINING, --cur.amount,
               p_receipt_number       => l_receipt_number,
               p_receipt_date         => cur.TRX_DATE,
               p_currency_code        => CUR.INVOICE_CURRENCY_CODE,
               --lc_currency_code,
               p_gl_date              => cur.GL_DATE,           --cur.gl_date,
               p_customer_number      => cur.PARTY_NAME,
               --ln_customer_number,
               --p_customer_site_use_id      => ln_cust_site_use_id,
               --   p_comments                  => lc_account_name,
               p_receipt_method_id    => ln_receipt_method_id,
               p_exchange_rate_type   => cur.exchange_rate_type,
               p_exchange_rate        => cur.exchange_rate,
               p_exchange_rate_date   => cur.exchange_date,
               p_org_id               => cur.ORG_ID,              --lc_org_id,
               p_cr_id                => ln_cr_id,
               x_return_status        => lc_return_status,
               x_msg_count            => ln_msg_count,
               x_msg_data             => lc_msg_data);

            IF ln_cr_id IS NOT NULL AND lc_msg_data IS NULL
            THEN
               fnd_file.put_line (
                  fnd_file.LOG,
                  'Successful Ceation Of AR Receipts:' || ln_cr_id);
               DBMS_OUTPUT.put_line (
                  'Successful Ceation Of AR Receipts:' || ln_cr_id);
               COMMIT;
            ELSE
               IF ln_msg_count >= 1
               THEN
                  FOR v_n_i IN 1 .. ln_msg_count
                  LOOP
                     pa_interface_utils_pub.get_messages (
                        p_msg_data        => lc_msg_data,
                        p_encoded         => 'F',
                        p_msg_index       => ln_msg_count,
                        p_data            => lc_msg_data,
                        p_msg_count       => ln_msg_count,
                        p_msg_index_out   => v_n_msg_index_out);
                  END LOOP;
               END IF;

               fnd_file.put_line (fnd_file.LOG,
                                  'Receipt Creation Error:' || lc_msg_data);
               DBMS_OUTPUT.put_line (
                  'Receipt Creation Error:' || lc_msg_data);
               lc_error_flag := 'Y';
               lc_error_msg :=
                  (lc_error_msg || 'Receipt Creation Error:' || lc_msg_data);
               DBMS_OUTPUT.put_line (SUBSTR (lc_error_msg, 1, 255));
               fnd_file.put_line (fnd_file.LOG, lc_error_msg);
            --p_out_chr_retcode := 'E';
            --p_out_chr_errbuf :=p_out_chr_errbuf||'Party Creation Error: '||l_msg_data;
            END IF;
         ELSE
            fnd_file.put_line (
               fnd_file.LOG,
               'Before Receipt Creation Error:' || lc_msg_data);
            DBMS_OUTPUT.put_line (
               'Before Receipt Creation Error :' || lc_msg_data);
            lc_error_flag := 'Y';
            lc_error_msg :=
               (lc_error_msg || 'Receipt Creation Error:' || lc_msg_data);
            DBMS_OUTPUT.put_line (SUBSTR (lc_error_msg, 1, 255));
            fnd_file.put_line (fnd_file.LOG, lc_error_msg);
         END IF;

         ----  CALLING APPLY API
         IF lc_error_flag = 'N'
         THEN
            --ln_cr_id := NULL;
            lc_return_status := NULL;
            ln_msg_count := NULL;
            lc_msg_data := NULL;
            ar_receipt_api_pub.APPLY (
               p_api_version       => 1.0,
               p_init_msg_list     => fnd_api.g_true --,p_amount            => cur.amount
                                                    ,
               p_cash_receipt_id   => ln_cr_id,
               p_trx_number        => cur.INVOICE_NUMBER,
               p_apply_date        => cur.TRX_DATE,             --INvoice Date
               p_apply_gl_date     => cur.GL_DATE,                   --GL Date
               p_amount_applied    => cur.AMOUNT_DUE_REMAINING, --Amount Applied
               p_receipt_number    => l_receipt_number,
               p_org_id            => cur.org_id --,p_cr_id             => ln_cr_id
                                                ,
               x_return_status     => lc_return_status,
               x_msg_count         => ln_msg_count,
               x_msg_data          => lc_msg_data);

            IF ln_cr_id IS NOT NULL AND lc_msg_data IS NULL
            THEN
               fnd_file.put_line (
                  fnd_file.LOG,
                  'Successful Apply Of AR Receipts:' || l_receipt_number);
               DBMS_OUTPUT.put_line (
                  'Successful Apply Of AR Receipts:' || l_receipt_number);
               COMMIT;
            ELSE
               IF ln_msg_count >= 1
               THEN
                  FOR v_n_i IN 1 .. ln_msg_count
                  LOOP
                     pa_interface_utils_pub.get_messages (
                        p_msg_data        => lc_msg_data,
                        p_encoded         => 'F',
                        p_msg_index       => ln_msg_count,
                        p_data            => lc_msg_data,
                        p_msg_count       => ln_msg_count,
                        p_msg_index_out   => v_n_msg_index_out);
                  END LOOP;
               END IF;

               fnd_file.put_line (fnd_file.LOG,
                                  'Receipt Apply Error:' || lc_msg_data);
               DBMS_OUTPUT.put_line ('Receipt Apply Error:' || lc_msg_data);
               lc_error_flag := 'Y';
               lc_error_msg :=
                  (lc_error_msg || 'Receipt Apply Error:' || lc_msg_data||SQLERRM);
               DBMS_OUTPUT.put_line (SUBSTR (lc_error_msg, 1, 255));
               fnd_file.put_line (fnd_file.LOG, lc_error_msg);
            --p_out_chr_retcode := 'E';
            --p_out_chr_errbuf :=p_out_chr_errbuf||'Party Creation Error: '||l_msg_data;
            END IF;
         ELSE
            fnd_file.put_line (fnd_file.LOG,
                               'Before Receipt Apply Error:' || lc_msg_data);
            DBMS_OUTPUT.put_line (
               'Before Receipt Apply Error:' || lc_msg_data);
            lc_error_flag := 'Y';
            lc_error_msg :=
               (lc_error_msg || 'Receipt Apply Error:' || lc_msg_data);
            DBMS_OUTPUT.put_line (SUBSTR (lc_error_msg, 1, 255));
            fnd_file.put_line (fnd_file.LOG, lc_error_msg);
         END IF;

         --
         IF lc_error_flag = 'N'
         THEN
            INSERT INTO xxabp_ar_receipts_err (ERROR_MSG,
                                               STATUS,
                                               INVOICE_NUMBER,
                                               RECEIPT_NUMBER,
                                               ORG_ID,
                                                DATE_PROCESSED)
                 VALUES ('',
                         'S',
                         CUR.INVOICE_NUMBER,
                         l_receipt_number,
                         CUR.ORG_ID,
                         SYSDATE);

            COMMIT;
            ln_success_rec_cnt := ln_success_rec_cnt + 1;
         ELSE
            fnd_file.put_line (fnd_file.LOG,
                               'Validations failed: ' || lc_error_msg);
            DBMS_OUTPUT.put_line ('Validations failed');

            INSERT INTO xxabp_ar_receipts_err (ERROR_MSG,
                                               STATUS,
                                               INVOICE_NUMBER,
                                               RECEIPT_NUMBER,
                                               ORG_ID,
                                               DATE_PROCESSED)
                 VALUES (lc_error_msg,
                         'E',
                         CUR.INVOICE_NUMBER,
                         l_receipt_number,
                         CUR.ORG_ID,
                         SYSDATE);

            COMMIT;
            ln_error_rec_cnt := ln_error_rec_cnt + 1;
         END IF;

         fnd_file.put_line (
            fnd_file.LOG,
            '---------------------------------------------------------------------------------');
         COMMIT;
      END LOOP;

      DBMS_OUTPUT.put_line ('Total ' || TO_CHAR (ln_total_rec_cnt));
      DBMS_OUTPUT.put_line ('Success ' || TO_CHAR (ln_success_rec_cnt));
      DBMS_OUTPUT.put_line ('Error ' || TO_CHAR (ln_error_rec_cnt));
   EXCEPTION
      WHEN OTHERS
      THEN
         fnd_file.put_line (
            fnd_file.LOG,
            'Error executing the program : ' || SUBSTR (SQLERRM, 1, 255));
         DBMS_OUTPUT.put_line (
               'Error executing the program : '
            || lc_error_msg
            || SUBSTR (SQLERRM, 1, 255));
         errbuf := SUBSTR (SQLERRM, 1, 255);
         retcode := -1;
         ROLLBACK;
   END;
END xxfin_ar_receipts_pkg;
/


Ref : http://raghusarada.blogspot.in/2012/11/ar-receipt-creation-in-receivables-r12.html

Thursday 11 December 2014

Sample Script for Creating the List Price Using qp_price_list_pub.process_price_list

Script to Create the Price List Line (Line Type) For an Item In the Price List.


DECLARE
   x_return_status                                   VARCHAR2 (1) := NULL;
   x_msg_count                                       NUMBER := 0;
   x_msg_data                                        VARCHAR2 (2000);
   l_price_list_rec                                  qp_price_list_pub.price_list_rec_type;
   l_price_list_val_rec                              qp_price_list_pub.price_list_val_rec_type;
   l_price_list_line_tbl                             qp_price_list_pub.price_list_line_tbl_type;
   l_price_list_line_val_tbl                         qp_price_list_pub.price_list_line_val_tbl_type;
   l_qualifiers_tbl                                  qp_qualifier_rules_pub.qualifiers_tbl_type;
   l_qualifiers_val_tbl                              qp_qualifier_rules_pub.qualifiers_val_tbl_type;
   l_pricing_attr_tbl                                qp_price_list_pub.pricing_attr_tbl_type;
   l_pricing_attr_val_tbl                            qp_price_list_pub.pricing_attr_val_tbl_type;
   x_price_list_rec                                  qp_price_list_pub.price_list_rec_type;
   x_price_list_val_rec                              qp_price_list_pub.price_list_val_rec_type;
   x_price_list_line_tbl                             qp_price_list_pub.price_list_line_tbl_type;
   x_price_list_line_val_tbl                         qp_price_list_pub.price_list_line_val_tbl_type;
   x_qualifiers_tbl                                  qp_qualifier_rules_pub.qualifiers_tbl_type;
   x_qualifiers_val_tbl                              qp_qualifier_rules_pub.qualifiers_val_tbl_type;
   x_pricing_attr_tbl                                qp_price_list_pub.pricing_attr_tbl_type;
   x_pricing_attr_val_tbl                            qp_price_list_pub.pricing_attr_val_tbl_type;
   k                                                 NUMBER := 1;
   j                                                 NUMBER := 1;
BEGIN
   x_return_status                                                    := NULL;
   x_msg_count                                                        := NULL;
   x_msg_data                                                         := NULL;
   l_price_list_rec.list_header_id                                    := 6007;
   l_price_list_rec.list_type_code                                    := 'PRL';
   l_price_list_rec.operation                                         := qp_globals.g_opr_update;
   l_price_list_line_tbl (1).list_header_id                           := 6007;
   l_price_list_line_tbl (1).list_line_id                             := fnd_api.g_miss_num;
   l_price_list_line_tbl (1).list_line_type_code                      := 'PLL';
   l_price_list_line_tbl (1).operation                                := qp_globals.g_opr_create;
   l_price_list_line_tbl (1).operand                                  := 10;
   l_price_list_line_tbl (1).arithmetic_operator                      := 'UNIT_PRICE';
   l_price_list_line_tbl (1).start_date_active                        := '26-NOV-2013';
   l_price_list_line_tbl (1).organization_id                          := NULL;
   l_pricing_attr_tbl (1).pricing_attribute_id                        := fnd_api.g_miss_num;
   l_pricing_attr_tbl (1).list_line_id                                := fnd_api.g_miss_num;
   l_pricing_attr_tbl (1).product_attribute_context                   := 'ITEM';
   l_pricing_attr_tbl (1).product_attribute                           := 'PRICING_ATTRIBUTE1';
   l_pricing_attr_tbl (1).product_attr_value                          := '809342'; --- Inventory Item id
   l_pricing_attr_tbl (1).product_uom_code                            := 'Ea';
   l_pricing_attr_tbl (1).excluder_flag                               := 'N';
   l_pricing_attr_tbl (1).attribute_grouping_no                       := 1;
   l_pricing_attr_tbl (1).price_list_line_index                       := 1;
   l_pricing_attr_tbl (1).operation                                   := qp_globals.g_opr_create;
   DBMS_OUTPUT.put_line ('Calling qp_price_list_pub.process_price_list API to Define List Price For a Item');
   DBMS_OUTPUT.put_line ('*********************************************************************************');
   qp_price_list_pub.process_price_list (p_api_version_number          => 1
                                       , p_init_msg_list               => fnd_api.g_true
                                       , p_return_values               => fnd_api.g_false
                                       , p_commit                      => fnd_api.g_false
                                       , x_return_status               => x_return_status
                                       , x_msg_count                   => x_msg_count
                                       , x_msg_data                    => x_msg_data
                                       , p_price_list_rec              => l_price_list_rec
                                       , p_price_list_line_tbl         => l_price_list_line_tbl
                                       , p_pricing_attr_tbl            => l_pricing_attr_tbl
                                       , x_price_list_rec              => x_price_list_rec
                                       , x_price_list_val_rec          => x_price_list_val_rec
                                       , x_price_list_line_tbl         => x_price_list_line_tbl
                                       , x_qualifiers_tbl              => x_qualifiers_tbl
                                       , x_qualifiers_val_tbl          => x_qualifiers_val_tbl
                                       , x_pricing_attr_tbl            => x_pricing_attr_tbl
                                       , x_pricing_attr_val_tbl        => x_pricing_attr_val_tbl
                                       , x_price_list_line_val_tbl     => x_price_list_line_val_tbl
                                        );

   IF x_price_list_line_tbl.COUNT > 0
   THEN
      FOR k IN 1 .. x_price_list_line_tbl.COUNT
      LOOP
         DBMS_OUTPUT.put_line ('No Of Records Created Successfully : ' || k);
         DBMS_OUTPUT.put_line ('Return Status : ' || x_price_list_line_tbl (k).return_status);
         DBMS_OUTPUT.put_line ('List Line id : ' || x_price_list_line_tbl (k).list_line_id);
      END LOOP;
   END IF;

   IF x_price_list_line_tbl (k).return_status = fnd_api.g_ret_sts_success
   THEN
      COMMIT;
      DBMS_OUTPUT.put_line ('Item loaded successfully into the price list');
   ELSE
      ROLLBACK;
      DBMS_OUTPUT.put_line ('Error While Loading Item in Ptice List');
   END IF;

   FOR k IN 1 .. x_msg_count
   LOOP
      x_msg_data                                                         :=
                                                                         oe_msg_pub.get (p_msg_index                   => k
                                                                                       , p_encoded                     => 'F');
      DBMS_OUTPUT.put_line ('Error While Loading Item in Ptice List : ' || k || ' is: ' || x_msg_data);
   END LOOP;
END;


---- Script to Create the Price Break Header Line type with Price Breaks.

DECLARE
   gpr_return_status                                 VARCHAR2 (1) := NULL;
   gpr_msg_count                                     NUMBER := 0;
   gpr_msg_data                                      VARCHAR2 (2000);
   gpr_price_list_rec                                qp_price_list_pub.price_list_rec_type;
   gpr_price_list_line_tbl                           qp_price_list_pub.price_list_line_tbl_type;
   gpr_pricing_attr_tbl                              qp_price_list_pub.pricing_attr_tbl_type;
   ppr_price_list_rec                                qp_price_list_pub.price_list_rec_type;
   ppr_price_list_val_rec                            qp_price_list_pub.price_list_val_rec_type;
   ppr_price_list_line_tbl                           qp_price_list_pub.price_list_line_tbl_type;
   ppr_price_list_line_val_tbl                       qp_price_list_pub.price_list_line_val_tbl_type;
   ppr_pricing_attr_tbl                              qp_price_list_pub.pricing_attr_tbl_type;
   ppr_pricing_attr_val_tbl                          qp_price_list_pub.pricing_attr_val_tbl_type;
   ppr_qualifiers_tbl                                qp_qualifier_rules_pub.qualifiers_tbl_type;
   ppr_qualifiers_val_tbl                            qp_qualifier_rules_pub.qualifiers_val_tbl_type;
   k                                                 NUMBER := 1;
   j                                                 NUMBER := 1;
   i                                                 NUMBER := 1;
BEGIN
   gpr_price_list_rec.list_header_id                                  := 6007;
   gpr_price_list_rec.list_type_code                                  := 'PRL';
   gpr_price_list_rec.currency_code                                   := 'USD';
   gpr_price_list_rec.operation                                       := qp_globals.g_opr_update;
   k                                                                  := 1;
   gpr_price_list_line_tbl (k).list_line_id                           := fnd_api.g_miss_num;
   gpr_price_list_line_tbl (k).list_line_type_code                    := 'PBH';
   gpr_price_list_line_tbl (k).price_break_type_code                  := 'POINT';
   gpr_price_list_line_tbl (k).operation                              := qp_globals.g_opr_create;
   gpr_price_list_line_tbl (k).product_precedence                     := 220;
   gpr_price_list_line_tbl (k).arithmetic_operator                    := 'UNIT_PRICE';
   j                                                                  := 1;
   gpr_pricing_attr_tbl (j).pricing_attribute_id                      := fnd_api.g_miss_num;
   gpr_pricing_attr_tbl (j).list_line_id                              := fnd_api.g_miss_num;
   gpr_pricing_attr_tbl (j).product_attribute_context                 := 'ITEM';
   gpr_pricing_attr_tbl (j).product_attribute                         := 'PRICING_ATTRIBUTE1';
   gpr_pricing_attr_tbl (j).product_attr_value                        := '797346';
   gpr_pricing_attr_tbl (j).product_uom_code                          := 'Ea';
   gpr_pricing_attr_tbl (j).excluder_flag                             := 'N';
   gpr_pricing_attr_tbl (j).price_list_line_index                     := 1;
   gpr_pricing_attr_tbl (j).operation                                 := qp_globals.g_opr_create;
   k                                                                  := k + 1;
   gpr_price_list_line_tbl (k).list_line_id                           := fnd_api.g_miss_num;
   gpr_price_list_line_tbl (k).list_line_type_code                    := 'PLL';
   gpr_price_list_line_tbl (k).operation                              := qp_globals.g_opr_create;
   gpr_price_list_line_tbl (k).operand                                := 10;
   gpr_price_list_line_tbl (k).arithmetic_operator                    := 'UNIT_PRICE';
   gpr_price_list_line_tbl (k).rltd_modifier_group_no                 := 1;
   gpr_price_list_line_tbl (k).product_precedence                     := 220;
   gpr_price_list_line_tbl (k).price_break_header_index               := 1;
   j                                                                  := j + 1;
   gpr_pricing_attr_tbl (j).pricing_attribute_id                      := fnd_api.g_miss_num;
   gpr_pricing_attr_tbl (j).list_line_id                              := fnd_api.g_miss_num;
   gpr_pricing_attr_tbl (j).product_attribute_context                 := 'ITEM';
   gpr_pricing_attr_tbl (j).product_attribute                         := 'PRICING_ATTRIBUTE1';
   gpr_pricing_attr_tbl (j).product_attr_value                        := '797346';
   gpr_pricing_attr_tbl (j).product_uom_code                          := 'Ea';
   gpr_pricing_attr_tbl (j).pricing_attribute_context                 := 'VOLUME';
   gpr_pricing_attr_tbl (j).pricing_attribute                         := 'PRICING_ATTRIBUTE10';
   gpr_pricing_attr_tbl (j).pricing_attr_value_from                   := '1';
   gpr_pricing_attr_tbl (j).pricing_attr_value_to                     := '20';
   gpr_pricing_attr_tbl (j).comparison_operator_code                  := 'BETWEEN';
   gpr_pricing_attr_tbl (j).excluder_flag                             := 'N';
   gpr_pricing_attr_tbl (j).price_list_line_index                     := 2;
   gpr_pricing_attr_tbl (j).operation                                 := qp_globals.g_opr_create;
   gpr_msg_data                                                       := NULL;
   DBMS_OUTPUT.put_line ('Calling qp_price_list_pub.process_price_list API to Define List Price For a Item');
   DBMS_OUTPUT.put_line ('*********************************************************************************');
   qp_price_list_pub.process_price_list (p_api_version_number          => 1
                                       , p_init_msg_list               => fnd_api.g_true
                                       , p_return_values               => fnd_api.g_false
                                       , p_commit                      => fnd_api.g_false
                                       , x_return_status               => gpr_return_status
                                       , x_msg_count                   => gpr_msg_count
                                       , x_msg_data                    => gpr_msg_data
                                       , p_price_list_rec              => gpr_price_list_rec
                                       , p_price_list_line_tbl         => gpr_price_list_line_tbl
                                       , p_pricing_attr_tbl            => gpr_pricing_attr_tbl
                                       , x_price_list_rec              => ppr_price_list_rec
                                       , x_price_list_val_rec          => ppr_price_list_val_rec
                                       , x_price_list_line_tbl         => ppr_price_list_line_tbl
                                       , x_price_list_line_val_tbl     => ppr_price_list_line_val_tbl
                                       , x_qualifiers_tbl              => ppr_qualifiers_tbl
                                       , x_qualifiers_val_tbl          => ppr_qualifiers_val_tbl
                                       , x_pricing_attr_tbl            => ppr_pricing_attr_tbl
                                       , x_pricing_attr_val_tbl        => ppr_pricing_attr_val_tbl
                                        );

   IF ppr_price_list_line_tbl.COUNT > 0
   THEN
      FOR k IN 1 .. ppr_price_list_line_tbl.COUNT
      LOOP
         DBMS_OUTPUT.put_line ('No Of Records Created Successfully : ' || k);
         DBMS_OUTPUT.put_line ('Return Status : ' || ppr_price_list_line_tbl (k).return_status);
         DBMS_OUTPUT.put_line ('List Line id : ' || ppr_price_list_line_tbl (k).list_line_id);
      END LOOP;
   END IF;

   IF gpr_return_status <> fnd_api.g_ret_sts_success
   THEN
      RAISE fnd_api.g_exc_unexpected_error;
   ELSE
      COMMIT;
   END IF;
EXCEPTION
   WHEN fnd_api.g_exc_error
   THEN
      gpr_return_status                                                  := fnd_api.g_ret_sts_error;
      DBMS_OUTPUT.put_line ('err msg 1 is : ' || gpr_msg_data);
   WHEN fnd_api.g_exc_unexpected_error
   THEN
      gpr_return_status                                                  := fnd_api.g_ret_sts_unexp_error;
      DBMS_OUTPUT.put_line (' msg count 2 is : ' || gpr_msg_count);

      FOR k IN 1 .. gpr_msg_count
      LOOP
         gpr_msg_data                                                       :=
                                                                         oe_msg_pub.get (p_msg_index                   => k
                                                                                       , p_encoded                     => 'F');
         DBMS_OUTPUT.put_line ('err msg ' || k || 'is:  ' || gpr_msg_data);
      END LOOP;
   WHEN OTHERS
   THEN
      gpr_return_status                                                  := fnd_api.g_ret_sts_unexp_error;
      DBMS_OUTPUT.put_line ('err msg 3 is : ' || gpr_msg_data);
END;
/

---- Script to Create the Price Break Header Line type with Price Breaks and attributes.

DECLARE
   x_return_status                                   VARCHAR2 (1) := NULL;
   x_msg_count                                       NUMBER := 0;
   x_msg_data                                        VARCHAR2 (2000);
   l_price_list_rec                                  qp_price_list_pub.price_list_rec_type;
   l_price_list_line_tbl                             qp_price_list_pub.price_list_line_tbl_type;
   l_pricing_attr_tbl                                qp_price_list_pub.pricing_attr_tbl_type;
   x_price_list_rec                                  qp_price_list_pub.price_list_rec_type;
   x_price_list_val_rec                              qp_price_list_pub.price_list_val_rec_type;
   x_price_list_line_tbl                             qp_price_list_pub.price_list_line_tbl_type;
   x_price_list_line_val_tbl                         qp_price_list_pub.price_list_line_val_tbl_type;
   x_pricing_attr_tbl                                qp_price_list_pub.pricing_attr_tbl_type;
   x_pricing_attr_val_tbl                            qp_price_list_pub.pricing_attr_val_tbl_type;
   x_qualifiers_tbl                                  qp_qualifier_rules_pub.qualifiers_tbl_type;
   x_qualifiers_val_tbl                              qp_qualifier_rules_pub.qualifiers_val_tbl_type;
   k                                                 NUMBER := 1;
   j                                                 NUMBER := 1;
   i                                                 NUMBER := 1;
BEGIN
   /* set the list_header_id to g_miss_num */
   l_price_list_rec.list_header_id                                    := 6007;
   l_price_list_rec.list_type_code                                    := 'PRL';
/* you can set the currency of price list to whatever, say FRA */
   l_price_list_rec.currency_code                                     := 'USD';
   l_price_list_rec.operation                                         := qp_globals.g_opr_update;
   --Create a Price List Line of type 'PBH'
   k                                                                  := 1;
   l_price_list_line_tbl (k).list_line_id                             := fnd_api.g_miss_num;
   l_price_list_line_tbl (k).list_line_type_code                      := 'PBH';
   l_price_list_line_tbl (k).price_break_type_code                    := 'POINT';
   l_price_list_line_tbl (k).operation                                := qp_globals.g_opr_create;
   l_price_list_line_tbl (k).operand                                  := 10;
   l_price_list_line_tbl (k).arithmetic_operator                      := 'UNIT_PRICE';
   /*
     product_attr_value stores inventory item id -product_attribute for Item Number is Pricing_Attribute1
     product_attribute_context is ITEM . Each line can have one or more pricing attributes. we use
     PRICE_LIST_LINE_INDEX to link the child(pricing attributes ) to the parent(line). When you have pricing attributes like color,
     length, width etc, populate the fields pricing_attribute_context, pricing_attribute , pricing_attr_value_from, pricing_attr_value_to and
     comparison_operator_code ( '=' or 'between') and repeat the product_attr_value and its attribute and context for each record. */
   j                                                                  := 1;
   /* Pricing Attribute( with only Product information) record for Price List Line of type 'PBH' */
   l_pricing_attr_tbl (j).pricing_attribute_id                        := fnd_api.g_miss_num;
   l_pricing_attr_tbl (j).list_line_id                                := fnd_api.g_miss_num;
   l_pricing_attr_tbl (j).product_attribute_context                   := 'ITEM';
   l_pricing_attr_tbl (j).product_attribute                           := 'PRICING_ATTRIBUTE1';
   l_pricing_attr_tbl (j).product_attr_value                          := '809346';
   l_pricing_attr_tbl (j).product_uom_code                            := 'Ea';
   l_pricing_attr_tbl (j).excluder_flag                               := 'N';
   l_pricing_attr_tbl (j).price_list_line_index                       := 1;
   l_pricing_attr_tbl (j).operation                                   := qp_globals.g_opr_create;
   j                                                                  := j + 1;
   /* Pricing Attribute( non Product) record for Price List Line of type 'PBH' */
   l_pricing_attr_tbl (j).pricing_attribute_id                        := fnd_api.g_miss_num;
   l_pricing_attr_tbl (j).list_line_id                                := fnd_api.g_miss_num;
   l_pricing_attr_tbl (j).product_attribute_context                   := 'ITEM';
   l_pricing_attr_tbl (j).product_attribute                           := 'PRICING_ATTRIBUTE1';
   l_pricing_attr_tbl (j).product_attr_value                          := '809346';
   l_pricing_attr_tbl (j).product_uom_code                            := 'Ea';
   l_pricing_attr_tbl (j).pricing_attribute_context                   := 'RVBD_SERV_DURATION';
   l_pricing_attr_tbl (j).pricing_attribute                           := 'PRICING_ATTRIBUTE1';
   l_pricing_attr_tbl (j).pricing_attr_value_from                     := '1';
   l_pricing_attr_tbl (j).pricing_attr_value_to                       := '10';
   l_pricing_attr_tbl (j).comparison_operator_code                    := 'BETWEEN';
   l_pricing_attr_tbl (j).excluder_flag                               := 'N';
   l_pricing_attr_tbl (j).price_list_line_index                       := 1;
   l_pricing_attr_tbl (j).operation                                   := qp_globals.g_opr_create;

   --Create a Price List Line of type 'PLL', a child price break line
   k                                                                  := k + 1;
   l_price_list_line_tbl (k).list_line_id                             := fnd_api.g_miss_num;
   l_price_list_line_tbl (k).list_line_type_code                      := 'PLL';
   l_price_list_line_tbl (k).operation                                := qp_globals.g_opr_create;
   l_price_list_line_tbl (k).operand                                  := 10;
   l_price_list_line_tbl (k).arithmetic_operator                      := 'UNIT_PRICE';
   l_price_list_line_tbl (k).rltd_modifier_group_no                   := 1;
   l_price_list_line_tbl (k).price_break_header_index                 := 1;
   -- This must point to the PBH line. In this example this is a child of the PBH above where K=1.
   --Create a Pricing Attribute with pricing context as 'Volume' and Pricing Attribute as 'Item Quantity''
   --needed to complete the creation of a child price break line.
   j                                                                  := j + 1;
   /* Pricing Attribute( with specific pricing attribute context and attribute) record
    for Price List Line of type 'PLL' which is a child Price Break Line */
   l_pricing_attr_tbl (j).pricing_attribute_id                        := fnd_api.g_miss_num;
   l_pricing_attr_tbl (j).list_line_id                                := fnd_api.g_miss_num;
   l_pricing_attr_tbl (j).product_attribute_context                   := 'ITEM';
   l_pricing_attr_tbl (j).product_attribute                           := 'PRICING_ATTRIBUTE1';
   l_pricing_attr_tbl (j).product_attr_value                          := '809346';
   l_pricing_attr_tbl (j).product_uom_code                            := 'Ea';
   l_pricing_attr_tbl (j).pricing_attribute_context                   := 'VOLUME';
   l_pricing_attr_tbl (j).pricing_attribute                           := 'PRICING_ATTRIBUTE10';   --'Item Quantity'
   l_pricing_attr_tbl (j).pricing_attr_value_from                     := '10';
   l_pricing_attr_tbl (j).pricing_attr_value_to                       := '20';
   l_pricing_attr_tbl (j).comparison_operator_code                    := 'BETWEEN';
   l_pricing_attr_tbl (j).excluder_flag                               := 'N';
   l_pricing_attr_tbl (j).price_list_line_index                       := 2;
   --Because this is a pricing attribute of the line K = 2
   l_pricing_attr_tbl (j).operation                                   := qp_globals.g_opr_create;
   DBMS_OUTPUT.put_line ('Calling qp_price_list_pub.process_price_list API to Define List Price For a Item');
   DBMS_OUTPUT.put_line ('*********************************************************************************');
   qp_price_list_pub.process_price_list (p_api_version_number          => 1
                                       , p_init_msg_list               => fnd_api.g_false
                                       , p_return_values               => fnd_api.g_false
                                       , p_commit                      => fnd_api.g_false
                                       , x_return_status               => x_return_status
                                       , x_msg_count                   => x_msg_count
                                       , x_msg_data                    => x_msg_data
                                       , p_price_list_rec              => l_price_list_rec
                                       , p_price_list_line_tbl         => l_price_list_line_tbl
                                       , p_pricing_attr_tbl            => l_pricing_attr_tbl
                                       , x_price_list_rec              => x_price_list_rec
                                       , x_price_list_val_rec          => x_price_list_val_rec
                                       , x_price_list_line_tbl         => x_price_list_line_tbl
                                       , x_price_list_line_val_tbl     => x_price_list_line_val_tbl
                                       , x_qualifiers_tbl              => x_qualifiers_tbl
                                       , x_qualifiers_val_tbl          => x_qualifiers_val_tbl
                                       , x_pricing_attr_tbl            => x_pricing_attr_tbl
                                       , x_pricing_attr_val_tbl        => x_pricing_attr_val_tbl
                                        );

   IF x_return_status <> fnd_api.g_ret_sts_success
   THEN
      RAISE fnd_api.g_exc_unexpected_error;
   ELSE
      COMMIT;
   END IF;
EXCEPTION
   WHEN fnd_api.g_exc_error
   THEN
      x_return_status                                                    := fnd_api.g_ret_sts_error;
   WHEN fnd_api.g_exc_unexpected_error
   THEN
      x_return_status                                                    := fnd_api.g_ret_sts_unexp_error;

      FOR k IN 1 .. x_msg_count
      LOOP
         x_msg_data                                                         :=
                                                                         oe_msg_pub.get (p_msg_index                   => k
                                                                                       , p_encoded                     => 'F');
         DBMS_OUTPUT.put_line ('err msg ' || k || 'is:  ' || x_msg_data);
      END LOOP;
   WHEN OTHERS
   THEN
      x_return_status                                                    := fnd_api.g_ret_sts_unexp_error;
END;
/


ref : http://oracleappssolutiions.blogspot.nl/2013/11/sample-script-for-creating-list-price.html