工單完工入庫單資料新增

stockin.data.create
POST JSON 同步

1. 基本資訊

項目說明
API 中文名稱工單完工入庫單資料新增
API 英文名稱Work Order Stock-In Data Create
CROSS API Codestockin.data.create
對應 ESB 服務/sendTransForm (一般) 或 /outsourcingPurchaseStockinCreate (TRANSTYPE=59)
呼叫方向MES → ERP
呼叫時機1. 工單最後一站出站完成時
2. 批次完工入庫作業時
3. 手動觸發入庫時
主要業務情境製造完工後,將成品入庫至 ERP 指定倉庫,更新 ERP 庫存數量與工單狀態
Request 格式JSON (Content-Type: application/json)
同步/非同步同步呼叫
交易控管需要(MES 與 ERP 需確保資料一致性)
備註回傳 TB001/TB002 為 ERP 產生的單據類別/單號,需回寫至 TL011/TL012

2. 業務流程

MES 系統 ERP 系統 1. 最後站出站 2. 組裝資料 (TransOrderDataToJson) 4. 回寫 TL011/TL012 3a. 檢核工單 (數量/狀態) 3b. 產生入庫單 (TB001/TB002) 3c. 更新庫存 (增加成品) 程式位置: TransOrderDataToJson.java:648 → SendFormSbyJson → XmlToERP_handler
程式碼對應
  • 路由判斷: TransOrderDataToJson.java:648
  • JSON 組裝: SendFormSbyJson.transferFormToJson()
  • 欄位映射: SendFormElementbyJson.getTransferFormHead/Body()
  • HTTP 傳送: XmlToERP_handler.sendToErpByESB()

入庫類型判斷邏輯

TRANSTYPE = 59 ? 委外進貨單 outsourcingPurchaseStockinCreate 一般移轉單/入庫單 generateTransferForm / sendTransForm

3. Request 規格

傳輸格式: JSON
Content-Type: application/json (HttpClient.java:25)

3.1 外層結構

欄位型別必填說明MES 來源
companyIDstringY公司別COMPANYID
userIdstringY操作人員CONFIRMER
doActionstringY2=移轉單DOACTION
docasestringY1=新增, 2=修改, 3=刪除DOCASE
headobjectY表頭資料-
linearrayY表身明細-

3.2 表頭(head)- getTransferFormHead()

欄位型別長度必填說明MES 來源
transferTypestring10Y移轉單別TRANSTYPE
transferCodestring30N移轉單號(修改時需傳入)TO008
datestring10Y單據日期 YYYY-MM-DDTRANSDATE
moveOutTypestring2Y移出類型(1=工作站, 2=倉庫, 3=部門)OUTTYPE
moveOutCodestring20Y移出代碼OUTDEPID
moveOutNamestring50N移出名稱OUTDEPNAME
moveInTypestring2Y移入類型INTYPE
moveInCodestring20Y移入代碼(倉庫)INDEPID
moveInNamestring50N移入名稱INDEPNAME
factoryCodestring10Y廠別FACTORYID
confirmationCodestring20N確認碼CONFIRMCODE
remarkstring255N備註COMMENT
orderDatestring10N訂單日期DOCUMENTDATE
eMESTransferTypestring10YMES 單別TRANSTYPE
eMESTransferCodestring30YMES 單號TRANSNO
source_nostring50Y來源單號(MES單別-單號)eMESTransferType + "-" + eMESTransferCode
operator_nostring20N操作人員create (CONFIRMER)

3.3 表身(line)- getTransferFormBody() - 陣列

欄位型別必填說明MES 來源
moTypestringY工單類別MOTYPE
moCodestringY工單號碼MONO
moveOutOpSeqstringY移出製程序OUTOPSEQ
moveOutOpIdstringY移出製程OUTOP
moveInOpSeqstringN移入製程序INOPSEQ
moveInOpIdstringN移入製程INOP
qtydecimalY數量TRANSQTY
unitstringY單位UNIT
batchCodestringY批號LOTNO
statestringY狀態(PATTERN)PATTERN
prodCodestringY品號ITEMID
prodNamestringN品名ITEMNAME
prodSpecstringN規格ITEMDESCRIPTION
acceptanceQtydecimalN驗收數量TL002
scrapQtydecimalN報廢數量SCRAPQTY
inspectionReturnQtydecimalN驗退數量TL003
moveInCodestringN移入部門INDEP
moveInLocationstringN移入儲位INSTORAGESPACE
useTimedecimalN人工工時LABORHOUR
useMachineTimedecimalN機器工時MACHINEHOUR
remarkstringN備註NOTE
manufactureDualUnitstringN製造雙單位TWINUNIT
hasQtystringN入庫狀態 (stock_in_status)HASQTY

4. Response 規格

欄位型別說明
codeint200=成功,其他=失敗
msgstring處理結果訊息
TB001stringERP 單別 → 回寫 TL011
TB002stringERP 單號 → 回寫 TL012

MES 內部處理結果

欄位說明
ISOKtrue=成功, false=失敗
Msg處理訊息
TB001回寫至 TL011
TB002回寫至 TL012

5. 檢核規則

#檢核項目規則程式位置
1明細資料存在SFT_TRANSORDER_LINE_GRID 不可為空TransOrderDataToJson.java:609
2TO013 檢查= 1 時才送 generateTransferFormTransOrderDataToJson.java:612
3ERP 連線SFTConfig.isHasERP() = trueTransOrderDataToJson.java:646
4TRANSTYPE 判斷59=委外進貨, 其他=一般移轉TransOrderDataToJson.java:648
5工單完工檢查canUpdateERP_TA_OP_Status100() = trueTransOrderDataToJson.java:637

6. 錯誤代碼

代碼訊息說明
E001必填欄位缺失Request 缺少必要欄位
E002工單不存在MOTYPE-MONO 錯誤
E003工單狀態不允許工單已結案或取消
E004數量必須大於零qty ≤ 0
E005數量超過餘量超過工單可入庫量
E006倉庫不存在moveInCode 無效
E999系統錯誤Timeout、連線異常
Return result parsing error!回傳解析失敗XmlToERP_handler.java:117

7. JSON 範例

Request (MES JSON)

{
  "companyID": "COMP01",
  "userId": "EMP001",
  "doAction": "2",           // 2=移轉單
  "docase": "1",              // 1=新增
  "head": {
    "transferType": "51",
    "date": "2026-03-19",
    "moveOutType": "1",
    "moveOutCode": "WS001",
    "moveOutName": "組裝站",
    "moveInType": "2",
    "moveInCode": "FG01",
    "moveInName": "成品倉",
    "factoryCode": "P001",
    "remark": "正常完工入庫",
    "create": "EMP001",       // → ERP: operator_no
    "eMESTransferType": "51",
    "eMESTransferCode": "T20260319001"
  },
  "line": [{
    "moType": "5101",
    "moCode": "20260319001",
    "moveOutOpSeq": "0030",
    "moveOutOpId": "OP030",
    "qty": 100,
    "unit": "PCS",
    "batchCode": "LOT20260319001",
    "state": "1",
    "prodCode": "FG-A001-001",
    "prodName": "成品A",
    "moveInCode": "FG01",
    "moveInLocation": "A-01-01",
    "hasQty": "1",           // → ERP: stock_in_status
    "remark": ""
  }]
}

Response (成功)

{
  "code": 200,
  "msg": "入庫單建立成功",
  "TB001": "5101",
  "TB002": "20260319001"
}

Response (失敗)

{
  "code": 500,
  "msg": "工單不存在 5101-20260319999"
}