Skip to content

Sale Order Cancel Service ​

API ยกเลิกใบสั่งขาย


Header Request ​

FieldValue
GUIDGUID สำหรับการเชื่อมต่อ (smlx เสมอ)
providerชื่อผู้ใช้บริการ
databaseNameชื่อฐานข้อมูล
configFileNameชื่อไฟล์ตั้งค่า — รูปแบบ SMLConfig<provider>.xml
Content-Typeapplication/json; charset=utf-8

Header Example ​

json
{
  "GUID": "smlx",
  "provider": "DATA",
  "databaseName": "data1",
  "configFileName": "SMLConfigDATA.xml",
  "Content-Type": "application/json; charset=utf-8"
}

HTTP Response ​

Statusความหมาย
200สำเร็จ
400ข้อมูลผิดพลาด (code = 99) เช่น เลขที่เอกสารซ้ำ / ข้อมูลไม่ถูกต้อง — ดูสาเหตุจริงใน message
404ไม่พบใบสั่งขายตาม doc_ref (code = 98) หรือเรียก URL / path ไม่ถูกต้อง
405ใช้ HTTP method ไม่ถูกต้อง
500payload ผิดรูป หรือข้อผิดพลาดภายในระบบ

Add SaleOrderCancel ​

ยกเลิกใบสั่งขาย — ระบบจะสร้างเอกสาร ยกเลิกใบสั่งขาย (trans_flag = 37) อ้างอิงใบสั่งขายตาม doc_ref

กรณีวิธีส่งผลลัพธ์
ยกเลิกทั้งใบไม่ส่ง details หรือส่ง []เอกสารยกเลิก cancel_type = 1 (มีแค่หัวเอกสาร ยอดเงิน 0) และใบสั่งขายถูกปิด (last_status = 1)
ยกเลิกบางรายการส่ง details (รหัสสินค้า + หน่วยนับ + จำนวน)เอกสารยกเลิก cancel_type = 2 พร้อมรายการ ราคา/ยอดเงินคิดตามสัดส่วนของบรรทัดในใบสั่งขาย และหักยอดค้างส่งของใบสั่งขาย

เงื่อนไข

  • ใบสั่งขายต้องยังไม่ถูกยกเลิก
  • ยกเลิกทั้งใบไม่ได้ ถ้าใบสั่งขายถูกเปิดบิลขายไปแล้ว — ให้ยกเลิกเฉพาะรายการที่ค้างแทน
  • ยกเลิกบางรายการ: item_code + unit_code ต้องมีอยู่ในใบสั่งขาย และจำนวนต้องไม่เกินยอดค้าง (ยอดสั่งขาย − ยอดที่เปิดบิลแล้ว − ยอดที่ยกเลิกไปแล้ว คิดเป็นหน่วยนับหลัก)
  • doc_no ของเอกสารยกเลิกต้องไม่ซ้ำ

ปิดใบสั่งขาย (ยกเลิกบางรายการ)

  • ยกเลิกจนไม่เหลือยอดค้าง → ใบสั่งขายปิด (doc_success = 1) ทันที
  • ยังเหลือยอดค้าง → ออกใบขาย อ้างอิงใบสั่งขายสำหรับส่วนที่เหลือได้ ใบสั่งขายจะปิดเมื่อยอดที่เปิดบิล + ยอดที่ยกเลิกครบยอดสั่งขาย

สินค้าชุด

  • ส่งมาเฉพาะ ตัวชุด (รหัสสินค้าชุด + หน่วยนับ + จำนวนชุด) — ระบบสร้างบรรทัดสินค้าในชุดให้เองตามสัดส่วน (จำนวนต่อชุด × จำนวนชุดที่ยกเลิก)
  • ห้ามส่งสินค้าในชุดมาเอง — ระบบจะปฏิเสธ และแจ้งให้ยกเลิกที่ตัวชุด
  • ถ้าใบสั่งขายไม่มีบรรทัดสินค้าในชุดผูกกับตัวชุด (เช่น ใบสั่งขายที่สร้างผ่าน API) จะยกเลิกเฉพาะบรรทัดตัวชุด และบรรทัดอื่นถือเป็นสินค้าธรรมดา
  • สินค้าในชุดทุกตัวต้องมียอดค้างพอ ถ้าตัวใดตัวหนึ่งไม่พอ จะปฏิเสธทั้งคำขอ

