掃碼上料
版本控制
時間 | 版本 | 修改描述 | 修改人 |
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
流程圖