หลังจากเสร็จสิ้นการ CheckOut ของใบสั่งผลิต ระบบจะส่งข้อมูลรายงานการผลิตไปยังระบบ ERP หลังจาก ERP ส่งหมายเลขใบรายงานกลับมา MES จะบันทึกหมายเลขลงใน SFT_OP_REALRUN และ SFT_WS_RUN
MainDataHead.generateProductionForm()
เพื่อส่งข้อมูลรายงานไปยัง ERP
| ฟิลด์ | ฟิลด์ 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 | ไม่จำเป็น | รหัสระบุแหล่งผลิตภัณฑ์ |
| ฟิลด์ | ฟิลด์ 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 | ไม่จำเป็น | ชื่อหน่วยคู่การผลิต |
{
"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"
}
]
}
<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,
"msg": "สร้างใบรายงานสำเร็จ",
"ERPMessage": {
"description": "ประมวลผลสำเร็จ",
"report_no": "10-20260319001"
}
}
{
"code": 500,
"msg": "สร้างใบรายงานล้มเหลว",
"ERPMessage": {
"description": "ไม่พบหมายเลขใบสั่งผลิต"
}
}
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
code |
Integer | 200=สำเร็จ, 500=ล้มเหลว |
msg |
String | ข้อความประมวลผล |
ERPMessage.report_no |
String | หมายเลขใบรายงานจาก ERP (ประเภท-หมายเลข) |
หลังจาก ERP ส่งหมายเลขใบรายงานกลับมา MES จะบันทึกหมายเลขลงในตารางข้อมูลต่อไปนี้:
-- อัปเดต 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: logs/ERPReturnErrorRec.log
[ERP_SEND_ERROR] taskName=generateProductionForm, errorType=SocketTimeoutException, errorMsg=Read timed out
[ERP_SEND_ERROR] เนื้อหาที่ส่ง={...JSON...}