← 返回 API 列表

拋送報工單

POST MES → ERP
wo.work.report.data.create

工單出站完成後,將報工資料(生產報工單)拋送至 ERP 系統。 ERP 回傳報工單號後,MES 將單號回寫至 SFT_OP_REALRUN 和 SFT_WS_RUN。

基本資訊

API 名稱
wo.work.report.data.create
內部任務名稱
generateProductionForm
傳輸格式
JSON (Content-Type: application/json)
案號
0190760
API 編號
api-2195
資料方向
MES → ERP

觸發時機

出站作業 CheckOut 產生報工單 generateProductionForm MainDataHead:354 送出至 ERP wo.work.report .data.create 回寫報工單號 SFT_OP_REALRUN SFT_WS_RUN
觸發條件
當作業員完成出站(CheckOut)、進站(CheckIn)、批次出站(BatchCheckOut)、批次進站(BatchCheckIn)等作業後, 系統會呼叫 MainDataHead.generateProductionForm() 方法, 將報工資料拋送至 ERP。

請求參數

HEAD 報工單頭檔 (SFT_SFCTD)

欄位 MES 欄位 ERP 欄位 類型 必填 說明
報工類別 TD001 doc_type_no String 必填 報工單類型代碼
報工日期 TD003 create_date Date 必填 報工作業日期 (yyyy-MM-dd)
工作站 TD004 workstation_no String 必填 ERP 工作站代號 (ERP_WSID)
備註 TD006 remark String 選填 報工單備註
品號-品名 itemCode-itemName source_no String 選填 產品來源識別

LINE 報工單明細 (SFT_SFCTE)

欄位 MES 欄位 ERP 欄位 類型 必填 說明
報工人員 TE004 reporter String 必填 操作人員 ID
機台編號 TE005 machine_no String 必填 設備編號 (eqId)
工單類別 TE006 wo_no String 必填 製令類別 (moType)
工單號 TE007 String 必填 製令號 (moCode),與工單類別組合
製程序號 TE008 op_seq String 必填 操作製程序列 (ERP_OPSEQ)
製程代碼 TE009 op_no String 必填 操作製程代碼 (ERP_OPID)
報工數量 TE011 qty Numeric 必填 完成數量
勞動時間 TE012 labor_hours Numeric 必填 人工時數(分鐘)
機器時間 TE013 machine_hours Numeric 必填 機器時數(分鐘)
備註 TE015 remark String 選填 報工行備註
完成日期 - complete_date Date 選填 作業完成日期
單位 TE020 unit_no String 選填 基本單位
雙單位 TWINUNIT - String 選填 製造雙單位名稱

請求範例

MES 內部 JSON 格式

{
  "head": {
    "productionType": "10",
    "date": "2026-03-19",
    "wsId": "WS001",
    "remark": "正常報工",
    "itemCode": "ITEM-001",
    "itemName": "測試品項",
    "create": "USER001"
  },
  "line": [
    {
      "userId": "USER001",
      "eqId": "EQ001",
      "moType": "5101",
      "moCode": "20260319001",
      "opSeq": "10",
      "opId": "OP001",
      "state": "1",
      "qty": "100",
      "useTime": "60",
      "useMachineTime": "55",
      "remark": "",
      "packagingQty": "10",
      "itemCode": "ITEM-001",
      "itemName": "測試品項",
      "description": "規格說明",
      "unit": "PCS",
      "packUnit": "BOX",
      "manufactureDualUnit": "BOX"
    }
  ]
}

ERP XML 格式 (WFERP) - SendFormS.java:1520-1577

<parameters>
  <parameter key="enterprise_no" type="string">公司代碼</parameter>
  <parameter key="site_no" type="string">工廠代碼</parameter>

  <parameter key="report_data" type="data">
    <data name="report">
      <row seq="1">
        <!-- ======== Head ======== -->
        <field name="doc_type_no" type="string">10</field>
        <field name="create_date" type="date">2026-03-19</field>
        <field name="workstation_no" type="string">WS001</field>
        <field name="remark" type="string">正常報工</field>
        <field name="factory_no" type="string"></field>
        <field name="shift_no" type="string"></field>
        <field name="source_no" type="string">ITEM-001-測試品項</field>
        <field name="plot_no" type="string"></field>
        <field name="doc_head_wo_no" type="string"></field>
        <field name="doc_head_reporter" type="string"></field>
        <field name="doc_head_complete_date" type="date"></field>
        <field name="doc_head_machine_no" type="string"></field>
        <field name="doc_head_unit_no" type="string"></field>
        <field name="total_qty" type="numeric"></field>
        <field name="total_labor_hours" type="numeric"></field>
        <field name="total_machine_hours" type="numeric"></field>
        <field name="total_number_of_operators" type="string"></field>
        <field name="total_scrap_qty" type="numeric"></field>
        <field name="total_shortage_qty" type="numeric"></field>
        <field name="total_surplus_qty" type="numeric"></field>

        <!-- ======== Line ======== -->
        <detail name="report_detail">
          <row>
            <field name="seq" type="string"></field>
            <field name="wo_no" type="string">5101-20260319001</field>
            <field name="qty" type="numeric">100</field>
            <field name="labor_hours" type="numeric">60</field>
            <field name="machine_hours" type="numeric">55</field>
            <field name="machine_no" type="string">EQ001</field>
            <field name="op_seq" type="string">10</field>
            <field name="op_no" type="string">OP001</field>
            <field name="unit_no" type="string">PCS</field>
            <field name="reporter" type="string">USER001</field>
            <field name="report_datetime_e" type="string"></field>
            <field name="number_of_operators" type="string"></field>
            <field name="complete_date" type="date">2026-03-19</field>
            <field name="remark" type="string"></field>
            <field name="return_type" type="string"></field>
            <field name="price" type="numeric"></field>
            <field name="wages" type="numeric"></field>
          </row>
        </detail>
      </row>
    </data>
  </parameter>
