API-ORACLE EBS MoveOrder自动处理物料搬运单
摘自:ORACLE EBS自动处理物料搬运单_ITPUB博客
参考melink的文章:
In Release 11i, How To Allocate and Transact Move Orders using APIs Instead of Using Move Order Forms [ID 269144.1]
ORACLE EBS自动处理物料搬运单
原创 Oracle 作者:box 时间:2016-01-04 18:10:14 3596 0
文档来源:http://blog.csdn.net/cunxiyuan108/article/details/6006961
目的:模拟EBS Form界面的功能,调用标准的API实现自动处理物料搬运单。
实现思路:
1. 先创建一个客户化的表,这个表中用来保存物料搬运单的一些信息。
2. 调用标准的API:inv_loc_wms_pub.create_locator动态创建货位(根据项目、任务和库存三个段 来创建)。
3. 调用标准的API:inv_quantity_tree_pub.query_quantities检查某一库存组织的某一子库存下某一物料的现用量和可用量。
4. 调用标准的API:inv_mo_line_detail_util.insert_row在MMTT表中插入一条记录。
5. 调用标准的API:INV_Replenish_Detail_PUB.line_details_pub创建物料搬运单的分配行。
6. 调用标准的API: inv_trolin_util.query_rows得到物料搬运单行的相关信息。
7. 调用标准的API:INV_PICK_WAVE_PICK_CONFIRM_PUB.Pick_Confirm进行自动挑库确认(处理物料搬运单)。
8. 调用标准的API:inv_mo_line_detail_util.delete_row删除MMTT表中的未处理的记录(如果步骤4中的记录没有被处理)。
9. 更新客户化表的处理状态和错误信息。
10. 将处理的结果进行统计,并使用HTML输出。
整个程序包如下:
[c-sharp] view plaincopy
- CREATE OR REPLACE PACKAGE BODY CUX_EDIINT_ITEM_MOVE_IN_PKG IS
- --自定义预置文件CUX_MO_DEBUG_FLAG:用来判断是否输出调试信息
- --fnd_profile.VALUE('CUX_MO_DEBUG_FLAG')为NULL,不输出调试信息,输出错误信息
- --fnd_profile.VALUE('CUX_MO_DEBUG_FLAG')为'N',不输出调试信息,输出错误信息
- --fnd_profile.VALUE('CUX_MO_DEBUG_FLAG')为'Y', 输出调试信息,输出错误信息
- l_mo_debug_falg VARCHAR2(1) := NVL(fnd_profile.VALUE('CUX_MO_DEBUG_FLAG'),
- 'N');
- --日志
- PROCEDURE put_log(p_msg IN VARCHAR2) IS
- BEGIN
- fnd_file.put_line(fnd_file.log, p_msg);
- END put_log;
- --输出
- PROCEDURE put_file(p_msg IN VARCHAR2) IS
- BEGIN
- fnd_file.put_line(fnd_file.OUTPUT, p_msg);
- END put_file;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * get_org_count
- * DESCRIPTION:
- * 得到本次请求处理(成功或者失败)的物料搬运单的所有OU 数量,0表示不存在,1表示存在。
- * ARGUMENT:
- * p_org_id :OU id
- * p_process_id :物料搬运单处理状态
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- FUNCTION get_org_count(p_org_id NUMBER, p_process_id NUMBER) RETURN NUMBER IS
- l_org_count NUMBER;
- BEGIN
- SELECT COUNT(1)
- INTO l_org_count
- FROM cux_ediint_item_move_in ceimi
- WHERE ceimi.ou_org_id = p_org_id
- AND ceimi.process_id = p_process_id
- AND ceimi.request_id = fnd_global.conc_request_id
- AND ROWNUM = 1;
- RETURN l_org_count;
- EXCEPTION
- WHEN OTHERS THEN
- put_log('得到OU关联的处理条数时候出现错误:' || SQLERRM);
- RETURN NULL;
- END get_org_count;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * output_move_order_info
- * DESCRIPTION:
- * 输出处理信息
- * ARGUMENT:
- * p_line_count :本次请求处理的记录总数量
- * p_line_seccess_count : 本次请求处理成功的记录数量
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE output_move_order_info(p_line_count IN NUMBER,
- p_line_success_count IN NUMBER) IS
- --取出物料搬运单客户化表中的业务实体的信息,不取重复的记录
- CURSOR cur_org_info IS
- SELECT DISTINCT
- hou.organization_id org_id, --库存组织id
- hou.name org_name --库存组织名称
- FROM cux_ediint_item_move_in ceimi,
- mtl_txn_request_lines mtrl,
- mtl_txn_request_headers mtrh,
- org_organization_definitions ood,
- hr_operating_units hou
- WHERE ceimi.line_id = mtrl.line_id
- AND mtrl.header_id = mtrh.header_id
- AND ood.organization_id = mtrl.organization_id
- AND ood.operating_unit = hou.organization_id
- AND ceimi.request_id = fnd_global.conc_request_id;
- --处理成功的物料搬运单行信息
- CURSOR cur_move_order_success(p_org_id NUMBER) IS
- SELECT hou.name org_name, --OU名称
- ceimi.header_id header_id, --物料搬运单头id
- mtrh.request_number request_number, --物料搬运单编号
- ml.meaning move_order_type_meaning, --物料搬运单类型
- ceimi.line_id line_id, --物料搬运单行id
- mtrl.line_number line_number, --行编号
- msib.segment1 item_code, --物料编码
- ceimi.transaction_quantity transaction_quantity, --事务处理数量
- ood.organization_code organization_code, --库存组织代码
- ood.organization_name organization_name, --库存组织名称
- mtrl.from_subinventory_code from_subinventory_code, --来源子库存
- mtrl.to_subinventory_code to_subinventory_code --目标子库存
- FROM cux_ediint_item_move_in ceimi,
- mtl_txn_request_lines mtrl,
- mtl_txn_request_headers mtrh,
- org_organization_definitions ood,
- hr_operating_units hou,
- mfg_lookups ml,
- mtl_system_items_b msib
- WHERE ceimi.line_id = mtrl.line_id
- AND mtrl.header_id = mtrh.header_id
- AND ood.organization_id = mtrl.organization_id
- AND ood.operating_unit = hou.organization_id
- AND mtrh.move_order_type = ml.lookup_code
- AND ml.lookup_type = 'MOVE_ORDER_TYPE'
- AND msib.organization_id = mtrl.organization_id
- AND msib.inventory_item_id = mtrl.inventory_item_id
- AND ceimi.process_id = 4 --处理成功的记录
- AND ceimi.request_id = fnd_global.conc_request_id
- AND hou.organization_id = p_org_id;
- --出错的物料搬运单行信息
- CURSOR cur_move_order_error(p_org_id NUMBER) IS
- SELECT hou.name org_name, --OU名称
- ceimi.header_id header_id, --物料搬运单头id
- mtrh.request_number request_number, --物料搬运单编号
- ml.meaning move_order_type_meaning,--物料搬运单类型
- ceimi.line_id line_id, --物料搬运单行id
- mtrl.line_number line_number, --行编号
- msib.segment1 item_code, --物料编码
- ceimi.transaction_quantity transaction_quantity, --事务处理数量
- ood.organization_code organization_code, --库存组织代码
- ood.organization_name organization_name, --库存组织名称
- mtrl.from_subinventory_code from_subinventory_code,--来源子库存
- mtrl.to_subinventory_code to_subinventory_code, --目标子库存
- ceimi.error_message error_message --错误信息
- FROM cux_ediint_item_move_in ceimi,
- mtl_txn_request_lines mtrl,
- mtl_txn_request_headers mtrh,
- org_organization_definitions ood,
- hr_operating_units hou,
- mfg_lookups ml,
- mtl_system_items_b msib
- WHERE ceimi.line_id = mtrl.line_id
- AND mtrl.header_id = mtrh.header_id
- AND ood.organization_id = mtrl.organization_id
- AND ood.operating_unit = hou.organization_id
- AND mtrh.move_order_type = ml.lookup_code
- AND ml.lookup_type = 'MOVE_ORDER_TYPE'
- AND msib.organization_id = mtrl.organization_id
- AND msib.inventory_item_id = mtrl.inventory_item_id
- AND ceimi.process_id = 3 --处理失败的记录
- AND ceimi.request_id = fnd_global.conc_request_id
- AND hou.organization_id = p_org_id;
- l_user_name VARCHAR2(100); --用户名
- l_success_index NUMBER; --循环标志
- l_error_index NUMBER; --循环标志
- l_count NUMBER; --循环标志
- l_org_count NUMBER; --循环标志
- BEGIN
- SELECT fu.user_name
- INTO l_user_name
- FROM fnd_user fu
- WHERE fu.user_id = NVL(fnd_global.user_id, -1);
- put_file(chr(13) || chr(10));
- put_file('提交人:' || rpad(l_user_name, 20, ' '));
- put_file('报表日期:' || TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
- put_file(chr(13) || chr(10));
- put_file('本次处理的总的记录条数为: ' || to_char(p_line_count) || ' 条');
- put_file('处理成功的记录条数为: ' || to_char(p_line_success_count) || ' 条');
- IF (p_line_count > p_line_success_count) THEN
- put_file('处理出错的记录条数为: ' ||
- to_char(p_line_count - p_line_success_count) || ' 条');
- END IF;
- put_file(chr(13) || chr(10));
- IF p_line_success_count <> 0 THEN
- put_file('处理成功的物料搬运单');
- put_file(lpad('-', 190, '-'));
- --输出处理成功的物料搬运单的信息
- FOR rec_org_info IN cur_org_info LOOP
- l_org_count := get_org_count(rec_org_info.org_id, 4);
- IF l_org_count <> 0 THEN
- put_file('业务实体:' || rec_org_info.org_name);
- put_file(rpad('-', 190, '-'));
- put_file(rpad('物料搬运单编号', 30, ' ') || rpad('类型', 20, ' ') ||
- rpad('行号', 20, ' ') || rpad('物料', 40, ' ') ||
- rpad('来源子库存', 20, ' ') || rpad('目标子库存', 20, ' ') ||
- rpad('事务处理数量', 40, ' '));
- put_file(chr(13) || chr(10));
- END IF;
- FOR rec_move_order_succes IN cur_move_order_success(rec_org_info.org_id) LOOP
- put_file(rpad(rec_move_order_succes.request_number, 30, ' ') ||
- rpad(rec_move_order_succes.move_order_type_meaning,
- 20,
- ' ') ||
- rpad(rec_move_order_succes.line_number, 20, ' ') ||
- rpad(rec_move_order_succes.item_code, 40, ' ') ||
- rpad(rec_move_order_succes.from_subinventory_code,
- 20,
- ' ') || rpad(rec_move_order_succes.to_subinventory_code,
- 20,
- ' ') ||
- rpad(rec_move_order_succes.transaction_quantity,
- 40,
- ' '));
- put_file(chr(13) || chr(10));
- END LOOP; --FOR rec_hold_order_info IN cur_hold_order_info LOOP
- put_file(chr(13) || chr(10));
- END LOOP; --FOR rec_org_info IN cur_org_info LOOP
- put_file(lpad('-', 95, '-') || rpad('-', 95, '-'));
- END IF;
- put_file(chr(13) || chr(10));
- --输出处理失败的物料搬运单
- IF p_line_count - p_line_success_count > 0 THEN
- put_file('处理出错的物料搬运单');
- put_file(lpad('处理出错的', 145, '-') || rpad('物料搬运单', 145, '-'));
- IF (p_line_count >= p_line_success_count) THEN
- --如果存在错误的记录
- --输出处理成功的物料搬运单的信息
- FOR rec_org_info IN cur_org_info LOOP
- l_org_count := get_org_count(rec_org_info.org_id, 3);
- IF l_org_count <> 0 THEN
- put_file('业务实体:' || rec_org_info.org_name);
- put_file(rpad('-', 290, '-'));
- put_file(rpad('物料搬运单编号', 30, ' ') || rpad('类型', 20, ' ') ||
- rpad('行号', 20, ' ') || rpad('物料', 40, ' ') ||
- rpad('来源子库存', 20, ' ') || rpad('目标子库存', 20, ' ') ||
- rpad('事务处理数量', 40, ' ') || rpad('错误信息', 100, ' '));
- put_file(chr(13) || chr(10));
- END IF;
- FOR rec_move_order_error IN cur_move_order_error(rec_org_info.org_id) LOOP
- put_file(rpad(rec_move_order_error.request_number, 30, ' ') ||
- rpad(rec_move_order_error.move_order_type_meaning,
- 20,
- ' ') ||
- rpad(rec_move_order_error.line_number, 20, ' ') ||
- rpad(rec_move_order_error.item_code, 40, ' ') ||
- rpad(rec_move_order_error.from_subinventory_code,
- 20,
- ' ') || rpad(rec_move_order_error.to_subinventory_code,
- 20,
- ' ') ||
- rpad(rec_move_order_error.transaction_quantity,
- 40,
- ' ') ||
- rpad(rec_move_order_error.error_message, 100, ' '));
- put_file(chr(13) || chr(10));
- END LOOP; --FOR rec_hold_order_info IN cur_hold_order_info LOOP
- END LOOP; --FOR rec_org_info IN cur_org_info LOOP
- END IF;
- IF p_line_count - p_line_success_count > 0 THEN
- put_file(lpad('-', 145, '-') || rpad('-', 145, '-'));
- END IF;
- END IF;
- END output_move_order_info;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * get_move_order
- * DESCRIPTION:
- * 得到物料搬运单的一条记录(一个物料搬运单头和对应的所有的物表搬运单的行)
- * ARGUMENT:
- * x_return_status :状态
- * x_msg_count :错误信息数量
- * x_msg_data :错误信息
- * x_trohdr_rec :物料搬运单头的一行记录
- * x_trohdr_val_rec :物料搬运单头的一行记录对应的值
- * x_trolin_tbl :一个物料搬运单头对应的所有物料搬运单行
- * x_trolin_val_tbl :一个物料搬运单头对应的所有物料搬运单行的值
- * p_header_id :物料搬运单头id
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE get_move_order(x_return_status OUT NOCOPY VARCHAR2,
- x_msg_count OUT NOCOPY NUMBER,
- x_msg_data OUT NOCOPY VARCHAR2,
- x_trohdr_rec OUT NOCOPY INV_MOVE_ORDER_PUB.Trohdr_Rec_Type,
- x_trohdr_val_rec OUT NOCOPY INV_MOVE_ORDER_PUB.Trohdr_Val_Rec_Type,
- x_trolin_tbl OUT NOCOPY INV_MOVE_ORDER_PUB.Trolin_Tbl_Type,
- x_trolin_val_tbl OUT NOCOPY INV_MOVE_ORDER_PUB.Trolin_Val_Tbl_Type,
- p_header_id IN NUMBER) IS
- BEGIN
- --调用系统标准的API得到物料搬运单的相关信息
- INV_Move_Order_PUB.Get_Move_Order(p_api_version_number => 1.0,
- p_init_msg_list => fnd_api.G_FALSE,
- p_return_values => fnd_api.G_FALSE,
- x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- p_header_id => p_header_id,
- p_header => fnd_api.G_MISS_CHAR,
- x_trohdr_rec => x_trohdr_rec,
- x_trohdr_val_rec => x_trohdr_val_rec,
- x_trolin_tbl => x_trolin_tbl,
- x_trolin_val_tbl => x_trolin_val_tbl);
- EXCEPTION
- WHEN OTHERS THEN
- put_log('得到物料搬运单时出现异常:' || SQLERRM);
- END get_move_order;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * get_locator_type
- * DESCRIPTION:
- * 得到货位控制类型
- * ARGUMENT:
- * p_organization_id :库存组织id
- * p_secondary_inventory_code:子库存代码
- * RETURN:
- * 货位控制类型
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- FUNCTION get_locator_type(p_organization_id IN NUMBER,
- p_secondary_inventory_code IN VARCHAR2)
- RETURN NUMBER IS
- l_locator_type_id NUMBER; --货位控制类型
- BEGIN
- SELECT msi.locator_type
- INTO l_locator_type_id
- FROM mtl_secondary_inventories msi
- WHERE msi.organization_id = p_organization_id
- AND msi.secondary_inventory_name = p_secondary_inventory_code;
- RETURN l_locator_type_id;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- RETURN NULL;
- WHEN TOO_MANY_ROWS THEN
- put_log('得到货位控制类型时返回的多个行!');
- WHEN OTHERS THEN
- put_log('得到货位控制类型时出现异常:' || SQLERRM);
- END get_locator_type;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * create_locator
- * DESCRIPTION:
- * 自动创建货位
- * ARGUMENT:
- * x_return_status :状态
- * x_msg_count :错误信息数量
- * x_msg_data :错误信息
- * x_locator_id :货位id
- * x_locator_exists :是否存在货位
- * p_organization_id :库存组织id
- * p_subinventory_code :子库存代码
- * p_project_id :项目id
- * p_task_id :任务id
- * p_locator_type :货位类型
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE create_locator(x_return_status OUT NOCOPY VARCHAR2,
- x_msg_count OUT NOCOPY NUMBER,
- x_msg_data OUT NOCOPY VARCHAR2,
- x_locator_id OUT NUMBER,
- x_locator_exists OUT VARCHAR2,
- p_organization_id IN NUMBER,
- p_subinventory_code IN VARCHAR2,
- p_project_id IN NUMBER,
- p_task_id IN NUMBER,
- p_locator_type IN NUMBER) IS
- l_segment_delimiter VARCHAR2(1); --键弹性域段分隔符
- l_concatenated_segments VARCHAR2(100); --库存货位组合
- l_project_number VARCHAR2(25); --项目编号
- l_task_number VARCHAR2(25); --任务编号
- l_user_id NUMBER; --登录的用户
- l_resp_id NUMBER; --职位id
- l_resp_appl_id NUMBER; --职责应用id
- BEGIN
- --设置MFG_ORGANIZATION_ID预置文件的值
- fnd_profile.put('MFG_ORGANIZATION_ID', p_organization_id);
- --得到段分隔符
- SELECT fifs.concatenated_segment_delimiter
- INTO l_segment_delimiter
- FROM fnd_id_flex_structures fifs
- WHERE fifs.id_flex_structure_code = 'STOCK_LOCATORS';
- --得到项目编号
- SELECT ppa.segment1
- INTO l_project_number
- FROM pa_projects_all ppa
- WHERE ppa.project_id = p_project_id;
- --得到任务编号
- SELECT pt.task_number
- INTO l_task_number
- FROM pa_tasks pt
- WHERE pt.task_id = p_task_id;
- --拼接子库存货位组合
- IF l_mo_debug_falg = 'Y' THEN
- --输出调试信息
- put_log('库存组织id:' || p_organization_id);
- put_log('货位类型:' || p_locator_type);
- put_log('子库存:' || p_subinventory_code);
- END IF;
- l_concatenated_segments := p_subinventory_code || l_segment_delimiter ||
- l_project_number || l_segment_delimiter ||
- l_task_number;
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('弹性域组合:' || l_concatenated_segments);
- END IF;
- --调用API自动创建货位
- inv_loc_wms_pub.create_locator(x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- x_inventory_location_id => x_locator_id,
- x_locator_exists => x_locator_exists,
- p_organization_id => p_organization_id,
- p_organization_code => NULL,
- p_concatenated_segments => l_concatenated_segments,
- p_description => NULL,
- p_inventory_location_type => p_locator_type,
- p_picking_order => NULL,
- p_location_maximum_units => NULL,
- p_subinventory_code => p_subinventory_code,
- 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 => NULL,
- p_dropping_order => NULL);
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('自动生成的货位返回状态:' || x_return_status);
- put_log('自动生成的货位错误条数:' || x_msg_count);
- put_log('自动生成的货位错误信息:' || x_msg_data);
- put_log('自动生成的货位id为:' || x_locator_id);
- END IF;
- IF x_locator_id IS NULL THEN
- put_log('自动创建货位时出错:' || x_msg_data);
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- put_log('自动创建货位时出现异常:' || SQLERRM);
- END create_locator;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * check_and_create_locator
- * DESCRIPTION:
- * 检查和生成货位
- * ARGUMENT:
- * x_return_status :状态
- * x_msg_count :错误信息数量
- * x_msg_data :错误信息
- * x_locator_type :货位类型
- * x_from_locator_id :来源货位id
- * x_to_locator_id :目标货位id
- * p_trolin_rec :物料搬运单行的一行记录
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE check_and_create_locator(x_return_status OUT VARCHAR2,
- x_msg_data OUT VARCHAR2,
- x_locator_type OUT VARCHAR2,
- x_from_locator_id OUT NUMBER,
- x_to_locator_id OUT NUMBER,
- p_trolin_rec IN INV_MOVE_ORDER_PUB.Trolin_Rec_Type) IS
- l_from_inv_locator_type NUMBER; --源子库存的货位控制类型
- l_to_inv_locator_type NUMBER; --目标子库存的货位控制类型
- x_msg_count NUMBER; --错误信息数
- x_locator_id NUMBER; --货位id
- x_locator_exists VARCHAR2(1); --货位是否存在标志
- BEGIN
- --来源子库存的货位控制类型
- l_from_inv_locator_type := get_locator_type(p_trolin_rec.organization_id,
- p_trolin_rec.from_subinventory_code);
- --目标子库存的货位控制类型
- l_to_inv_locator_type := get_locator_type(p_trolin_rec.organization_id,
- p_trolin_rec.to_subinventory_code);
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log(p_trolin_rec.from_subinventory_code || '的来源字库货位类型为:' ||
- l_from_inv_locator_type);
- put_log(p_trolin_rec.to_subinventory_code || '的来源字库货位类型为:' ||
- l_to_inv_locator_type);
- END IF;
- IF l_from_inv_locator_type = l_to_inv_locator_type THEN
- IF l_from_inv_locator_type <> 0 THEN--启用了货位控制
- x_locator_type := l_from_inv_locator_type;
- IF p_trolin_rec.from_locator_id IS NOT NULL THEN --货位不为空
- x_return_status := fnd_api.G_RET_STS_SUCCESS;
- x_from_locator_id := p_trolin_rec.from_locator_id;
- ELSE--货位为空
- --自动创建货位(源库存货位)
- create_locator(x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- x_locator_id => x_from_locator_id,
- x_locator_exists => x_locator_exists,
- p_organization_id => p_trolin_rec.organization_id,
- p_subinventory_code => p_trolin_rec.from_subinventory_code,
- p_project_id => p_trolin_rec.project_id,
- p_task_id => p_trolin_rec.task_id,
- p_locator_type => x_locator_type);
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('x_return_status:' || x_return_status);
- put_log('x_msg_count:' || x_msg_count);
- put_log('x_msg_data:' || x_msg_data);
- put_log('x_from_locator_id:' || x_from_locator_id);
- put_log('x_locator_exists:' || x_locator_exists);
- END IF;
- IF x_from_locator_id IS NULL THEN
- x_msg_data := '自动创建货位时错误异常,请确认是否已经包含子库存、项目和任务的信息';
- END IF;
- END IF;
- ELSE--未启用货位控制
- x_locator_type := 0;
- END IF;
- IF l_to_inv_locator_type <> 0 THEN --启用了货位控制
- x_locator_type := l_to_inv_locator_type;
- IF p_trolin_rec.to_locator_id IS NOT NULL THEN--货位不为空
- x_return_status := fnd_api.G_RET_STS_SUCCESS;
- x_to_locator_id := p_trolin_rec.to_locator_id;
- ELSE--货位为空
- --自动创建货位(目标库存货位)
- create_locator(x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- x_locator_id => x_to_locator_id,
- x_locator_exists => x_locator_exists,
- p_organization_id => p_trolin_rec.organization_id,
- p_subinventory_code => p_trolin_rec.to_subinventory_code,
- p_project_id => p_trolin_rec.project_id,
- p_task_id => p_trolin_rec.task_id,
- p_locator_type => x_locator_type);
- IF x_from_locator_id IS NULL THEN
- x_msg_data := '自动创建货位时错误异常,请确认是否已经包含子库存、项目和任务的信息';
- END IF;
- END IF;
- ELSE --未启用货位控制
- x_locator_type := 0;
- END IF;
- ELSE
- put_log('源子库存和目标子库存的货位控制类型不一致:');
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- put_log('检查和生成货位时出现异常:' || SQLERRM);
- END check_and_create_locator;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * validate_subinv_quantity
- * DESCRIPTION:
- * 验证子库存的现用量和可用量
- * ARGUMENT:
- * x_return_status :状态
- * x_msg_count :错误信息数量
- * x_msg_data :错误信息
- * p_trolin_rec :物料搬运单行的一行记录
- * p_transaction_quantity :事务处理数量
- * p_transaction_date :事务处理日期
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE validate_subinv_quantity(x_return_status OUT NOCOPY VARCHAR2,
- x_msg_count OUT NOCOPY NUMBER,
- x_msg_data OUT NOCOPY VARCHAR2,
- p_trolin_rec IN INV_MOVE_ORDER_PUB.Trolin_Rec_Type,
- p_transaction_quantity IN NUMBER,
- p_transaction_date IN DATE) IS
- x_qoh NUMBER; --quantity on hand
- x_rqoh NUMBER; --reservable quantity on hand
- x_qr NUMBER; --quantity reserved
- x_qs NUMBER; --quantity suggested
- x_att NUMBER; --available to transact
- x_atr NUMBER := 0; --available to reserve
- x_sqoh NUMBER; --secondary quantity on hand -- invConv change
- x_srqoh NUMBER; --secondary reservable quantity on hand -- invConv change
- x_sqr NUMBER; --secondary quantity reserved -- invConv change
- x_sqs NUMBER; --secondare quantity suggested -- invConv change
- x_satt NUMBER; --secondary available to transact -- invConv change
- x_satr NUMBER; --secondary available to reserve -- invConv change
- l_lot_control_flag BOOLEAN := FALSE;
- l_organization_code VARCHAR2(3); --库存组织代码
- l_item_code VARCHAR2(40); --物料代码
- x_locator_type VARCHAR2(60); --货位控制类型
- x_from_locator_id NUMBER; --来源货位
- x_to_locator_id NUMBER; --目标货位
- l_locator_id NUMBER; --子库存的货位
- BEGIN
- --得到库存代码
- SELECT mp.organization_code
- INTO l_organization_code
- FROM mtl_parameters mp
- WHERE mp.organization_id = p_trolin_rec.organization_id;
- --得到物料代码
- SELECT msib.segment1
- INTO l_item_code
- FROM mtl_system_items_b msib
- WHERE msib.organization_id = p_trolin_rec.organization_id
- AND msib.inventory_item_id = p_trolin_rec.inventory_item_id;
- --调用系统的api检查某一库存组织某一字库的某一个物料的现有量、可用量等数量
- inv_quantity_tree_pub.query_quantities(p_api_version_number => 1.0,
- x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- p_organization_id => p_trolin_rec.organization_id, --库存组织
- p_inventory_item_id => p_trolin_rec.inventory_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 => p_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 => p_trolin_rec.from_subinventory_code, --来源子库存代码
- p_locator_id => NULL, --货位id
- x_qoh => x_qoh, --现有量
- x_rqoh => x_rqoh, --现有包流量
- x_qr => x_qr, --保留量
- x_qs => x_qs, --建议保留量
- x_att => x_att, --可处理数量
- x_atr => x_atr, --保留量
- x_sqoh => x_sqoh, -- INVCONV
- x_srqoh => x_srqoh, -- INVCONV
- x_sqr => x_sqr, -- INVCONV
- x_sqs => x_sqs, -- INVCONV
- x_satt => x_satt, -- INVCONV
- x_satr => x_satr); -- INVCONV
- IF l_mo_debug_falg = 'Y' THEN
- --输出调试信息
- put_log('得到的库存现用量的状态为:' || x_return_status);
- put_log('得到的库存现用量为:' || x_atr);
- END IF;
- IF x_atr <= 0 THEN
- x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR;
- x_msg_data := '库存组织 ' || l_organization_code || ' 的子库存 ' ||
- p_trolin_rec.from_subinventory_code || ' 中物料 ' ||
- l_item_code || ' 的可用量为' || x_atr;
- RETURN;
- END IF;
- --检查并创建货位
- check_and_create_locator(x_return_status => x_return_status,
- x_msg_data => x_msg_data,
- x_locator_type => x_locator_type,
- x_from_locator_id => x_from_locator_id,
- x_to_locator_id => x_to_locator_id,
- p_trolin_rec => p_trolin_rec);
- IF x_locator_type <> 0 THEN
- l_locator_id := x_from_locator_id;
- ELSE
- l_locator_id := NULL;
- END IF;
- IF x_return_status IS NULL THEN
- x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR;
- x_msg_data := x_msg_data;
- RETURN;
- END IF;
- --调用系统的api检查某一库存组织某一字库的某一个物料的现有量、可用量等数量
- x_qoh := NULL;
- x_rqoh := NULL;
- x_qr := NULL;
- x_qs := NULL;
- x_att := NULL;
- x_atr := NULL;
- x_sqoh := NULL;
- x_srqoh := NULL;
- x_sqr := NULL;
- x_sqs := NULL;
- x_satt := NULL;
- x_satr := NULL;
- --调用API得到库存下的物料的现用量和可用量
- inv_quantity_tree_pub.query_quantities(p_api_version_number => 1.0,
- x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- p_organization_id => p_trolin_rec.organization_id, --库存组织
- p_inventory_item_id => p_trolin_rec.inventory_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 => p_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 => p_trolin_rec.from_subinventory_code, --来源子库存代码
- p_locator_id => l_locator_id, --货位id
- x_qoh => x_qoh, --现有量
- x_rqoh => x_rqoh, --现有包流量
- x_qr => x_qr, --保留量
- x_qs => x_qs, --建议保留量
- x_att => x_att, --可处理数量
- x_atr => x_atr, --保留量
- x_sqoh => x_sqoh, -- INVCONV
- x_srqoh => x_srqoh, -- INVCONV
- x_sqr => x_sqr, -- INVCONV
- x_sqs => x_sqs, -- INVCONV
- x_satt => x_satt, -- INVCONV
- x_satr => x_satr); -- INVCONV
- IF l_mo_debug_falg = 'Y' THEN
- --输出调试信息
- put_log('库存组织');
- END IF;
- IF x_return_status <> fnd_api.G_RET_STS_SUCCESS THEN
- x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR;
- x_msg_data := '获取 库存组织 ' || l_organization_code || ' 的子库存 ' ||
- p_trolin_rec.from_subinventory_code || ' 中物料 ' ||
- l_item_code || ' 的可用量时出现异常!';
- END IF;
- IF l_mo_debug_falg = 'Y' THEN
- --输出调试信息
- put_log('得到的库存现用量的状态为:' || x_return_status);
- put_log('得到的库存现用量为:' || x_atr);
- END IF;
- IF x_atr <= 0 THEN
- x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR;
- x_msg_data := '库存组织 ' || l_organization_code || ' 的子库存 ' ||
- p_trolin_rec.from_subinventory_code || ' 中物料 ' ||
- l_item_code || ' 的可用量为 ' || x_atr;
- END IF;
- IF x_atr <> 0 AND x_atr < p_transaction_quantity THEN
- x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR;
- x_msg_data := '库存组织 ' || l_organization_code || ' 的子库存 ' ||
- p_trolin_rec.from_subinventory_code || ' 中物料 ' ||
- l_item_code || ' 的可用量 ' || x_atr || ' 小于处理数量 ' ||
- p_transaction_quantity;
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- put_log('检查库存的现用量和可用量时出现异常:' || SQLERRM);
- END validate_subinv_quantity;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * validate_data
- * DESCRIPTION:
- * 验证客户化临时表的数据
- * ARGUMENT:
- * x_return_status :状态
- * x_msg_count :错误信息数量
- * x_msg_data :错误信息
- * p_trolin_rec :物料搬运单行的一行记录
- * p_line_id :物料搬运单行id
- * p_transaction_quantity :事务处理数量
- * p_transaction_date :事务处理日期
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE validate_data(x_return_status OUT NOCOPY VARCHAR2,
- x_msg_count OUT NOCOPY NUMBER,
- x_msg_data OUT NOCOPY VARCHAR2,
- p_trolin_rec IN INV_MOVE_ORDER_PUB.Trolin_Rec_Type,
- p_line_id IN NUMBER,
- p_transaction_quantity IN NUMBER,
- p_transaction_date IN DATE) IS
- l_error_flag VARCHAR2(1) := 'N'; --错误标志
- l_error_message VARCHAR2(1000) := NULL;--错误信息
- BEGIN
- --初始化
- l_error_flag := 'N';
- IF p_trolin_rec.quantity <> p_transaction_quantity THEN
- --接口中的数量和EBS系统中的剩余的数量不一致
- l_error_flag := 'Y';
- l_error_message := '接口中的数量' || p_transaction_quantity ||
- '与EBS系统中的剩余的数量' || p_trolin_rec.quantity || '不一致';
- GOTO end_error;
- END IF;
- --检查并验证库存的现用量和可用量
- validate_subinv_quantity(x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- p_trolin_rec => p_trolin_rec,
- p_transaction_quantity => p_transaction_quantity,
- p_transaction_date => p_transaction_date);
- IF x_return_status <> fnd_api.G_RET_STS_SUCCESS THEN
- x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR;
- RETURN;
- END IF;
- NULL; --添加一个可执行语句,防止GOTO语句出错
- <>
- IF l_error_flag = 'N' THEN
- x_return_status := fnd_api.G_RET_STS_SUCCESS;
- ELSE
- x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR;
- x_msg_count := 1;
- x_msg_data := l_error_message;
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- put_log('进行数据有效性验证时出现异常:' || SQLERRM);
- END validate_data;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * get_trolin_rec
- * DESCRIPTION:
- * 得到物料搬运单的一行记录
- * ARGUMENT:
- * x_return_status :状态
- * x_trolin_rec :物料搬运单行的一行记录
- * p_trolin_tbl :一条物料搬运单的所有搬运单行
- * p_line_id :物料搬运单行id
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE get_trolin_rec(x_return_status OUT NOCOPY VARCHAR2,
- x_trolin_rec OUT NOCOPY INV_MOVE_ORDER_PUB.Trolin_Rec_Type,
- p_trolin_tbl IN INV_MOVE_ORDER_PUB.Trolin_Tbl_Type,
- p_line_id IN NUMBER) IS
- l_table_index NUMBER := 0;
- BEGIN
- FOR l_table_index IN 1 .. p_trolin_tbl.COUNT LOOP
- IF p_line_id = p_trolin_tbl(l_table_index).line_id THEN
- x_trolin_rec := p_trolin_tbl(l_table_index);
- x_return_status := fnd_api.G_RET_STS_SUCCESS;
- RETURN;
- END IF;
- END LOOP; --FOR x_table_index IN x_trolin_tbl.COUNT LOOP
- x_return_status := fnd_api.G_RET_STS_UNEXP_ERROR;
- EXCEPTION
- WHEN OTHERS THEN
- put_log('得到物料搬运单时出现异常:' || SQLERRM);
- END get_trolin_rec;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * get_transaction_action_id
- * DESCRIPTION:
- * 得到事务处理的活动id
- * ARGUMENT:
- * p_transaction_type_id:事务处理类型id
- * RETURN:
- * 事务处理的活动id
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- FUNCTION get_transaction_action_id(p_transaction_type_id IN NUMBER)
- RETURN NUMBER IS
- l_transaction_action_id NUMBER;--事务处理的活动id
- BEGIN
- SELECT mtt.transaction_action_id
- INTO l_transaction_action_id
- FROM mtl_transaction_types mtt
- WHERE mtt.transaction_type_id = p_transaction_type_id;
- RETURN l_transaction_action_id;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- RETURN NULL;
- WHEN TOO_MANY_ROWS THEN
- put_log('得到事务处理的活动id时返回的多个行!');
- WHEN OTHERS THEN
- put_log('得到物料搬运单活动id时出现异常:' || SQLERRM);
- END get_transaction_action_id;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * get_acct_period_id
- * DESCRIPTION:
- * 得到库存会计期id
- * ARGUMENT:
- * p_organization_id :库存组织id
- * p_transaction_date:事务处理日期
- * RETURN:
- * 库存会计期id
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- FUNCTION get_acct_period_id(p_organization_id IN NUMBER,
- p_transaction_date IN DATE) RETURN NUMBER IS
- l_acct_period_id NUMBER;--库存会计期id
- BEGIN
- SELECT oap.acct_period_id
- INTO l_acct_period_id
- FROM org_acct_periods oap
- WHERE oap.organization_id = p_organization_id
- AND (p_transaction_date BETWEEN oap.period_start_date AND
- oap.schedule_close_date);
- RETURN l_acct_period_id;
- EXCEPTION
- WHEN NO_DATA_FOUND THEN
- RETURN NULL;
- WHEN TOO_MANY_ROWS THEN
- put_log('得到库存会计期id时返回的多个行!');
- WHEN OTHERS THEN
- put_log('得到库存会计期id时出现异常:' || SQLERRM);
- END get_acct_period_id;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * insert_mmtt_row
- * DESCRIPTION:
- * 插入某一物料搬运单事务处理临时表的一条记录
- * ARGUMENT:
- * x_return_status :状态
- * x_transaction_temp_id :临时表id
- * x_msg_data :错误信息
- * x_trohdr_rec :物料搬运单头的一行记录
- * x_trohdr_val_rec :物料搬运单头的一行记录对应的值
- * x_trolin_tbl :一个物料搬运单头对应的所有物料搬运单行
- * x_trolin_val_tbl :一个物料搬运单头对应的所有物料搬运单行的值
- * p_header_id :物料搬运单头id
- * p_line_id :物料搬运单行id
- * p_transaction_quantity :事务处理数量
- * p_transaction_date :事务处理日期
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE insert_mmtt_row(x_return_status OUT NOCOPY VARCHAR2,
- x_transaction_temp_id OUT NUMBER,
- p_trohdr_rec IN INV_MOVE_ORDER_PUB.Trohdr_Rec_Type,
- p_trohdr_val_rec IN INV_MOVE_ORDER_PUB.Trohdr_Val_Rec_Type,
- p_trolin_tbl IN INV_MOVE_ORDER_PUB.Trolin_Tbl_Type,
- p_trolin_val_tbl IN INV_MOVE_ORDER_PUB.Trolin_Val_Tbl_Type,
- p_header_id IN NUMBER,
- p_line_id IN NUMBER,
- p_transaction_quantity IN NUMBER,
- p_transaction_date IN DATE) IS
- l_mo_line_detail_rec inv_mo_line_detail_util.g_mmtt_rec;
- l_transaction_temp_id NUMBER; --临时表的id
- l_trolin_rec INV_MOVE_ORDER_PUB.Trolin_Rec_Type;
- x_locator_type VARCHAR2(60); --货位控制类型
- x_from_locator_id NUMBER; --来源货位
- x_to_locator_id NUMBER; --目标货位
- x_msg_data VARCHAR2(2000); --错误信息
- BEGIN
- --得到某一物料搬运单行的信息
- get_trolin_rec(x_return_status => x_return_status,
- x_trolin_rec => l_trolin_rec,
- p_trolin_tbl => p_trolin_tbl,
- p_line_id => p_line_id);
- --检查是否启用货位控制,如果启用,则动态生成货位
- SELECT mtl_material_transactions_s.nextval
- INTO l_transaction_temp_id
- FROM DUAL;
- --判断货位是否已经存在,如果存在,则自动创建货位
- check_and_create_locator(x_return_status => x_return_status,
- x_msg_data => x_msg_data,
- x_locator_type => x_locator_type,
- x_from_locator_id => x_from_locator_id,
- x_to_locator_id => x_to_locator_id,
- p_trolin_rec => l_trolin_rec);
- IF l_mo_debug_falg = 'Y' THEN
- --输出调试信息
- put_log('项目号:' || l_trolin_rec.project_id);
- put_log('项目号:' || l_trolin_rec.task_id);
- put_log('来源货位id:' || x_from_locator_id);
- put_log('目标货位id:' || x_to_locator_id);
- END IF;
- l_mo_line_detail_rec.locator_id := x_from_locator_id; --源子库存货位
- l_mo_line_detail_rec.transfer_to_location := x_to_locator_id; --目标子库存货位
- l_mo_line_detail_rec.transaction_header_id := NULL;
- l_mo_line_detail_rec.transaction_temp_id := l_transaction_temp_id;
- l_mo_line_detail_rec.source_code := NULL;
- l_mo_line_detail_rec.source_line_id := NULL;
- l_mo_line_detail_rec.transaction_mode := 1;
- l_mo_line_detail_rec.lock_flag := 'N';
- l_mo_line_detail_rec.last_update_date := SYSDATE;
- l_mo_line_detail_rec.last_updated_by := fnd_global.user_id;
- l_mo_line_detail_rec.creation_date := SYSDATE;
- l_mo_line_detail_rec.created_by := fnd_global.user_id;
- l_mo_line_detail_rec.last_update_login := fnd_global.user_id;
- l_mo_line_detail_rec.request_id := NULL;
- l_mo_line_detail_rec.program_application_id := NULL;
- l_mo_line_detail_rec.program_id := NULL;
- l_mo_line_detail_rec.program_update_date := NULL;
- --从物料搬运单得到item_id
- l_mo_line_detail_rec.inventory_item_id := l_trolin_rec.inventory_item_id;
- l_mo_line_detail_rec.revision := NULL;
- l_mo_line_detail_rec.organization_id := l_trolin_rec.organization_id;
- l_mo_line_detail_rec.subinventory_code := l_trolin_rec.from_subinventory_code;
- --l_mo_line_detail_rec.locator_id := l_trolin_rec.from_locator_id;
- l_mo_line_detail_rec.transaction_quantity := p_transaction_quantity;
- l_mo_line_detail_rec.primary_quantity := p_transaction_quantity;
- l_mo_line_detail_rec.transaction_uom := l_trolin_rec.uom_code;
- l_mo_line_detail_rec.transaction_cost := NULL;
- l_mo_line_detail_rec.transaction_type_id := l_trolin_rec.transaction_type_id;
- l_mo_line_detail_rec.transaction_action_id := get_transaction_action_id(l_trolin_rec.transaction_type_id);
- l_mo_line_detail_rec.transaction_source_type_id := l_trolin_rec.transaction_source_type_id;
- l_mo_line_detail_rec.transaction_source_id := p_header_id;
- l_mo_line_detail_rec.transaction_source_name := NULL;
- l_mo_line_detail_rec.transaction_date := p_transaction_date;
- l_mo_line_detail_rec.acct_period_id := get_acct_period_id(l_trolin_rec.organization_id,
- p_transaction_date); --账户期间id
- l_mo_line_detail_rec.distribution_account_id := NULL;
- l_mo_line_detail_rec.transaction_reference := NULL;
- l_mo_line_detail_rec.requisition_line_id := NULL;
- l_mo_line_detail_rec.requisition_distribution_id := NULL;
- l_mo_line_detail_rec.reason_id := l_trolin_rec.reason_id;
- l_mo_line_detail_rec.lot_number := l_trolin_rec.lot_number;
- l_mo_line_detail_rec.lot_expiration_date := NULL;
- l_mo_line_detail_rec.serial_number := NULL;
- l_mo_line_detail_rec.receiving_document := NULL;
- l_mo_line_detail_rec.demand_id := NULL;
- l_mo_line_detail_rec.rcv_transaction_id := NULL;
- l_mo_line_detail_rec.move_transaction_id := NULL;
- l_mo_line_detail_rec.completion_transaction_id := NULL;
- l_mo_line_detail_rec.wip_entity_type := NULL;
- l_mo_line_detail_rec.schedule_id := NULL;
- l_mo_line_detail_rec.repetitive_line_id := NULL;
- l_mo_line_detail_rec.employee_code := NULL;
- l_mo_line_detail_rec.primary_switch := NULL;
- l_mo_line_detail_rec.schedule_update_code := NULL;
- l_mo_line_detail_rec.setup_teardown_code := NULL;
- l_mo_line_detail_rec.item_ordering := NULL;
- l_mo_line_detail_rec.negative_req_flag := NULL;
- l_mo_line_detail_rec.operation_seq_num := NULL;
- l_mo_line_detail_rec.picking_line_id := NULL;
- l_mo_line_detail_rec.trx_source_line_id := p_line_id;
- l_mo_line_detail_rec.trx_source_delivery_id := NULL;
- l_mo_line_detail_rec.physical_adjustment_id := NULL;
- l_mo_line_detail_rec.cycle_count_id := NULL;
- l_mo_line_detail_rec.rma_line_id := NULL;
- l_mo_line_detail_rec.customer_ship_id := NULL;
- l_mo_line_detail_rec.currency_code := NULL;
- l_mo_line_detail_rec.currency_conversion_rate := NULL;
- l_mo_line_detail_rec.currency_conversion_type := NULL;
- l_mo_line_detail_rec.currency_conversion_date := NULL;
- l_mo_line_detail_rec.ussgl_transaction_code := NULL;
- l_mo_line_detail_rec.vendor_lot_number := NULL;
- l_mo_line_detail_rec.encumbrance_account := NULL;
- l_mo_line_detail_rec.encumbrance_amount := NULL;
- l_mo_line_detail_rec.ship_to_location := NULL;
- l_mo_line_detail_rec.shipment_number := NULL;
- l_mo_line_detail_rec.transfer_cost := NULL;
- l_mo_line_detail_rec.transportation_cost := NULL;
- l_mo_line_detail_rec.transportation_account := NULL;
- l_mo_line_detail_rec.freight_code := NULL;
- l_mo_line_detail_rec.containers := NULL;
- l_mo_line_detail_rec.waybill_airbill := NULL;
- l_mo_line_detail_rec.expected_arrival_date := NULL;
- l_mo_line_detail_rec.transfer_subinventory := l_trolin_rec.to_subinventory_code;
- l_mo_line_detail_rec.transfer_organization := NULL;
- l_mo_line_detail_rec.new_average_cost := NULL;
- l_mo_line_detail_rec.value_change := NULL;
- l_mo_line_detail_rec.percentage_change := NULL;
- l_mo_line_detail_rec.material_allocation_temp_id := NULL;
- l_mo_line_detail_rec.demand_source_header_id := p_header_id;
- l_mo_line_detail_rec.demand_source_line := to_char(p_line_id);
- l_mo_line_detail_rec.demand_source_delivery := NULL;
- l_mo_line_detail_rec.item_segments := NULL;
- l_mo_line_detail_rec.item_description := NULL;
- l_mo_line_detail_rec.item_trx_enabled_flag := NULL;
- l_mo_line_detail_rec.item_location_control_code := NULL;
- l_mo_line_detail_rec.item_restrict_subinv_code := NULL;
- l_mo_line_detail_rec.item_restrict_locators_code := NULL;
- l_mo_line_detail_rec.item_revision_qty_control_code := NULL;
- l_mo_line_detail_rec.item_primary_uom_code := NULL;
- l_mo_line_detail_rec.item_uom_class := NULL;
- l_mo_line_detail_rec.item_shelf_life_code := NULL;
- l_mo_line_detail_rec.item_shelf_life_days := NULL;
- l_mo_line_detail_rec.item_lot_control_code := NULL;
- l_mo_line_detail_rec.item_serial_control_code := NULL;
- l_mo_line_detail_rec.item_inventory_asset_flag := NULL;
- l_mo_line_detail_rec.allowed_units_lookup_code := NULL;
- l_mo_line_detail_rec.department_id := NULL;
- l_mo_line_detail_rec.department_code := NULL;
- l_mo_line_detail_rec.wip_supply_type := NULL;
- l_mo_line_detail_rec.supply_subinventory := NULL;
- l_mo_line_detail_rec.supply_locator_id := NULL;
- l_mo_line_detail_rec.valid_subinventory_flag := NULL;
- l_mo_line_detail_rec.valid_locator_flag := NULL;
- l_mo_line_detail_rec.locator_segments := NULL;
- l_mo_line_detail_rec.current_locator_control_code := NULL;
- l_mo_line_detail_rec.number_of_lots_entered := NULL;
- l_mo_line_detail_rec.wip_commit_flag := NULL;
- l_mo_line_detail_rec.next_lot_number := NULL;
- l_mo_line_detail_rec.lot_alpha_prefix := NULL;
- l_mo_line_detail_rec.next_serial_number := NULL;
- l_mo_line_detail_rec.serial_alpha_prefix := NULL;
- l_mo_line_detail_rec.shippable_flag := NULL;
- l_mo_line_detail_rec.posting_flag := 'Y';
- l_mo_line_detail_rec.required_flag := NULL;
- l_mo_line_detail_rec.process_flag := 'Y';
- l_mo_line_detail_rec.error_code := NULL;
- l_mo_line_detail_rec.error_explanation := NULL;
- l_mo_line_detail_rec.attribute_category := NULL;
- l_mo_line_detail_rec.attribute1 := NULL;
- l_mo_line_detail_rec.attribute2 := NULL;
- l_mo_line_detail_rec.attribute3 := NULL;
- l_mo_line_detail_rec.attribute4 := NULL;
- l_mo_line_detail_rec.attribute5 := NULL;
- l_mo_line_detail_rec.attribute6 := NULL;
- l_mo_line_detail_rec.attribute7 := NULL;
- l_mo_line_detail_rec.attribute8 := NULL;
- l_mo_line_detail_rec.attribute9 := NULL;
- l_mo_line_detail_rec.attribute10 := NULL;
- l_mo_line_detail_rec.attribute11 := NULL;
- l_mo_line_detail_rec.attribute12 := NULL;
- l_mo_line_detail_rec.attribute13 := NULL;
- l_mo_line_detail_rec.attribute14 := NULL;
- l_mo_line_detail_rec.attribute15 := NULL;
- l_mo_line_detail_rec.movement_id := NULL;
- l_mo_line_detail_rec.reservation_quantity := NULL;
- l_mo_line_detail_rec.shipped_quantity := NULL;
- l_mo_line_detail_rec.transaction_line_number := NULL;
- l_mo_line_detail_rec.task_id := NULL;
- l_mo_line_detail_rec.to_task_id := NULL;
- l_mo_line_detail_rec.source_task_id := NULL;
- l_mo_line_detail_rec.project_id := NULL;
- l_mo_line_detail_rec.source_project_id := NULL;
- l_mo_line_detail_rec.pa_expenditure_org_id := NULL;
- l_mo_line_detail_rec.to_project_id := NULL;
- l_mo_line_detail_rec.expenditure_type := NULL;
- l_mo_line_detail_rec.final_completion_flag := 'N';
- l_mo_line_detail_rec.transfer_percentage := NULL;
- l_mo_line_detail_rec.transaction_sequence_id := NULL;
- l_mo_line_detail_rec.material_account := NULL;
- l_mo_line_detail_rec.material_overhead_account := NULL;
- l_mo_line_detail_rec.resource_account := NULL;
- l_mo_line_detail_rec.outside_processing_account := NULL;
- l_mo_line_detail_rec.overhead_account := NULL;
- l_mo_line_detail_rec.flow_schedule := NULL;
- l_mo_line_detail_rec.cost_group_id := NULL;
- l_mo_line_detail_rec.demand_class := NULL;
- l_mo_line_detail_rec.qa_collection_id := NULL;
- l_mo_line_detail_rec.kanban_card_id := NULL;
- l_mo_line_detail_rec.overcompletion_transaction_id := NULL;
- l_mo_line_detail_rec.overcompletion_primary_qty := NULL;
- l_mo_line_detail_rec.overcompletion_transaction_qty := NULL;
- l_mo_line_detail_rec.end_item_unit_number := NULL;
- l_mo_line_detail_rec.scheduled_payback_date := NULL;
- l_mo_line_detail_rec.line_type_code := NULL;
- l_mo_line_detail_rec.parent_transaction_temp_id := NULL;
- l_mo_line_detail_rec.put_away_strategy_id := NULL;
- l_mo_line_detail_rec.put_away_rule_id := NULL;
- l_mo_line_detail_rec.pick_strategy_id := l_trolin_rec.pick_strategy_id;
- l_mo_line_detail_rec.pick_rule_id := NULL;
- l_mo_line_detail_rec.common_bom_seq_id := NULL;
- l_mo_line_detail_rec.common_routing_seq_id := NULL;
- l_mo_line_detail_rec.cost_type_id := NULL;
- l_mo_line_detail_rec.org_cost_group_id := NULL;
- l_mo_line_detail_rec.move_order_line_id := p_line_id;
- l_mo_line_detail_rec.task_group_id := NULL;
- l_mo_line_detail_rec.pick_slip_number := l_trolin_rec.pick_slip_number;
- l_mo_line_detail_rec.reservation_id := NULL;
- l_mo_line_detail_rec.transaction_status := 2; -- --Indicates if it has to be processed or just saved. NULL or 1 is default behavior. 2 is save only. 3 is ready to process
- l_mo_line_detail_rec.transfer_cost_group_id := NULL;
- l_mo_line_detail_rec.lpn_id := NULL;
- l_mo_line_detail_rec.transfer_lpn_id := NULL;
- l_mo_line_detail_rec.pick_slip_date := l_trolin_rec.pick_slip_date;
- l_mo_line_detail_rec.content_lpn_id := NULL;
- l_mo_line_detail_rec.secondary_transaction_quantity := NULL;
- l_mo_line_detail_rec.secondary_uom_code := NULL;
- --调用标准的API对MMTT进行插入
- inv_mo_line_detail_util.insert_row(x_return_status => x_return_status,
- p_mo_line_detail_rec => l_mo_line_detail_rec);
- IF l_mo_debug_falg = 'Y' THEN
- --输出调试信息
- put_log('x_return_status:' || x_return_status);
- END IF;
- IF x_return_status = fnd_api.G_RET_STS_SUCCESS THEN
- x_transaction_temp_id := l_transaction_temp_id; --回传mmtt的唯一性标识
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- put_log('插入mmtt处理行时出现异常:' || SQLERRM);
- END insert_mmtt_row;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * delete_mmtt_row
- * DESCRIPTION:
- * 删除某一物料搬运单事务处理临时表的一条记录
- * ARGUMENT:
- * p_header_id:物料搬运单头id
- * p_line_id :物料搬运单行id
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE delete_mmtt_row(x_return_status OUT VARCHAR2,
- p_line_id IN NUMBER,
- p_transaction_temp_id IN NUMBER) IS
- BEGIN
- inv_mo_line_detail_util.delete_row(x_return_status => x_return_status,
- p_line_id => p_line_id,
- p_line_detail_id => p_transaction_temp_id);
- EXCEPTION
- WHEN OTHERS THEN
- put_log('删除某一物料搬运单的处理行时出现异常:' || SQLERRM);
- END delete_mmtt_row;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * process_data
- * DESCRIPTION:
- * 自动处理物料搬运单
- * ARGUMENT:
- * x_return_status :返回状态
- * x_msg_count :返回的行数
- * x_msg_data :返回的信息
- * p_line_id :物料搬运单行id
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE process_data(x_return_status OUT NOCOPY VARCHAR2,
- x_msg_count OUT NOCOPY NUMBER,
- x_msg_data OUT NOCOPY VARCHAR2,
- p_line_id IN NUMBER) IS
- x_number_of_rows NUMBER;
- x_detailed_qty NUMBER;
- x_revision VARCHAR2(3);
- x_locator_id NUMBER;
- x_transfer_to_location NUMBER;
- x_lot_number VARCHAR2(80);
- x_expiration_date DATE;
- x_transaction_temp_id NUMBER;
- l_trolin_tbl INV_MOVE_ORDER_PUB.Trolin_Tbl_Type;
- l_mold_tbl INV_MO_LINE_DETAIL_UTIL.g_mmtt_tbl_type;
- x_mmtt_tbl INV_MO_LINE_DETAIL_UTIL.g_mmtt_tbl_type;
- x_trolin_tbl INV_Move_Order_PUB.Trolin_Tbl_Type;
- l_mo_line_detail_rec inv_mo_line_detail_util.g_mmtt_rec;
- BEGIN
- IF l_mo_debug_falg = 'Y' THEN
- --输出调试信息
- put_log('--------创建物料搬运单分配行开始----------');
- END IF;
- INV_Replenish_Detail_PUB.line_details_pub(p_line_id => p_line_id,
- x_number_of_rows => x_number_of_rows,
- x_detailed_qty => x_detailed_qty,
- x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- x_revision => x_revision,
- x_locator_id => x_locator_id,
- x_transfer_to_location => x_transfer_to_location,
- x_lot_number => x_lot_number,
- x_expiration_date => x_expiration_date,
- x_transaction_temp_id => x_transaction_temp_id,
- p_transaction_header_id => NULL,
- p_transaction_mode => NULL,
- p_move_order_type => 1,
- p_serial_flag => FND_API.G_TRUE,
- p_plan_tasks => NULL,
- p_auto_pick_confirm => NULL,
- p_commit => NULL);
- IF l_mo_debug_falg = 'Y' THEN
- --输出调试信息
- put_log('x_number_of_rows:' || x_number_of_rows);
- put_log('x_return_status:' || x_return_status);
- put_log('--------创建物料搬运单分配行结束----------');
- END IF;
- IF x_number_of_rows > 0 AND x_return_status = fnd_api.G_RET_STS_SUCCESS THEN
- --得到物料搬运单行信息
- IF l_mo_debug_falg = 'Y' THEN --输出调试信息
- put_log('--------获得物料搬运单行信息开始----------');
- END IF;
- l_trolin_tbl := inv_trolin_util.query_rows(p_line_id => p_line_id);
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('--------获得物料搬运单行信息结束----------');
- put_log('--------自动挑库确认开始----------');
- END IF;
- --自动挑库确认
- 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 => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- p_move_order_type => 1,
- p_transaction_mode => 1,
- p_trolin_tbl => l_trolin_tbl,
- p_mold_tbl => l_mold_tbl,
- x_mmtt_tbl => x_mmtt_tbl,
- x_trolin_tbl => x_trolin_tbl,
- p_transaction_date => NULL);
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('x_return_status:' || x_return_status);
- put_log('x_msg_count:' || x_msg_count);
- put_log('x_msg_data:' || x_msg_data);
- put_log('--------自动挑库确认结束----------');
- END IF;
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- put_log('自动处理物料搬运单时出错:' || SQLERRM);
- END process_data;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * process_history_data
- * DESCRIPTION:
- * 处理上一次错误的历史记录
- * ARGUMENT:
- * x_processd_flag:上一次的错误记录是否已经被处理
- * p_line_id :物料搬运单行id
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- PROCEDURE process_history_data(x_processd_flag OUT VARCHAR2,
- p_line_id IN NUMBER) IS
- CURSOR cur_processed_order_info IS
- SELECT mtrl.header_id header_id, --物料搬运单头id,
- mtrh.request_number request_number, --物料搬运单编号
- mtrl.line_id line_id, --物料搬运单行id
- mtrl.line_number line_number, --行号
- mtrl.organization_id organization_id, --库存组织ID
- mtrl.inventory_item_id inventory_item_id, --物料ID
- mtrh.transaction_type_id transaction_type_id, --事务处理类型ID
- mtt.transaction_type_name transaction_type_name, --事务处理类型名称
- mlt.lookup_code line_status, --行状态
- mlt.meaning line_status_meaning --行状态含义
- FROM mtl_txn_request_lines mtrl,
- mtl_txn_request_headers mtrh,
- mtl_transaction_types mtt,
- mfg_lookups mlt
- WHERE mtrl.header_id = mtrh.header_id
- AND mtrl.transaction_type_id = mtt.transaction_type_id
- AND mtrl.line_status = mlt.lookup_code
- AND mlt.lookup_type = 'MTL_TXN_REQUEST_STATUS'
- AND mtrl.line_status = 5 --表示已经关闭,表示上次错误的记录已经成功处理
- AND mtt.transaction_action_id = 2 --事务处理的活动为 子库存转移 的记录
- AND mtrl.line_id = p_line_id;
- l_processed_count NUMBER := 0;
- v_processd_flag VARCHAR2(1); --上次错误的 记录是否已经被处理
- BEGIN
- x_processd_flag := 'N'; --默认为上次的记录没有被处理
- FOR rec_processed_order_info IN cur_processed_order_info LOOP
- l_processed_count := l_processed_count + 1;
- IF l_processed_count <> 0 THEN
- v_processd_flag := 'Y';
- EXIT;
- END IF;
- END LOOP;
- IF l_processed_count = 0 THEN
- v_processd_flag := 'N';
- END IF;
- IF v_processd_flag = 'Y' THEN
- x_processd_flag := 'Y';
- --如果上一次的错误记录已经被处理,则更新客户化表中的记录的状态
- UPDATE cux_ediint_item_move_in ceimi
- SET ceimi.process_id = 4, --将3改成4,表示此条记录已经被处理,将这条记录的状态改成已经处理
- ceimi.error_message = NULL, --错误信息修改成空
- ceimi.attribute15 = '上一次处理出错,已经通过系统手工或者其他方式进行处理!',
- ceimi.last_update_date = SYSDATE,
- ceimi.last_updated_by = fnd_global.user_id,
- ceimi.last_update_login = fnd_global.user_id
- WHERE ceimi.line_id = p_line_id
- AND ceimi.process_id IN (1, 3); --错误的状态
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- put_log('删除某一物料搬运单的处理行时出现异常:' || SQLERRM);
- END process_history_data;
- /*=======================================================
- * FUNCTION / PROCEDURE
- * main
- * DESCRIPTION:
- * 并发程序入口
- * ARGUMENT:
- * errbuf :并发程序的系统参数,返回错误信息
- * retcode :并发程序的系统参数, 执行状态
- * RETURN:
- * N/A
- * HISTORY:
- * 1.00 27/10/2010 cxy
- =========================================================*/
- /*================================================================
- * 主程序的步骤:
- * 10 初始化
- * 20 处理历史记录
- * 30 验证数据有效性
- * 40 在MMTT表中插入一条记录
- * 50 自动处理物料搬运单
- * 60 更新客户化表的状态和错误信息
- * 70 输出处理结果
- =================================================================*/
- PROCEDURE main(errbuf OUT NOCOPY VARCHAR2, retcode OUT NOCOPY VARCHAR2) IS
- --使用cursor取出客户化事务处理表中的所有物料搬运单头信息,不取重复的记录
- CURSOR cur_item_move_imp_header IS
- SELECT DISTINCT ceimi.header_id header_id, --物料搬运单头id
- ceimi.request_number request_number --物料搬运单编号
- FROM cux_ediint_item_move_in ceimi
- WHERE ceimi.process_id IN (0, 3); ----处理新增或者上次出错的记录,0表示没有处理的记录,3表示上一次处理出错的记录
- --使用cursor 取出客户化表中的物料搬运单行信息
- CURSOR cur_item_move_imp_line(p_header_id NUMBER) IS
- SELECT ceimi.header_id header_id, --物料搬运单头id
- ceimi.request_number request_number, --物料搬运单编号
- ceimi.line_id line_id, --物料搬运单行id
- ceimi.transaction_quantity transaction_quantity, --事务处理数量
- ceimi.transaction_date transaction_date --事务处理日期
- FROM cux_ediint_item_move_in ceimi
- WHERE ceimi.process_id IN (0, 3) --处理新增或者上次出错的记录,0表示没有处理的记录,3表示上一次处理出错的记录
- AND ceimi.header_id = p_header_id
- ORDER BY ceimi.line_id;
- x_return_status VARCHAR2(10); --处理状态
- x_msg_count NUMBER; --错误信息数量
- x_msg_data VARCHAR2(2000); --错误信息
- x_trohdr_rec INV_MOVE_ORDER_PUB.Trohdr_Rec_Type; --物料搬运单头记录
- x_trohdr_val_rec INV_MOVE_ORDER_PUB.Trohdr_Val_Rec_Type; --物料搬运单头对应的记录
- x_trolin_tbl INV_MOVE_ORDER_PUB.Trolin_Tbl_Type; --物料搬运单的所有行记录
- x_trolin_val_tbl INV_MOVE_ORDER_PUB.Trolin_Val_Tbl_Type; --物料搬运单的所有行对应的记录
- x_trolin_rec INV_MOVE_ORDER_PUB.Trolin_Rec_Type; --一条物料搬运单行
- l_line_count NUMBER := 0; --处理的总行数
- l_line_success_count NUMBER := 0; --处理成功的行数
- x_transaction_temp_id NUMBER; --取得mmtt表的唯一性标识
- x_processd_flag VARCHAR2(1); --上一次的历史记录是否被手工处理
- BEGIN
- --循环所有的物料搬运单
- FOR rec_item_move_imp_header IN cur_item_move_imp_header LOOP
- /*============================================================
- * 10 初始化
- * ------------------------------------------------------------
- * 描述:初始化变量,并得到物料搬运单的相关信息
- =============================================================*/
- x_trohdr_rec := NULL; --物料搬运单头记录
- x_trohdr_val_rec := NULL;
- --得到物料搬运单信息
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('---------------获取物料搬运单信息开始---------------------------');
- END IF;
- x_return_status := NULL; --处理状态
- get_move_order(x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- x_trohdr_rec => x_trohdr_rec,
- x_trohdr_val_rec => x_trohdr_val_rec,
- x_trolin_tbl => x_trolin_tbl,
- x_trolin_val_tbl => x_trolin_val_tbl,
- p_header_id => rec_item_move_imp_header.header_id);
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('---------------获取物料搬运单行状态:x_return_status:' ||
- x_return_status);
- put_log('---------------错误信息条数:x_msg_count:' || x_msg_count);
- put_log('---------------错误信息:x_msg_data:' || x_msg_data);
- put_log('---------------获取物料搬运单信息结束---------------------------');
- END IF;
- --物料搬运单头状态正常,则处理此物料搬运单的所有行记录
- IF x_return_status = fnd_api.G_RET_STS_SUCCESS THEN
- --循环物料搬运单的行,自动处理物料搬运单按照行进行处理
- FOR rec_item_move_imp_line IN cur_item_move_imp_line(rec_item_move_imp_header.header_id) LOOP
- --进行初始化
- x_return_status := NULL; --处理状态
- x_msg_count := NULL; --错误信息条数
- x_msg_data := NULL; --错误信息
- --为此执行块创建一个SAVEPOINT
- BEGIN
- --创建SAVEPOINT cux_item_move_line
- SAVEPOINT cux_item_move_line;
- UPDATE cux_ediint_item_move_in ceimi
- SET ceimi.process_id = 1, --1表示程序正在处理
- ceimi.request_id = fnd_global.conc_request_id,
- ceimi.last_update_date = SYSDATE,
- ceimi.last_updated_by = fnd_global.user_id,
- ceimi.last_update_login = fnd_global.user_id
- WHERE ceimi.line_id = rec_item_move_imp_line.line_id;
- /*=========================================================
- * 20 处理历史记录
- * ---------------------------------------------------------
- * 描述:检测历史数据是否已经被处理,
- * 并更新客户表的状态和错误信息
- ==========================================================*/
- process_history_data(x_processd_flag => x_processd_flag,
- p_line_id => rec_item_move_imp_line.line_id);
- IF x_processd_flag = 'N' THEN
- --等于‘N'表示上次处理错误的记录没有被手工处理
- --得到某一物料搬运单行的信息
- get_trolin_rec(x_return_status => x_return_status,
- x_trolin_rec => x_trolin_rec,
- p_trolin_tbl => x_trolin_tbl,
- p_line_id => rec_item_move_imp_line.line_id);
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('得到某一物料搬运单行的状态:' || x_return_status);
- END IF;
- IF x_return_status = fnd_api.G_RET_STS_SUCCESS THEN
- l_line_count := l_line_count + 1; --此次处理的总条数
- /*==========================================================
- * 30 验证数据有效性
- * ----------------------------------------------------------
- * 描述:验证客户化表中的数据有效性,验证接口表中的数量是否
- * 等于物料搬运单的数量。并验证库存现用量和可用量。
- ============================================================*/
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('----------------开始验证---------------------------');
- END IF;
- --验证数据的有效性,包括是否存在货位,物料可用量等信息
- validate_data(x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- p_trolin_rec => x_trolin_rec,
- p_line_id => rec_item_move_imp_line.line_id,
- p_transaction_quantity => rec_item_move_imp_line.transaction_quantity,
- p_transaction_date => rec_item_move_imp_line.transaction_date);
- IF x_return_status <> fnd_api.G_RET_STS_SUCCESS THEN
- put_log('错误信息为:' || x_msg_data);
- --如果未通过验证,则结束本次循环
- GOTO line_end;
- END IF;
- IF l_mo_debug_falg = 'Y' THEN --输出调试信息
- put_log('---------------验证结束---------------------------');
- END IF;
- /*=============================================================
- * 40 在MMTT表中插入一条记录
- * -------------------------------------------------------------
- * 描述:数据验证通过后,给MMTT表中的字段赋值,并
- * 在MMTT表中插入一条记录。
- ===============================================================*/
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('---------------插入临时表MMTT表的一条记录开始---------------------------');
- END IF;
- --插入一条MMTT的记录
- insert_mmtt_row(x_return_status => x_return_status,
- x_transaction_temp_id => x_transaction_temp_id,
- p_trohdr_rec => x_trohdr_rec,
- p_trohdr_val_rec => x_trohdr_val_rec,
- p_trolin_tbl => x_trolin_tbl,
- p_trolin_val_tbl => x_trolin_val_tbl,
- p_header_id => rec_item_move_imp_line.header_id,
- p_line_id => rec_item_move_imp_line.line_id,
- p_transaction_quantity => rec_item_move_imp_line.transaction_quantity,
- p_transaction_date => rec_item_move_imp_line.transaction_date);
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('---------------插入临时表MMTT表的一条记录:x_return_status:' ||
- x_return_status);
- put_log('---------------插入临时表MMTT表的一条记录结束---------------------------');
- END IF;
- /*===============================================================
- * 50 自动处理物料搬运单
- * ---------------------------------------------------------------
- * 描述:调用API自动处理物料搬运单
- ================================================================*/
- IF x_return_status = fnd_api.G_RET_STS_SUCCESS THEN
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('---------------自动处理物料搬运单开始---------------------------');
- END IF;
- --处理物料搬运单
- process_data(x_return_status => x_return_status,
- x_msg_count => x_msg_count,
- x_msg_data => x_msg_data,
- p_line_id => rec_item_move_imp_line.line_id);
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('---------------x_return_status:' ||
- x_return_status);
- put_log('---------------x_msg_count:' || x_msg_count);
- put_log('---------------x_msg_data:' || x_msg_data);
- put_log('---------------自动处理物料搬运单结束---------------------------');
- END IF;
- ELSE
- EXIT;
- put_log('错误信息为:' || x_msg_data);
- put_log('CUX:物料搬运单事务处理时,发生异常:' || SQLERRM);
- END IF;
- --本次循环结束标志
- <>
- /*========================================================================
- * 60 更新客户化表的状态和错误信息
- * ------------------------------------------------------------------------
- * 描述:更新客户化表的状态:
- * process_flag =0,表示为新的记录,需要进行处理。
- * process_flag =1,表示正在处理
- * process_flag =3,程序处理异常或者错误,并将错误信息赋值给error_message
- * process_flag =4,表示处理成功。
- ========================================================================*/
- IF x_return_status = fnd_api.G_RET_STS_SUCCESS THEN --处理成功
- l_line_success_count := l_line_success_count + 1; --处理成功的记录
- --表示处理成功
- UPDATE cux_ediint_item_move_in ceimi
- SET ceimi.process_id = 4, --表示处理成功
- ceimi.error_message = NULL,
- ceimi.last_update_date = SYSDATE,
- ceimi.last_updated_by = fnd_global.user_id,
- ceimi.last_update_login = fnd_global.user_id
- WHERE ceimi.line_id = rec_item_move_imp_line.line_id;
- END IF;
- IF x_return_status = fnd_api.G_RET_STS_UNEXP_ERROR THEN--处理失败
- UPDATE cux_ediint_item_move_in ceimi
- SET ceimi.process_id = 3, --程序出现异常
- ceimi.error_message = TRIM(x_msg_data), --错误信息
- ceimi.last_update_date = SYSDATE,
- ceimi.last_updated_by = fnd_global.user_id,
- ceimi.last_update_login = fnd_global.user_id
- WHERE ceimi.line_id = rec_item_move_imp_line.line_id;
- --删除MMTT表中未被成功处理的记录
- delete_mmtt_row(x_return_status => x_return_status,
- p_line_id => rec_item_move_imp_line.line_id,
- p_transaction_temp_id => x_transaction_temp_id);
- END IF;
- END IF;
- ELSE--上次处理错误的记录被手工处理
- l_line_count := l_line_count + 1; --此次处理的总条数
- l_line_success_count := l_line_success_count + 1; --处理成功的记录
- END IF;
- --一条物料搬运单行处理结束,进行事务处理的提交
- COMMIT;
- EXCEPTION --物料搬运行出现异常
- WHEN OTHERS THEN
- --如果此条记录出现异常,则回滚到SAVEPOINT cux_item_move_line
- ROLLBACK TO cux_item_move_line;
- put_log('处理物料搬运单行时,发生异常:' || SQLERRM);
- END; --end begin
- END LOOP; --FOR rec_item_move_imp_line IN cur_item_move_imp_line LOOP
- ELSE
- retcode := 1; --如果存在没有成功处理的物料搬运单,则显示警告
- put_log('得到物料搬运单头时发生异常:' || x_msg_data);
- END IF;
- END LOOP; --FOR rec_item_move_imp_header IN cur_item_move_imp_header LOOP
- --输出处理的信息(包括成功的信息和错误的信息)
- IF l_mo_debug_falg = 'Y' THEN--输出调试信息
- put_log('总行数:' || l_line_count);
- put_log('处理成功的总行数:' || l_line_success_count);
- END IF;
- /*========================================================================
- * 70 输出处理结果
- * ------------------------------------------------------------------------
- * 描述:处理物料搬运单的处理结果包括:
- * 1.处理错误的记录
- * 2.处理失败的记录及其错误信息
- ========================================================================*/
- output_move_order_info(p_line_count => l_line_count,
- p_line_success_count => l_line_success_count);
- IF (l_line_count <> 0) AND (l_line_count <> l_line_success_count) THEN--如果存在处理错误的信息,则请求显示警告
- retcode := 1; --如果存在没有成功处理的物料搬运单,则显示警告
- END IF;
- EXCEPTION
- WHEN OTHERS THEN
- ROLLBACK;
- retcode := 2;
- put_log('错误信息为:' || x_msg_data);
- put_log('CUX:物料搬运单事务处理时,发生异常:' || SQLERRM);
- END main;
- END CUX_EDIINT_ITEM_MOVE_IN_PKG;
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Shell编程(三)---字符串、数组
转载自:Linux Shell脚本教程:30分钟玩转Shell脚本编程,只用于自己学习Shell编程。Shell字符串字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。单引…...
2024/4/15 4:36:40 - 企业邮箱如何登录手机邮箱?
在没有入职大厂前真不知道企业邮箱是什么,如何使用企业邮箱?TOM企业邮箱是个国际邮箱,我们公司的外贸部使用的就是这个邮箱,后来给我们每个人都分配了一个账号。听外贸部同事说,这个邮箱能用微信收发邮件,特…...
2024/4/18 20:14:18 - 浅谈一位Python初学者的小想法
Python是一门强大的计算机学科,学习它不但能让我清楚计算机内部的运算原理,对于AI也有更深刻的反思,了解程序的运算逻辑,机器人的运行原理似乎也没有那么深奥了,总之她让我明白了复杂强大的计算机机械背后原来是这样的…...
2024/4/15 4:36:50 - React实现图片自适应
数据格式 [1xxxx,2xxxx,3xxxx,4xxxx,5xxxx,6xxxx,7xxxx,8,xxxx,9xxxx] 运行效果 代码部分 <divgutter={24}style={{width: 100%,display: flex,justifyContent: space-between,flexWrap: wrap ,}}>{item.imgList &&item.imgList.map((itemList, index) =>…...
2024/4/20 16:25:01 - VUE执行npm run dev报错:missing script: dev
1.执行npm run dev报错 2.原因:package.json的文件里是"serve": “vue-cli-service serve” 3.解决:执行命令换成:npm run serve...
2024/4/7 0:54:40 - 新玺配资:量能不足但元宇宙却像一匹脱缰野马
周三A股三大指数开盘均低开后冲高回落,3500点附近持续震荡,全天走势总体较为低迷,尾盘虽说向上拉起,但市场人气仍然不足,成交量急剧缩减。后市还需要继续观察量能能否持续放大。 行业板块方面,昨日强势的船…...
2024/4/25 14:16:17 - Java--注解的作用及用法
一.注解的作用: Java注解是附加在代码中的一些元信息,用于编译和运行时进行解析和使用,起到说明、配置的功能。 注解不会影响代码的实际逻辑,仅仅起到辅助性的作用。 包含在java.lang.annotation包中。 注解的定义类似于接口的定义…...
2024/4/18 23:42:24 - MBR每个分区不超过2T
MBR(master boot record): 主引导记录,硬盘的第一个扇区,0柱面0磁头1扇区,有时也将其开头的446字节内容特指为“主引导记录”(MBR),其后是4个16字节的“磁盘分区表”(DPT),以及2字节…...
2024/4/15 4:36:40 - 常用的GUI框架(1)
1、初识GUI 1.1 什么是GUI GUI是Graphical User Interface(图形用户界面)的缩写,在GUI中,并不只是输入文本和返回文本,用户可以看到窗口、按钮、文本框等图形,而且可以用鼠标单击,还可以通过键盘输入。 GUI是与程序…...
2024/4/15 4:36:35 - BUUCTF-[SCTF2019]Flag Shop
[SCTF2019]Flag Shop简单看一下几个按钮的作用,buy flag是购买flag的按钮,但是当前的JinKela不够买不起,reset是重置按钮,work是工作按钮,可以赚取JinKela,但是每次只能赚取一小部分。(除非你足够闲&#x…...
2024/4/25 8:49:28 - laravel8 429错误代码
*1.用户在在指定的时间里发送了太多的请求。用于限制速率。可以用于做访问限制模块 //定义中间路由 Route::middleware(throttle:login)->group(function (){Route::get(login,[LoginController::class,login]);Route::get(logindo,[LoginController::class,loginDo]); });…...
2024/4/15 4:36:50 - Vue的v-model属性学习
Vue的v-model属性学习 mvc:是一种思想,为了实现程序的解耦,在程序设计时,V:视图层,M:model数据模型,C:控制层整个后台都是控制层。 v-model是数据的双向绑定,只要用户写…...
2024/4/20 15:51:18 - 雨中赶班车 2019-12-19
雨中赶班车,吃饭也到争分夺秒的时候了,五分钟一顿饭[捂脸]...
2024/4/7 0:54:36 - python安装biopython包和gensim包
当你试图想用Bio时 显示没有这个 于是需要自己下载一个包 打开这个,输入pip install biopython安装这个包,然后在输入pip show biopython看看安装成功了没 安装成功了。 安装gensim也是一样的,输入pip install gensim...
2024/4/7 0:54:35 - 新玺配资:A股谣言满天飞 北向无畏逆势买
周二市场总得来说算是有惊无险,上午惊恐跳水,下午探底回升。简单总结一下导致盘面剧烈波动的原因:1。周期股大跌拖累上证大盘走弱。2。市场过度解读消息影响盘面情绪,针对这点经济日报已做出回应。3。证券业协会发布通知ÿ…...
2024/4/20 11:30:23 - SCP Permission denied
SCP Permission denied 不能直接把文件传到/home目录下 错误代码: scp /Users/XXX/Desktop/Test.txt devuserxxx.xxx.xxx(ip):/home正确代码: scp /Users/XXX/Desktop/Test.txt devuserxxx.xxx.xxx(ip):/home/userfile...
2024/4/15 4:37:00 - STM32外中断
初始化需要用到的引脚 GPIO_InitTypeDef GPIO_InitStruct;//这里GPIOB_8和GPIOE_2是一个按键的两端// 初始化GPIO,作为中断输入口 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 开时钟 GPIO_InitStruct.GPIO_Pin GPIO_Pin_8; // 选择引…...
2024/4/19 11:10:54 - 高级Bash脚本编程指南——一本深入学习shell脚本艺术的书籍
http://www.reddragonfly.org/abscn/index.html 目录 序 1. 原书作者致中国读者(英文) 2. 原书作者致中国读者(译文) 3. 黄毅 4. 杨春敏第一部分. 热身 1. 为什么使用shell编程? 2. 带着一个Sha-Bang出发(Sha-Bang指的是#!)2.1. 调用一个脚本 2.2. 初步的练习第二部分. 基本…...
2024/4/23 15:54:50 - 亡羊补课2019-12-19
亡羊补课ing~ 中了某老师一句话的毒:三天打鱼也比不做强,亡羊补牢也比不补好[捂脸]...
2024/4/20 18:13:23 - 安装YII2
安装Yii2:通过composer安装 首先要安装composer 安装基础版本 composer create-project --prefer-dist yiisoft/yii2-app-basic 项目名 安装高级版本 composer create-project --prefer-dist yiisoft/yii2-app-advanced 项目名 安装好后运行 composer update …...
2024/4/15 4:37:41
最新文章
- 代码随想录(番外)图论3|1020. 飞地的数量|130. 被围绕的区域
代码随想录(番外)图论3|1020. 飞地的数量|130. 被围绕的区域 1020. 飞地的数量 class Solution { public:int dir[4][2]{0,1,1,0,0,-1,-1,0};int count;void dfs(vector<vector<int>>& grid,int x,int y){grid[x][y]0;count;for(int i…...
2024/4/26 0:20:01 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 【AcWing】蓝桥杯集训每日一题Day22|区间DP|博弈论|1388.游戏(C++)
1388.游戏 1388. 游戏 - AcWing题库难度:中等时/空限制:1s / 64MB总通过数:1429总尝试数:1925来源:usaco training 3.3算法标签博弈论DP区间DP 题目内容 玩家一和玩家二共同玩一个小游戏。 给定一个包含 N 个正整数的…...
2024/4/13 16:49:51 - 2024年04月IDE流行度最新排名
点击查看最新IDE流行度最新排名(每月更新) 2024年04月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多,这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…...
2024/4/22 11:42:58 - 【Qt 学习笔记】Qt 背景介绍
博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt 背景介绍 文章编号:Qt 学习笔记 / 01 文章目录 Qt 背景…...
2024/4/25 9:34:23 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/25 11:51:20 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/25 18:39:24 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/25 18:38:39 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/25 18:39:23 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/25 18:39:22 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/25 18:39:22 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/25 18:39:20 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/25 16:48:44 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/25 13:39:44 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/25 18:39:16 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/25 0:00:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/25 4:19:21 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/25 18:39:12 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/25 2:10:52 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/25 13:19:01 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/25 18:38:58 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/25 18:38:57 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57