Monday, August 1, 2016

"Cross currency rate is null." while calling AR_RECEIPT_API_PUB.CREATE AND APPLY API

Solution:

This error occurs when Receipt currency is different from Invoice Currency. You have to specify p_trans_to_receipt_rate parameter while calling  AR_RECEIPT_API_PUB.CREATE AND APPLY.

sample:

DECLARE

    --local Variables
    g_loc                       NUMBER :=0;
    g_msg                       VARCHAR2(500);
    l_error_description         VARCHAR2 (2000) := NULL;
    g_sysdate                   DATE  := SYSDATE;
    l_ar_receipt_succ_count     NUMBER:= 0;
    l_ar_receipt_err_count      NUMBER:= 0;
    l_ar_receipt_tot_count      NUMBER:= 0;
    l_msg_index_num             NUMBER:= 1;
    l_msg_count                 NUMBER;
    l_data_txt                  VARCHAR2(1000);
    l_msg_data                  VARCHAR2(1000);
    l_apl_return_status         VARCHAR2 (1);
    l_apl_msg_count             NUMBER;
    l_apl_msg_data              VARCHAR2 (240);
    l_org_id                    NUMBER := FND_PROFILE.VALUE('ORG_ID') ;
    l_gl_date_count             NUMBER;
    l_functional_currency fnd_currencies.currency_code%TYPE;
    l_conv_type gl_daily_conversion_types.conversion_type%TYPE;
    l_conv_rate gl_daily_rates.conversion_rate%TYPE;
    l_cust_account_id hz_cust_accounts.cust_account_id%TYPE;
    l_receipt_id ar_cash_receipts_all.cash_receipt_id%TYPE;
    l_return_status             VARCHAR2(10);
    l_cust_bank_acct_id         NUMBER;

   
BEGIN
 

    l_msg_count           := 0;
    l_data_txt            := NULL;
    l_msg_index_num       := NULL;
    l_gl_date_count       := 0;
    l_functional_currency := NULL;
    l_conv_type           := NULL;
    l_conv_rate           := NULL;
    l_receipt_id          := NULL;
    l_return_status       := NULL;
    l_msg_data            := NULL;
 

   
   FND_GLOBAL.APPS_INITIALIZE(0, 50259, 222);
   MO_GLOBAL.SET_POLICY_CONTEXT('S',l_org_id);
   
    dbms_output.put_line('before calling api ');

    -- Call Api to create receipt
 
         AR_RECEIPT_API_PUB.create_and_apply
                                   ( p_api_version => 1.0,
                                   p_init_msg_list => FND_API.G_TRUE,
                                   p_commit => FND_API.G_TRUE,
                                   p_validation_level => FND_API.G_VALID_LEVEL_FULL,
                                   p_currency_code     => 'USD',
                                   x_return_status => l_return_status,
                                   x_msg_count => l_msg_count,
                                   x_msg_data => l_msg_data,
                                   p_amount => 100,
                                   p_receipt_number => '123767589',
                                   p_receipt_date =>  sysdate-2,
                                   p_gl_date => sysdate-2,
                                   p_customer_number => 9399,
                                   p_receipt_method_id => 21011,
                                   p_trx_number => 'P18_00004',
                                   p_cr_id => l_receipt_id ,
                                   p_org_id => 93,
                                   p_location          => 'RUSK8' ,
                                   p_show_closed_invoices => 'Y' ,
                                   p_exchange_rate_type => 1000,
                                   p_exchange_rate     => null,
                                   p_exchange_rate_date => to_date('01/04/2016','dd/mm/yyyy'),
                                   p_amount_applied => 100,
                                  p_trans_to_receipt_rate=>0.5
);
                                   
                                   
   
    dbms_output.put_line('called api ');
    IF (l_return_status = 'S') THEN
        dbms_output.put_line('Calling Api AR_RECEIPT_API_PUB.CREATE_CASH success -- >' ||l_return_status ||' Receipt Id > '||l_receipt_id);
 

    ELSE
        dbms_output.put_line('Error in Calling Receipt API:');
       
        FOR i IN 1 .. l_msg_count
        LOOP
            FND_MSG_PUB.GET(p_msg_index => i, p_encoded => 'F', p_data => l_data_txt, p_msg_index_out => l_msg_index_num );        
            l_error_description := SUBSTR(l_error_description||l_data_txt,1,400);
            DBMS_OUTPUT.put_line( l_error_description);
        END LOOP;
       
       
    END IF;

COMMIT;

EXCEPTION
    WHEN OTHERS THEN
        dbms_output.put_line('Error in procedure '||SQLERRM);
END ;
/

No comments:

Post a Comment