</parameters>

回應格式

成功回應 (code=200)

{
  "code": 200,
  "msg": "報工單建立成功",
  "ERPMessage": {
    "description": "處理成功",
    "report_no": "10-20260319001"
  }
}

失敗回應 (code=500)

{
  "code": 500,
  "msg": "報工單建立失敗",
  "ERPMessage": {
    "description": "工單號不存在"
  }
}

回應欄位說明

欄位 類型 說明
code Integer 200=成功, 500=失敗
msg String 處理訊息
ERPMessage.report_no String ERP 回傳的報工單號(類別-單號)

ERP 回寫邏輯

ERP 回傳報工單號後,MES 會將單號回寫至以下資料表:

ERP 回傳 report_no 10-20260319001 解析單號 PDTYPE=10 PDNO=20260319001 SFT_OP_REALRUN PRODUCTION_REPORTID PRODUCTION_REPORTSN SFT_WS_RUN WR024 (報工單號) WR025 (報工序號)

回寫 SQL 邏輯

-- 更新 SFT_OP_REALRUN
UPDATE SFT_OP_REALRUN
SET PRODUCTION_REPORTID = 'PDTYPE-PDNO',
    PRODUCTION_REPORTSN = TE003
WHERE ID = :KEYID
  AND ERP_OPSEQ = :TE008
  AND ERP_OPID = :TE009
  AND ERP_WSID = :TD004
  AND SEQUENCE = :PRODUCTIONSEQ

-- 更新 SFT_WS_RUN
UPDATE SFT_WS_RUN
SET WR024 = 'PDTYPE-PDNO',
    WR025 = TE003
WHERE (對應的進出站記錄條件)
合併報工模式
當系統設定 EmploymentReportingItemized = "-1" 時, 採用合併報工模式,會根據 TD001 和 TD002 批次更新相關記錄。

相關資料表

資料表 說明 關鍵欄位
SFT_SFCTD 報工單頭檔 TD001(類別), TD002(單號), TD003(日期), TD004(工作站)
SFT_SFCTE 報工單明細 TE001-TE002(FK), TE003(行號), TE011(數量)
SFT_OP_REALRUN 製程執行記錄 PRODUCTION_REPORTID, PRODUCTION_REPORTSN
SFT_WS_RUN 工作站執行記錄 WR024(報工單號), WR025(報工序號)

程式碼位置

功能 檔案路徑 行號
報工單生成入口 SFT_core/src/com/dci/sft/dataTrunk/MainDataHead.java 354
JSON 轉換 SFT_core/src/com/dci/sft/erp/webservice/SendFormSbyJson.java 47-57
欄位定義 SFT_core/src/com/dci/sft/erp/webservice/SendFormElementbyJson.java 289-343
XML 參數組裝 SFT_ERPIntegrate/src/com/dci/sft/erp/webservice/SendFormS.java 1503-1577
ERP 送出 SFT_core/src/com/dci/sft/jsonMappingHibernate/TransOrderDataToJson.java 1636-1645
回寫處理 SFT_core/src/com/dci/sft/jsonMappingHibernate/TransOrderDataToJson.java 1452-1527

錯誤處理

錯誤類型 原因 處理方式
SocketTimeoutException 連線超時 檢查 ERP 伺服器狀態,重新補送
ConnectException 無法連線 檢查網路、ERP 伺服器狀態
RemoteException 遠端服務錯誤 查閱 ERP 日誌,聯絡 ERP 廠商
工單號不存在 ERP 端無此工單 確認工單已同步至 ERP

LOG 記錄

// 日誌檔案:logs/ERPReturnErrorRec.log

[ERP_SEND_ERROR] taskName=generateProductionForm, errorType=SocketTimeoutException, errorMsg=Read timed out
[ERP_SEND_ERROR] 送出内容={...JSON...}