當 MES 取消出站時,呼叫此 API 通知 ERP 取消對應的報工單,還原報工數據。 ERP 收到後會作廢或還原該筆報工記錄。
PRODUCTION_REPORTID 有值時才會呼叫 ERP。
如果出站時 ERP 尚未回傳報工單號(TIMEOUT 或失敗),取消時將無法通知 ERP 還原。
使用者在 MES 點擊「取消出站」,系統查詢到報工單號後,呼叫 ERP 取消該報工單。
批次取消多筆出站記錄,系統會逐筆呼叫 ERP 取消對應的報工單。
重工站取消出站時,同樣會觸發報工單取消流程。
| 欄位 | ERP 欄位名 | 類型 | 必填 | 說明 |
|---|---|---|---|---|
| 公司代碼 | enterprise_no |
String | 必填 | 企業代碼 |
| 工廠代碼 | site_no |
String | 必填 | 工廠/廠別代碼 |
| 報工單號 | report_no |
String | 必填 | 要取消的報工單號(類別-單號) |
PDTYPE-PDNO,例如:10-20260319001。
此值來自 SFT_OP_REALRUN.PRODUCTION_REPORTID 或 SFT_WS_RUN.WR024。
{
"enterprise_no": "COMP01",
"site_no": "SITE01",
"report_no": "10-20260319001"
}
<parameters> <parameter key="enterprise_no" type="string">COMP01</parameter> <parameter key="site_no" type="string">SITE01</parameter> <parameter key="report_no" type="string">10-20260319001</parameter> </parameters>
{
"code": 200,
"msg": "報工單取消成功",
"ERPMessage": {
"description": "處理成功",
"report_no": "10-20260319001"
}
}
{
"code": 500,
"msg": "報工單取消失敗",
"ERPMessage": {
"description": "報工單已確認,無法取消"
}
}
| 欄位 | 類型 | 說明 |
|---|---|---|
code |
Integer | 200=成功, 500=失敗 |
msg |
String | 處理訊息 |
ERPMessage.description |
String | ERP 回傳的詳細訊息 |
取消報工單成功後,MES 會清除相關記錄中的報工單號:
-- 清除 SFT_OP_REALRUN 的報工單號
UPDATE SFT_OP_REALRUN
SET PRODUCTION_REPORTID = '',
PRODUCTION_REPORTSN = ''
WHERE ID = :KEYID
AND ERP_OPSEQ = :ERP_OPSEQ
AND SEQUENCE = :SEQUENCE
-- 清除 SFT_WS_RUN 的報工單號
UPDATE SFT_WS_RUN
SET WR024 = '',
WR025 = ''
WHERE (對應的進出站記錄條件)
-- 刪除報工單頭明細(視系統設定)
DELETE FROM SFT_SFCTE WHERE TE001 = :PDTYPE AND TE002 = :PDNO
DELETE FROM SFT_SFCTD WHERE TD001 = :PDTYPE AND TD002 = :PDNO
| API 名稱 | 任務名稱 | 適用情境 | 取消的單據類型 |
|---|---|---|---|
wo.work.report.data.process |
cancelProductionForm | 一般報工取消 | 報工單 |
outsourcing.process |
outsourcingProcess | 委外入庫取消 (TRANSORDERTYPE=59) | 委外進貨單 |
stockin.data.process |
cancelStockIn | 入庫單取消 | 入庫單 |
wo.scrap.data.process |
woScrapDataProcess | 報廢入庫取消 (TRANSORDERTYPE=58) | 報廢單 |
SFT_TRANSORDER_LINE.TRANSORDERTYPE 判斷呼叫哪個取消 API:
| 資料表 | 說明 | 影響欄位 |
|---|---|---|
SFT_OP_REALRUN |
製程執行記錄 | PRODUCTION_REPORTID, PRODUCTION_REPORTSN (清空) |
SFT_WS_RUN |
工作站執行記錄 | WR024, WR025 (清空) |
SFT_SFCTD |
報工單頭檔 | 整筆刪除或標記取消 |
SFT_SFCTE |
報工單明細 | 整筆刪除或標記取消 |
| 功能 | 檔案路徑 | 行號 |
|---|---|---|
| 取消出站入口 | SFT_core/src/com/dci/sft/update/GeneralUpdater.java | 1571-1605 |
| 取消 API 呼叫 | SFT_ERPIntegrate/src/com/dci/sft/erp/XmlToERP_handler.java | 159-237 |
| 清除報工單號 | SFT_core/src/com/dci/sft/jsonMappingHibernate/TransOrderDataToJson.java | 1530-1580 |
| 錯誤情境 | ERP 回應 | MES 處理方式 |
|---|---|---|
| 報工單已確認 | code=500, 報工單已確認 | 顯示錯誤訊息,需人工處理 |
| 報工單不存在 | code=500, 報工單不存在 | 清除 MES 報工單號,繼續取消流程 |
| 連線超時 | SocketTimeoutException | 記錄 LOG,需手動補取消 |
// 日誌檔案:logs/ERPReturnErrorRec.log
[ERP_SEND_ERROR] taskName=cancelProductionForm, errorType=SocketTimeoutException, errorMsg=Read timed out
[ERP_SEND_ERROR] 送出内容={"report_no":"10-20260319001"}
PRODUCTION_REPORTID 為空,無法呼叫 ERP 取消