Below procedure script will help you apply a hold on AP invoice in oracle apps 11i,R12.
This procedure can be registered as a Concurrent Executable and Concurrent Program.
API: AP_HOLDS_PKG.INSERT_SINGLE_HOLD
/*+===============================================================*
   * PROCEDURE                                                                                                   *             *                                                                                                                    *
* assign_invhold_prc *
* *
* DESCRIPTION *
* =========== *
* The following procedure is called by the concurrent program is used to apply *
* Invoice Hold *
* PARAMETERS *
* ========== *
* NAME TYPE DESCRIPTION *
* -----------------------------------------------------------------------------------*
* retcode OUT Standard Conc Program parameter *
* errbuf OUT Standard Conc Program parameter *
* p_invoice_hold IN Invoice Hold Type *
* p_inv_lookup IN Invoice Type(STANDARD,MIXED etc.) *
* ------------------------------------------------------------------------------------*
* CALLED BY *
* Concurrent Program *
*+=================================================================*/
* assign_invhold_prc *
* *
* DESCRIPTION *
* =========== *
* The following procedure is called by the concurrent program is used to apply *
* Invoice Hold *
* PARAMETERS *
* ========== *
* NAME TYPE DESCRIPTION *
* -----------------------------------------------------------------------------------*
* retcode OUT Standard Conc Program parameter *
* errbuf OUT Standard Conc Program parameter *
* p_invoice_hold IN Invoice Hold Type *
* p_inv_lookup IN Invoice Type(STANDARD,MIXED etc.) *
* ------------------------------------------------------------------------------------*
* CALLED BY *
* Concurrent Program *
*+=================================================================*/
 PROCEDURE assign_invhold_prc (errbuf         OUT VARCHAR2,
                            retcode        OUT VARCHAR2,
                            p_invoice_hold IN VARCHAR2,
                            p_inv_lookup   IN VARCHAR2)
   IS
      --Declare local variables
   lv_hold_type          ap_hold_codes_v.hold_type%TYPE DEFAULT NULL;
   lv_lookup_type        ap_lookup_codes.lookup_type%TYPE := 'HOLD CODE';
   lv_hold_lookup_code   ap_hold_codes_v.hold_lookup_code%TYPE := p_invoice_hold;
   lv_hold_reason        ap_hold_codes_v.description%TYPE;
   lv_invoice_id         PLS_INTEGER;
   lv_invtype_lkpcode   ap_invoices_all.invoice_type_lookup_code%TYPE := p_inv_lookup;
   lv_fnd_user           fnd_user.user_id%TYPE := fnd_profile.VALUE ('USER_ID');
   lv_org_id             ap_invoices_all.org_id%TYPE := fnd_profile.value('ORG_ID');
   lv_sql_count          NUMBER :=0;
      -- Cursor to derive invoices to be placed on hold
      CURSOR cur_inv
      IS
         SELECT invoice_id, invoice_num
           FROM (SELECT ai.invoice_id invoice_id, ai.invoice_num invoice_num
                   FROM ap_invoices_all ai
                  WHERE 1 = 1
                    AND ai.org_id = lv_org_id
                      AND ai.invoice_type_lookup_code = lv_invtype_lkpcode
                    AND ai.payment_status_flag IN ('N','P')
             WHERE NOT EXISTS (
                   SELECT 1
                     FROM ap_holds_all
                    WHERE hold_lookup_code = lv_hold_lookup_code
                      AND org_id = lv_org_id
                      AND invoice_id = ai.invoice_id);
   BEGIN
      -- Derive Hold Type Code
      BEGIN
         SELECT ahc.hold_type, ahc.hold_lookup_code, ahc.description
           INTO lv_hold_type, lv_hold_lookup_code, lv_hold_reason
           FROM ap_lookup_codes alc, ap_hold_codes ahc
          WHERE alc.lookup_type = lv_lookup_type
            AND alc.lookup_code = lv_hold_lookup_code
            AND UPPER (ahc.hold_lookup_code) = UPPER (alc.lookup_code);
      EXCEPTION
         WHEN OTHERS
         THEN
            fnd_file.put_line (fnd_file.LOG,
                               'Error deriving hold lookup -' || SQLERRM
                              );
      END;
      fnd_file.put_line
               (fnd_file.output,
                'Following Invoices are put on ' || p_invoice_hold || ' Hold:'
               );
      fnd_file.put_line (fnd_file.output,
                         '                                  ');
      fnd_file.put_line (fnd_file.output,
                         'Invoice Number    |  Invoice ID   ');
      fnd_file.put_line (fnd_file.output,
                         '------------------ ---------------');
--Loop begins
      FOR inv_rec IN cur_inv
      LOOP
         lv_sql_count := lv_sql_count+1;
--API to apply hold
         ap_holds_pkg.insert_single_hold
                                  (x_invoice_id            => inv_rec.invoice_id,
                                   x_hold_lookup_code      => lv_hold_lookup_code,
                                   x_hold_type             => lv_hold_type,
                                   x_hold_reason           => lv_hold_reason,
                                   x_held_by               => lv_fnd_user,
                                   x_calling_sequence      => NULL
                                  );
         fnd_file.put_line (fnd_file.output,
                               RPAD (inv_rec.invoice_num, 18, ' ')
                            || '|  '
                            || RPAD (inv_rec.invoice_id, 15, ' ')
                           );
      END LOOP;
         IF lv_sql_count = 0 THEN
           fnd_file.put_line (fnd_file.output,'  *******No Data Found*******');
         END IF;
--Loop Ends
      COMMIT;
   EXCEPTION
      WHEN OTHERS
      THEN
         IF (SQLCODE <> -20001)
         THEN
            fnd_message.set_name ('SQLAP', 'AP_DEBUG');
            fnd_message.set_token ('ERROR', SQLERRM);
         END IF;
         fnd_file.put_line (fnd_file.LOG,
                            'Error in prc: assign_invhold_prc -' || SQLERRM
                           );
         app_exception.raise_exception;
   END assign_invhold_prc;
Note: Use ap_holds_pkg.release_single_hold to release hold by passing required parameters like invoice_id, hold_lookup_code
 
 
procedure to insert ap invoice in R12
ReplyDelete