模拟发放销售订单界面进行发放操作
PROCEDURE insert_row(x_batch_id OUT NUMBER) IS
l_autopack_flag VARCHAR2(1 );
l_autopack_level NUMBER;
l_release_method VARCHAR2(1 );
l_release_online VARCHAR2(240 ) := fnd_profile.value('SHP_PICK_RELEASE_ONLINE' ); --bugfix 11830201 added cursor
CURSOR enable_prop(org_id NUMBER) IS
SELECT nvl(MAX (project_reference_enabled), 'N')
FROM pjm_org_parameters
WHERE organization_id = org_id; l_enable_flag VARCHAR2(1 ) := 'N';
l_return_code BOOLEAN DEFAULT TRUE; CURSOR cur_data(p_organization_id IN NUMBER ) IS
SELECT wsh.picking_rule_name,
wsh.backorders_only_flag,
wsh.backorders,
wsh.shipment_priority,
wsh.shipment_priority_code,
wsh.organization_id,
wsh.org_id,
wsh.warehouse_id_lov,
wsh.warehouse,
wsh.warehouse_code,
wsh.reservation_star,
wsh.existing_rsvs_only_flag,
wsh.ship_method_code,
wsh.from_scheduled_ship_date,
wsh.to_scheduled_ship_date,
wsh.from_requested_date,
wsh.to_requested_date,
wsh.order_type,
wsh.order_type_id,
wsh.order_number,
wsh.order_header_id,
wsh.ship_set_number,
wsh.inventory_item_id,
wsh.item_description,
wsh.customer_name,
wsh.old_customer_name,
wsh.customer_id,
wsh.ship_to_location,
wsh.ship_to_location_id,
wsh.include_planned_lines,
wsh.autocreate_delivery_flag,
wsh.pick_grouping_rule_name,
wsh.pick_seq_rule_name,
wsh.task_id,
wsh.project_id,
wsh.autodetail_pr_flag,
wsh.auto_pick_confirm_flag,
wsh.ship_set_number ship_set_id,
wsh.ship_from_location,
wsh.ship_from_location_id,
wsh.document_set_id,
wsh.doc_name,
wsh.pick_from_subinventory,
wsh.pick_from_locator_id,
wsh.pick_from_locator,
wsh.default_stage_subinventory,
wsh.default_stage_locator_id,
wsh.default_stage_locator,
wsh.ship_method_meaning,
wsh.autopack_flag,
wsh.autopack_level,
wsh.ship_confirm_rule_id,
wsh.ship_confirm_rule_name,
wsh.task_planning_flag,
wsh.region_id,
wsh.zone_id,
wsh.ac_delivery_criteria,
wsh.rel_subinventory,
wsh.category_set_id,
wsh.category_id,
wsh.sch_start_days,
wsh.sch_end_days,
wsh.sch_start_hours,
wsh.sch_end_hours,
wsh.req_start_days,
wsh.req_end_days,
wsh.req_start_hours,
wsh.req_end_hours,
wsh.append_flag,
wsh.task_priority,
wsh.allocation_method,
wsh.crossdock_criteria_id,
wsh.dynamic_replenishment_flag,
wsh.client_id,
wsh.client_name
FROM (SELECT wpr.name picking_rule_name,
wpr.backorders_only_flag,
decode(s2.meaning,
'Exclude',
'Unreleased',
'Include',
'All',
'Only',
'Backordered') backorders,
s1.meaning shipment_priority,
wpr.shipment_priority_code,
wpr.organization_id,
wpr.organization_id org_id,
wpr.organization_id warehouse_id_lov,
h_org_tl.name warehouse,
org.organization_code warehouse_code,
decode(wpr.existing_rsvs_only_flag, 'Y', '*' , NULL) reservation_star,
wpr.existing_rsvs_only_flag,
wpr.ship_method_code,
wpr.from_scheduled_ship_date,
wpr.to_scheduled_ship_date,
wpr.from_requested_date,
wpr.to_requested_date,
ott.name order_type,
wpr.order_type_id,
to_char(h.order_number) order_number,
wpr.order_header_id,
os.set_name ship_set_number,
wpr.inventory_item_id,
msi.description item_description,
substrb(party.party_name, 1, 50 ) customer_name,
substrb(party.party_name, 1, 50 ) old_customer_name,
wpr.customer_id,
whzl.ui_location_code ship_to_location,
wpr.ship_to_location_id,
wpr.include_planned_lines,
wpr.autocreate_delivery_flag,
pgr.name pick_grouping_rule_name,
rsqr.name pick_seq_rule_name,
wpr.task_id,
wpr.project_id,
wpr.autodetail_pr_flag,
wpr.auto_pick_confirm_flag,
wpr.ship_set_number ship_set_id,
whrl.ui_location_code ship_from_location,
wpr.ship_from_location_id,
wpr.document_set_id,
wrs.name doc_name,
wpr.pick_from_subinventory,
wpr.pick_from_locator_id,
NULL pick_from_locator,
wpr.default_stage_subinventory,
wpr.default_stage_locator_id,
NULL default_stage_locator,
sm.meaning ship_method_meaning,
wpr.autopack_flag,
wpr.autopack_level,
wpr.ship_confirm_rule_id,
wscr.name ship_confirm_rule_name,
wpr.task_planning_flag,
wpr.region_id,
wpr.zone_id,
wpr.ac_delivery_criteria,
wpr.rel_subinventory,
wpr.category_set_id,
wpr.category_id,
wpr.sch_start_days,
wpr.sch_end_days,
wpr.sch_start_hours,
wpr.sch_end_hours,
wpr.req_start_days,
wpr.req_end_days,
wpr.req_start_hours,
wpr.req_end_hours,
wpr.append_flag,
wpr.task_priority,
wpr.allocation_method,
wpr.crossdock_criteria_id,
wpr.dynamic_replenishment_flag,
wpr.client_id client_id,
mcpv.client_name client_name
FROM wsh_picking_rules wpr,
mtl_parameters org,
hr_all_organization_units_tl h_org_tl,
hz_parties party,
hz_cust_accounts cust_acct,
fnd_lookup_values s1,
fnd_lookup_values s2,
oe_sets os,
wsh_pick_grouping_rules pgr,
wsh_pick_sequence_rules rsqr,
oe_transaction_types_tl ott,
oe_transaction_types_all otb,
oe_order_headers_all h,
wsh_locations whrl,
wsh_locations whzl,
wsh_report_sets wrs,
wsh_ship_confirm_rules wscr,
mtl_system_items_b msi,
fnd_lookup_values sm,
mtl_client_parameters_v mcpv
WHERE org.organization_id(+) = wpr.organization_id
AND h_org_tl.organization_id(+) = wpr.organization_id
AND cust_acct.cust_account_id(+) = wpr.customer_id
AND cust_acct.party_id = party.party_id(+)
AND h_org_tl.language(+) = userenv('LANG' )
AND pgr.pick_grouping_rule_id(+) = wpr.pick_grouping_rule_id
AND rsqr.pick_sequence_rule_id(+) = wpr.pick_sequence_rule_id
AND wpr.ship_confirm_rule_id = wscr.ship_confirm_rule_id(+)
AND s1.lookup_code(+) = wpr.shipment_priority_code
AND s1.lookup_type(+) = 'SHIPMENT_PRIORITY'
AND s1.language(+) = userenv('LANG' )
AND s1.view_application_id(+) = 660
AND s1.security_group_id(+) = 0
AND s2.lookup_code = wpr.backorders_only_flag
AND s2.lookup_type = 'PICK_RELEASE_OPTIONS'
AND s2.language(+) = userenv('LANG' )
AND s2.view_application_id(+) = 660
AND s2.security_group_id(+) = 0
AND otb.transaction_type_id(+) = nvl(wpr.order_type_id, -1)
AND otb.transaction_type_code(+) = 'ORDER'
AND otb.transaction_type_id = ott.transaction_type_id(+)
AND ott.language(+) = userenv('LANG' )
AND whzl.wsh_location_id(+) =
nvl(wpr.ship_to_location_id, - 1)
AND whrl.wsh_location_id(+) =
nvl(wpr.ship_from_location_id, - 1)
AND wrs.report_set_id(+) = wpr.document_set_id
AND os.set_id(+) = nvl(wpr.ship_set_number, -1)
AND h.header_id(+) = nvl(wpr.order_header_id, -1)
AND msi.inventory_item_id(+) = wpr.inventory_item_id
AND msi.organization_id(+) = p_organization_id
AND trunc(SYSDATE ) BETWEEN
nvl(wpr.start_date_active, trunc( SYSDATE)) AND
nvl(wpr.end_date_active, trunc( SYSDATE) + 1 )
AND sm.lookup_type(+) = 'SHIP_METHOD'
AND sm.lookup_code(+) = wpr.ship_method_code
AND sm.view_application_id(+) = 3
AND sm.language(+) = userenv('LANG' )
AND mcpv.client_id(+) = wpr.client_id) wsh
WHERE picking_rule_name = :control.pick_rule
ORDER BY wsh.picking_rule_name;
l_document_set_id NUMBER;
l_append_flag VARCHAR2(1 );
l_row_id VARCHAR2(50 );
l_order_header_id NUMBER;
l_order_type VARCHAR2(240 );
l_customer_name VARCHAR2(240 );
l_order_type_id NUMBER;
l_customer_id NUMBER;
l_batch_name VARCHAR2(240 );
l_organization_id NUMBER;
l_request_id NUMBER;
l_org_id NUMBER;
BEGIN
BEGIN
SELECT DISTINCT otl.name,
substrb(party.party_name, 1, 50 ) customer_name,
wdd.source_header_type_id,
cust_acct.cust_account_id customer_id,
wdd.organization_id,
wdd.org_id
INTO l_order_type,
l_customer_name,
l_order_type_id,
l_customer_id,
l_organization_id,
l_org_id
FROM wsh_delivery_details wdd,
hz_parties party,
hz_cust_accounts cust_acct,
oe_transaction_types_tl otl
WHERE wdd.customer_id = cust_acct.cust_account_id /*customer id*/
AND cust_acct.party_id = party.party_id
AND otl.language = userenv('LANG' )
AND otl.transaction_type_id = wdd.source_header_type_id
AND wdd.source_header_id = :query_find.header_id
AND wdd.source_code = 'OE'
AND wdd.released_status IN ('B', 'R', 'X' );
EXCEPTION
WHEN OTHERS THEN
NULL;
END;
FOR rec_data IN cur_data(l_organization_id) LOOP
IF l_release_method IS NULL THEN
-- Commit from save instead of buttons ( user chose Save from the menu )
IF ((nvl(l_release_online, 'N' ) = 'Y') AND
(:query_find.header_id IS NOT NULL)) THEN
l_release_method := 'O';
ELSE
l_release_method := 'C';
END IF ;
END IF ; IF l_release_method = 'O' THEN
NULL;
ELSE
IF rec_data.document_set_id IS NULL AND rec_data.doc_name IS NOT NULL THEN
l_document_set_id := fnd_profile.value('OE_PICKING_DOCUMENT_SET_DEFAULT' );
END IF ;
END IF ; IF rec_data.organization_id IS NULL THEN
l_append_flag := 'N';
ELSE
--bugfix 11830201 added cursor
OPEN enable_prop(rec_data.organization_id);
FETCH enable_prop
INTO l_enable_flag;
CLOSE enable_prop;
END IF ;
--
IF l_enable_flag = 'Y' THEN l_return_code := pjm_project_locator.check_project_references(p_organization_id => rec_data.organization_id,
p_locator_id => rec_data.default_stage_locator_id,
p_validation_mode => 'SPECIFIC' ,
p_required_flag => 'N' ,
p_project_id => rec_data.project_id,
p_task_id => rec_data.task_id);
IF (l_return_code = FALSE ) THEN
fnd_message.retrieve;
fnd_message.error;
RAISE form_trigger_failure;
END IF ;
END IF ;
--
IF (l_return_code = TRUE ) THEN wsh_picking_batches_pkg.insert_row(x_rowid => l_row_id,
x_batch_id => x_batch_id,
p_creation_date => SYSDATE,
p_created_by => fnd_global.user_id,
p_last_update_date => SYSDATE,
p_last_updated_by => fnd_global.user_id,
p_last_update_login => fnd_global.login_id,
x_name => l_batch_name,
p_backorders_only_flag => rec_data.backorders_only_flag,
p_document_set_id => l_document_set_id,
p_existing_rsvs_only_flag => rec_data.existing_rsvs_only_flag,
p_shipment_priority_code => rec_data.shipment_priority_code,
p_ship_method_code => rec_data.ship_method_code,
p_customer_id => l_customer_id,
p_order_header_id => :query_find.header_id,
p_ship_set_number => rec_data.ship_set_id,
p_inventory_item_id => rec_data.inventory_item_id,
p_order_type_id => l_order_type_id,
p_from_requested_date => to_date(to_char(rec_data.from_requested_date,
'DD-MON-YYYY HH24:MI:SS' ),
'DD-MON-YYYY HH24:MI:SS' ),
p_to_requested_date => to_date(to_char(rec_data.to_requested_date,
'DD-MON-YYYY HH24:MI:SS' ),
'DD-MON-YYYY HH24:MI:SS' ),
p_from_scheduled_ship_date => to_date(to_char(rec_data.from_scheduled_ship_date,
'DD-MON-YYYY HH24:MI:SS' ),
'DD-MON-YYYY HH24:MI:SS' ),
p_to_scheduled_ship_date => to_date(to_char(rec_data.to_scheduled_ship_date,
'DD-MON-YYYY HH24:MI:SS' ),
'DD-MON-YYYY HH24:MI:SS' ),
p_ship_to_location_id => rec_data.ship_to_location_id,
p_ship_from_location_id => rec_data.ship_from_location_id,
p_trip_id => NULL,
p_delivery_id => NULL,
p_include_planned_lines => rec_data.include_planned_lines,
p_pick_grouping_rule_id => NULL,
p_pick_sequence_rule_id => NULL,
p_autocreate_delivery_flag => rec_data.autocreate_delivery_flag,
p_attribute_category => NULL,
p_attribute1 => NULL,
p_attribute2 => NULL,
p_attribute3 => NULL,
p_attribute4 => NULL,
p_attribute5 => NULL,
p_attribute6 => NULL,
p_attribute7 => NULL,
p_attribute8 => NULL,
p_attribute9 => NULL,
p_attribute10 => NULL,
p_attribute11 => NULL,
p_attribute12 => NULL,
p_attribute13 => NULL,
p_attribute14 => NULL,
p_attribute15 => NULL,
p_autodetail_pr_flag => rec_data.autodetail_pr_flag,
p_carrier_id => NULL,
p_trip_stop_id => NULL,
p_default_stage_subinventory => rec_data.default_stage_subinventory,
p_default_stage_locator_id => rec_data.default_stage_locator_id,
p_pick_from_subinventory => rec_data.pick_from_subinventory,
p_pick_from_locator_id => rec_data.pick_from_locator_id,
p_auto_pick_confirm_flag => rec_data.auto_pick_confirm_flag,
p_delivery_detail_id => NULL,
p_project_id => rec_data.project_id,
p_task_id => rec_data.task_id,
p_organization_id => rec_data.organization_id,
p_ship_confirm_rule_id => rec_data.ship_confirm_rule_id,
p_autopack_flag => rec_data.autopack_flag,
p_autopack_level => rec_data.autopack_level,
p_task_planning_flag => rec_data.task_planning_flag,
p_dynamic_replenishment_flag => rec_data.dynamic_replenishment_flag, --bug# 6689448 (replenishment project)
-- rlanka : Pack J
p_regionid => rec_data.region_id,
p_zoneid => rec_data.zone_id,
p_categoryid => rec_data.category_id,
p_categorysetid => rec_data.category_set_id,
p_acdelivcriteria => rec_data.ac_delivery_criteria,
p_relsubinventory => rec_data.rel_subinventory,
p_append_flag => l_append_flag,
p_task_priority => rec_data.task_priority,
p_actual_departure_date => NULL,
-- X-dock
p_allocation_method => rec_data.allocation_method,
p_crossdock_criteria_id => rec_data.crossdock_criteria_id,
p_client_id => rec_data.client_id --Modified R12.1.1 LSP PROJECT
);
END IF ;
END LOOP;
--调用请求
l_request_id := fnd_request.submit_request(application => 'CUX',
program => 'CUXOMLPKP' ,
description => NULL,
start_time => SYSDATE ,
sub_request => FALSE ,
argument1 => x_batch_id,
argument2 => l_org_id,
argument3 => :query_find.header_id);
IF l_request_id IS NULL OR l_request_id = 0 THEN
fnd_message.set_string( '提交挑库选择列表生成请求出错.' );
fnd_message.error;
RAISE form_trigger_failure;
ELSE
forms_ddl( 'COMMIT');
fnd_message.debug( '挑库发放成功,请查看请求.' );
END IF;
END insert_row;
--调用请求
CUXOMLPKP请求调用例如以下:
l_request_id := wsh_picking_batches_pkg.submit_release_request(p_batch_id => p_batch_id,
p_log_level => 0 ,
p_num_workers => nvl(fnd_profile.value('WSH_PR_NUM_WORKERS' ),
1));
IF l_request_id IS NULL OR l_request_id = 0 THEN
errbuf := '提交挑库选择列表生成请求出错.' ;
retcode := '2';
RETURN;
END IF ;