扫码上料 设计文档

扫码上料

版本控制

时间

版本

修改描述

修改人

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)第一次解绑:

字段

名称

取值逻辑

 

解绑容器

容器所绑定的顶层容器

 

解绑对象

用户选择的下层容器

 

解绑对象类型

CONTAINER

 

解绑类型

3-指定解绑

 

工号

PDA登录账号

b)第二次解绑:

字段

名称

取值逻辑

 

解绑容器

条码所绑定的下层容器

 

解绑对象

用户选择的容器上的条码

 

解绑对象类型

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 则需要进行解绑

第一次解绑:

字段

名称

取值逻辑

 

解绑容器

条码所绑定的下层容器

 

解绑对象

用户选择的容器上的条码

 

解绑对象类型

EO

 

解绑类型

2-仅解绑下层

 

工号

PDA登录账号

 

顶层容器和扫码容器的解绑

第二次解绑:

字段

名称

取值逻辑

 

解绑容器

容器所绑定的顶层容器

 

解绑对象

用户选择的下层容器

 

解绑对象类型

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

流程图

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章