转自:https://blog.csdn.net/chenxianping/article/details/80019345?tdsourcetag=s_pcqq_aiomsg
前提条件:
Oracle EBS 企业税改方案(一)-业务需求整理及基础设置篇
Oracle EBS系统版本:11.5.10
针对本次企业税改,OM & AR相对比较简单,结合公司实际业务,通常涉及的内容如下
一、Items : INV->Items->Invoicing 分别修改各个库存组织税码如下,若公司的产品单一并且只有一种税率,则建议设置为空,参考:
Oracle EBS 企业税改方案(一)-业务需求整理及基础设置篇
。
建议采用Item API修改比较方面快捷,参考代码如下
DECLARE
l_item_rec inv_item_grp.item_rec_type;
x_item_rec inv_item_grp.item_rec_type;
x_error_tbl inv_item_grp.error_tbl_type;
x_return_status VARCHAR2(1);
l_user_id NUMBER := 0; --User ID, Sysadmin here
--l_cur_mfg_org_id NUMBER := 122; --Current Inv Organization
--找到所有成品编物料
Cursor Cr Is Select MSI.SEGMENT1,
MSI.DESCRIPTION,
MSI.ITEM_TYPE,
MSI.CREATION_DATE,
MSI.ORGANIZATION_ID,
MSI.INVENTORY_ITEM_STATUS_CODE,
MSI.INVENTORY_ITEM_ID From MTL_SYSTEM_ITEMS_B MSI Where MSI.ITEM_TYPE = 'FG'
And MSI.SEGMENT1='181810109652'
And MSI.INVENTORY_ITEM_STATUS_CODE='Active'
Order By MSI.SEGMENT1;
l_RespId Number := 50237;
l_RespApplId Number := 401; --税码
l_TaxName Varchar2(25) := 'VAT16';
BEGIN
--初始化
fnd_global.apps_initialize(user_id => l_user_id,
resp_id => l_RespId,
resp_appl_id => l_RespApplId); --批量修改税率
For Rs In Cr Loop --Item Number
l_item_rec.item_number := Rs.SEGMENT1; --税码
l_item_rec.TAX_CODE := l_TaxName; --Master Inv Organization first, then Current Inv Organization
l_item_rec.organization_id := Rs.ORGANIZATION_ID; --API
inv_item_grp.update_item(p_commit => fnd_api.g_false,
p_item_rec => l_item_rec,
x_item_rec => x_item_rec,
x_return_status => x_return_status,
x_error_tbl => x_error_tbl); --Result
IF x_return_status <> fnd_api.g_ret_sts_success THEN ROLLBACK;
FOR i IN 1 .. x_error_tbl.COUNT LOOP
dbms_output.put_line('Transaction ID:' || x_error_tbl(i).transaction_id);
dbms_output.put_line('Unique ID:' || x_error_tbl(i).unique_id);
dbms_output.put_line('Message Name:' || x_error_tbl(i).message_name);
dbms_output.put_line('Message Text:' || x_error_tbl(i).message_text);
dbms_output.put_line('Table Name:' || x_error_tbl(i).table_name);
dbms_output.put_line('Column Name:' || x_error_tbl(i).column_name);
dbms_output.put_line('Organization ID:' || x_error_tbl(i).organization_id); END LOOP;
IF (x_return_status = fnd_api.g_ret_sts_unexp_error) THEN
RAISE fnd_api.g_exc_unexpected_error;
ELSIF (x_return_status = fnd_api.g_ret_sts_error) THEN --RAISE fnd_api.g_exc_error;
Null; END IF;
ELSE COMMIT;
dbms_output.put_line(x_item_rec.item_number); END IF; End Loop;END;
二、Pricing : OM->Pricing->Price Lists->Adjust Price List : 由于税率的变化,导致销售单价也有变化低,大部分客户可能要调价,新销售价=原销售价/1.17*1.16。可以按照百分比调价如:Adjsut By Percent = -1*(1-1/1.17*1.16)/100 =-0.85
三、OM->Orders,Returns->Orders : 处理未结销售订单,如下情况
修改销售订单行的税码:
在做该项目之前,客户经常要求我们调价,或者由于原材料上涨幅度比较大,我们也需求给客户调价。因此,特别开发一个请求“GB销售单价更改”,其思路根据客户的价目表自动更新未挑库或未发运确认销售订单行,主要代码如下,可以供大家参考一下。
CREATE OR REPLACE Package Body CUX_OEPRICE_HIS_PKG Is
--===============================================================
-- Log
--===============================================================
Procedure Log(p_Msg In Varchar2) Is
Begin
Fnd_File.Put_Line(Fnd_File.Log, p_Msg); End Log; --===============================================================
-- Output
--===============================================================
Procedure Output(p_Msg In Varchar2) Is Begin
Fnd_File.Put_Line(Fnd_File.Output, p_Msg); End Output; /*
P_PRICE_LIST_ID 客户价目表
P_USER_ID 用户ID
P_PICKED_FLAG(Y/N)
Y表示更新未挑库的销售订单行
N表示更新所有未发运确认的销售订单行(包括挑库和分部挑库)
*/
procedure ChangePrice(X_ERROR_CODE Out Nocopy Varchar2,
X_ERROR_MSG Out Nocopy Varchar2,
P_PRICE_LIST_ID Number,
P_USER_ID Number,
P_PICKED_FLAG Varchar2) Is
Cursor CrHdr Is Select Distinct OEH.HEADER_ID FROM QP_LIST_LINES_V QLL,
OE_ORDER_LINES_ALL OEL,
OE_ORDER_HEADERS_ALL OEH,
MTL_SYSTEM_ITEMS_B MSI Where QLL.LIST_HEADER_ID = OEL.PRICE_LIST_ID And QLL.PRODUCT_ID = OEL.INVENTORY_ITEM_ID And OEL.HEADER_ID = OEH.HEADER_ID And OEL.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID And OEL.SHIP_FROM_ORG_ID = MSI.ORGANIZATION_ID And QLL.LIST_HEADER_ID = P_PRICE_LIST_ID And OEL.FLOW_STATUS_CODE In
('AWAITING_SHIPPING', 'AWAITING_RETURN', 'ENTERED') --And OEL.UNIT_SELLING_PRICE > 0
And OEL.UNIT_SELLING_PRICE <> QLL.OPERAND; Begin
CUX_GOBAOPUBLIC_PKG.HtmlStart('GB销售单价更改');
Output('| 提交日期:' || To_Char(Sysdate,'YYYY-MM-DD HH24:MI:SS') ||' |