| 項目 | 說明 |
|---|---|
| API 中文名稱 | 工單完工入庫單資料新增 |
| API 英文名稱 | Work Order Stock-In Data Create |
| CROSS API Code | stockin.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 |
TransOrderDataToJson.java:648SendFormSbyJson.transferFormToJson()SendFormElementbyJson.getTransferFormHead/Body()XmlToERP_handler.sendToErpByESB()Content-Type: application/json (HttpClient.java:25)
| 欄位 | 型別 | 必填 | 說明 | MES 來源 |
|---|---|---|---|---|
| companyID | string | Y | 公司別 | COMPANYID |
| userId | string | Y | 操作人員 | CONFIRMER |
| doAction | string | Y | 2=移轉單 | DOACTION |
| docase | string | Y | 1=新增, 2=修改, 3=刪除 | DOCASE |
| head | object | Y | 表頭資料 | - |
| line | array | Y | 表身明細 | - |
| 欄位 | 型別 | 長度 | 必填 | 說明 | MES 來源 |
|---|---|---|---|---|---|
| transferType | string | 10 | Y | 移轉單別 | TRANSTYPE |
| transferCode | string | 30 | N | 移轉單號(修改時需傳入) | TO008 |
| date | string | 10 | Y | 單據日期 YYYY-MM-DD | TRANSDATE |
| moveOutType | string | 2 | Y | 移出類型(1=工作站, 2=倉庫, 3=部門) | OUTTYPE |
| moveOutCode | string | 20 | Y | 移出代碼 | OUTDEPID |
| moveOutName | string | 50 | N | 移出名稱 | OUTDEPNAME |
| moveInType | string | 2 | Y | 移入類型 | INTYPE |
| moveInCode | string | 20 | Y | 移入代碼(倉庫) | INDEPID |
| moveInName | string | 50 | N | 移入名稱 | INDEPNAME |
| factoryCode | string | 10 | Y | 廠別 | FACTORYID |
| confirmationCode | string | 20 | N | 確認碼 | CONFIRMCODE |
| remark | string | 255 | N | 備註 | COMMENT |
| orderDate | string | 10 | N | 訂單日期 | DOCUMENTDATE |
| eMESTransferType | string | 10 | Y | MES 單別 | TRANSTYPE |
| eMESTransferCode | string | 30 | Y | MES 單號 | TRANSNO |
| source_no | string | 50 | Y | 來源單號(MES單別-單號) | eMESTransferType + "-" + eMESTransferCode |
| operator_no | string | 20 | N | 操作人員 | create (CONFIRMER) |
| 欄位 | 型別 | 必填 | 說明 | MES 來源 |
|---|---|---|---|---|
| moType | string | Y | 工單類別 | MOTYPE |
| moCode | string | Y | 工單號碼 | MONO |
| moveOutOpSeq | string | Y | 移出製程序 | OUTOPSEQ |
| moveOutOpId | string | Y | 移出製程 | OUTOP |
| moveInOpSeq | string | N | 移入製程序 | INOPSEQ |
| moveInOpId | string | N | 移入製程 | INOP |
| qty | decimal | Y | 數量 | TRANSQTY |
| unit | string | Y | 單位 | UNIT |
| batchCode | string | Y | 批號 | LOTNO |
| state | string | Y | 狀態(PATTERN) | PATTERN |
| prodCode | string | Y | 品號 | ITEMID |
| prodName | string | N | 品名 | ITEMNAME |
| prodSpec | string | N | 規格 | ITEMDESCRIPTION |
| acceptanceQty | decimal | N | 驗收數量 | TL002 |
| scrapQty | decimal | N | 報廢數量 | SCRAPQTY |
| inspectionReturnQty | decimal | N | 驗退數量 | TL003 |
| moveInCode | string | N | 移入部門 | INDEP |
| moveInLocation | string | N | 移入儲位 | INSTORAGESPACE |
| useTime | decimal | N | 人工工時 | LABORHOUR |
| useMachineTime | decimal | N | 機器工時 | MACHINEHOUR |
| remark | string | N | 備註 | NOTE |
| manufactureDualUnit | string | N | 製造雙單位 | TWINUNIT |
| hasQty | string | N | 入庫狀態 (stock_in_status) | HASQTY |
| 欄位 | 型別 | 說明 |
|---|---|---|
| code | int | 200=成功,其他=失敗 |
| msg | string | 處理結果訊息 |
| TB001 | string | ERP 單別 → 回寫 TL011 |
| TB002 | string | ERP 單號 → 回寫 TL012 |
| 欄位 | 說明 |
|---|---|
| ISOK | true=成功, false=失敗 |
| Msg | 處理訊息 |
| TB001 | 回寫至 TL011 |
| TB002 | 回寫至 TL012 |
| # | 檢核項目 | 規則 | 程式位置 |
|---|---|---|---|
| 1 | 明細資料存在 | SFT_TRANSORDER_LINE_GRID 不可為空 | TransOrderDataToJson.java:609 |
| 2 | TO013 檢查 | = 1 時才送 generateTransferForm | TransOrderDataToJson.java:612 |
| 3 | ERP 連線 | SFTConfig.isHasERP() = true | TransOrderDataToJson.java:646 |
| 4 | TRANSTYPE 判斷 | 59=委外進貨, 其他=一般移轉 | TransOrderDataToJson.java:648 |
| 5 | 工單完工檢查 | canUpdateERP_TA_OP_Status100() = true | TransOrderDataToJson.java:637 |
| 代碼 | 訊息 | 說明 |
|---|---|---|
| E001 | 必填欄位缺失 | Request 缺少必要欄位 |
| E002 | 工單不存在 | MOTYPE-MONO 錯誤 |
| E003 | 工單狀態不允許 | 工單已結案或取消 |
| E004 | 數量必須大於零 | qty ≤ 0 |
| E005 | 數量超過餘量 | 超過工單可入庫量 |
| E006 | 倉庫不存在 | moveInCode 無效 |
| E999 | 系統錯誤 | Timeout、連線異常 |
| Return result parsing error! | 回傳解析失敗 | XmlToERP_handler.java:117 |
{
"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": ""
}]
}
{
"code": 200,
"msg": "入庫單建立成功",
"TB001": "5101",
"TB002": "20260319001"
}
{
"code": 500,
"msg": "工單不存在 5101-20260319999"
}