EndPoint ​

POST /SMLJavaRESTService/saleorder/v4/cancel

Body Data: ​

Field NameField TypeLengthDescription
detailsArrayรายการที่ต้องการยกเลิก — ไม่ส่ง = ยกเลิกทั้งใบ
doc_dateDateวันที่เอกสารยกเลิก (yyyy-MM-dd) (required)
doc_format_codeString25รหัสรูปแบบเอกสาร เช่น SSC
doc_noString25เลขที่เอกสารยกเลิก (required)
doc_refString255เลขที่ใบสั่งขายที่ต้องการยกเลิก (required)
doc_timeString5เวลาเอกสาร (HH:mm) — ไม่ส่ง = เวลาปัจจุบัน
remarkString255หมายเหตุ

details

Field NameField TypeLengthDescription
item_codeString25รหัสสินค้า (required)
qtyFloatจำนวนที่ยกเลิก (มากกว่า 0) (required)
unit_codeString25หน่วยนับ (ต้องตรงกับในใบสั่งขาย) (required)

example: ยกเลิกทั้งใบ

json
{
    "doc_no": "SSC-2610-0002",
    "doc_date": "2026-10-15",
    "doc_time": "15:30",
    "doc_format_code": "SSC",
    "doc_ref": "SO-2610-0001",
    "remark": "ลูกค้ายกเลิกคำสั่งซื้อ"
}

example: ยกเลิกบางรายการ

json
{
    "doc_no": "SSC-2610-0003",
    "doc_date": "2026-10-15",
    "doc_format_code": "SSC",
    "doc_ref": "SO-2610-0001",
    "details": [
        { "item_code": "G03-0001", "unit_code": "กระบอก", "qty": 2 },
        { "item_code": "G03-0003", "unit_code": "ถุง", "qty": 1 }
    ]
}

example: ยกเลิกสินค้าชุด — ส่งแค่ตัวชุด

json
{
    "doc_no": "SSC-2610-0004",
    "doc_date": "2026-10-16",
    "doc_format_code": "SSC",
    "doc_ref": "SO-2610-0002",
    "details": [
        { "item_code": "G10-0034", "unit_code": "ชุด", "qty": 1 }
    ]
}

ถ้าในใบสั่งขาย ชุด G10-0034 ประกอบด้วย G04-0001, G04-0002, G04-0008 อย่างละ 1 แพ็คต่อชุด เอกสารยกเลิกจะมี 4 บรรทัด: G10-0034 x1 (ตัวชุด) + G04-0001 / G04-0002 / G04-0008 อย่างละ 1 แพ็ค (สร้างให้อัตโนมัติ) ยอดเงินหัวเอกสารคิดจากตัวชุดเท่านั้น (บรรทัดสินค้าในชุดไม่นับซ้ำ)

Response Success ​

json
{
    "success": true,
    "data": {
        "code": "SSC-2610-0003"
    }
}

Response Error ​

Statuscodeตัวอย่าง message
400400doc_ref (เลขที่ใบสั่งขาย) is required / details: item_code และ unit_code is required
40099ใบสั่งขาย SO-2610-0001 ถูกเปิดบิลขายไปแล้ว ยกเลิกทั้งใบไม่ได้ ... / จำนวนยกเลิกสินค้า G03-0001 เกินยอดค้างในใบสั่งขาย ...
40498Not Found Sale Order : SO-2610-0001
json
{
    "error": true,
    "code": "99",
    "message": "ใบสั่งขาย SO-2610-0001 ถูกยกเลิกไปแล้ว"
}