← Back to API List

Send Work Report

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

After work order checkout is completed, send the work report data (production report) to the ERP system. After ERP returns the report number, MES writes it back to SFT_OP_REALRUN and SFT_WS_RUN.

Basic Information

API Name
wo.work.report.data.create
Internal Task Name
generateProductionForm
Transport Format
JSON (Content-Type: application/json)
Case Number
0190760
API ID
api-2195
Data Direction
MES → ERP

Trigger Timing

Checkout CheckOut Generate Report generateProductionForm MainDataHead:354 Send to ERP wo.work.report .data.create Write Back Report No. SFT_OP_REALRUN SFT_WS_RUN
Trigger Conditions
After operators complete checkout (CheckOut), check-in (CheckIn), batch checkout (BatchCheckOut), or batch check-in (BatchCheckIn) operations, the system calls MainDataHead.generateProductionForm() method to send work report data to ERP.

Request Parameters

HEAD Work Report Header (SFT_SFCTD)

Field MES Field ERP Field Type Required Description
Report Type TD001 doc_type_no String Required Work report type code
Report Date TD003 create_date Date Required Work report date (yyyy-MM-dd)
Workstation TD004 workstation_no String Required ERP Workstation ID (ERP_WSID)
Remark TD006 remark String Optional Work report remark
Item Code-Name itemCode-itemName source_no String Optional Product source identifier

LINE Work Report Detail (SFT_SFCTE)

Field MES Field ERP Field Type Required Description
Reporter TE004 reporter String Required Operator ID
Machine No. TE005 machine_no String Required Equipment ID (eqId)
WO Type TE006 wo_no String Required Work order type (moType)
WO Number TE007 String Required Work order number (moCode), combined with WO type
Operation Seq TE008 op_seq String Required Operation sequence (ERP_OPSEQ)
Operation Code TE009 op_no String Required Operation code (ERP_OPID)
Report Qty TE011 qty Numeric Required Completed quantity
Labor Hours TE012 labor_hours Numeric Required Labor hours (minutes)
Machine Hours TE013 machine_hours Numeric Required Machine hours (minutes)
Remark TE015 remark String Optional Line remark
Complete Date - complete_date Date Optional Operation complete date
Unit TE020 unit_no String Optional Base unit
Dual Unit TWINUNIT - String Optional Manufacturing dual unit name

Request Example

MES Internal JSON Format

{
  "head": {
    "productionType": "10",
    "date": "2026-03-19",
    "wsId": "WS001",
    "remark": "Normal work report",
    "itemCode": "ITEM-001",
    "itemName": "Test Item",
    "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": "Test Item",
      "description": "Specification",
      "unit": "PCS",
      "packUnit": "BOX",
      "manufactureDualUnit": "BOX"
    }
  ]
}

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

<parameters>
  <parameter key="enterprise_no" type="string">Company Code</parameter>
  <parameter key="site_no" type="string">Site Code</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">Normal work report</field>
        <field name="factory_no" type="string"></field>
        <field name="shift_no" type="string"></field>
        <field name="source_no" type="string">ITEM-001-Test Item</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>

Response Format

Success Response (code=200)

{
  "code": 200,
  "msg": "Work report created successfully",
  "ERPMessage": {
    "description": "Processing successful",
    "report_no": "10-20260319001"
  }
}

Failure Response (code=500)

{
  "code": 500,
  "msg": "Work report creation failed",
  "ERPMessage": {
    "description": "Work order does not exist"
  }
}

Response Field Description

Field Type Description
code Integer 200=Success, 500=Failure
msg String Processing message
ERPMessage.report_no String Work report number returned by ERP (type-number)

ERP Write Back Logic

After ERP returns the work report number, MES writes it back to the following tables:

ERP Response report_no 10-20260319001 Parse Number PDTYPE=10 PDNO=20260319001 SFT_OP_REALRUN PRODUCTION_REPORTID PRODUCTION_REPORTSN SFT_WS_RUN WR024 (Report No.) WR025 (Report Seq)

Write Back SQL Logic

-- Update 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

-- Update SFT_WS_RUN
UPDATE SFT_WS_RUN
SET WR024 = 'PDTYPE-PDNO',
    WR025 = TE003
WHERE (corresponding check-in/out record conditions)
Combined Report Mode
When the system setting EmploymentReportingItemized = "-1", combined report mode is used, and related records are batch updated based on TD001 and TD002.

Related Tables

Table Description Key Fields
SFT_SFCTD Work Report Header TD001 (Type), TD002 (No.), TD003 (Date), TD004 (Workstation)
SFT_SFCTE Work Report Detail TE001-TE002 (FK), TE003 (Line No.), TE011 (Qty)
SFT_OP_REALRUN Operation Execution Record PRODUCTION_REPORTID, PRODUCTION_REPORTSN
SFT_WS_RUN Workstation Execution Record WR024 (Report No.), WR025 (Report Seq)

Code Location

Function File Path Line
Work Report Generation Entry SFT_core/src/com/dci/sft/dataTrunk/MainDataHead.java 354
JSON Conversion SFT_core/src/com/dci/sft/erp/webservice/SendFormSbyJson.java 47-57
Field Definition SFT_core/src/com/dci/sft/erp/webservice/SendFormElementbyJson.java 289-343
XML Parameter Assembly SFT_ERPIntegrate/src/com/dci/sft/erp/webservice/SendFormS.java 1503-1577
ERP Send SFT_core/src/com/dci/sft/jsonMappingHibernate/TransOrderDataToJson.java 1636-1645
Write Back Processing SFT_core/src/com/dci/sft/jsonMappingHibernate/TransOrderDataToJson.java 1452-1527

Error Handling

Error Type Cause Resolution
SocketTimeoutException Connection timeout Check ERP server status, resend
ConnectException Cannot connect Check network and ERP server status
RemoteException Remote service error Check ERP logs, contact ERP vendor
Work order does not exist No such work order in ERP Confirm work order is synced to ERP

LOG Record

// Log file: logs/ERPReturnErrorRec.log

[ERP_SEND_ERROR] taskName=generateProductionForm, errorType=SocketTimeoutException, errorMsg=Read timed out
[ERP_SEND_ERROR] Content sent={...JSON...}