# FI Validation ALL Logic
## 1. Val-Header-XXX
:::info
**เงื่อนไข:**
:::
- วันที่บัญชี (`DateAcct`) ต้องมีค่า และรูปแบบ `YYYYMM` มีค่าปีเท่ากับ `2022` , เดือน `04`
- **ยกเว้น** ประเภทเอกสาร (`headerDocType`) ค่า `"J9", "O9", "OX"`
- วันที่ผ่านรายการต้องอยู่ถัดจากวันที่โอน ข้อมูลสินทรัพย์เดิม(ถ้ามีค่า)
- **ยกเว้น** ถ้า User อยู่ในกลุ่มพิเศษ FISET( `ZUSER_EXCEPT_CUTDATE`)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0713 - NOT_VALID_POST_BEFORE_TAKE_OVER_DATE_PLUS_1` → ไม่สามารถระบุวันที่ผ่านรายการก่อนวันที่โอน ข้อมูลสินทรัพย์เดิมได้
## 2. Val-Header-002
:::info
**เงื่อนไข:**
:::
- ต้องมี Period ที่ตรงกับวันที่บัญชี (`DateAcct`)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0204 - NOT_FOUND_ACCOUNT_DATE_IN_CALENDAR` → Not found posting date {0}
:::info
**เงื่อนไข:**
:::
- ถ้า Period > 12 และต้องอยู่ในช่วงที่เปิดอยู่
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0013 - DATE_NOT_IN_PERIOD` → วันที่ผ่านรายการ {0} ไม่อยู่ในงวด {1}
:::info
**เงื่อนไข:**
:::
- Period ต้องมีค่าอยู่ในตาราง TH_CAPeriodControl
**แจ้งเตือนถ้าผิดเงื่อนไข:**
- ❗ `E0002 - PERIOD_IS_CLOSE` → งวดการผ่านรายการ {0} {1} ไม่เปิด
## 3. Val-Line-034:GL01 Check FI Area for all transaction
:::info
**เงื่อนไข:**
:::
- (`FiArea`) ถ้ารหัสพื้นที่เป็นค่าว่าง
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0114 - REQUIRE_FI_AREA` → Please input budget area
## 4. Val-Line-036:Check Cost activity
:::info
**เงื่อนไข:**
:::
- `CostActivity` ถ้ารหัสกิจกรรมย่อยเป็นค่าว่าง
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `I0401 - INFO_COST_ACTIVITY` → กรุณาตรวจสอบรหัสกิจกรรมย่อย {0} ที่ระบบกำหนดให้ !!
## 5. Val-Line-038:Check Payment Center related Cost Center
:::info
**เงื่อนไขก่อนการตรวจสอบ:**
:::
- DocType ไม่ใช่ "JX" หรือ "JZ"
- AccountType() เท่ากับ `S`
- GlAccount() ต้องมีค่า และไม่เท่ากับ `4307010101`
:::info
**การตรวจสอบ:**
:::
- ถ้า CostCenter() และ PaymentCenter() ขึ้นต้นด้วย "04" ตามด้วยอักขระใด ๆ ก็ได้ (หรือไม่มีเลย)
- หรือถ้า CostCenter() และ PaymentCenter() ทั้งสองมีความยาว 10 ตัวอักษร และ 5 ตัวอักษรแรกเหมือนกัน
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `I0402 - INFO_RELATED_COST_CENTER_PAYMENT_CENTER` → กรุณาระบุรหัสหน่วยเบิกจ่ายที่สัมพันธ์กับรหัสศูนย์ต้นทุน
## 6. Val-Line-041:Check FundSource & Posting Date
:::info
**เงื่อนไข:**
:::
- เพิ่มยกเว้น FormID A13 (JV), C01 (JV), J00 (JV), J71 (JV), (J30 (JV) ปีบัญชี 2022)
- PostingKey() ต้องเป็น "40" หรือ "50"
- FundSource() ต้องไม่ว่าง และ BrDocNo() กับ PoDocNo() ต้องว่าง
- FundSource() ต้องไม่ขึ้นต้นด้วย "..28000"
- ไม่ใช่ FORMID (C01, J00, J71, J30) ที่เกี่ยวข้องกับ "JV"
- DocType ต้องไม่อยู่ในเซ็ตที่กำหนด (ZBLART_FOR_TKK และ ZDOCTYPE_NOT_CHK_FS_DATEACCT)
- ตรวจสอบปีงบประมาณ (Fiscal Year)
- ตรวจสอบ DocType และ GlAccount() ตามเงื่อนไขต่างๆ ดังนี้
* ถ้า DocType ตรงกับเงื่อนไขขึ้นต้นด้วย "K" และตัวอักษรถัดไป ห้ามเป็น "1", "8", "A", "B", "F", "D", "Y", หรือ "Z"
* ถ้า DocType เป็น "K1" และ PostingKey() เป็น "50"
* ถ้า DocType เป็น "K1" และ PostingKey() เป็น "40" และ GlAccount() ไม่ตรงกับ "1101010101", "1101010102", "1101010106" หรือ "1101020603"
* ถ้า DocType เป็น "K8" และ PostingKey() เป็น "40"
* ถ้า DocType เป็น "JE" หรือ "JV" และ GlAccount() ไม่ตรงกับรูปแบบที่กำหนด
* ถ้าตรงกับเงื่อนไข isChk และ line.getFundSource() ไม่ขึ้นต้นด้วยปีงบประมาณ (fPost)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0477 - NOT_VALID_ACCOUNT_DATE_YEAR_SOURCE_OF_FUND` → ระบุแหล่งของเงินไม่ถูกต้องตามวันที่ผ่านรายการ
## 7. Val-Line-042:Check Budget Code & Cost Center
:::info
**เงื่อนไข:**
:::
- รหัสบริษัท (CompCode) ไม่ใช่ "99999"
- ประเภทเอกสาร (headerDocType) ไม่ใช่ "AI"
- รหัสงบประมาณ (BgCode) ไม่ว่าง
- รหัสศูนย์ต้นทุน (CostCenter) ไม่ว่าง
- และผู้ใช้งาน ไม่ได้อยู่ในชุดข้อมูลที่อนุญาต (ZUSER_VALID_STEP_42)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0872 - ZGFMIS_FI_118` → ระบุรหัสงบประมาณและศูนย์ต้นทุนไม่ถูกต้อง
## 8. Val-Line-043:Check FundSource && Budget Code
:::info
**เงื่อนไข:**
:::
- รหัสบริษัท (CompCode) ไม่ใช่ "99999"
- ประเภทเอกสาร (headerDocType) ตรงกับรูปแบบ ที่กำหนด (ขึ้นต้นด้วย K, L - หรือ J ตามเงื่อนไขเฉพาะ)
- คีย์การลงบัญชี (PostingKey) เท่ากับ "40"
- รหัสงบประมาณ (BgCode) และแหล่งเงิน (FundSource) ไม่ว่าง
- ถ้า FundSource ตรงกับ ..11310 ต้องไม่ขึ้นต้นด้วย 9 และต้องมี 31 ที่ตำแหน่งที่ 14-15
- ถ้า FundSource ตรงกับ ..11320 เหมือนกัน แต่ใช้ 32 แทน 31
- ถ้า FundSource ตรงกับ ..11410, ..11420, ..11500 ตรวจสอบว่ารหัสงบประมาณมีรูปแบบเฉพาะตามประเภทของแหล่งเงิน เช่น 410, 420, 500
- ถ้า FundSource ตรงกับ ..19... รหัสงบประมาณต้องมีความยาว 5 ตัวอักษร
- ถ้า FundSource ตรงกับ ..10... ห้ามใช้รหัสงบประมาณที่ขึ้นต้นด้วย 9090960019
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0873 - ZGFMIS_FI_119` → ระบุรหัสงบประมาณไม่ถูกต้องตามแหล่งของเงิน
## 9. Val-Line-044:Check Budget Activity & FundSource ( เงินในงบ )
:::info
**เงื่อนไข:**
:::
- ประเภทเอกสาร (headerDocType) ไม่ใช่ .Z, BE, หรือ BG
- และไม่ใช่กรณีที่ headerDocType เป็น "J7" และ PostingKey เป็น "50"
- และ FundSource มีรูปแบบที่ตำแหน่งที่ 3-4 เป็น "11"
- และ GlAccount ตรงกับรูปแบบที่อนุญาต เช่น 1102010101, 1204xxx, 5xxx เป็นต้น
- และ GlAccount ไม่ตรงกับรูปแบบที่ไม่อนุญาต เช่น 5105xxx, 5210xxx, 5301010101 เป็นต้น
- และไม่ใช่กรณีพิเศษที่ headerDocType ขึ้นต้นด้วย "A" และ CompCode เป็น "02005" และเลข 2 ตัวแรกของ FundSource ≤ 649090960019
- ถ้า BgActivity ขึ้นต้นด้วย "P" หรือความยาวของ BgActivity ไม่ใช่ 14 หรือ 17 ตัวอักษร หรือ BgActivity ขึ้นต้นด้วย "90909" แต่ BgCode ไม่ได้ ขึ้นต้นด้วย "909090"
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0874 - ZGFMIS_FI_126)` → กรุณาระบุรหัสกิจกรรมที่ถูกต้อง
## 10. Val-Line-138:Check Budget Code, Budget Activity & FundSource ( เงินในงบ )
:::info
**เงื่อนไข:**
:::
- ประเภทเอกสาร (headerDocType) ไม่ใช่ .Z, BE, BG, A*, หรือ JV
- และไม่ใช่กรณีที่ headerDocType เป็น "J7" และ PostingKey เป็น "50"
- และ FundSource มีรูปแบบที่ตำแหน่งที่ 3-4 เป็น "11"
- และเลข 2 ตัวแรกของ FundSource มีค่ามากกว่าหรือเท่ากับ 64
- และ GlAccount ตรงกับรูปแบบที่อนุญาต เช่น 1102010101, 1204xxx, 5xxx เป็นต้น
- และ GlAccount ไม่ตรงกับรูปแบบที่ไม่อนุญาต เช่น 5105xxx, 5210xxx, 5301010101 เป็นต้น
- และ BgActivity ไม่ขึ้นต้นด้วย 90909, 80808 หรือ 9, 5, 7
- และถ้า 5 ตัวแรกของ BgCode ไม่ตรงกับ 5 ตัวแรกของ BgActivity
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0918 - NOT_VALID_BG_ACTIVITY_AND_BG_CODE_11` → ระบุรหัสกิจกรรมหลักไม่สัมพันธ์กับรหัสงบประมาณ
## 11. Val-Line-048:Check Budget Code
:::info
**เงื่อนไข:**
:::
- BgCode (รหัสงบประมาณ) ไม่ว่าง และ ไม่ได้ขึ้นต้นด้วยเลข 9
- ถ้า BgCode มีรูปแบบลงท้ายด้วย 310000 หรือ 320000
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0875 - ZGFMIS_FI_176` → ไม่สามารถระบุรหัสงบประมาณ
## 12. Val-Complete-001:Check Payment Center
:::info
**เงื่อนไข:**
:::
- ถ้าข้อความหัวเอกสาร (DocHeaderText) ว่างเปล่า หรือ
- ความยาวของข้อความหัวเอกสาร น้อยกว่า 25 ตัวอักษร หรือ
- ความยาวของข้อความหัวเอกสาร มากกว่าหรือเท่ากับ 25 ตัวอักษร แต่ ตำแหน่งที่ 16 ถึง 25 (index 15 ถึง 24) ไม่ใช่คำว่า "GENG2DOC01"
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0102 - REQUIRE_PAYMENT_CENTER` → Please input payment center
## 13. Val-Line-064:Check Close payment center
:::info
**เงื่อนไข:**
:::
- ดึงข้อมูล Payment Center จากระบบ โดยใช้รหัสที่มีอยู๋
- ถ้าไม่พบ Payment Center
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0202 - NOT_FOUND_PAYMENT_CENTER` → Not found payment center
:::info
**เงื่อนไข:**
:::
- ถ้า Payment Center ถูกปิดใช้งาน (Inactive)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0775 - INACTIVE_PAYMENT_CENTER` → หน่วยเบิกจ่าย {0} ถูก Mark delete ไม่สามารถใช้งานได้
:::info
**เงื่อนไข:**
:::
- ถ้า Payment Center ถูกปิดบัญชี และวันที่ปิดบัญชี (DateCloseAcct) มีอยู่ และวันปิดบัญชี ≤ วันที่บัญชีของเอกสาร
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0754 - LOSED_PAYMENT_CENTER` → หน่วยเบิกจ่าย {0} ไม่สามารถใช้งานได้หลังวันที่ปิดหน่วยเบิกจ่าย
:::info
**เงื่อนไข:**
:::
- ถ้า Payment Center หมดอายุ (ไม่ valid ณ วันที่บัญชีของเอกสาร)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0777 - EXPIRED_PAYMENT_CENTER` → หน่วยเบิกจ่าย {0} หมดอายุไม่สามารถใช้งานได้
:::info
**เงื่อนไข:**
:::
- ถ้า Payment Center ถูกบล็อก
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0758 - ศูนย์เบิกจ่ายถูกบล็อก (BLOCKED_PAYMENT_CENTER` → หน่วยเบิกจ่าย {0} ถูกระงับการผ่านรายการ
:::info
**เงื่อนไข:**
:::
- ถ้า ประเภทเอกสาร (headerDocType) อยู่ในกลุ่มที่อนุญาตให้ใช้ศูนย์เบิกจ่ายที่ปิดแล้ว
และรหัสศูนย์เบิกจ่ายในบรรทัดตรงกับของหัวเอกสารและวันปิดตามกฎหมาย (DateCloseLaw) ไม่มี หรือ ยังไม่ถึงวันบัญชี
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0706 - NOT_VALID_CLOSED_PAYMENT_CENTER` → สามารถ ทำรายการของประเภทเอกสาร JT หรือ JS เมื่อปิดหน่วยเบิกจ่ายเท่านั้น
## 14. Val-Complete-026:GL08 ตรวจสอบการบันทึกบัญชี TE/TR เพิ่มยกเว้นจาก C01, J71
:::info
**เงื่อนไข:**
:::
- ถ้าบรรทัดนี้ ไม่ได้ถูกสร้างขึ้นอัตโนมัติ (isAutoGen())
- และเอกสารนี้ ไม่ใช่เอกสารที่สร้างอัตโนมัติ (isAutoDoc())
- และ FormID ของเอกสาร ไม่ใช่ C01 หรือ J71
- และ headerDocType ไม่อยู่ในชุดประเภทเอกสารที่ยกเว้น (ZGL08_EX_DOCS_TYPE_01)
- ถ้า GlAccount อยู่ในชุดบัญชีที่ไม่อนุญาต (ZGL08_LN_ACC_NUM_01)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0449 - NOT_VALID_GL_TR_TE` → ไม่อนุญาตให้ปรับปรุงรหัส {0} โดยตรง
## 15.Val-Complete-100:GL account is summary
:::info
**เงื่อนไข:**
:::
- ถ้าพบว่าบัญชีนี้มีอยู่จริง (GLAccount != null) และบัญชีนี้ isSummary = True
-
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0401 - GL_ACCOUNT_IS_SUMMARY` → GL account is summary
## 16.Val-Line-303:GL ห้ามลงบัญชีตรง (Reconcile)
:::info
**เงื่อนไข:**
:::
- ตรวจสอบว่า GLAccount ไม่เป็น null
- ประเภทบัญชี (AccountType) ต้องเป็น S
- FormID ของเอกสารต้องไม่ใช่ C01
- ถ้าไม่พบข้อมูลบัญชี (GLAccountInfo)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0232 - NOT_FOUND_GL_ACCOUNT_INFORMATION ` → Please maintain G/L account information: {0}
:::info
**เงื่อนไข:**
:::
- ถ้าพบว่า Reconcile Account ไม่ว่าง ยกเว้น docType AA, AO ที่ Reconcile Account = A
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0479 - NOT_VALID_GL_RECONCIL_ACCOUNT` → บัญชี {0} ในหน่วยงาน {1} ไม่สามารถผ่านรายการโดยตรง (F5 354)
## 17.Val-Line-076:Check Mark for Delete Deposit account
:::info
**เงื่อนไข:**
:::
- หากบัญชีเงินฝาก (DepositAccount) และเจ้าของบัญชี (DepositAccountOwner) ไม่ว่างเปล่า
- ให้ดึงข้อมูลบัญชีเงินฝากจากระบบ ถ้าพบบัญชีดังกล่าว และบัญชีนั้น ไม่อยู่ในสถานะใช้งาน (Inactive)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0750 - INACTIVE_DEPOSIT_ACCOUNT` → ไม่สามารถใช้ {0} {1} เนื่องจากถูกทำเครื่องหมายลบไว้ (ZGFMIS_FI 186)
## 18.Val-Line-120:GL10:ตรวจสอบการระบุ Trading Part
:::info
**เงื่อนไข:**
:::
- หากค่ารหัสบริษัท (headerCompCode) อยู่ใน FI SET: ZGL10_CHECK_BP_BY_CCODE
และ บัญชีแยกประเภท (GL Account) อยู่ใน FI SET: ZGL10_CHECK_BP_BY_ACC
- ตรวจสอบถ้า Trading Partner มีค่าว่าง
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0129 - REQUIRE_TRADING_PARTNER` → บัญชี {0} ต้องระบุรหัสหน่วยงานคู่ค้า (Trading Partner) (ZGFMIS_FI 243)
## 19.Val-Line-159:GL10:ตรวจสอบ G/L ที่ต้องระบุ TrdPrt มี GL ตาม list ZGL_TP01 ต้องใส่ Trading Partner เพื่อตัดรายการระหว่างกัน
:::info
**เงื่อนไข:**
:::
- บัญชีแยกประเภท (GL Account) อยู่ในชุด ZGL_TP01
- ประเภทเอกสาร (headerDocType) ไม่อยู่ในชุดที่ยกเว้น การตรวจสอบ Trading Partner (ZDOCTYPE_EXCEPT_BP)
- ประเภทเอกสาร ไม่ใช่ "J9" พร้อมกับ ประเภทบัญชี (AccountType) เป็น K
- ประเภทเอกสารอยู่ในชุดที่ต้องตรวจสอบ Trading Partner (ZDOCTYPE_CHECK_BP)
- ผู้ใช้งานระบบ (จาก Web Online) ไม่อยู่ในชุดที่ยกเว้น การตรวจสอบ Trading Partner (ZUSERNAM_EXCEPT_BP)
- ตรวจสอบถ้า Trading Partner มีค่าว่าง
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0129 - REQUIRE_TRADING_PARTNER` → บัญชี {0} ต้องระบุรหัสหน่วยงานคู่ค้า (Trading Partner) (ZGFMIS_FI 243)
:::info
**เงื่อนไข:**
:::
- ตรวจสอบถ้า Trading Partner มีค่าอยู่ในระบบและอยู่ในสถานะ Active หรือไม่
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0294 - NOT_FOUND_TRADING_PARTER` → ไม่พบรหัสคู่ค้า (Trading Partner) {0}
## 20.Val-Line-307:GL10:ตรวจสอบ TrdPrt. ต้องไม่เหมือนหน่วยงานหัวเอกสาร
:::info
**เงื่อนไข:**
:::
- หากมีการระบุ Trading Partner และ ประเภทเอกสาร (headerDocType) ตรงกับรูปแบบที่กำหนดไว้ (เช่น เริ่มต้นด้วย D1-D7, DE, F, Z หรือ LA,LD,QH,QG,JY เป็นต้น)
- ให้ตรวจสอบว่า Trading Partner ไม่ใช่รหัสบริษัทเดียวกันกับ headerCompCode หรือไม่\
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0876 - NOT_VALID_TRADING_PARTNER_SAME_COMP_CODE` → ไม่สามารถระบุรหัส Trading Partner เป็นรหัสเดียวกันกับหน่วยงานผู้บันทึกได้
## 21.Val-Line-307:GL10:ตรวจสอบ TrdPrt. ต้องไม่เหมือนหน่วยงานหัวเอกสาร
:::info
**เงื่อนไข:**
:::
- หากมีการระบุ Trading Partner และ ประเภทเอกสาร (headerDocType) ตรงกับรูปแบบที่กำหนดไว้ (เช่น เริ่มต้นด้วย D1-D7, DE, F, Z หรือ LA,LD,QH,QG,JY เป็นต้น `^D[1-7DEFZ]|^L[ADKVGOHILN8QTSWXRUZ]|^Q[HG]|^JY$`)
- ให้ตรวจสอบว่า Trading Partner ไม่ใช่รหัสบริษัทเดียวกันกับ headerCompCode
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0876 - NOT_VALID_TRADING_PARTNER_SAME_COMP_CODE` → ไม่สามารถระบุรหัส Trading Partner เป็นรหัสเดียวกันกับหน่วยงานผู้บันทึกได้
## 22.Val-Line-079:ตรวจสอบ GL 1101020501
:::info
**เงื่อนไข:**
:::
- หากบัญชีแยกประเภท (GL Account) เท่ากับ "1101020501"
- ให้ตรวจสอบว่า ประเภทเอกสาร (headerDocType) ไม่ตรงกับรูปแบบที่อนุญาต (ตาม regex ที่กำหนดไว้ `^J[K01293Q7XZP]|^N[1AD]|^R[IJKLMNOUSTXYZ]|^S[UXYL]|^KZ|^I.|^L[QRSTWX]|^X.|^OX|^E[XYZ]|^Q[GH]|^FY|^VX` )
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0405 - NOT_ALLOW_GL_FOR_THIS_DOC_TYPE_2` → ไม่สามารถใช้ {0} กับประเภทเอกสารที่ไม่เกี่ยวข้องได้
## 23.Val-Line-126:ตรวจสอบ GL 1101010112
:::info
**เงื่อนไข:**
:::
- หากบัญชีแยกประเภท (GL Account) เท่ากับ "1101010112"
- ให้ตรวจสอบว่า ประเภทเอกสาร (headerDocType) ไม่ได้อยู่ใน FI SET: ZDOCTYPE_GL_1101010112
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0405 - NOT_ALLOW_GL_FOR_THIS_DOC_TYPE_2` → ไม่สามารถใช้ {0} กับประเภทเอกสารที่ไม่เกี่ยวข้องได้
## 24.Val-Line-088:ตรวจสอบ Cost center สำหรับ DocType R* และประเภทเอกสารรับรายได้ และนำส่งรายได้ ให้ใส่รหัสศูนย์ต้นทุน
:::info
**เงื่อนไข:**
:::
- หากประเภทเอกสาร (headerDocType) ขึ้นต้นด้วยตัวอักษร R และตัวถัดไปไม่ใช่ Z
- และให้ตรวจสอบว่า ไม่มีการระบุศูนย์ต้นทุน (Cost Center)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0112 - REQUIRE_COST_CENTER` → กรุณาระบุรหัสศูนย์ต้นทุน (ZGFMIS_FI 105)
## 25.Val-Line-154:Check GL & doc type ห้ามใส่หมวดพัสดุ
:::info
**เงื่อนไข:**
:::
- ประเภทเอกสาร (headerDocType) ไม่ได้อยู่ใน FI SET: ZDOCTYPE_FILL_ZZFIELD1
- บัญชีแยกประเภท (GL Account) ไม่ได้อยู่ใน FI SET: ZGL_CAN_FILL_ZZFIELD1
- ถ้า GpscGroup มีค่าว่าง
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0450 - NOT_FILL_GPSC_GROUP` → ห้ามระบุหมวดพัสดุสำหรับบัญชี {0} (ZGFMIS_FI 272)
## 26.Val-Line-037:Check กิจกรรมหลัก กับ กิจกรรมย่อย
:::info
**เงื่อนไข:**
:::
- หากมีการระบุทั้ง Cost Activity และ Fund Source
- ตรวจสอบว่าเลข 2 หลักแรกของ Fund Source มีค่ามากกว่าหรือเท่ากับ 64
- ถ้าใช่ → ตรวจสอบความถูกต้องของ Cost Activity ตามเงื่อนไข
- ถ้ายาว 8 หรือ 12 ตัวอักษร → ถือว่าผ่าน
- ถ้ายาว 15 ตัวอักษร
- ถ้า BgActivity ยาว 17 ตัวอักษร และ ไม่ขึ้นต้นด้วย "90909"
- ต้องมีค่าตรงกันระหว่างตำแหน่งที่ 7–16 ของ BgActivity กับตำแหน่งที่ 2–11 ของ CostActivity
- ถ้าตรงกัน → ถือว่าผ่าน
- ถ้าไม่เข้าเงื่อนไขข้างต้น → ก็ยังถือว่าผ่าน
- ถ้าไม่ผ่านเงื่อนไขใดเลย
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `E0548 - NOT_VALID_COST_ACTIVITY_AND_COMP_CODE` → กิจกรรมย่อย {BSEG-PRZNR} ไม่สัมพันธ์กับกรม {BSEG-BUKRS} กรุณาแก้ไข !!! (ZGFMIS_FI 136)
## 27.Val-Line-046:Check แหล่งเงิน YY10XXX & รหัสงบประมาณ (กรณีงบกลาง)
:::info
**เงื่อนไข:**
:::
- หากบัญชีแยกประเภท (GL Account) ตรงกับรูปแบบต่อไปนี้:
- เริ่มต้นด้วย 1204 ถึง 1209 หรือ 1210 ถึง 1213 หรือขึ้นต้นด้วย 5 ใด ๆ
- และ ไม่ตรงกับรูปแบบที่ยกเว้น เช่น 5105, 5108, 5.09, 5202, 5203, 5204, 5210, หรือ 5301010101 (`^510[58].*|^5.09.*|^520[234].*|^5210.*|^5301010101$`)
- และ รหัสแหล่งเงิน (Fund Source) มีรูปแบบที่ตำแหน่งที่ 3–4 เป็น "10":
- ตรวจสอบว่ารหัสบริษัท (CompCode) อยู่ในระบบของลูกค้าปัจจุบันหรือไม่
- ถ้าใช่ → ดึงข้อมูลแหล่งเงิน (Fund Source)
- ถ้าพบแหล่งเงิน → ดึงข้อมูลรหัสงบประมาณ (Budget Code) ตามปีงบประมาณ
- ถ้าไม่พบรหัสงบประมาณ
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
❗ `E0209 - NOT_FOUND_BUDGET_CODE` → Not found budget code: {0}
- ถ้าพบ และประเภท BISPP เป็น "0" หรือ "4":
- ตรวจสอบความยาวของรหัสงบประมาณ (BgCode)
- ถ้าเป็นงบประมาณ CGD ต้องมีความยาว 13 หรือ 17 ตัวอักษรเท่านั้น
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
❗ `E0908 - NOT_VALID_FUND_SOURCE_AND_BG_CODE_CGD_BUDGET` → กรุณาระบุรหัสงบประมาณ ที่สัมพันธ์กับ แหล่งของเงิน (งบกลาง) (ZGFMIS_FI 155) หรือความยาวของรหัสงบกลาง ไม่ถูกต้อง
- ถ้าไม่ใช่ CGD ต้องมีความยาว 13, 14, 15, 16, 18, 19 หรือ 20 ตัวอักษรเท่านั้น
- ถ้าไม่ตรงตามเงื่อนไข
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
❗ `E0908 - NOT_VALID_FUND_SOURCE_AND_BG_CODE_CGD_BUDGET` → กรุณาระบุรหัสงบประมาณ ที่สัมพันธ์กับ แหล่งของเงิน (งบกลาง) (ZGFMIS_FI 155) หรือความยาวของรหัสงบกลาง ไม่ถูกต้อง
## 28.Val-Line-3XX
:::info
**เงื่อนไข:**
:::
- หากประเภทบัญชี (AccountType) เป็น K (ซึ่งโดยทั่วไปหมายถึงเจ้าหนี้) และ มีการระบุรหัสผู้ขาย (Vendor)
- ดึงข้อมูลผู้ขาย (Business Partner) จากระบบ
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
- ❗ `I0404 - INFO_VENDOR` → {0} vendorCode : {1} vendorName (YGFMIS 000)
## 29.Val-Line-121:Check Doc Type B7, J7
:::info
**เงื่อนไข:**
:::
- หาก ประเภทเอกสารไม่ใช่ "J9" พร้อมกับประเภทบัญชีเป็น K และ รหัสงบประมาณ (BgCode) ขึ้นต้นด้วย "90909"
- ตรวจสอบว่าแหล่งเงิน (Fund Source) มีอยู่ในระบบหรือไม่
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
❗ `E0201 - NOT_FOUND_SOURCE_OF_FUND` → Not found source of fund: {0}
- ถ้าพบแหล่งเงิน ตรวจสอบว่ามีรหัสงบประมาณ (Budget Code) ที่ตรงกับปีงบประมาณของแหล่งเงินหรือไม่
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
❗ `E0209 - NOT_FOUND_BUDGET_CODE` → Not found budget code: {0}
- ถ้าพบรหัสงบประมาณ และเป็นงบประมาณของ CGD
- ตรวจสอบว่า ไม่มีการกำหนดความสัมพันธ์ระหว่างประเภทเอกสารกับรหัสบริษัท (APDocTypeCheck)
- และ ไม่มีการกำหนดความสัมพันธ์ระหว่างรหัสงบประมาณกับแหล่งเงิน (APFundSourceCheck) ถ้าทั้งสองเงื่อนไขไม่ผ่าน
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
❗ `E0737 - NOT_VALID_BGCODE_AND_FUND_SOURCE` → กรุณาตรวจสอบความสัมพันธ์ แหล่งของเงินและรหัสงบประมาณ (ZGFMIS_FI 331)
## 30.Val-Line-049:Check GL & Fund (งบลงทุน)
:::info
**เงื่อนไข:**
:::
- แยกฟังชั่น (validateGLVsFundSourceXX1X3X0)
- หากเข้าเงื่อนไขต่อไปนี้ทั้งหมด:
- ประเภทเอกสาร (headerDocType) ไม่ใช่กลุ่มที่ยกเว้น (เช่น ขึ้นต้นด้วย E, R, I, S, O, T, P หรือเป็น AF, AI, AJ, AO, AZ, BG, J8, J9, JR, JV, JZ, KY, KZ) เพิ่ม AA ยกเว็นไม่ต้องเช็ค
- ไม่ใช่กรณีพิเศษที่ headerDocType เป็น "J7" และ postingKey เป็น "50"
- ไม่ใช่กรณีที่บริษัทอยู่ในกลุ่มต่างประเทศ (ZCC_FOREIGN) และบัญชีเป็น "5107030102"
- บัญชี (glAccount) ต้องขึ้นต้นด้วย "1" หรือ "5"
- บัญชีไม่ได้อยู่ใน FI SET: ZGL_NOT_CHECK_INVESTMENT
- รหัสแหล่งเงิน (fundSource) ตรงกับรูปแบบ ..1.3.0 (เช่น 011130, 021130)
- จากนั้นตรวจสอบเพิ่มเติมว่า
- ถ้า fundSource เป็น ..1.310:
- บัญชีต้องขึ้นต้นด้วย "1" หรือเป็น "5209010104"
- หรือถ้าบริษัทขึ้นต้นด้วย "02" → บัญชีต้องขึ้นต้นด้วย "1" หรือเป็น "5106010101"
- ถ้า fundSource เป็น ..1.320:
- บัญชีต้องตรงกับรูปแบบที่กำหนด (เช่น 5101010101, 520201xxxx, 5203xxxx) หรืออยู่ในรายการบัญชีที่ระบุไว้
- ถ้า headerDocType เป็น "AA" หรือ "AT":
- บัญชีต้องตรงกับรูปแบบที่กำหนด หรืออยู่ในรายการบัญชีที่ระบุไว้
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
❗ `E0903 - NOT_VALID_GL_ACCOUNT_IN_FUND_SOURCE_XX1X30` → กรุณาระบุรหัสบัญชี {0} สำหรับการบันทึกรายการงบลงทุน เท่านั้น (ZGFMIS_FI 157)
## 31.Val-Line-122:valid docType vs GL vs fund
:::info
**เงื่อนไข:**
:::
- หากประเภทเอกสาร (headerDocType) อยู่ใน FI SET: ZDOCTYPE_ZFIVAL02
- ถ้าบรรทัดนั้นถูกสร้างอัตโนมัติ (isAutoGen()) → ข้ามไป
- ถ้าไม่ใช่ให้เช็คเงื่อนไขอย่างอื่นต่อดังนี้
- ค้นหาข้อมูลจากตาราง TH_FIVal02 ตามเงื่อนไขที่สร้างขึ้น
- ถ้าไม่พบข้อมูล
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
❗ `E0403 - NOT_MATCH_IN_TH_FIVAL02` → ไม่สามารถทำรายการเอกสาร {0} รหัสบัญชี {1} แหล่งของเงิน {2} คีย์ผ่านรายการ {3} (ZGFMIS_FI 255)
## 32.Val-Line-008:Budget use Control
:::info
**เงื่อนไข:**
:::
- หากประเภทเอกสาร (headerDocType) อยู่ใน FI SET: ZBLART_FOR_BUDGET
- แยกฟังชั่น (valComplete008)
- นำปีบัญชีของเอกสาร และประเภทเอกสาร ที่กำลังทำ ไปหาในตาราง TH_FIDocTypeControl ถ้าพบข้อมูล ถึงจะตรวจสอบตาม Exit นี้
- ตรวจสอบเฉพาะตอน Create เอกสาร คือ
- ทำรายการผ่าน TCode : FB01, FB05, FB1K, FB50, FB65, FB60, FBZ2, FBV1, FBV0, FV50
- เป็นเอกสารที่มีสถานะ Parked
- ถ้าเอกสารที่ทำเป็น ประเภทเอกสาร K1 จะตรวจสอบเมื่อตรงตามเงื่อนไขข้อใดข้อหนึ่งต่อไปนี้
- กรณีที่ในเอกสารมีบรรทัดรายการ Posting Key 40 ของรหัสบัญชี ที่ไม่ใช่ 5*, `1105010105`
- กรณีที่ในเอกสารมีบรรทัดรายการ Posting Key ที่ไม่ใช่ 40, 50
- กรณีที่ในเอกสารมีบรรทัดรายการ Posting Key 50 ของรหัสบัญชี ที่ไม่ใช่ `1102010101`
- ตรวจสอบทุกบรรทัดรายการในเอกสาร ที่ แหล่งเงิน เป็น YY1++++ และรหัสงบประมาณ ไม่ได้ยาว 5 Char โดยสิ่งที่ตรวจสอบคือ
- ตรวจสอบว่า ปีบัญชี และ CompCode ที่กำลังทำ Open/Close โดยดูจากตาราง TH_FIBGControlOpen
- ถ้ามีค่า
- '1' คือ "ปิด ให้เงินในงบประมาณไม่ได้" ==> ให้ผลการตรวจสอบเป็น FALSE และไม่ตรวจสอบต่อ
- '2' คือ "เปิด ให้เงินในงบประมาณได้" ==> ให้ผลการตรวจสอบเป็น TRUE และไม่ตรวจสอบต่อ
- '3' คือ "เปิด แบบมีเงื่อนไข" ==> ให้ตรวจสอบต่อไป
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
❗ `E0895 - NOT_FOUND_FI_BG_CONTROL` → โปรดตั้งค่า ZBUD_USE_CON_FI สำหรับปีบัญชี {0} ของหน่วยงาน {1}
- นำค่าฟิลด์ จาก Record ที่ได้จากตาราง ZBUD_USE_CON_FI กับค่ารหัสงบประมาณ ของรายการไปตรวจสอบ โดยจะตรวจสอบ เฉพาะชุดของฟิลด์ที่ ZPOSx มีค่า
(จะมีข้อมูล 5 ชุด ZPOSx, ZPVALx โดย x คือ 1 ถึง 5 เช่น ZPOS1 = 8 คือให้ตรวจสอบรหัสงบประมาณ หลักที่ 8 , ZVAL1 = 0 คือถ้าค่าที่หลักที่ 8 เป็น 0 คือ
เป็นรหัสงบประมาณที่ยัง เปิดอยู่ ให้ผลการตรวจสอบเป็น TRUE)
:::danger
**แจ้งเตือนถ้าผิดเงื่อนไข:**
:::
❗ `E08956- NOT_VALID_FI_BG_CONTROL` → รหัสงบประมาณ ไม่ถูกต้อง (ZGFMIS_FI 254)