EBS销售订单挑库发放处理程序
来自:http://blog.csdn.net/cunxiyuan108/article/details/6014769
在EBS实施中,经常遇到从外部传进来一个被登记的销售订单,需要通过程序进行销售订单的挑库发放
下面是对SO挑库发放的实现步骤的详细实现:
1. 对销售订单的有效性验证
1)检查销售订单的行是否被完全传回客户化表
2)验证销售订单的关键字段
3)检查子库存是否启用了货位控制,如果启用了货位控制,没有生成货位,则调用API生成货位
4)调用API检查子库存中的某一个物料的现用量和可用量
2. 销售订单发放
调用API进行销售订单发放
发放成功: 返回一个批号,这个批号作为挑库发放的参数
3. 销售订单挑库发放
调用API进行挑库发放
发放前 行状态:准备发放 下一步:挑库发放 判断依据:销售订单发放生成的批号作为挑库发放的参数
发放成功 行状态:已发放至仓库 下一步:处理物料搬运单 判断依据:返回一个批号,这个批号作为挑库发放的参数
发放失败 行状态:已延交 下一步:挑库发放 判断依据:未成功返回一个批号
说明:订单发放是按照整个订单发放的。
4. 处理物料搬运单
处理成功: 行状态:发运 下一步: 判断依据:返回成功的处理状态
处理成失败 行状态: 下一步:处理物料搬运单 判断依据:未返回成功的处理状态
5. 得到销售订单的交货号(delivery_id)
调用API 查看是否产生发运号
成功:返回发运号
失败:未返回发运号
6. 发运确认
处理成功 订单状态为:关闭
说明:如果发运确认已经成功,则会自动调用 连接形成停靠站 接口程序
具体实现代码
1. 对销售订单的有效性验证
调用API验证货位的代码:
- fnd_profile.put('MFG_ORGANIZATION_ID',p_organization_id);
- l_locator_type := get_locator_type(p_sub_inv,p_organization_id);
- IF l_locator_type != 1 THEN
- l_locator := p_sub_inv || '.' ||
- p_project || '.' ||
- p_task;
- inv_loc_wms_pub.create_locator(x_return_status => l_status,
- x_msg_count => l_msg_count,
- x_msg_data => l_msg_data,
- x_inventory_location_id => l_locator_id,
- x_locator_exists => l_locator_exists,
- p_organization_id => p_organization_id,
- p_organization_code => p_organization_code,
- p_concatenated_segments => l_locator,
- p_description => NULL,
- p_inventory_location_type => l_locator_type,
- p_picking_order => NULL,
- p_location_maximum_units => NULL,
- p_subinventory_code => p_sub_inv,
- p_location_weight_uom_code => NULL,
- p_max_weight => NULL,
- p_volume_uom_code => NULL,
- p_max_cubic_area => NULL,
- p_x_coordinate => NULL,
- p_y_coordinate => NULL,
- p_z_coordinate => NULL,
- p_physical_location_id => NULL,
- p_pick_uom_code => NULL,
- p_dimension_uom_code => NULL,
- p_length => NULL,
- p_width => NULL,
- p_height => NULL,
- p_status_id => 1,
- p_dropping_order => NULL);
- IF l_locator_id IS NULL THEN
- o_err_code := g_error;
- o_err_msg := '创建(获取)货位弹性域发生错误';
- ELSE
- o_locator_id := l_locator_id;
- END IF;
fnd_profile.put('MFG_ORGANIZATION_ID',p_organization_id);
l_locator_type := get_locator_type(p_sub_inv,p_organization_id);
IF l_locator_type != 1 THEN
l_locator := p_sub_inv || '.' ||
p_project || '.' ||
p_task;
inv_loc_wms_pub.create_locator(x_return_status => l_status,
x_msg_count => l_msg_count,
x_msg_data => l_msg_data,
x_inventory_location_id => l_locator_id,
x_locator_exists => l_locator_exists,
p_organization_id => p_organization_id,
p_organization_code => p_organization_code,
p_concatenated_segments => l_locator,
p_description => NULL,
p_inventory_location_type => l_locator_type,
p_picking_order => NULL,
p_location_maximum_units => NULL,
p_subinventory_code => p_sub_inv,
p_location_weight_uom_code => NULL,
p_max_weight => NULL,
p_volume_uom_code => NULL,
p_max_cubic_area => NULL,
p_x_coordinate => NULL,
p_y_coordinate => NULL,
p_z_coordinate => NULL,
p_physical_location_id => NULL,
p_pick_uom_code => NULL,
p_dimension_uom_code => NULL,
p_length => NULL,
p_width => NULL,
p_height => NULL,
p_status_id => 1,
p_dropping_order => NULL);
IF l_locator_id IS NULL THEN
o_err_code := g_error;
o_err_msg := '创建(获取)货位弹性域发生错误';
ELSE
o_locator_id := l_locator_id;
END IF;
调用API验证库存现用量和可用量的代码:
- inv_quantity_tree_pub.query_quantities(p_api_version_number => 1.0,
- x_return_status => l_return_status,
- x_msg_count => l_msg_count,
- x_msg_data => l_msg_data,
- p_organization_id => l_organization_id,
- p_inventory_item_id => rec_data.item_id,--item id
- p_tree_mode => 2,
- p_is_revision_control => FALSE,
- p_is_lot_control => l_lot_control_flag,
- p_lot_expiration_date => rec_data.transaction_date,
- p_is_serial_control => FALSE,
- p_grade_code => NULL, -- INVCONV NOT NEEDED NOW
- p_revision => NULL,
- p_lot_number => NULL,
- p_subinventory_code => rec_data.pick_from_subinventory,
- p_locator_id => l_locator_id,
- x_qoh => l_qoh,
- x_rqoh => l_rqoh,
- x_qr => l_qr,
- x_qs => l_qs,
- x_att => l_att,
- x_atr => l_atr,
- x_sqoh => l_sqoh, -- INVCONV
- x_srqoh => l_srqoh, -- INVCONV
- x_sqr => l_sqr, -- INVCONV
- x_sqs => l_sqs, -- INVCONV
- x_satt => l_satt, -- INVCONV
- x_satr => l_satr); -- INVCONV
- IF nvl(l_atr,0) = 0 THEN
- GOTO end_loop;
- END IF;
inv_quantity_tree_pub.query_quantities(p_api_version_number => 1.0,
x_return_status => l_return_status,
x_msg_count => l_msg_count,
x_msg_data => l_msg_data,
p_organization_id => l_organization_id,
p_inventory_item_id => rec_data.item_id,--item id
p_tree_mode => 2,
p_is_revision_control => FALSE,
p_is_lot_control => l_lot_control_flag,
p_lot_expiration_date => rec_data.transaction_date,
p_is_serial_control => FALSE,
p_grade_code => NULL, -- INVCONV NOT NEEDED NOW
p_revision => NULL,
p_lot_number => NULL,
p_subinventory_code => rec_data.pick_from_subinventory,
p_locator_id => l_locator_id,
x_qoh => l_qoh,
x_rqoh => l_rqoh,
x_qr => l_qr,
x_qs => l_qs,
x_att => l_att,
x_atr => l_atr,
x_sqoh => l_sqoh, -- INVCONV
x_srqoh => l_srqoh, -- INVCONV
x_sqr => l_sqr, -- INVCONV
x_sqs => l_sqs, -- INVCONV
x_satt => l_satt, -- INVCONV
x_satr => l_satr); -- INVCONV
IF nvl(l_atr,0) = 0 THEN
GOTO end_loop;
END IF;
2. 销售订单发放
调用API进行销售订单发放的代码:
- fnd_profile.PUT('MFG_ORGANIZATION_ID',l_organization_id);
- wsh_picking_batches_pkg.insert_row(x_rowid => l_row_id,
- x_batch_id => l_batch_id,
- p_creation_date => g_sysdate,
- p_created_by => g_user_id,
- p_last_update_date => g_sysdate,
- p_last_updated_by => g_user_id,
- p_last_update_login => g_login_id,
- p_batch_name_prefix => NULL,
- x_name => l_name,
- p_backorders_only_flag => l_rule_rec.backorders_only_flag,
- p_document_set_id => l_rule_rec.document_set_id,
- p_existing_rsvs_only_flag => l_rule_rec.existing_rsvs_only_flag,
- p_shipment_priority_code => l_rule_rec.shipment_priority_code,
- p_ship_method_code => l_rule_rec.ship_method_code,
- p_customer_id => l_customer_id,
- p_order_header_id => rec_data.order_header_id,
- p_ship_set_number => l_rule_rec.ship_set_number,
- p_inventory_item_id => NULL,
- p_order_type_id => l_order_type_id,
- p_from_requested_date => NULL,
- p_to_requested_date => NULL,
- p_from_scheduled_ship_date => NULL,
- p_to_scheduled_ship_date => NULL,
- p_ship_to_location_id => l_rule_rec.ship_to_location_id,
- p_ship_from_location_id => l_rule_rec.ship_from_location_id/*l_stage_locator_id*/,
- p_trip_id => NULL,
- p_delivery_id => NULL,
- p_include_planned_lines => l_rule_rec.include_planned_lines,
- p_pick_grouping_rule_id => l_rule_rec.pick_grouping_rule_id,
- p_pick_sequence_rule_id => l_rule_rec.pick_sequence_rule_id,
- p_autocreate_delivery_flag => 'Y', --l_rule_rec.autocreate_delivery_flag;
- --无论规则是否自动创建交货号,都让系统自动创建(用shipment_number做交货号)
- 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 => l_rule_rec.autodetail_pr_flag,
- p_carrier_id => l_rule_rec.carrier_id,
- p_trip_stop_id => NULL,
- p_default_stage_subinventory => l_rule_rec.default_stage_subinventory,--ERP临时发货区
- p_default_stage_locator_id => l_stage_locator_id,
- p_pick_from_subinventory => rec_data.pick_from_subinventory,/*l_rule_rec.pick_from_subinventory,*/--ERP提货区
- p_pick_from_locator_id => l_locator_id,--l_rule_rec.pick_from_locator_id,
- p_auto_pick_confirm_flag => 'N'/*l_rule_rec.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 => l_organization_id,
- p_ship_confirm_rule_id => l_rule_rec.ship_confirm_rule_id,
- p_autopack_flag => l_rule_rec.autopack_flag,
- p_autopack_level => l_rule_rec.autopack_level,
- p_task_planning_flag => l_rule_rec.task_planning_flag,
- p_non_picking_flag => NULL,
- p_regionid => l_rule_rec.region_id,
- p_zoneid => l_rule_rec.zone_id,
- p_categoryid => l_rule_rec.category_id,
- p_categorysetid => l_rule_rec.category_set_id,
- p_acdelivcriteria => l_rule_rec.ac_delivery_criteria,
- p_relsubinventory => l_rule_rec.rel_subinventory,
- --如果规则不做限制则可以任意子库中挑库
- --nvl(p_subinventory_from,l_rule_rec.rel_subinventory),
- --如果在此处修改来源子库会导致发放不成功 不能创建物料搬运单
- p_append_flag => l_rule_rec.append_flag,
- p_task_priority => l_rule_rec.task_priority,
- p_ship_set_smc_flag => NULL,
- p_actual_departure_date => NULL,
- p_allocation_method => l_rule_rec.allocation_method,
- p_crossdock_criteria_id => l_rule_rec.crossdock_criteria_id,
- p_delivery_name_lo => NULL,
- p_delivery_name_hi => NULL,
- p_bol_number_lo => NULL,
- p_bol_number_hi => NULL,
- p_intmed_ship_to_loc_id => NULL,
- p_pooled_ship_to_loc_id => NULL,
- p_fob_code => NULL,
- p_freight_terms_code => NULL,
- p_pickup_date_lo => NULL,
- p_pickup_date_hi => NULL,
- p_dropoff_date_lo => NULL,
- p_dropoff_date_hi => NULL,
- p_planned_flag => NULL,
- p_selected_batch_id => NULL);
- IF l_batch_id IS NULL THEN
- l_err_code := g_warning;
- l_err_msg := '销售订单发放没有产生批号';
- GOTO next_line;
- END IF;
fnd_profile.PUT('MFG_ORGANIZATION_ID',l_organization_id);
wsh_picking_batches_pkg.insert_row(x_rowid => l_row_id,
x_batch_id => l_batch_id,
p_creation_date => g_sysdate,
p_created_by => g_user_id,
p_last_update_date => g_sysdate,
p_last_updated_by => g_user_id,
p_last_update_login => g_login_id,
p_batch_name_prefix => NULL,
x_name => l_name,
p_backorders_only_flag => l_rule_rec.backorders_only_flag,
p_document_set_id => l_rule_rec.document_set_id,
p_existing_rsvs_only_flag => l_rule_rec.existing_rsvs_only_flag,
p_shipment_priority_code => l_rule_rec.shipment_priority_code,
p_ship_method_code => l_rule_rec.ship_method_code,
p_customer_id => l_customer_id,
p_order_header_id => rec_data.order_header_id,
p_ship_set_number => l_rule_rec.ship_set_number,
p_inventory_item_id => NULL,
p_order_type_id => l_order_type_id,
p_from_requested_date => NULL,
p_to_requested_date => NULL,
p_from_scheduled_ship_date => NULL,
p_to_scheduled_ship_date => NULL,
p_ship_to_location_id => l_rule_rec.ship_to_location_id,
p_ship_from_location_id => l_rule_rec.ship_from_location_id/*l_stage_locator_id*/,
p_trip_id => NULL,
p_delivery_id => NULL,
p_include_planned_lines => l_rule_rec.include_planned_lines,
p_pick_grouping_rule_id => l_rule_rec.pick_grouping_rule_id,
p_pick_sequence_rule_id => l_rule_rec.pick_sequence_rule_id,
p_autocreate_delivery_flag => 'Y', --l_rule_rec.autocreate_delivery_flag;
--无论规则是否自动创建交货号,都让系统自动创建(用shipment_number做交货号)
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 => l_rule_rec.autodetail_pr_flag,
p_carrier_id => l_rule_rec.carrier_id,
p_trip_stop_id => NULL,
p_default_stage_subinventory => l_rule_rec.default_stage_subinventory,--ERP临时发货区
p_default_stage_locator_id => l_stage_locator_id,
p_pick_from_subinventory => rec_data.pick_from_subinventory,/*l_rule_rec.pick_from_subinventory,*/--ERP提货区
p_pick_from_locator_id => l_locator_id,--l_rule_rec.pick_from_locator_id,
p_auto_pick_confirm_flag => 'N'/*l_rule_rec.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 => l_organization_id,
p_ship_confirm_rule_id => l_rule_rec.ship_confirm_rule_id,
p_autopack_flag => l_rule_rec.autopack_flag,
p_autopack_level => l_rule_rec.autopack_level,
p_task_planning_flag => l_rule_rec.task_planning_flag,
p_non_picking_flag => NULL,
p_regionid => l_rule_rec.region_id,
p_zoneid => l_rule_rec.zone_id,
p_categoryid => l_rule_rec.category_id,
p_categorysetid => l_rule_rec.category_set_id,
p_acdelivcriteria => l_rule_rec.ac_delivery_criteria,
p_relsubinventory => l_rule_rec.rel_subinventory,
--如果规则不做限制则可以任意子库中挑库
--nvl(p_subinventory_from,l_rule_rec.rel_subinventory),
--如果在此处修改来源子库会导致发放不成功 不能创建物料搬运单
p_append_flag => l_rule_rec.append_flag,
p_task_priority => l_rule_rec.task_priority,
p_ship_set_smc_flag => NULL,
p_actual_departure_date => NULL,
p_allocation_method => l_rule_rec.allocation_method,
p_crossdock_criteria_id => l_rule_rec.crossdock_criteria_id,
p_delivery_name_lo => NULL,
p_delivery_name_hi => NULL,
p_bol_number_lo => NULL,
p_bol_number_hi => NULL,
p_intmed_ship_to_loc_id => NULL,
p_pooled_ship_to_loc_id => NULL,
p_fob_code => NULL,
p_freight_terms_code => NULL,
p_pickup_date_lo => NULL,
p_pickup_date_hi => NULL,
p_dropoff_date_lo => NULL,
p_dropoff_date_hi => NULL,
p_planned_flag => NULL,
p_selected_batch_id => NULL);
IF l_batch_id IS NULL THEN
l_err_code := g_warning;
l_err_msg := '销售订单发放没有产生批号';
GOTO next_line;
END IF;
销售订单发放生成的批号作为步骤3的参数
3. 销售订单挑库发放
调用API进行挑库发放的代码:
- wsh_pick_list.online_release(p_batch_id => l_batch_id,
- p_pick_result => l_pick_result,
- p_pick_phase => l_pick_phase,
- p_pick_skip => l_pick_skip);
- --F:Failure
- IF nvl(l_pick_result,'F') = 'F' THEN
- IF (nvl(l_pick_phase,'START') = 'MOVE_ORDER_LINES') THEN
- l_err_code := g_warning;
- l_err_msg := '联机挑库发放已部分完成。未完全处理物料搬运单:' || l_batch_id;
- ELSE
- l_err_code := g_warning;
- l_err_msg := '联机挑库发放失败。请在并发模式下发放订单:' || l_batch_id;
- END IF;
- ELSIF nvl(l_pick_skip,'Y') = 'Y' THEN
- l_err_code := g_warning;
- l_err_msg := '联机挑库发放已结束但出现警告。请检查“发运例外报表”';
- --即使部分挑库成功也不继续处理
- ELSIF nvl(l_pick_result,'F') = 'W' THEN
- IF nvl(l_pick_phase,'START') = 'MOVE_ORDER_LINES' THEN
- l_err_code := g_warning;
- l_err_msg := '联机挑库发放已部分完成,但出现警告。';
- ELSE
- l_err_code := g_warning;
- l_err_msg := '联机挑库发放已结束但出现警告。请检查“发运例外报表”';
- END IF;
- ELSIF nvl(l_pick_result,'F') = 'S' THEN
- NULL;
- END IF;
wsh_pick_list.online_release(p_batch_id => l_batch_id,
p_pick_result => l_pick_result,
p_pick_phase => l_pick_phase,
p_pick_skip => l_pick_skip);
--F:Failure
IF nvl(l_pick_result,'F') = 'F' THEN
IF (nvl(l_pick_phase,'START') = 'MOVE_ORDER_LINES') THEN
l_err_code := g_warning;
l_err_msg := '联机挑库发放已部分完成。未完全处理物料搬运单:' || l_batch_id;
ELSE
l_err_code := g_warning;
l_err_msg := '联机挑库发放失败。请在并发模式下发放订单:' || l_batch_id;
END IF;
ELSIF nvl(l_pick_skip,'Y') = 'Y' THEN
l_err_code := g_warning;
l_err_msg := '联机挑库发放已结束但出现警告。请检查“发运例外报表”';
--即使部分挑库成功也不继续处理
ELSIF nvl(l_pick_result,'F') = 'W' THEN
IF nvl(l_pick_phase,'START') = 'MOVE_ORDER_LINES' THEN
l_err_code := g_warning;
l_err_msg := '联机挑库发放已部分完成,但出现警告。';
ELSE
l_err_code := g_warning;
l_err_msg := '联机挑库发放已结束但出现警告。请检查“发运例外报表”';
END IF;
ELSIF nvl(l_pick_result,'F') = 'S' THEN
NULL;
END IF;
4. 处理物料搬运单
调用API处理物料搬运单的代码:
- get_move_order_line_id(p_order_line_id => rec_data.line_id,
- o_move_order_line_id => l_mv_line_id,
- o_mv_status => l_mv_status,
- o_err_code => l_err_code,
- o_err_msg => l_err_msg);
- IF l_err_code IS NOT NULL THEN
- GOTO next_line;
- END IF;
- <<move_order>>
- l_trolin_tbl := inv_trolin_util.query_rows(p_line_id => l_mv_line_id);
- l_mold_tbl := inv_mo_line_detail_util.query_rows(p_line_id => l_mv_line_id);
- inv_pick_wave_pick_confirm_pub.pick_confirm(p_api_version_number => 1.0,
- p_init_msg_list => fnd_api.g_false,
- p_commit => fnd_api.g_false,
- x_return_status => l_return_status,
- x_msg_count => l_msg_count,
- x_msg_data => l_msg_data,
- p_move_order_type => 3,
- p_transaction_mode => 1,
- p_trolin_tbl => l_trolin_tbl,
- p_mold_tbl => l_mold_tbl,
- x_mmtt_tbl => l_mold_tbl,
- x_trolin_tbl => l_trolin_tbl);
- IF l_return_status != fnd_api.g_ret_sts_success THEN
- l_err_code := g_warning;
- l_err_msg := '处理物料搬运单失败';
- GOTO next_line;
- END IF;
get_move_order_line_id(p_order_line_id => rec_data.line_id,
o_move_order_line_id => l_mv_line_id,
o_mv_status => l_mv_status,
o_err_code => l_err_code,
o_err_msg => l_err_msg);
IF l_err_code IS NOT NULL THEN
GOTO next_line;
END IF;
<<move_order>>
l_trolin_tbl := inv_trolin_util.query_rows(p_line_id => l_mv_line_id);
l_mold_tbl := inv_mo_line_detail_util.query_rows(p_line_id => l_mv_line_id);
inv_pick_wave_pick_confirm_pub.pick_confirm(p_api_version_number => 1.0,
p_init_msg_list => fnd_api.g_false,
p_commit => fnd_api.g_false,
x_return_status => l_return_status,
x_msg_count => l_msg_count,
x_msg_data => l_msg_data,
p_move_order_type => 3,
p_transaction_mode => 1,
p_trolin_tbl => l_trolin_tbl,
p_mold_tbl => l_mold_tbl,
x_mmtt_tbl => l_mold_tbl,
x_trolin_tbl => l_trolin_tbl);
IF l_return_status != fnd_api.g_ret_sts_success THEN
l_err_code := g_warning;
l_err_msg := '处理物料搬运单失败';
GOTO next_line;
END IF;
5. 得到销售订单的交货号(delivery_id)
得到交货号的代码:
- PROCEDURE get_delivery_line_id(p_order_line_id IN NUMBER,
- o_delivery_id OUT NUMBER,
- o_err_code OUT number,
- o_err_msg OUT VARCHAR2) IS
- BEGIN
- SELECT wda.delivery_id
- INTO o_delivery_id
- FROM wsh_delivery_details wdd, wsh_delivery_assignments wda
- WHERE wdd.source_line_id = p_order_line_id
- AND wdd.delivery_detail_id = wda.delivery_detail_id
- AND rownum = 1;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- o_err_code := g_warning;
- o_err_msg := '无法获取订单行发运号';
- WHEN OTHERS THEN
- o_err_code := g_error;
- o_err_msg := '获取发运行ID时发生意外错误:' || SQLERRM;
- END;
- --调用过程得到交货号
- get_delivery_line_id(p_order_line_id => rec_data.line_id,
- o_delivery_id => l_delivery_id,
- o_err_code => l_err_code,
- o_err_msg => l_err_msg);
- IF l_delivery_id IS NULL THEN
- l_err_code := g_warning;
- l_err_msg := '没有为该订单成功创建发运号';
- GOTO next_line;
- END IF;
PROCEDURE get_delivery_line_id(p_order_line_id IN NUMBER,
o_delivery_id OUT NUMBER,
o_err_code OUT number,
o_err_msg OUT VARCHAR2) IS
BEGIN
SELECT wda.delivery_id
INTO o_delivery_id
FROM wsh_delivery_details wdd, wsh_delivery_assignments wda
WHERE wdd.source_line_id = p_order_line_id
AND wdd.delivery_detail_id = wda.delivery_detail_id
AND rownum = 1;
EXCEPTION
WHEN NO_DATA_FOUND THEN
o_err_code := g_warning;
o_err_msg := '无法获取订单行发运号';
WHEN OTHERS THEN
o_err_code := g_error;
o_err_msg := '获取发运行ID时发生意外错误:' || SQLERRM;
END;
--调用过程得到交货号
get_delivery_line_id(p_order_line_id => rec_data.line_id,
o_delivery_id => l_delivery_id,
o_err_code => l_err_code,
o_err_msg => l_err_msg);
IF l_delivery_id IS NULL THEN
l_err_code := g_warning;
l_err_msg := '没有为该订单成功创建发运号';
GOTO next_line;
END IF;
6. 发运确认
根据步骤5中返回的delivery_id确认是否进行发运确认,
如果delivery_id不为空,并且没有返回错误信息。
调用API进行发运确认的代码:
- WSH_NEW_DELIVERY_ACTIONS.Confirm_Delivery(p_del_rows => l_delivery_id_tab,
- p_action_flag => l_action_flag,
- p_intransit_flag => l_intransit_flag,
- p_close_flag => l_close_trip_flag,
- p_stage_del_flag => l_stage_del_flag,
- p_report_set_id => l_report_set_id,
- p_ship_method => l_trip_ship_method,
- p_actual_dep_date => l_actual_dep_date,
- p_bol_flag => l_create_bol_flag,
- p_mc_bol_flag => l_mc_bill_of_lading_flag,
- p_defer_interface_flag => l_defer_interface_flag,
- p_send_945_flag => l_send_945_flag,
- x_return_status => l_return_status);
- IF l_return_status NOT IN (fnd_api.g_ret_sts_success,'') THEN
- l_err_code := g_warning;
- l_err_msg := '销售订单发放确认失败';
- GOTO next_head;
- END IF;
WSH_NEW_DELIVERY_ACTIONS.Confirm_Delivery(p_del_rows => l_delivery_id_tab,
p_action_flag => l_action_flag,
p_intransit_flag => l_intransit_flag,
p_close_flag => l_close_trip_flag,
p_stage_del_flag => l_stage_del_flag,
p_report_set_id => l_report_set_id,
p_ship_method => l_trip_ship_method,
p_actual_dep_date => l_actual_dep_date,
p_bol_flag => l_create_bol_flag,
p_mc_bol_flag => l_mc_bill_of_lading_flag,
p_defer_interface_flag => l_defer_interface_flag,
p_send_945_flag => l_send_945_flag,
x_return_status => l_return_status);
IF l_return_status NOT IN (fnd_api.g_ret_sts_success,'') THEN
l_err_code := g_warning;
l_err_msg := '销售订单发放确认失败';
GOTO next_head;
END IF;
结果:通过以上步骤,可以成功的将一个外围系统导入的销售订单进行挑库发放,成功处理此销售订单,并将销售订单行的状态变成“关闭”
EBS销售订单挑库发放处理程序的更多相关文章
- 详解EBS接口开发之销售订单挑库发放
1. 对销售订单的有效性验证 1)检查销售订单的行是否被完全传回客户化表 2)验证销售订单的关键字段 3)检查子库存是否启用了货位控制,如果启用了货位控制,没有生成货位, ...
- Oracle EBS INV 挑库发放物料搬运单
create or replace PROCEDURE XX_TRANSACT_MO_LINE AS -- Common Declarations l_api_version NUMBER := 1. ...
- EBS销售(OE)模块常用表
select * from ra_customers 客户 select * from ra_addresses_all 地址 select * from ra_site_uses_all 用户 ...
- 详解EBS接口开发之库事务处理带提前发运通知(ASN)采购接收入库-补充
A) Via ROI Create a ASN [ship,ship] for a quantity =3 on STANDARD PURCHASE ORDER Create via R ...
- 第十一篇 Material Status设置与测试,制药业案例一则
详见,http://bbs.erp100.com/thread-273173-1-1.htmlMaterial Status不同于Item Status.Item Status用于统一控制Item的s ...
- EBS-子库存转移和物料搬运单区别
FROM:http://bbs.erp100.com/forum.php?mod=viewthread&tid=261550&extra=page%3D7 EBS-子库存转移和物料搬运 ...
- Oracle EBS发放销售订单
模拟发放销售订单界面进行发放操作 PROCEDURE insert_row(x_batch_id OUT NUMBER) IS l_autopack_flag VARCHAR2(1 ); l_a ...
- Oracle EBS应用笔记整理 (转自IT++ flyingkite)
***************************************************** Author: Flyingkite Blog: http://space.itpub. ...
- Oracle EBS 采购 接收入库 接口开发
http://blog.itpub.net/25164132/viewspace-746657/ 接收入库是项目中会经常碰到的开发,这类开发一般来说比较简单,但是接收入库在Oracle中其实涉及到很多 ...
随机推荐
- spring源码阅读(2)核心类介绍
(1).BeanFactory作为一个主接口不继承任何接口,暂且称为一级接口. (2).有3个子接口继承了它,进行功能上的增强.这3个子接口称为二级接口. (3).ConfigurableBeanFa ...
- 用js来实现那些数据结构10(集合02-集合的操作)
前一篇文章我们一起实现了自定义的set集合类.那么这一篇我们来给set类增加一些操作方法.那么在开始之前,还是有必要解释一下集合的操作有哪些.便于我们更快速的理解代码. 1.并集:对于给定的两个集合, ...
- 【Noip2017游记】
好像是考Noip的第5个年头了...高中的第一次Noip... 考了三年PJ,今年是第二次TG,希望不要像去年那么萎(gou) Day -1 考前停课了挺久的来着的,学长出了N套题来模拟,自己练了DP ...
- Hdu 5595 GTW likes math
题意: 问题描述 某一天,GTW听了数学特级教师金龙鱼的课之后,开始做数学<从自主招生到竞赛>.然而书里的题目太多了,GTW还有很多事情要忙(比如把妹),于是他把那些题目交给了你.每一道题 ...
- Python中模块之logging & subprocess的讲解
subprocess & logging模块的介绍 1. subprocess 该模块替代了os.system & os.pawn*所实现的功能. 2. logging 1. 日志五大 ...
- webpack require.ensure 按需加载
使用 vue-cli构建的项目,在 默认情况下 ,会将所有的js代码打包为一个整体比如index.js.当使用存在多个路由代码的时候,index.js可能会超大,影响加载速度. 这个每个路由页面除了i ...
- jsp&servlet初体验——用户登录功能实现
数据库准备-创建db_login数据库 t_user表 1.创建web工程 2.创建用户model user.java package com.gxy.model; public class U ...
- 【阿里聚安全·安全周刊】Google“手枪”替换 | 伊朗中央银行禁止加密货币
本周七个关键词:Google"手枪"替换丨IOS 漏洞影响工业交换机丨伊朗中央银行禁止加密货币丨黑客针对医疗保健丨付费DDoS攻击丨数据获利的8种方式丨MySQL 8.0 正式版 ...
- Android颜色配置器
一.Android Color设置 1.在xml文件中 想设置颜色直接设置background的属性或者其他的color属性.随便设置一个颜色如#000,再点击左边的颜色方块,弹出颜色选择器选择颜色 ...
- MySQL数据库常用操作入门
一.MySQL MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle旗下产品.在WEB应用方面,MySQL是最好的RDBMS应用软件.MySQL体积小.速度快.总 ...