← กลับไปรายการ API

ส่งใบรายงานการทำงาน

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

หลังจากเสร็จสิ้นการ CheckOut ของใบสั่งผลิต ระบบจะส่งข้อมูลรายงานการผลิตไปยังระบบ 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 การ 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 จำเป็น รหัสพนักงาน
หมายเลขเครื่องจักร 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 ไม่จำเป็น ชื่อหน่วยคู่การผลิต

ตัวอย่างคำขอ

รูปแบบ JSON ภายใน MES

{
  "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 (เงื่อนไขบันทึก CheckIn/CheckOut ที่เกี่ยวข้อง)
โหมดรายงานรวม
เมื่อตั้งค่าระบบ 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 ข้อผิดพลาดบริการระยะไกล ดู log ของ ERP และติดต่อผู้ให้บริการ ERP
ไม่พบหมายเลขใบสั่งผลิต ไม่มีใบสั่งผลิตนี้ในระบบ ERP ตรวจสอบว่าใบสั่งผลิตได้ซิงค์กับ ERP แล้ว

บันทึก LOG

// ไฟล์ log: logs/ERPReturnErrorRec.log

[ERP_SEND_ERROR] taskName=generateProductionForm, errorType=SocketTimeoutException, errorMsg=Read timed out
[ERP_SEND_ERROR] เนื้อหาที่ส่ง={...JSON...}