价目表更新API程序
procedure update_qp_list is
cursor cur_price is
SELECT ID,
TRIM(OU_NAME) OU_NAME, --价目表
TRIM(SEGMENT1) SEGMENT1, --物料
TRIM(OPERAND) OPERAND --更新价格
FROM cux_qp_list_temp;
l_count number := 0;
V_ERR_MESSAGE VARCHAR2(20000);
CHECK_EXCEPTION EXCEPTION;
L_OU_NAME VARCHAR2(50);
L_INDEX number;
p_list_header_id NUMBER;
p_inventory_item_id NUMBER;
P_list_line_id NUMBER;
P_product_attr_value NUMBER;
P_pricing_attribute_id NUMBER;
p_product_uom_code VARCHAR2(50);
P_start_date_active DATE;
P_end_date_active DATE;
x_return_status VARCHAR2(10);
x_msg_count NUMBER(10);
x_msg_data VARCHAR2(2000);
l_price_list_rec qp_price_list_pub.price_list_rec_type;
l_price_list_line_tbl qp_price_list_pub.price_list_line_tbl_type;
l_pricing_attr_tbl qp_price_list_pub.pricing_attr_tbl_type;
x_price_list_rec qp_price_list_pub.price_list_rec_type;
x_price_list_val_rec qp_price_list_pub.price_list_val_rec_type;
x_price_list_line_tbl qp_price_list_pub.price_list_line_tbl_type;
x_price_list_line_val_tbl qp_price_list_pub.price_list_line_val_tbl_type;
x_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type;
x_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type;
x_pricing_attr_tbl qp_price_list_pub.pricing_attr_tbl_type;
x_pricing_attr_val_tbl qp_price_list_pub.pricing_attr_val_tbl_type;
begin
--清除之前错误信息
delete from CUX_IMPORT_DATA_ERROR where COLUMN_VALUES='价目表';
commit;
begin
select COUNT(DISTINCT OU_NAME) into l_count from cux_qp_list_temp;
if l_count > 1 then
V_ERR_MESSAGE := '-导入的价目表存在多个';
RAISE CHECK_EXCEPTION;
elsif l_count = 0 then
V_ERR_MESSAGE := '-导入的价目表不存在';
RAISE CHECK_EXCEPTION;
else
select OU_NAME
into L_OU_NAME
from cux_qp_list_temp
WHERE ROWNUM = 1;
begin
SELECT qll.list_header_id
into p_list_header_id
FROM qp_list_headers_tl qll
WHERE NAME = L_OU_NAME
and language = 'ZHS';
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ERR_MESSAGE := '-价目表【' || L_OU_NAME || '】不存在-';
RAISE CHECK_EXCEPTION;
end;
end if;
end;
begin
for rec_price in cur_price loop
--判断物料是否存在
begin
select msi.inventory_item_id
into p_inventory_item_id
from mtl_system_items_b msi
where msi.segment1 = rec_price.segment1
and msi.organization_id = 82;
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ERR_MESSAGE := '-物料【' || rec_price.segment1 || '】不存在-';
RAISE CHECK_EXCEPTION;
end;
if rec_price.operand is null then
V_ERR_MESSAGE := '-更新价格【' || rec_price.operand || '】不能为空-';
RAISE CHECK_EXCEPTION;
end if;
---获取价目表中该物料的信息
begin
SELECT --QLL.list_header_id,
QLL.list_line_id,
QLL.product_uom_code,
QLL.start_date_active,
QLL.end_date_active,
QLL.product_attr_value,
QLL.pricing_attribute_id
into P_list_line_id,
P_product_uom_code,
P_start_date_active,
P_end_date_active,
P_product_attr_value,
P_pricing_attribute_id
FROM Qp_List_Lines_v QLL
WHERE QLL.list_header_id = p_list_header_id --价目表头ID
AND QLL.product_attr_val_disp = rec_price.segment1; --物料
EXCEPTION
WHEN NO_DATA_FOUND THEN
V_ERR_MESSAGE := '-物料【' || rec_price.segment1 || '】在价目表中不存在-';
RAISE CHECK_EXCEPTION;
end;
----
L_INDEX := cur_price%ROWCOUNT; --行
BEGIN
l_price_list_rec.list_header_id := p_list_header_id; --35129;--p_list_header_id; -- 业务实体 + 价目表名称 确定select * from qp_list_headers_tl where name ='株洲力慧价目表' and language='ZHS'
l_price_list_rec.list_type_code := 'PRL'; -- 固定
l_price_list_rec.operation := qp_globals.g_opr_update; --更新--固定
l_price_list_line_tbl(L_INDEX).list_header_id := p_list_header_id; --35129; -- 业务实体 + 价目表名称 确定
l_price_list_line_tbl(L_INDEX).list_line_id := P_list_line_id; --33348; --fnd_api.g_miss_num;
l_price_list_line_tbl(L_INDEX).list_line_type_code := 'PLL'; -- 固定
l_price_list_line_tbl(L_INDEX).operation := qp_globals.g_opr_update; -- qp_globals.g_opr_create; -- 固定
l_price_list_line_tbl(L_INDEX).operand := rec_price.operand; --更新的价格; -- p_operand; -- 值
l_price_list_line_tbl(L_INDEX).arithmetic_operator := 'UNIT_PRICE'; -- 固定
l_price_list_line_tbl(L_INDEX).start_date_active := P_start_date_active; --p_start_active_date; -- 直接传入 起始日期
l_price_list_line_tbl(L_INDEX).end_date_active := P_end_date_active; -- 直接传入 截止日期
l_price_list_line_tbl(L_INDEX).organization_id := NULL; -- 直接传空
l_price_list_line_tbl(L_INDEX).primary_uom_flag := 'Y'; --p_primary_uom_flag; --------依据 主要单位 直接传入
l_price_list_line_tbl(L_INDEX).end_date_active := P_end_date_active; --直接传入varchar 截止日期
l_pricing_attr_tbl(L_INDEX).pricing_attribute_id := P_pricing_attribute_id; -- 18161; --select pricing_attribute_id from qp_pricing_attributes where list_line_id=33348--18161
l_pricing_attr_tbl(L_INDEX).list_line_id := P_list_line_id; --33348;
l_pricing_attr_tbl(L_INDEX).product_attribute_context := 'ITEM'; -- 固定
l_pricing_attr_tbl(L_INDEX).product_attribute := 'PRICING_ATTRIBUTE1'; --固定
l_pricing_attr_tbl(L_INDEX).product_attr_value := p_inventory_item_id; --物料ID 6446; -- p_inventory_item_id; -- 传入 inventory_item_id
l_pricing_attr_tbl(L_INDEX).product_uom_code := P_product_uom_code; -- p_product_uom_code; --直接传入 单位
l_pricing_attr_tbl(L_INDEX).excluder_flag := 'N'; -- ? 临时固定
l_pricing_attr_tbl(L_INDEX).attribute_grouping_no := 1; --固定
l_pricing_attr_tbl(L_INDEX).price_list_line_index := 1; --固定
l_pricing_attr_tbl(L_INDEX).operation := qp_globals.g_opr_update; -- 固定
qp_price_list_pub.process_price_list(p_api_version_number => 1,
p_init_msg_list => fnd_api.g_true,
p_return_values => fnd_api.g_false,
p_commit => fnd_api.g_false,
x_return_status => x_return_status,
x_msg_count => x_msg_count,
x_msg_data => x_msg_data,
p_price_list_rec => l_price_list_rec,
p_price_list_line_tbl => l_price_list_line_tbl,
p_pricing_attr_tbl => l_pricing_attr_tbl,
x_price_list_rec => x_price_list_rec,
x_price_list_val_rec => x_price_list_val_rec,
x_price_list_line_tbl => x_price_list_line_tbl,
x_qualifiers_tbl => x_qualifiers_tbl,
x_qualifiers_val_tbl => x_qualifiers_val_tbl,
x_pricing_attr_tbl => x_pricing_attr_tbl,
x_pricing_attr_val_tbl => x_pricing_attr_val_tbl,
x_price_list_line_val_tbl => x_price_list_line_val_tbl);
IF x_return_status = fnd_api.g_ret_sts_success THEN
-- dbms_output.put_line('x_return_status:' || x_return_status);
-- dbms_output.put_line('更新成功');
commit;
ELSE
V_ERR_MESSAGE := '更新失败!';
RAISE CHECK_EXCEPTION;
END IF;
end;
---
end loop;
EXCEPTION
when CHECK_EXCEPTION then
INSERT INTO CUX_IMPORT_DATA_ERROR
(COLUMN_VALUES,ERR_MESSAGE)
VALUES
('价目表',V_ERR_MESSAGE);
end ;
end;