Sometimes, development needs need to create AR collection and write-off AR transaction processing together. Oracle EBS officially provides API methods such as Ar_Receipt_Api_Pub.Create_And_Apply.
The example code is as follows:
DECLARE
Lv_Ret_Status VARCHAR2(1);
Ln_Msg_Count NUMBER;
Lv_Msg_Data VARCHAR2(240);
Ln_Cash_Receipt_Id NUMBER; --收款标识
--收款说明弹性域
Lt_Rec_Att Ar_Receipt_Api_Pub.Attribute_Rec_Type;
--收款全局说明弹性域
Lt_Rec_Gatt Ar_Receipt_Api_Pub.Global_Attribute_Rec_Type;
--核销行说明弹性域
Lt_App_Att Ar_Receipt_Api_Pub.Attribute_Rec_Type;
--核销行全局说明弹性域
Lt_App_Gatt Ar_Receipt_Api_Pub.Global_Attribute_Rec_Type;
BEGIN
-- 1) Set the applications context
Fnd_Global.Apps_Initialize(User_Id => 18585
,Resp_Id => 50660
,Resp_Appl_Id => 222);
Mo_Global.Init('AR');
Mo_Global.Set_Policy_Context('S', 81);
--Call Api
Ar_Receipt_Api_Pub.Create_And_Apply(p_Api_Version => 1.0
,p_Init_Msg_List => Fnd_Api.g_False
,p_Commit => Fnd_Api.g_False
,p_Validation_Level => Fnd_Api.g_Valid_Level_Full
,x_Return_Status => Lv_Ret_Status
,x_Msg_Count => Ln_Msg_Count
,x_Msg_Data => Lv_Msg_Data
,p_Usr_Currency_Code => NULL
,p_Currency_Code => 'CNY' --收款币种
,p_Usr_Exchange_Rate_Type => NULL --
,p_Exchange_Rate_Type => NULL --收款汇率类型
,p_Exchange_Rate => NULL --收款汇率
,p_Exchange_Rate_Date => NULL --收款汇率日期
,p_Amount => 933.39 --收款金额
,p_Factor_Discount_Amount => NULL --折扣金额
,p_Receipt_Number => 'CXP2019091604'
,p_Receipt_Date => To_Date('2019/09/16'
,'yyyy/mm/dd') --收款日期
,p_Gl_Date => To_Date('2019/09/16'
,'yyyy/mm/dd') --GL日期
,p_Maturity_Date => To_Date('2019/09/16'
,'yyyy/mm/dd') --到期日期
,p_Postmark_Date => NULL --邮戳日期
,p_Customer_Id => NULL --客户ID
,p_Customer_Name => NULL --客户名称
,p_Customer_Number => 'A08-01' --客户编号
,p_Customer_Bank_Account_Id => NULL --客户银行帐户ID
,p_Customer_Bank_Account_Num => NULL --客户银行帐户号
,p_Customer_Bank_Account_Name => NULL --客户银行帐户名称
,p_Payment_Trxn_Extension_Id => NULL
,p_Location => 6442 --地点
,p_Customer_Site_Use_Id => 6441 --客户收单方
,p_Default_Site_Use => NULL --默认客户收单方地点 默认值为Y
,p_Customer_Receipt_Reference => '18249-963742' --参考
,p_Override_Remit_Account_Flag => NULL --
,p_Remittance_Bank_Account_Id => NULL --收款银行帐户ID
,p_Remittance_Bank_Account_Num => NULL --收款银行帐户号
,p_Remittance_Bank_Account_Name => NULL --收款银行帐户名称
,p_Deposit_Date => NULL --存款日期
,p_Receipt_Method_Id => 1000 --收款方法ID
,p_Receipt_Method_Name => NULL --收款方法名称
,p_Doc_Sequence_Value => NULL --单据编号
,p_Ussgl_Transaction_Code => NULL
,p_Anticipated_Clearing_Date => NULL
,p_Called_From => NULL
,p_Attribute_Rec => Lt_Rec_Att
,p_Global_Attribute_Rec => Lt_Rec_Gatt
,p_Receipt_Comments => 'sdfasdddddddddddddd' --备注
,p_Issuer_Name => NULL
,p_Issue_Date => NULL
,p_Issuer_Bank_Branch_Id => NULL
,p_Cr_Id => Ln_Cash_Receipt_Id
,p_Customer_Trx_Id => 963742 --AR事务处理ID
,p_Trx_Number => '18249' --AR事务处理编号
,p_Installment => NULL
,p_Applied_Payment_Schedule_Id => NULL
,p_Amount_Applied => 933.39 --核销金额
,p_Amount_Applied_From => NULL --
,p_Trans_To_Receipt_Rate => NULL
,p_Discount => NULL
,p_Apply_Date => To_Date('2019/09/16'
,'yyyy/mm/dd') --核销日期
,p_Apply_Gl_Date => To_Date('2019/09/16'
,'yyyy/mm/dd') --核销GL日期
,App_Ussgl_Transaction_Code => NULL
,p_Customer_Trx_Line_Id => NULL --AR事务处理行ID
,p_Line_Number => NULL --AR事务处理行
,p_Show_Closed_Invoices => NULL
,p_Move_Deferred_Tax => NULL
,p_Link_To_Trx_Hist_Id => NULL
,App_Attribute_Rec => Lt_App_Att --核销说明弹性域
,App_Global_Attribute_Rec => Lt_App_Gatt --核销全局说明弹性域
,App_Comments => 'TEST_Comments' --核销备注
,p_Call_Payment_Processor => NULL
,p_Org_Id => NULL);
-- 3) Review the API output
Dbms_Output.Put_Line('Status ' || Lv_Ret_Status);
Dbms_Output.Put_Line('Message count ' || Ln_Msg_Count);
IF (Lv_Ret_Status = Fnd_Api.g_Ret_Sts_Success) THEN
IF Ln_Msg_Count = 1 THEN
Dbms_Output.Put_Line('lv_Msg_Data ' || Lv_Msg_Data);
ELSIF Ln_Msg_Count > 1 THEN
FOR i IN 1 .. Ln_Msg_Count LOOP
Lv_Msg_Data := Fnd_Msg_Pub.Get(Fnd_Msg_Pub.g_Next, Fnd_Api.g_False);
IF Lv_Msg_Data IS NULL THEN
Continue;
END IF;
Dbms_Output.Put_Line('Message ' || i || '. ' || Lv_Msg_Data);
END LOOP;
END IF;
ELSE
Dbms_Output.Put_Line('Cash Receipt ID ' || Ln_Cash_Receipt_Id);
END IF;
END;
Official reference document: Oracle Receivables: Receipts API Overview, Setup, Sample Scripts and Troubleshooting (Document ID 1361075.1)