Пример использования API для создания заказа на перемещение
declare
lx_doc_hdr inv_move_order_pub.Trohdr_Rec_Type;
lx_doc_lines inv_move_order_pub.Trolin_Tbl_Type;
--
lx_doc_hdr_vals inv_move_order_pub.Trohdr_Val_Rec_Type;
lx_doc_lines_vals inv_move_order_pub.Trolin_Val_Tbl_Type;
lx_return_status varchar2(1);
lx_msg_data varchar2(4000);
lx_msg_count number;
begin
-- тип заказа на перемещение = заявка
lx_doc_hdr.move_order_type := inv_globals.G_MOVE_ORDER_REQUISITION;
lx_doc_hdr.organization_id := 1775;
lx_doc_hdr.date_required := sysdate;
lx_doc_hdr.operation := inv_globals.G_OPR_CREATE;
lx_doc_hdr.header_status := inv_globals.G_TO_STATUS_PREAPPROVED;
-- создание заголовка заказа на перемещение
inv_move_order_pub.create_move_order_header(
p_api_version_number => 1,
p_init_msg_list => fnd_api.G_TRUE,
p_return_values => fnd_api.G_TRUE,
p_commit => fnd_api.G_FALSE,
x_return_status => lx_return_status,
x_msg_count => lx_msg_count,
x_msg_data => lx_msg_data,
p_trohdr_rec => lx_doc_hdr,
p_trohdr_val_rec => lx_doc_hdr_vals,
x_trohdr_rec => lx_doc_hdr,
x_trohdr_val_rec => lx_doc_hdr_vals
);
dbms_output.put_line('create_move_order_header='||lx_return_status);
dbms_output.put_line('header_id='||lx_doc_hdr.header_id);
if (lx_return_status!='S') then
FOR j IN 1 .. lx_msg_count LOOP
dbms_output.put_line('error('||j||')= ' ||fnd_msg_pub.get(j,fnd_api.g_false));
END LOOP;
else
lx_doc_lines(1).header_id := lx_doc_hdr.header_id;
lx_doc_lines(1).operation := inv_globals.G_OPR_CREATE;
lx_doc_lines(1).line_status := inv_globals.G_TO_STATUS_PREAPPROVED;
lx_doc_lines(1).date_required := sysdate;
lx_doc_lines(1).status_date := sysdate;
-- 64 Перенос заказа на перемещение
lx_doc_lines(1).transaction_type_id := inv_globals.g_type_transfer_order_subxfr;
--
lx_doc_lines(1).from_subinventory_code := 'ttttttt';
lx_doc_lines(1).organization_id := 1775;
lx_doc_lines(1).to_subinventory_code := 'fffffff';
lx_doc_lines(1).to_organization_id := 1775;
lx_doc_lines(1).inventory_item_id := 57878;
lx_doc_lines(1).uom_code := 'шт';
lx_doc_lines(1).quantity := 5;
-- создание строки заказа на перемещение
inv_move_order_pub.create_move_order_lines(
p_api_version_number => 1,
p_init_msg_list => fnd_api.G_TRUE,
p_return_values => fnd_api.G_TRUE,
p_commit => fnd_api.G_FALSE,
x_return_status => lx_return_status,
x_msg_count => lx_msg_count,
x_msg_data => lx_msg_data,
p_trolin_tbl => lx_doc_lines,
p_trolin_val_tbl => lx_doc_lines_vals,
x_trolin_tbl => lx_doc_lines,
x_trolin_val_tbl => lx_doc_lines_vals
);
dbms_output.put_line('create_move_order_lines='||lx_return_status);
if (lx_return_status!='S') then
FOR j IN 1 .. lx_msg_count LOOP
dbms_output.put_line('error('||j||')='||fnd_msg_pub.get(j,fnd_api.g_false));
END LOOP;
else
dbms_output.put_line('line_id='||lx_doc_lines(1).line_id);
end if;
end if;
end;
Пример использования API для удаления резервирований позиции:
declare
l_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
l_serial_number_tbl_type inv_reservation_global.serial_number_tbl_type;
--
lx_return_status varchar2(1);
lx_msg_data varchar2(4000);
lx_msg_count number;
begin
fnd_global.apps_initialize(-1, 20634, 401); --Запасы - Запасы
for i_cur in (select * from mtl_reservations t
where 1=1
and rownum=1
-- and ...
)
loop
l_rsv_rec.reservation_id := i_cur.reservation_id;
l_rsv_rec.organization_id := i_cur.organization_id;
l_rsv_rec.inventory_item_id := i_cur.inventory_item_id;
l_rsv_rec.demand_source_type_id := i_cur.demand_source_type_id;
l_rsv_rec.demand_source_header_id := i_cur.demand_source_header_id;
l_rsv_rec.demand_source_line_id := i_cur.demand_source_line_id;
l_rsv_rec.primary_uom_code := i_cur.primary_uom_code;
l_rsv_rec.reservation_uom_code := i_cur.reservation_uom_code;
-- l_rsv_rec.reservation_quantity := 1;--i_cur.reservation_quantity;
-- l_rsv_rec.primary_reservation_quantity := 1;--i_cur.primary_reservation_quantity;
l_rsv_rec.supply_source_type_id := i_cur.supply_source_type_id;
inv_reservation_pub.delete_reservation(p_api_version_number => 1.0
,p_rsv_rec => l_rsv_rec
,p_serial_number => l_serial_number_tbl_type
,x_return_status => lx_return_status
,x_msg_count => lx_msg_count
,x_msg_data => lx_msg_data
);
dbms_output.put_line(lx_return_status);
if (lx_return_status <> 'S') then
fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
p_count => lx_msg_count,
p_data => lx_msg_data);
dbms_output.put_line('ERROR delete_reservation for reservation_id ='
||l_rsv_rec.reservation_id ||':');
if lx_msg_count = 1 then
dbms_output.put_line(lx_msg_data);
else
FOR i IN 1 .. lx_msg_count
LOOP
dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next,fnd_api.g_false));
END LOOP;
end if;
end if;
commit;
end loop;
end;
Categories: API, Oracle e-Business Suite Tags: API, delete_reservation, INV, inv_reservation_pub, inventory, inventory_item_id, OEBS, reservation, позиция, резервирование, удаление
Пример использования API для получения текущего или доступного для резервирования количества для позиции:
declare
p_organization_id NUMBER := 155;
p_inventory_item_id NUMBER := 546;
--
p_revision VARCHAR2(3);
p_lot_number VARCHAR2(80);
p_subinventory_code VARCHAR2(10) := 'VAlVALVAL';
p_locator_id NUMBER;
--
lx_qoh NUMBER; -- Total Quantity (Onhand)
lx_rqoh NUMBER;
lx_qr NUMBER;
lx_qs NUMBER;
lx_att NUMBER; -- Available to Transact
lx_atr NUMBER; -- Available to Reserve
--
lx_return_status VARCHAR2(1);
lx_msg_count NUMBER;
lx_msg_data VARCHAR2(4000);
begin
inv_quantity_tree_grp.clear_quantity_cache;
inv_quantity_tree_pub.query_quantities(
p_api_version_number => 1.0,
p_init_msg_lst => fnd_api.g_false,
x_return_status => lx_return_status,
x_msg_count => lx_msg_count,
x_msg_data => lx_msg_data,
--
p_organization_id => p_organization_id,
p_inventory_item_id => p_inventory_item_id,
p_tree_mode => apps.inv_quantity_tree_pub.g_transaction_mode,
p_is_revision_control => case when p_revision is null then FALSE else TRUE end,
p_is_lot_control => case when p_lot_number is null then FALSE else TRUE end,
p_is_serial_control => FALSE,
p_revision => p_revision,
p_lot_number => p_lot_number,
p_subinventory_code => p_subinventory_code,
p_locator_id => p_locator_id,
x_qoh => lx_qoh, -- OnHand Quantity
x_rqoh => lx_rqoh,
x_qr => lx_qr,
x_qs => lx_qs,
x_att => lx_att, -- Available To Transact
x_atr => lx_atr -- Available To Reserve
);
if lx_return_status ='S' then
DBMS_OUTPUT.put_line ('Общее количество: ' || lx_qoh);
DBMS_OUTPUT.put_line ('Доступно для резервирования: ' || lx_atr);
DBMS_OUTPUT.put_line ('Доступно для транзакции: ' || lx_att);
else
fnd_msg_pub.count_and_get(p_encoded => fnd_api.g_false,
p_count => lx_msg_count,
p_data => lx_msg_data);
dbms_output.put_line('ERROR for p_inventory_item_id='||p_inventory_item_id);
if lx_msg_count = 1 then
dbms_output.put_line(lx_msg_data);
else
FOR i IN 1 .. lx_msg_count LOOP
dbms_output.put_line(fnd_msg_pub.get(fnd_msg_pub.g_next,
fnd_api.g_false));
END LOOP;
end if;
end if;
end;
Так же есть запрос для просмотра текущего количества Модуль INV – Текущее количество для позиции
Categories: API, OEBS Tags: API, INV, inv_quantity_tree_pub, inventory, inventory_item_id, OEBS, onhand, query_quantities, доступно для резервирования, доступное, количество, текущее количество
Последние комментарии