扫码上料
版本控制
时间 | 版本 | 修改描述 | 修改人 |
2023/3/20 | V0 | 文档初版 | 黄良谋 |
V18 | 新增 灯丝灯 膜液配方 通过扫码上料记录的功能 | 黄良谋 |
画面原型
程序流程
业务逻辑
1.打开扫码上料子应用后光标定位到设备码文本框,扫设备码,获取资源对象resrce对象所有属性,查询条件为RESRCE属性=扫码值
名称 | 类型 | 可为空 | 默认/表达式 | Generated | On Null | 不可见 | 存储 | 注释 |
ID | NUMBER | N |
| Always | N | N |
| 流水码 |
RESRCE | NVARCHAR2(255) | N |
|
| N | N |
| 资源编码 |
SITE | NVARCHAR2(255) | Y |
|
| N | N |
| 工厂 |
DESCRIPTION | NVARCHAR2(255) | Y |
|
| N | N |
| 资源描述 |
ENABLED | NUMBER(1) | N | 1 |
| N | N |
| 有效否1:true 0:false |
RESOURCE_TYPE | NVARCHAR2(255) | N |
|
| N | N |
| 资源类型 |
WORK_CENTER | NVARCHAR2(255) | N |
|
| N | N |
| 所属产线 |
OPERATION | NVARCHAR2(255) | Y |
|
| N | N |
| 工序 |
MUSTHASWO | NUMBER(1) | Y | 0 |
| N | N |
| 上料必先指定工单1:true 0:false |
WCSTORE | NUMBER | Y | 0 |
| N | N |
| 设备在产线上的前后排序 |
ALLOW_SCANNING | NUMBER | Y | 0 |
| N | N |
| 设备是否允许扫码 |
CURR_ORDER_RESRCE | NVARCHAR2(255) | Y |
|
| N | N |
| 当前生产资源 |
OLD_CONTAINER_FINISH | NUMBER(1) | Y | 0 |
| N | N |
| 原容器出站1:true 0:false |
1.1. 若步骤1实体ENABLED =false 则报错 "1028:资源xxx已失效请联系it",若ALLOW_SCANNING=false,报错:" 10031:设备不允许扫码,请联系IT部门注册设备"
1.2. 使用第一步获取的OPERATION属性 到 operation表 查询 描述DESCRIPTION
SELECT OPERATION ||':'||DESCRIPTION FROM OPERATION x WHERE OPERATION = 'ZZ030' 显示于 画面
执行扫码动作
V18 新增逻辑 放在2.1前面 start
select x.*
from imes.slurry_master_data x
where site = '1150' /*需替换*/
and recipe = 'DMS01230801001' /*需替换*/
查询返回行数>0 则标记当前业务为 膜液配方扫码 否则标记业务类型=other 继续走2.1逻辑
并直接跳转到 工单查询lov
V18 新增逻辑 放在2.1前面 end
2.1查条码是否已经绑定
/*检查是否存在没有清线的重复上料记录*/
select resrce, operation, work_center, inventory, created_date_time
from ITEM_RESOURCE_BIND_NEW x
where inventory = '222700094510-1000019980-1' /*替换为上料的条码*/
and clear_date_time is null
如果返回行数>0 则报错 条码{ inventory }已经上料到资源{ resrce}工序{ operation }上
1111 %s已经上料到资源%s工序%s上
2.2 查询条码信息
SELECT x.*,x.ROWID FROM INVENTORY x WHERE SITE = '1220' AND INVENTORY = 'WA1000017459202003160002'
名称 | 类型 | 可为空 | 默认/表达式 | Generated | On Null | 不可见 | 存储 | 注释 |
SITE | NVARCHAR2(255) | N |
|
| N | N |
| 工厂 |
INVENTORY | NVARCHAR2(255) | N |
|
| N | N |
| 条码 |
ITEM | NVARCHAR2(255) | N |
|
| N | N |
| 物料 |
WAREHOUSE | NVARCHAR2(255) | N |
|
| N | N |
| 线边仓 |
INVENTORY_TYPE | NVARCHAR2(255) | N |
|
| N | N |
| 库存类型 |
INVENTORY_STATUS | NVARCHAR2(255) | N |
|
| N | N |
| 库存状态 |
QTY_ON_HAND | NUMBER(38,6) | N |
|
| N | N |
| 现有量 |
ACTUAL_RECEIVE_TIME | DATE | Y |
|
| N | N |
| 接收时间 |
CONTAINER_CODE | NVARCHAR2(255) | Y |
|
| N | N |
| 容器条码 |
LOT_NUMBER | NVARCHAR2(255) | Y |
|
| N | N |
| 条码批次 |
MRB_NUM | NVARCHAR2(255) | Y |
|
| N | N |
| MRB编号 |
SO_LINE_NUM | NUMBER | Y |
|
| N | N |
| 销售订单行号 |
SO_NUM | NVARCHAR2(255) | Y |
|
| N | N |
| 销售订单号 |
SWR_NUM | NVARCHAR2(255) | Y |
|
| N | N |
| SWR编号 |
WBS_NUM | NVARCHAR2(255) | Y |
|
| N | N |
| WBS编号 |
VENDOR_CODE | NVARCHAR2(255) | Y |
|
| N | N |
| 供应商编码 |
VENDOR_DESC | NVARCHAR2(255) | Y |
|
| N | N |
| 供应商描述 |
AVAILABLE_TAG | NVARCHAR2(255) | Y |
|
| N | N |
| 免校验扫码倒扣标记(暂取消) |
COEFFICIENT | NUMBER | Y |
|
| N | N |
| 基板系数 |
PRE_WORK1 | NVARCHAR2(255) | Y |
|
| N | N |
| 前加工完成标识 |
PRE_WORK2 | NVARCHAR2(255) | Y |
|
| N | N |
| 前加工物料标识 |
QM_MATERIAL_DEFECT | NVARCHAR2(255) | Y |
|
| N | N |
| 不合格原材料缺陷代码 |
QM_PRODUCT_DEFECT | NVARCHAR2(255) | Y |
|
| N | N |
| 不合格成品缺陷代码 |
QM_MATERIAL_DEFECT_DESC | NVARCHAR2(255) | Y |
|
| N | N |
| 缺陷代码描述 |
QM_DESCRIPTION | NVARCHAR2(255) | Y |
|
| N | N |
| 质量备注 |
SLO_CHECK_SIGN | NVARCHAR2(255) | Y |
|
| N | N |
| 销售订单行校验标识(暂取消) |
FQC_TASK_ORDER | NVARCHAR2(255) | Y |
|
| N | N |
| FQC任务单号 |
SHOP_ORDER | NVARCHAR2(555) | Y |
|
| N | N |
| 工单号 |
SUPPLIER | NVARCHAR2(255) | Y |
|
| N | N |
| 质量判定责任供应商编码 |
SUPPLIER_DESC | NVARCHAR2(255) | Y |
|
| N | N |
| 质量判定责任供应商描述 |
ORIGINAL_QTY | NUMBER | N |
|
| N | N |
| 发料数量 |
ORIGINAL_INVENTORY | NVARCHAR2(255) | Y |
|
| N | N |
| 原始条码 |
QM_AUDITOR | NVARCHAR2(255) | Y |
|
| N | N |
| 不良退料审核人 |
ENABLED | NUMBER | N | 0 |
| N | N |
| 条码可用状态 |
SWR_MESSAGE | NVARCHAR2(1000) | Y |
|
| N | N |
| SWR备注信息 |
MRB_MESSAGE | NVARCHAR2(1000) | Y |
|
| N | N |
| MRB备注信息 |
2.3: 如果没有查到 则 调用iwms接口查询 http://10.30.35.83:8088/services/containerQueryWebService?wsdl 传入参数为 画面容器码
{
"code":"0",
"data":[
{
"containerCode":"",
"level":0,
"levelSpecified":true,
"loadObjectCode":"WMBI00369",
"loadObjectType":"CONTAINER",
"path":"WMBI00369",
"qty":null
},
{
"containerCode":"WMBI00369",
"level":1,
"levelSpecified":true,
"loadObjectCode":"SPBZ05710",
"loadObjectType":"CONTAINER",
"path":"WMBI00369\SPBZ05710",
"qty":null
},
{
"containerCode":"SPBZ05710",
"level":2,
"levelSpecified":true,
"loadObjectCode":"1000043191103902A2211250022",
"loadObjectType":"MATERIAL_LOT",
"path":"WMBI00369\SPBZ05710\1000043191103902A2211250022",
"qty":"0"
}
],
"message":"SUCCESS",
"status":true,
"statusSpecified":true
}
从返回 集合中 取出 "loadObjectType"="MATERIAL_LOT", 所有的 loadObjectCode ,然后 使用2.2的 逻辑去查 条码信息
3.1 得到条码信息,若ENABLED =false 则报错"1031条码不可用,状态为 INVENTORY_STATUS"
扫码容器返回的结果如果多个条码 并且第一个INVENTORY_TYPE<>在制条码(123)
则先 lov显示 所有的条码 ,勾选后 缓存于 invlist到页面 (条码号,物料号, SO_NUM, SO_LINE_NUM, WBS_NUM)
点确定后 循环 invlist 的每个条码 执行3.2 ,3.3 ,3.4的判断
V9-1 start:
如果是扫码单条码 但是通过查询 INVENTORY. INVENTORY_TYPE=在制条码(123) 还需再次到容器平台查询 容器树 但是 只显示上层容器和中层容器和本在制条码 ,不要显示其他的条码
扫码容器返回的结果如果多个条码 并且第一个INVENTORY_TYPE=在制条码(123) 则提取所有EO的条码显示于 容器树
条码 物料号 数量 工单号 物料描述 其中数量可编辑 默认带
INVENTORY ITEM QTY_ON_HAND SOURCE_SHOP_ORDER item. DESCRIPTION
点确定后传入
V9-1 end
3.2 查物料是否需要扫码上料
SELECT SCAN_CHECK , ALLOW_MULTIPLE_RESOURCE_BIND FROM ITEM x WHERE ITEM = '条码item属性',
如果取到的SCAN_CHECK属性为false 并且 INVENTORY_TYPE<>123 则返回前端报错 1043本条码物料无需扫码上料
如果SCAN_CHECK=true继续判断 ALLOW_MULTIPLE_RESOURCE_BIND 属性 =false 则继续 判断
V20start
卡住盘装料不可用此扫码上料
select 1
from item x
where site = '1220' 替换为当前工厂
and item = '1000110057' 替换为当前条码料号
and error_proofing_sign = 'P'
如果返回行数>0 则报错 1253 投料方式为P不可用此功能
V20end
3.3.1 查询
select distinct resrce
from ITEM_RESOURCE_BIND_NEW
where resrce <> '11300101-YG039' /*替换为画面资源*/
and operation = 'YG039' /*替换为画面工序*/
and work_center = '11300102' /*替换为画面产线*/
and item = '1000047520' /*替换为 条码 item属性*/
and clear_date_time is null
如果行数>0 则返回前端报错 1044 当前物料 已经上料到 xxx 资源,系统设置不可多资源上料
V8-1 start 3.3.2 INVENTORY_TYPE=在制条码(123) 则查询
select sum(qty) qty
from imes.shop_order_manufacture_report x
where inventory_bo = '232400001110-2/3-YG014-0002' /*替换为在制条码*/
and in_out = 1
如果 步骤2.2 条码信息. QTY_ON_HAND< qty + 输入进站量 则报错 1186 在制条码%s 条码账面数 %s 已进站 %s ,余量不足
1185在制条码%s已完全进站
V8-1 end
3.4校验条码的线边仓 是否为当前工序线边仓
/*查询当前工序线边仓*/
select warehouse
from operation_warehouse x
where work_center = '11200501' /*替换为当前产线*/
and operation = 'ZZ190' /*替换为画面工序*/
如果返回行数0 则报错 1118本工序没有预设线边仓,请联系IT
如果条码的 warehouse 不在返回值的任何一行则报错 1117条码非当前工序预设线边仓物料
4. 新增橡皮章直投料逻辑 扫完码后 先检查物料
select item ,description from item x where item = '1000135313' /*替换为当前料号*/ and site = '1130' and category3 = 'O0002'
如果返回行数=1 则当前物料为橡皮章
详情见独立文件 橡皮印直投逻辑*.docx
5. 如果 INVENTORY_TYPE=在制条码(123) 如果有多个条码 则lov供用户选择需要进站的在制条码
V15 start
工单号 =
select x.convertion_data
from item_group_pro_convertion x, item i, shop_order s, INVENTORY inv
where work_center = '11300105' /*需替换*/
and operation = 'YG011' /*需替换*/
and s.shop_order = inv.shop_order
and i.category3 = x.item_group
and i.item = s.planned_item
and i.site = s.site
and inv.site='1130'
and inv. INVENTORY = '232400001110-2/3-YG014-0001' 需替换
如果返回1行 则将所有在制条码的数量* 系数 显示于画面
上图 就是 23*3= 69 ,然后在输入的执行数 如果不是 系数的整数倍 则报错 "执行数必须是%s的整数倍"
点完确定 对外发送的数据 也需要 69/系数
V15end
select inventory_bo, item, qty, operation, erp_control_key_group, warehouse, shop_order
from imes.shop_order_manufacture_report x
where inventory_bo in ('220600554510-1/3-YG039-0001', '220600554510-1/3-YG039-0003') /*替换为容器下的条码清单*/
and inv_type = 'W'
作业员选择后执行5.1的判断(每选一个都判断)
5.1 判断是否在制条码是否在首个sp02进站
/*在制条码需在对应工单工艺路线erp_control_key_group+1后的min(sequence)进站*/
with a as
(select shop_order, erp_control_key_group + 1 erp_control_key_group
from shop_order_manufacture_report x
where in_out = '-1'
and inventory_bo = '220600554610-1/3-YG039-0001' /*替换为当前条码*/
),
b as
(select min(sequence) minsequence
from routing r, a x
where r.shop_order = x.shop_order
and r.erp_control_key_group = x.erp_control_key_group)
select r.operation, r.erp_step, r.erp_control_key_group
from routing r, b, a
where r.sequence = b.minsequence
and r.shop_order = a.shop_order
如果返回的operation <> 画面工序 则报错 1099需在工序%s对应的工序上料
如果一致则 缓存 operation erp_step erp_control_key_group 与画面缓存
5.2判断当前资源已绑定物料是否冲突
/*在制进站判断已绑定物料是否冲突 此sql需优化*/
select resrce, item, so_num, so_line_num, wbs_num, swr_num
from ITEM_RESOURCE_BIND_NEW x
where CURR_ORDER_RESRCE = 'SC1500400007' /*替换为当前资源*/
and clear_date_time is null
and item not in (select component_gbo
from bom x
where back_flush = 'X'
and shop_order = '222700094510' /*替换为条码工单号*/
and enabled = 1)
返回行数>0 报错 1158 物料%s不在进站工单bom内
行数=0 则继续执行下面的检查
/*在制进站判断已绑定物料EQ是否冲突 此sql需优化*/
select resrce, item, so_num, so_line_num, wbs_num, swr_num
from ITEM_RESOURCE_BIND_NEW x
where CURR_ORDER_RESRCE = 'SC1500400007' /*替换为当前资源*/
and clear_date_time is null
and item not in (select component_gbo
from bom b
where back_flush = 'X'
and shop_order = '222700094510' /*替换为条码工单号*/
and enabled = 1
and nvl(x.so_num, ' ') = nvl(b.sales_order, ' ')
and nvl(x.so_line_num, 0) = nvl(b.so_line, 0)
and nvl(x.wbs_num, ' ') = nvl(b.wbs, ' '))
返回行数>0 则报错 1159当前机台已绑定物料%s的按单按库属性和进站工单不一致
行数=0 则继续执行
5.3写进站记录 SHOP_ORDER_MANUFACTURE_REPORT
名称 | 类型 | 可为空 | 默认/表达式 | 注释 | 写入值 |
SITE | NVARCHAR2(255) | N |
| 工厂 | 步骤1获得资源的工厂site |
RESOURCE_BO | NVARCHAR2(255) | N |
| 资源 | 画面资源码 |
OPERATION | NVARCHAR2(255) | N |
| 工序 | 步骤1得到的工序 OPERATION |
WORK_CENTER | NVARCHAR2(255) | N |
| 所属产线 | 步骤1得到产线 |
WAREHOUSE | NVARCHAR2(255) | N |
| 线边仓 | 步骤3得到的线边仓 |
CONTAINER_CODE | NVARCHAR2(255) | N |
| 容器 | 步骤3得到的容器 暂定 |
INV_TYPE | NVARCHAR2(255) | N |
| 条码类型F完工W在制 | INVENTORY_TYPE=123 写 W 否则写F |
IN_OUT | NVARCHAR2(255) | Y |
| 进/出站 | 1 (1:进站 -1:出站) |
SHOP_ORDER | NVARCHAR2(255) | N |
| 工单号 | 步骤3获取的SHOP_ORDER工单号 |
INVENTORY_BO | NVARCHAR2(255) | N |
| 库存条码BO/在制条码 | 画面条码号 |
QTY | NUMBER(38,6) | N |
| 进站/出站数量 | 步骤3得到的 QTY_ON_HAND |
PSD_LOCATION | NVARCHAR2(255) | Y |
| 配送点 | Null (后续看是否能获取到) |
CARGO_LOCATION | NVARCHAR2(255) | Y |
| 托盘位 | Null (后续看是否能获取到) |
CREATED_DATE_TIME | DATE | N | sysdate | 创建时间 |
|
CREATED_USER | NVARCHAR2(255) | Y |
| 创建人 |
|
MODIFIED_DATE_TIME | DATE | Y |
| 修改时间 |
|
MODIFIED_USER | NVARCHAR2(255) | Y |
| 修改人 |
|
TEAM | NVARCHAR2(36) | N |
| 生产班组 | 暂空 |
DATA_FROM | NVARCHAR2(255) | Y |
| 写入程序类名称 | 类名称 |
START_TIME | DATE | Y |
| 开始时间 | Now |
FINISH_TIME | DATE | Y |
| 下线时间 |
|
ERP_STEP | 缓存变量 ERP_STEP | ||||
ERP_CONTROL_KEY_GROUP | 缓存变量 ERP_CONTROL_KEY_GROUP |
6.查询绑定表是否存在相同物料
select distinct key
from ITEM_RESOURCE_BIND_NEW t, inventory inv
where t.item = inv.item
and nvl(t.so_num, ' ') = nvl(inv.so_num, ' ')
and nvl(t.wbs_num, ' ') = nvl(inv.wbs_num, ' ')
and nvl(t.so_line_num, 0) = nvl(inv.so_line_num, 0)
and inv.inventory = #{ inventory } /*需替换为画面条码*/
and RESRCE=#{RESRCE} /*画面资源*/
and t.clear_date_time is null
返回行数>0 则 本物料已上料 则直接check通过,进入记录上料表其中ITEM_RESOURCE_BIND_NEW.key使用此key
6.1记录上料历史表 ITEM_RESOURCE_BIND_NEW
V16start 执行check
with a as
(select max(created_date_time) created_date_time
from item_resource_bind_new x
where resrce = 'SC1600200012' /*需替换*/
and item = '1000057549' /*需替换*/
v17: and INVENTORY not in (前端传入上料条码list)
)
select created_date_time from a where created_date_time + 60 /*需替换sysset.SCANTIME*/
/ 60 / 1440 > sysdate
如果返回行数>0 则报错 已在 created_date_time上料,系统卡控相同资源上料相同物料需要间隔sysset.SCANTIME秒
V22 start 抛异常1202 外套条件 if site.systemerr=0 then 抛异常 1202 end if
1202本物料已在%s上过料,系统卡控相同资源上料相同物料需要间隔%s秒
V16end
SITE | NVARCHAR2(255) | N |
| 工厂 | 当前工厂 |
WORK_CENTER | NVARCHAR2(255) | N |
| 所属产线 | 画面产线 |
OPERATION | NVARCHAR2(255) | Y |
| 工序 | 画面工序 |
RESRCE | NVARCHAR2(255) | N |
| 资源 | 画面扫码资源 |
KEY | NUMBER | N |
| 上料批次 | 先执行 select distinct key from item_resource_bind_new t, inventory inv where t.item = inv.item and nvl(t.so_num, ' ') = nvl(inv.so_num, ' ') and nvl(t.wbs_num, ' ') = nvl(inv.wbs_num, ' ') and nvl(t.so_line_num, 0) = nvl(inv.so_line_num, 0) and inv.inventory = invlist.inventory /*需替换为画面条码*/ and clear_date_time is null 返回行数0 则 select nvl(max(key),0) + 1 from ITEM_RESOURCE_BIND_NEW t |
INVENTORY | NVARCHAR2(255) | N |
| 库存条码BO/在制条码 | 画面条码 |
ITEM | NVARCHAR2(255) | N |
| 物料号 | 当前条码物料号 |
SO_LINE_NUM | NUMBER | Y |
| 销售订单行号 | 当前扫描条码 销售订单号SO_NUM |
SO_NUM | NVARCHAR2(255) | Y |
| 销售订单号 | 当前扫描条码 销售订单行SO_LINE_NUM |
WBS_NUM | NVARCHAR2(255) | Y |
| WBS编号 | 当前扫描条码 WBS_NUM |
SWR_NUM | NVARCHAR2(255) | Y |
| SWR编号 | 当前扫描条码 SWR_NUM |
QTY_ON_HAND | NUMBER(38,6) | N |
| 现有量 | 当前扫描条码QTY_ON_HAND |
SCAN_TYPE | NVARCHAR2(255) | N |
| 扫码类型F物料W在制 | 当前条码的类型 |
CONTAINER_DATA | NVARCHAR2(255) | Y |
| 容器BO | 如果有靠近条码的容器则写入 |
DATAFROM | NVARCHAR2(255) | N |
| 数据来源 | 写入的程序类 |
CREATED_DATE_TIME | DATE | N | sysdate | 上料时间 |
|
V18 新增逻辑 start
在 当前业务为 膜液配方扫码 的情况下
查询当前产线工单
select s.shop_order, planned_item, qty_ordered, planned_start_date, planned_comp_date
from imes.shop_order s
where status = '501'
and planned_work_center = '11500401' /*需替换*/
V18 新增逻辑 end
7.用扫码物料反查当前产线可选工单
V21 如果容器多个物料 则下面的语句是是取交集 ,但是扫描一个条码的时候(invlist.item 只有一个值)则 不需要取交集 去掉( where cc = (select max(cc) from a)),只要bom包含此物料就显示出工单
with a as
(select b.shop_order, count(b.shop_order) over(partition by b.shop_order) cc
from bom b, shop_order s, routing r
where s.shop_order = b.shop_order
and r.shop_order = s.shop_order
and r.erp_step = b.erp_step
and s.status = '501'
and b.back_flush = 'X'
and b.enabled = 1
and b.component_gbo in (invlist.item) /*替换为invlist物料号*/
and r.work_center = '11300305' /*替换为画面产线*/
),
b as
(select distinct shop_order from a where cc = (select max(cc) from a))
select s.shop_order, planned_item, qty_ordered, planned_start_date, planned_comp_date
from b, shop_order s
where b.shop_order = s.shop_order
order by sign(nvl(qty_done, 0)) desc, planned_start_date
8.返回行数=0 则提示 1160按当前物料无法找到工单,是否拿错物料或者没有工单?
返回行数>0 则弹框 显示行数据供用户选择工单 带复选框
V18 新增逻辑 start
在 当前业务为 膜液配方扫码 的情况下
选择工单 保存 底膜工单膜液配方关联表 SHOP_ORDER_SLURRY
SITE | NVARCHAR2(255) | N | 工厂 | 当前工厂 |
SHOP_ORDER | NVARCHAR2(255) | N | 工单号 | 选择的工单 |
RECIPE | VARCHAR2(100) | N | 配方单 | 扫码的 配方单号 |
CREATED_USER | NVARCHAR2(255) | Y | 创建人 | 当前操作用户 |
本次扫码 只能勾选一个工单
保存完成 数据显示到下方表格 条码清空
V18 新增逻辑 end
8.1 选择工单 后执行 9.1 -9.n所有的检查
9.1上料条码物料在所选工单工序是否和当前工序check(逐个工单发送请求判断)
select x.inventory, x.item, b.operation
from bom b, shop_order s, routing r, inventory x
where s.shop_order = b.shop_order
and r.shop_order = s.shop_order
and r.erp_step = b.erp_step
and s.status = '501'
and b.back_flush = 'X'
and b.enabled = 1
and b.component_gbo = x.item
and r.work_center = '11300305' /*替换为画面产线*/
and r.shop_order = '232400006010' /*替换为所选工单*/
and x.inventory in (invlist.inventory) /*替换为invlist条码号*/
循环所有返回的行, 对比 operation<>画面工序 报错"1177条码%s物料%s所属工序%s和当前工序不一致"
9.2 所选工单和当前容器/当前条码物料check(逐个工单发送请求判断)
select inventory, item, so_line_num, so_num, swr_num, wbs_num, shop_order
from inventory x
where not exists (select 1
from bom b, shop_order s, routing r
where s.shop_order = b.shop_order
and r.shop_order = s.shop_order
and r.erp_step = b.erp_step
and s.status = '501'
and b.back_flush = 'X'
and b.enabled = 1
and (b.component_gbo = x.item and nvl(b.sales_order, ' ') = nvl(x.so_num, ' ') and
nvl(b.wbs, ' ') = nvl(x.wbs_num, ' ') and nvl(b.so_line, 0) = nvl(x.so_line_num, 0))
and r.work_center = '11300305' /*替换为画面产线*/
and r.shop_order = '232400006010' /*替换为所选工单*/
)
and x.inventory in (invlist.inventory) /*替换为invlist条码号*/
如果返回>0行 则报错 1176所选工单EQ和上料条码%sEQ不一致
否则继续执行9.2
9.3所选工单和当前资源物料check(逐个工单发送请求判断)
V14 替换后的sql : select distinct resrce, x.item
from item_resource_bind_new x, inventory inv
where inv.inventory = x.inventory
and inv.qty_on_hand > 0
and curr_order_resrce = 'SC1600600001' /*替换为扫码资源的当前生产资源*/
and clear_date_time is null
and not exists
(select 1
from bom b, routing r
where r.erp_step = b.erp_step
and r.shop_order = b.shop_order
and b.back_flush = 'X'
and b.enabled = 1
and (b.component_gbo = x.item and nvl(b.sales_order, ' ') = nvl(x.so_num, ' ') and
nvl(b.wbs, ' ') = nvl(x.wbs_num, ' ') and nvl(b.so_line, 0) = nvl(x.so_line_num, 0))
and r.operation = 'YG014' /*替换为当前工序*/ 2023/11/29去掉工序条件
and r.shop_order = '220600308710' /*替换为当前所选工单*/
and r.work_center = '11300306' /*替换为当前产线*/
);
返回行数>0 则报错 1170当前资源%s绑定的物料%s和当前所选工单互斥,请清线
10.判断当前物料在选择的工单中是否处于当前工序
/*获取包含条码物料的工序*/
select distinct operation bomoperation
from bom x
where component_gbo = '1000020003' /*替换为条码料号*/
and x.shop_order in (select shop_order from item_order_bind x where work_center = '11300201' /*替换为当前产线*/
)
返回0行则 报错 1140当前生产工单无条码对应物料 实际上没有此情况
返回>0行 对比画面工序是否存在于返回的行中 若都不存在 报错 1141物料所属工序%s非当前工序
11.1物料号判断
select x.component_gbo
from bom x
where shop_order = '232200001010' /*替换为当前选择工单*/
and component_gbo = '1000017126' /*替换为条码物料号*/
如果返回行数0 则报错 本条码物料不适合当前工单
11.2物料EQ判断
/*检查工单和当前条码EQ是否一致*/
select component_gbo, erp_step, operation
from bom t, inventory inv
where t.component_gbo = inv.item
and nvl(t.sales_order, ' ') = nvl(inv.so_num, ' ')
and nvl(t.wbs, ' ') = nvl(inv.wbs_num, ' ')
and nvl(t.so_line, 0) = nvl(inv.so_line_num, 0)
and inv.inventory = '1000043191103902A2211250022' /*需替换为画面条码*/
and t.shop_order = '222600058210' /*需替换为选择的工单号*/
and t.enabled = 1
返回行数=0 则报错 1161当前选择工单EQ和当前条码EQ不一致
否则执行 11.3的各项校验
11.3 SWR选择物料逻辑
11.3.1.判断条码是否有专属swr工单
select x.inventory ,s.shop_order
from inventory x, swrtable s
where x.inventory in (invlist.inventory) /*替换为invlist条码号*/
and s.swrline = x.swr_num
and s.item = x.item
v14: and x. QTY_ON_HAND>0
循环返回的工单号并且和选择的工单号不一致则报错 1171条码专属工单为%s,只能为该工单所用
否则继续往下执行校验
11.3.2 判断是否存在工单专属swr物料
select inv.inventory, inv.item
from bom b, swrtable s, inventory inv, routing r
where s.shop_order = b.shop_order
and s.item = b.component_gbo
and inv.item = b.component_gbo
and r.shop_order = b.shop_order
and r.erp_step = b.erp_step
and inv.swr_num = s.swrline
and inv.enabled = 1
and inv.qty_on_hand > 0
and inv.inventory_status = '102'
and b.shop_order = '222700094510' /*替换为所选工单*/
and r.work_center = '11300201' /*替换为当前产线*/
and r.operation = 'YG033' /*替换为当前工序*/
and inv.inventory not in (invlist.inventory) /*替换为invlist条码号*/
and not exists (select 1
from item_resource_bind_new i
where clear_date_time is null
and i.inventory = inv.inventory)
如果返回行数>0 则提示 1172 存在工单专属条码%s,请先扫码使用
返回0行则 继续往下执行
V19start
查询找工单参数
SELECT CHOOSE_SHOP_ORDER FROM WORK_CENTER x WHERE WORK_CENTER = '11300321'需替换
如果返回值=2 则 执行下面的校验
select /*x.resrce, x.curr_order_resrce, io.**/
distinct io.shop_order 当前生产工单号
from item_resource_bind_new x, resrce r, item_order_bind_new io
where x.curr_order_resrce = r.curr_order_resrce
and r.resrce = 'SC1020100110' /*需替换*/
and x.clear_date_time is null
and io.bindkey = x.key
如果选择的工单 不在 当前生产工单号中 则报错1249 "选择工单不在当前生产工单号中"
V19end
11.3.8 上料校验完成 执行写表操作
13.记录上料历史表 ITEM_RESOURCE_BIND_NEW
SITE | NVARCHAR2(255) | N |
| 工厂 | 当前工厂 |
WORK_CENTER | NVARCHAR2(255) | N |
| 所属产线 | 画面产线 |
OPERATION | NVARCHAR2(255) | Y |
| 工序 | 画面工序 |
RESRCE | NVARCHAR2(255) | N |
| 资源 | 画面扫码资源 |
KEY | NUMBER | N |
| 上料批次 | 先执行 select distinct key from ITEM_RESOURCE_BIND_NEW t, inventory inv where t.item = inv.item and nvl(t.so_num, ' ') = nvl(inv.so_num, ' ') and nvl(t.wbs_num, ' ') = nvl(inv.wbs_num, ' ') and nvl(t.so_line_num, 0) = nvl(inv.so_line_num, 0) and inv.inventory = '1000043191103902A2211250022' /*需替换为画面条码*/ and clear_date_time is null 返回行数0 则 select nvl(max(key),0) + 1 from ITEM_RESOURCE_BIND_NEW t |
INVENTORY | NVARCHAR2(255) | N |
| 库存条码BO/在制条码 | 画面条码 |
ITEM | NVARCHAR2(255) | N |
| 物料号 | 当前条码物料号 |
SO_LINE_NUM | NUMBER | Y |
| 销售订单行号 | 当前扫描条码 销售订单号SO_NUM |
SO_NUM | NVARCHAR2(255) | Y |
| 销售订单号 | 当前扫描条码 销售订单行SO_LINE_NUM |
WBS_NUM | NVARCHAR2(255) | Y |
| WBS编号 | 当前扫描条码 WBS_NUM |
SWR_NUM | NVARCHAR2(255) | Y |
| SWR编号 | 当前扫描条码 SWR_NUM |
QTY_ON_HAND | NUMBER(38,6) | N |
| 现有量 | 当前扫描条码QTY_ON_HAND |
SCAN_TYPE | NVARCHAR2(255) | N |
| 扫码类型F物料W在制 | 当前条码的类型 |
CONTAINER_DATA | NVARCHAR2(255) | Y |
| 容器BO | 如果有靠近条码的容器则写入 |
DATAFROM | NVARCHAR2(255) | N |
| 数据来源 | 写入的程序类 |
CLEAR_DATE_TIME | DATE | N | 清线时间 | V13 select scan_check from item x where site = '1130' /*替换为当前工厂*/ and item = '1000150636' /*替换为上料料号*/ =2 则 写入 sysdate |
14.1 写当前生产历史表 ITEM_ORDER_BIND_NEW
如果 RESRCE BINDKEY SHOP_ORDER 三个为主键已经存在 则不插入
ID | NUMBER | N |
| Always | 流水码 |
|
BINDKEY | NUMBER | N |
|
| 物料绑定KEY | ITEM_RESOURCE_BIND_NEW.key |
WORK_CENTER | NVARCHAR2(255) | N |
|
| 所属产线 | 画面产线 |
OPERATION | NVARCHAR2(255) | N |
|
| 工序 | 画面工序 |
SHOP_ORDER | NVARCHAR2(255) | N |
|
| 工单 | 前端传过来的 工单号 多个工单号循环插行 |
ERP_CONTROL_KEY_GROUP | NUMBER(38) | Y | 0 |
| 仅关键工序排序 | 前端穿过来的每个工单对应ERP_CONTROL_KEY_GROUP |
DATA_FROM | NVARCHAR2(255) | Y |
|
| 写入程序类名称 | 写入程序类名称 |
CREATED_USER | NVARCHAR2(255) | Y |
|
| 创建人 |
|
V10
14.2 with a as
(select distinct key
from imes.item_resource_bind_new x
where curr_order_resrce = 'SC1100600014' /*替换为扫码资源的当前生产资源*/
and clear_date_time is null),
b as
(select distinct key, shop_order, erp_control_key_group from item_order_bind_new x, a where bindkey in (select * from a))
select *
from b
where (key, shop_order) not in
(select bindkey, shop_order from item_order_bind_new x where bindkey in (select * from a))
循环记录集 插表
ID | NUMBER | N |
| Always | 流水码 |
|
BINDKEY | NUMBER | N |
|
| 物料绑定KEY | 查询到的key |
WORK_CENTER | NVARCHAR2(255) | N |
|
| 所属产线 | 画面产线 |
OPERATION | NVARCHAR2(255) | N |
|
| 工序 | 画面工序 |
SHOP_ORDER | NVARCHAR2(255) | N |
|
| 工单 | 查询到的工单 |
ERP_CONTROL_KEY_GROUP | NUMBER(38) | Y | 0 |
| 仅关键工序排序 | 查询到额ERP_CONTROL_KEY_GROUP |
DATA_FROM | NVARCHAR2(255) | Y |
|
| 写入程序类名称 | 写入程序类名称 |
CREATED_USER | NVARCHAR2(255) | Y |
|
| 创建人 |
|
15.1 扫码的是 条码 则查询是否有上层容器,调用 每二次解绑 来解绑条码和上层容器的关系,并记录顶层容器,再次查询,看返回报文是否包含 "loadObjectType"="MATERIAL_LOT" 如果不包含 则调用 第一次解绑进行全面解绑
扫码的是 容器 则调用 每二次解绑 来解绑容器和下层条码的关系,并记录顶层容器,再次查询,看返回报文是否包含 "loadObjectType"="MATERIAL_LOT" 如果不包含 则调用 第一次解绑进行全面解绑
调用容器解绑接口,a)解绑选择的容器与顶层容器的关系,b)并解绑选择的容器与容器上的条码关系
a)第一次解绑:
- 方法:ContainerService.containerUnload
- 传入参数:
字段 | 名称 | 取值逻辑 |
解绑容器 | 容器所绑定的顶层容器 | |
解绑对象 | 用户选择的下层容器 | |
解绑对象类型 | CONTAINER | |
解绑类型 | 3-指定解绑 | |
工号 | PDA登录账号 |
b)第二次解绑:
- 方法:ContainerService.containerUnload
- 传入参数:
字段 | 名称 | 取值逻辑 |
解绑容器 | 条码所绑定的下层容器 | |
解绑对象 | 用户选择的容器上的条码 | |
解绑对象类型 | MATERIAL_LOT | |
解绑类型 | 2-仅解绑下层 | |
工号 | PDA登录账号 |
V8-2 start 15.2 如果是在制条码进站 则 查询总数量
则查询
select sum(qty) qty
from imes.shop_order_manufacture_report x
where inventory_bo = '232400001110-2/3-YG014-0002' /*替换为在制条码*/
and in_out = 1
如果 步骤2.2 条码信息. QTY_ON_HAND=qty 则需要进行解绑
第一次解绑:
- 方法:ContainerService.containerUnload
- 传入参数:
字段 | 名称 | 取值逻辑 |
解绑容器 | 条码所绑定的下层容器 | |
解绑对象 | 用户选择的容器上的条码 | |
解绑对象类型 | EO | |
解绑类型 | 2-仅解绑下层 | |
工号 | PDA登录账号 |
顶层容器和扫码容器的解绑
第二次解绑:
- 方法:ContainerService.containerUnload
- 传入参数:
字段 | 名称 | 取值逻辑 |
解绑容器 | 容器所绑定的顶层容器 | |
解绑对象 | 用户选择的下层容器 | |
解绑对象类型 | CONTAINER | |
解绑类型 | 3-指定解绑 | |
工号 | PDA登录账号 |
V8-2 end
V11 start: 已绑清单 按钮 逻辑
点按钮后 弹出表格
取数逻辑:
select inventory, x.item, i.description, qty_on_hand, container_data, x.created_date_time
from item_resource_bind_new x, item i
where resrce = 'SC1600600001'
and i.item = x.item
and i.site = x.site
and x.clear_date_time is null
order by x.created_date_time desc
双击表格行后 弹出
容器文本框 扫码后 需要查询容器信息,如果非空则报错 1190 容器非空不可装载
点击解绑 执行下面动作
0. Select id,key
from item_resource_bind_new
where resrce = 'SC1100600022' 需替换
and inventory = 'DJFCS1000019956100003' 需替换
and CLEAR_DATE_TIME is null
获取 key 然后 SELECT x.*,x.ROWID FROM IMES.ITEM_RESOURCE_BIND_NEW x WHERE "KEY" = 16
1.如果返回行数 =1 则 删除 工单选择记录 Delete ITEM_ORDER_BIND_NEW where bindkey =#{key}
2.始终执行 删除上料记录 Delete ITEM_RESOURCE_BIND_NEW where id=#{id}
3.查询条码原绑定关系,进行解绑,(条码和 靠近的容器之间,靠近的容器和顶层容器之间)
4.如果解绑画面用户有新输入容器 则还需要进行容器绑定
对 条码和容器 调用 容器平台进行绑定
http://10.30.35.155:8088/services/containerIfaceService?wsdl
对象类型:①EO 在制
②CONTAINER 容器
③MATERIAL_LOT 条码
V11 end
V12 start
当前工单 改为 已绑工单
点击后 提取数据显示于弹出的页面
数据提取逻辑
select distinct i.item, i.description, x.key /*, inv.so_num, inv.so_line_num, inv.wbs_num*/
from item_resource_bind_new x, inventory inv, item i
where inv.inventory = x.inventory
and i.item = inv.item
and inv.site = i.site
and x.clear_date_time is null
and resrce = 'SC1100600022' /*替换为画面资源*/
order by key
点上面表格 提取数据到下面表格
数据提取逻辑
with t0 as
(select distinct i.item, i.description, x.key
from item_resource_bind_new x, inventory inv, item i
where inv.inventory = x.inventory
and i.item = inv.item
and inv.site = i.site
and x.clear_date_time is null
and x.curr_order_resrce = (select curr_order_resrce from resrce where resrce = 'SC1100600022' /*替换为画面资源*/
)),
t1 as
(select x.shop_order from item_order_bind_new x where bindkey = 21 /*需替换*/
),
a as
(select b.shop_order, count(b.shop_order) over(partition by b.shop_order) cc
from bom b, shop_order s, routing r
where s.shop_order = b.shop_order
and r.shop_order = s.shop_order
and r.erp_step = b.erp_step
and s.status = '501'
and b.back_flush = 'X'
and b.enabled = 1
and b.component_gbo in (select item from t0)
and r.work_center = (select work_center from resrce where resrce = 'SC1100600022' /*替换为画面资源*/
)),
b as
(select distinct shop_order from a where cc = (select max(cc) from a))
select s.shop_order, planned_item, qty_ordered, planned_start_date, planned_comp_date, nvl2(t1.shop_order, 1, 0) icheck
from b, shop_order s, t1
where b.shop_order = s.shop_order
and s.shop_order = t1.shop_order(+)
order by sign(nvl(qty_done, 0)) desc, planned_start_date
若 icheck 列 =1 则 复选框 勾选 并为灰色
勾选 工单 复选框 执行 9.3的检查 检查报错则取消勾选 1194 所选工单于当前资源所绑物料互斥
点确定按钮
写表 ITEM_ORDER_BIND_NEW
BINDKEY | NUMBER | N |
|
| 物料绑定KEY | 上面表格选择的key |
WORK_CENTER | NVARCHAR2(255) | N |
|
| 所属产线 | 画面产线 |
OPERATION | NVARCHAR2(255) | N |
|
| 工序 | 画面工序 |
SHOP_ORDER | NVARCHAR2(255) | N |
|
| 工单 | 前端传过来的 工单号 多个工单号循环插行 |
ERP_CONTROL_KEY_GROUP | NUMBER(38) | Y | 0 |
| 仅关键工序排序 | select erp_control_key_group from routing x where shop_order = '222700059210' /*替换为工单*/ and operation = 'DY002' /*替换为工序*/ |
DATA_FROM | NVARCHAR2(255) | Y |
|
| 写入程序类名称 | 写入程序类名称 |
CREATED_USER | NVARCHAR2(255) | Y |
|
| 创建人 |
|
V12 end
流程图