18 August, 2025

Script to unapply the invoice on Credit Memo - Oracle EBS

 set serveroutput on;
declare
    l_api_version               CONSTANT NUMBER:=1;
    l_init_msg_list             CONSTANT VARCHAR2(1):=FND_API.g_false;
    l_commit                    CONSTANT VARCHAR2(1):=FND_API.g_false;
    l_acctd_amount_applied_from ar_receivable_applications_all.acctd_amount_applied_from%TYPE;
    l_acctd_amount_applied_to   ar_receivable_applications_all.acctd_amount_applied_to%TYPE;
    l_cm_app_rec                AR_CM_API_PUB.cm_app_rec_type;
  v_cm_unapp_rec            AR_CM_API_PUB.CM_UNAPP_REC_TYPE;
    g_request_id                NUMBER:=Fnd_Global.conc_request_id;
    l_msg_count                 NUMBER;
    l_msg_data                  VARCHAR2(2500);
    v_msg_data                  VARCHAR2(4000);
    v_process_status                VARCHAR2(2500);
    l_out_rec_application_id    NUMBER;
--     v_process                   VARCHAR2(1):='Y';
    l_return_status             VARCHAR2(1);
    l_gl_status                 VARCHAR2(50):=NULL;
    v_accrual_cnt               NUMBER:=0;
    v_accrual_cm_cnt            NUMBER:=0;
    v_apply_amt                 NUMBER:=0;
    v_accu_amt                  NUMBER:=0;
    v_acm_amt                   NUMBER:=0;
    v_request_id                NUMBER;
    l_boolean                   BOOLEAN;
    v_xml_layout                BOOLEAN;
    l_phase                     VARCHAR2(200);
    l_dev_phase                 VARCHAR2(200);
    l_dev_status                VARCHAR2(200);
    l_message                   VARCHAR2(4000):=NULL;
    l_status                    VARCHAR2(200);
    v_print_report              NUMBER;
v_rec_present NUMBER :=0;
    g_gl_date                   DATE;
    
CURSOR get_inv_cur IS
<write your cursor to get details for invoice >
    
    CURSOR get_accrualCM_cur IS
    
<write your cursor to get details for invoice >
 
BEGIN
   dbms_output.put_line('-------------- Process Begins -------------------');
    v_print_report := 0;
  
  
    Mo_global.init('AR');
    Mo_global.set_policy_context('S',23424); --23424
    Fnd_Global.apps_initialize( 158939,59346,222); -- patch 


    FOR rec_inv IN get_inv_cur LOOP
      /*  Fnd_Global.apps_initialize( 157894, 52189, 222 );*/
        v_process_status :=NULL;
        v_msg_data   :=NULL;
       dbms_output.put_line('running for Actual Invoice : '||rec_inv.inv_trx_num);
            
                FOR rec_acc_cm IN get_CM_cur(
                                                   rec_inv.inv_trx_num,
                                                   rec_inv.cust_acct_id
                                  )LOOP
                    v_cm_unapp_rec.cm_customer_trx_id       := rec_acc_cm.customer_trx_id;
v_cm_unapp_rec.inv_customer_trx_id  := rec_acc.customer_trx_id;
v_cm_unapp_rec.reversal_gl_date     := rec_acc_cm.gl_date;
 
                   /* --API Variables
                        l_cm_app_rec.cm_customer_trx_id          :=rec_cm.customer_trx_id;
                        l_cm_app_rec.cm_trx_number               :=rec_cm.CM_trx_num; -- Credit Memo Number
                        l_cm_app_rec.inv_customer_trx_id         :=rec_inv.customer_trx_id;
                        l_cm_app_rec.inv_trx_number              :=rec_inv.accrual_trx_num; --  Invoice Number
                        l_cm_app_rec.installment                 :=NULL;
                        l_cm_app_rec.applied_payment_schedule_id :=NULL;
                        l_cm_app_rec.amount_applied              :=v_apply_amt;
                        l_cm_app_rec.apply_date                  :=g_gl_date;
                        l_cm_app_rec.gl_date                     :=g_gl_date ;--rec_cm.gl_date;
                        l_cm_app_rec.show_closed_invoices        :='Y';
                        l_cm_app_rec.comments                    :='Showtime: Applied Accrual CM to accrual invoice ' ;
                        l_cm_app_rec.called_from                 :=NULL;

                    --Calling API
                        ar_cm_api_pub.apply_on_account(
                                                      p_api_version=>l_api_version,
                                                      p_init_msg_list=>l_init_msg_list,
                                                      p_commit=>l_commit,
                                                      p_cm_app_rec=>l_cm_app_rec,
                                                      x_return_status=>l_return_status,
                                                      x_msg_count=>l_msg_count,
                                                      x_msg_data=>l_msg_data,
                                                      x_out_rec_application_id=>l_out_rec_application_id,
                                                      x_acctd_amount_applied_from=>l_acctd_amount_applied_from,
                                                      x_acctd_amount_applied_to=>l_acctd_amount_applied_to
                        );
*/
  ar_cm_api_pub.unapply_on_account(
                  p_api_version                => 1.0
                 ,p_init_msg_list              => FND_API.G_FALSE
                 ,p_commit                     => FND_API.G_FALSE
                 ,p_cm_unapp_rec               => v_cm_unapp_rec
                 ,x_return_status              => l_return_status
                 ,x_msg_count                  => l_msg_count
                 ,x_msg_data                   => l_msg_data);

                COMMIT;
                        v_msg_data := l_msg_data;
                        IF NVL(l_return_status,'****')='S' THEN
                           dbms_output.put_line('Success for : '||rec_cm.CM_trx_num ||' Amt Applied: ' ||v_apply_amt);
                            v_process_status :='SUCCESS';
                            v_msg_data   :=NULL;
                            v_print_report := v_print_report +1;
                        ELSE
                            IF l_msg_count=1 THEN
                               dbms_output.put_line(v_msg_data);
                            ELSIF l_msg_count>1 THEN
                                FOR i IN 1..l_msg_count LOOP
                                    v_msg_data:=v_msg_data
                                                ||substr(
                                                        fnd_msg_pub.get(p_encoded=>fnd_api.g_false),
                                                        1,
                                                        1500
                                                  );
                                END LOOP;
                               dbms_output.put_line(v_msg_data);
                            END IF;
                                v_process_status := 'ERROR: '||v_msg_data;
                               dbms_output.put_line('Failure for: '||rec_cm.CM_trx_num || ' error msg: '|| v_msg_data);
                            COMMIT;
                        END IF; -- l_return_status = 'S' condition
                END LOOP; -- cursor for  CM loop
    END LOOP;-- cursor for inv loop
   dbms_output.put_line('--------------  Process Completed -------------------');
   
EXCEPTION
    WHEN OTHERS THEN
       dbms_output.put_line('Error for CM '||SQLERRM);
END ;


No comments:

Post a Comment