เทมเพลตข้อมูลสำหรับกระบวนการชำระเงินเจ้าหนี้การค้า
เทมเพลตข้อมูลสำหรับกระบวนการชำระเงินเจ้าหนี้การค้า
- แอตทริบิวต์เฉพาะกระบวนการสำหรับวิเคราะห์ข้อมูลทางการเงิน
- เหตุการณ์สำคัญที่ต้องติดตามการชำระเงิน
- คำแนะนำโดยละเอียดสำหรับดึงข้อมูลจาก Dynamics 365
แอตทริบิวต์ของกระบวนการชำระเงินเจ้าหนี้การค้า
| ชื่อ | คำอธิบาย | ||
|---|---|---|---|
| กิจกรรม Activity | งานหรือการเปลี่ยนสถานะที่เกิดขึ้น. | ||
| คำอธิบาย แอตทริบิวต์นี้อธิบายเหตุการณ์หรือขั้นตอนที่เกิดขึ้นในกระบวนการ เช่น 'สร้างใบแจ้งหนี้' 'อนุมัติใบแจ้งหนี้' หรือ 'ลงบัญชีการจ่ายเงิน' โดยแปลงประเภทธุรกรรมทางเทคนิคและการเปลี่ยนสถานะของเวิร์กโฟลว์ให้เป็นเหตุการณ์ทางธุรกิจที่อ่านเข้าใจได้ ใน Dynamics 365 กิจกรรมเหล่านี้มักอนุมานจากการเพิ่มข้อมูลในตาราง เช่น การสร้างระเบียนใหม่ใน เหตุผลที่สำคัญ ใช้กำหนดลำดับและเส้นทางของกระบวนการในแผนผังกระบวนการ. แหล่งข้อมูล อนุมานจากตารางธุรกรรมและบันทึกประวัติเวิร์กโฟลว์หลายแหล่ง ตัวอย่าง สร้างใบแจ้งหนี้อนุมัติใบแจ้งหนี้สร้างรายการจ่ายเงิน | |||
| เวลาเกิดเหตุการณ์ EventTime | วันและเวลาที่เกิดกิจกรรม. | ||
| คำอธิบาย แอตทริบิวต์นี้บันทึกวันและเวลาที่แน่นอนของกิจกรรมแต่ละรายการ ใช้เรียงลำดับเหตุการณ์ตามเวลาและคำนวณระยะห่างระหว่างขั้นตอน ใน Dynamics 365 โดยทั่วไปข้อมูลนี้มาจาก เหตุผลที่สำคัญ จำเป็นต่อการคำนวณระยะเวลารอบการทำงานและเวลานำ รวมถึงการระบุคอขวด. แหล่งข้อมูล ฟิลด์ระบบ CreatedDateTime หรือ ModifiedDateTime ในตารางธุรกรรม ตัวอย่าง 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| หมายเลขใบแจ้งหนี้ InvoiceNumber | รหัสเฉพาะที่กำหนดให้กับใบแจ้งหนี้ของผู้ขาย. | ||
| คำอธิบาย หมายเลขใบแจ้งหนี้เป็นรหัสกรณีหลักสำหรับมุมมองกระบวนการนี้ ใช้จัดกลุ่มเหตุการณ์ทั้งหมดของใบแจ้งหนี้ผู้ขายแต่ละฉบับ ทำให้วิเคราะห์เส้นทางตั้งแต่ได้รับใบแจ้งหนี้จนถึงชำระเงินได้ครบถ้วน ใน Microsoft Dynamics 365 โดยทั่วไปจะตรงกับฟิลด์ เหตุผลที่สำคัญ เป็นคีย์หลักที่ใช้เชื่อมกิจกรรมเจ้าหนี้ที่แยกจากกันให้เป็นกระบวนการเดียวกัน. แหล่งข้อมูล ตาราง: VendInvoiceJour, ฟิลด์: InvoiceId ตัวอย่าง INV-2023-00198223344ACME-OCT-22 | |||
| ระบบต้นทาง SourceSystem | ชื่อระบบที่เป็นแหล่งที่มาของข้อมูล. | ||
| คำอธิบาย ระบุซอฟต์แวร์หรือสภาพแวดล้อมต้นทางที่ดึงข้อมูลกระบวนการมา ในกรณีนี้จะแสดงอินสแตนซ์ Microsoft Dynamics 365 ข้อมูลนี้มีประโยชน์เป็นพิเศษเมื่อวิเคราะห์ข้อมูลจากหลายระบบร่วมกัน เช่น ERP และโซลูชันสแกนเอกสารภายนอก. เหตุผลที่สำคัญ ช่วยให้ตรวจสอบที่มาและติดตามข้อมูลในการวิเคราะห์หลายระบบได้. แหล่งข้อมูล กำหนดค่าไว้ล่วงหน้าหรือระหว่างการดึงข้อมูล ตัวอย่าง Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| อัปเดตข้อมูลล่าสุด LastDataUpdate | วันและเวลาที่ดึงหรือรีเฟรชข้อมูล. | ||
| คำอธิบาย แสดงว่าข้อมูลที่ใช้วิเคราะห์เป็นข้อมูลล่าสุดเพียงใด ช่วยให้ผู้ใช้ทราบว่ากำลังดูข้อมูลแบบเรียลไทม์หรือภาพข้อมูลจากช่วงเวลาก่อนหน้า โดยทั่วไปข้อมูลนี้สร้างจากกระบวนการ ETL (Extract, Transform, Load) ไม่ใช่ฟิลด์ใน Dynamics 365 โดยตรง. เหตุผลที่สำคัญ จำเป็นต่อการสร้างความเชื่อมั่นในแดชบอร์ดและ KPI. แหล่งข้อมูล สร้างโดยสคริปต์ดึงข้อมูล ตัวอย่าง 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| ชื่อผู้ขาย VendorName | ชื่อองค์กรผู้ขาย. | ||
| คำอธิบาย ชื่อที่ใช้เรียกผู้ขาย ใน D365 บัญชีผู้ขายทำหน้าที่เป็นคีย์นอกที่เชื่อมไปยังสมุดที่อยู่ส่วนกลาง ( การแสดงชื่อที่อ่านเข้าใจง่ายช่วยให้ใช้ «มุมมองความซับซ้อนของความสัมพันธ์กับผู้ขาย» ได้สะดวก และทำให้ผู้ใช้ทางธุรกิจเข้าถึงแดชบอร์ดได้ง่ายขึ้น. เหตุผลที่สำคัญ ให้ข้อมูลประกอบหมายเลขบัญชีผู้ขาย. แหล่งข้อมูล ตาราง: DirPartyTable (ผ่าน VendTable), ฟิลด์: Name ตัวอย่าง Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| บัญชีผู้ขาย VendorAccount | หมายเลขบัญชีเฉพาะของผู้ขาย. | ||
| คำอธิบาย รหัสเฉพาะของผู้ขายที่เกี่ยวข้องกับธุรกรรม ใน Dynamics 365 จะตรงกับฟิลด์ แอตทริบิวต์นี้เป็นข้อมูลหลักของ 'มุมมองความซับซ้อนของความสัมพันธ์กับผู้ขาย' ซึ่งใช้วิเคราะห์ประสิทธิภาพและจุดติดขัดของความสัมพันธ์กับผู้ขายแต่ละราย. เหตุผลที่สำคัญ ช่วยแบ่งกลุ่มผลการดำเนินงานของกระบวนการตามผู้ขาย. แหล่งข้อมูล ตาราง: VendInvoiceJour, ฟิลด์: InvoiceAccount หรือ OrderAccount ตัวอย่าง US-101V000452001 | |||
| แผนก Department | แผนกที่รับผิดชอบค่าใช้จ่าย. | ||
| คำอธิบาย มิติทางการเงินที่ระบุแผนกภายใน ใน Dynamics 365 มิติจะจัดเก็บแบบไดนามิก (มักอยู่ใน แอตทริบิวต์นี้ใช้ใน «มุมมองความซับซ้อนของความสัมพันธ์กับผู้ขาย» เพื่อดูว่าแผนกใดสร้างปริมาณงาน AP มากที่สุด. เหตุผลที่สำคัญ ช่วยเจาะลึกข้อมูลตามหน่วยงานและวิเคราะห์ความรับผิดชอบ. แหล่งข้อมูล ตาราง: VendInvoiceJour, ฟิลด์: DefaultDimension (ต้องใช้มุมมอง DimensionAttributeLevelValue) ตัวอย่าง ไอทีการเงินการปฏิบัติการ | |||
| มูลค่าใบแจ้งหนี้ InvoiceAmount | มูลค่าเงินรวมของใบแจ้งหนี้. | ||
| คำอธิบาย มูลค่ารวมของใบแจ้งหนี้ในสกุลเงินที่ใช้ทำธุรกรรม ใน Dynamics 365 ข้อมูลนี้อยู่ในฟิลด์ เช่น ใช้ในแดชบอร์ด 'ตรวจจับความเสี่ยงจากการจ่ายเงินซ้ำ' เพื่อเปรียบเทียบมูลค่ากับรายละเอียดผู้ขาย. เหตุผลที่สำคัญ จำเป็นต่อการวิเคราะห์ปริมาณค่าใช้จ่ายและความเสี่ยงทางการเงิน. แหล่งข้อมูล ตาราง: VendInvoiceJour, ฟิลด์: InvoiceAmount ตัวอย่าง 1500.00245.5010000.00 | |||
| รหัสบริษัท CompanyCode | รหัสนิติบุคคลหรือบริษัทย่อย. | ||
| คำอธิบาย ระบุนิติบุคคลภายในองค์กรที่ดำเนินการกับใบแจ้งหนี้ ใน Microsoft Dynamics 365 ระบบกำหนดค่านี้ผ่านฟิลด์ระบบ แอตทริบิวต์นี้จำเป็นต่อ 'การวิเคราะห์เวลานำตั้งแต่ต้นจนจบ' เพื่อเปรียบเทียบผลระหว่างบริษัทย่อยหรือหน่วยงานในภูมิภาคต่างๆ. เหตุผลที่สำคัญ ช่วยเปรียบเทียบผลระหว่างหน่วยธุรกิจหรือประเทศต่างๆ. แหล่งข้อมูล ตาราง: VendInvoiceJour, ฟิลด์: DataAreaId ตัวอย่าง USMFDEMFGBSI | |||
| รหัสผู้ใช้ UserId | รหัสของผู้ใช้ที่ทำกิจกรรมนี้. | ||
| คำอธิบาย ระบุผู้ใช้ในระบบที่รับผิดชอบกิจกรรม เช่น การอนุมัติใบแจ้งหนี้หรือการบันทึกการชำระเงิน โดยดึงข้อมูลจากฟิลด์ ใช้ในการวิเคราะห์ «การระงับการชำระเงินและจุดติดขัด» เพื่อดูว่าผู้ปฏิบัติงานบางรายทำให้เกิดการระงับมากกว่ารายอื่นหรือไม่. เหตุผลที่สำคัญ ช่วยวิเคราะห์พฤติกรรมของผู้ปฏิบัติงานและการแบ่งแยกหน้าที่. แหล่งข้อมูล ฟิลด์ระบบ CreatedBy/ModifiedBy ในตารางธุรกรรมหรือประวัติ ตัวอย่าง jdoeผู้ดูแลระบบworkflow_sys | |||
| วันครบกำหนดชำระ DueDate | วันที่ต้องชำระใบแจ้งหนี้. | ||
| คำอธิบาย วันที่ตามสัญญาที่ต้องชำระเงินให้เสร็จเพื่อหลีกเลี่ยงค่าปรับ ใน Dynamics 365 วันที่นี้จัดเก็บไว้ในฟิลด์ วันที่นี้เป็นเกณฑ์หลักสำหรับ KPI «อัตราการชำระเงินตรงเวลา» และช่วยจัดลำดับความสำคัญของงานในมุมมอง «ปริมาณและอัตราการดำเนินงานของกระบวนการ AP». เหตุผลที่สำคัญ เกณฑ์อ้างอิงสำหรับวัดผลการชำระเงินตรงเวลา. แหล่งข้อมูล ตาราง: VendInvoiceJour หรือ VendTrans, ฟิลด์: DueDate ตัวอย่าง 2023-11-302023-12-15 | |||
| วันที่ใบแจ้งหนี้ InvoiceDate | วันที่ที่ระบุในเอกสารใบแจ้งหนี้. | ||
| คำอธิบาย วันที่พิมพ์อยู่บนใบแจ้งหนี้ของผู้ขาย ใน Dynamics 365 ใช้ฟิลด์ ใช้ในการวิเคราะห์ «ระยะเวลาดำเนินการตั้งแต่ต้นจนจบ» เพื่อวัดวงจรทั้งหมดจากมุมมองของผู้ขาย. เหตุผลที่สำคัญ ใช้กำหนดจุดเริ่มต้นของระยะเวลาค้างชำระของใบแจ้งหนี้. แหล่งข้อมูล ตาราง: VendInvoiceJour, ฟิลด์: InvoiceDate ตัวอย่าง 2023-10-012023-10-15 | |||
| หมายเลขใบสั่งซื้อ PurchaseOrderNumber | หมายเลขอ้างอิงของใบสั่งซื้อที่เกี่ยวข้อง. | ||
| คำอธิบาย ใช้เชื่อมใบแจ้งหนี้กับเอกสารจัดซื้อฉบับต้นทาง ใน Dynamics 365 ใช้ฟิลด์ แอตทริบิวต์นี้ช่วยให้แดชบอร์ด «แนวโน้มการจับคู่ใบสั่งซื้อและข้อแตกต่าง» แยกใบแจ้งหนี้ที่อ้างอิงใบสั่งซื้อออกจากใบแจ้งหนี้ที่ไม่ได้อ้างอิงใบสั่งซื้อ. เหตุผลที่สำคัญ จำเป็นต่อการวิเคราะห์อัตราการจับคู่ในกระบวนการจัดซื้อจนถึงการชำระเงิน. แหล่งข้อมูล ตาราง: VendInvoiceJour, ฟิลด์: PurchId ตัวอย่าง PO-000455000342PO-22-998 | |||
| เงื่อนไขการชำระเงิน PaymentTerms | รหัสที่ใช้แทนเงื่อนไขการชำระเงินที่ตกลงกัน. | ||
| คำอธิบาย รหัสการตั้งค่าที่กำหนดวันครบกำหนดและส่วนลด เช่น Net30 ใน Dynamics 365 ใช้ฟิลด์ วิเคราะห์ร่วมกับ «ระยะเวลารอบกระบวนการ» เพื่อดูว่าความล่าช้าของกระบวนการทำให้ผิดเงื่อนไขที่ตกลงกันหรือไม่. เหตุผลที่สำคัญ ให้ข้อมูลประกอบการคำนวณวันครบกำหนดชำระ. แหล่งข้อมูล ตาราง: VendInvoiceJour, ฟิลด์: PaymTermId ตัวอย่าง Net302%10Net30COD | |||
| ระงับการชำระเงินหรือไม่ IsPaymentBlocked | ตัวบ่งชี้ว่าใบแจ้งหนี้ถูกระงับการชำระเงินอยู่หรือไม่. | ||
| คำอธิบาย ค่าบูลีนที่ระบุว่าใบแจ้งหนี้ถูกพักไว้หรือไม่ ใน Dynamics 365 ค่านี้มักได้มาจากสถานะ ข้อมูลนี้เป็นปัจจัยหลักในการวิเคราะห์ «การระงับการชำระเงินและจุดติดขัด» เพื่อให้เห็นการหยุดชะงักในกระบวนการ. เหตุผลที่สำคัญ ช่วยระบุจุดติดขัดที่เกิดขึ้นทันทีและการแทรกแซงด้วยตนเอง. แหล่งข้อมูล ตาราง: VendTrans, ฟิลด์: Approved (กลับค่าตรรกะ) หรือฟิลด์ Hold เฉพาะ ตัวอย่าง truefalse | |||
| วันที่รับส่วนลดเงินสด CashDiscountDate | วันที่ต้องชำระเงินเพื่อให้ได้รับส่วนลด. | ||
| คำอธิบาย กำหนดเส้นตายในการใช้สิทธิประโยชน์จากการชำระเงินก่อนกำหนด ใน Dynamics 365 ใช้ฟิลด์ แอตทริบิวต์นี้ใช้กับแดชบอร์ด «ประสิทธิภาพการใช้ส่วนลดเงินสด» เพื่อคำนวณมูลค่าโอกาสในการประหยัดที่พลาดไป. เหตุผลที่สำคัญ ส่งผลโดยตรงต่อ KPI ด้านประสิทธิภาพทางการเงินของกระบวนการ. แหล่งข้อมูล ตาราง: VendInvoiceJour หรือ VendTrans, ฟิลด์: CashDiscDate ตัวอย่าง 2023-10-102023-10-20 | |||
| วิธีชำระเงิน PaymentMethod | วิธีที่ใช้ชำระใบแจ้งหนี้ เช่น เช็ค โอนเงิน หรือ EFT. | ||
| คำอธิบาย ระบุวิธีโอนเงินให้ผู้ขาย ใน Dynamics 365 ใช้ฟิลด์ แอตทริบิวต์นี้ใช้ในแดชบอร์ด «ระยะเวลาดำเนินการชำระเงิน» เพื่อประเมินประสิทธิภาพของชุดการชำระเงินแต่ละประเภท. เหตุผลที่สำคัญ ช่วยอธิบายความแตกต่างในขั้นตอนดำเนินการชำระเงิน. แหล่งข้อมูล ตาราง: VendInvoiceJour (เชื่อมกับข้อมูล PaymMode) หรือ VendTrans ตัวอย่าง เช็คACHโอนเงิน | |||
| สกุลเงิน Currency | รหัสสกุลเงินของใบแจ้งหนี้. | ||
| คำอธิบาย รหัส ISO ของสกุลเงินที่ใช้ในใบแจ้งหนี้ ใน Dynamics 365 ใช้ฟิลด์ จำเป็นสำหรับปรับจำนวนเงินให้เป็นมาตรฐานใน «การแมปจำนวนเงินตามกิจกรรม» หากต้องปรับข้อมูลหลายสกุลเงินให้เป็นสกุลเงินเดียวกัน. เหตุผลที่สำคัญ ข้อมูลประกอบที่จำเป็นสำหรับตีความมูลค่าทางการเงิน. แหล่งข้อมูล ตาราง: VendInvoiceJour, ฟิลด์: CurrencyCode ตัวอย่าง USDEURGBP | |||
| หมายเลขใบสำคัญ VoucherNumber | หมายเลขใบสำคัญบัญชีแยกประเภทที่เชื่อมโยงกับธุรกรรม. | ||
| คำอธิบาย รหัสภายในของบัญชีแยกประเภททั่วไปสำหรับรายการบัญชี ใน Dynamics 365 ฟิลด์ แม้จะเป็นข้อมูลทางเทคนิค แต่ก็มีประโยชน์ต่อ «การตรวจสอบเส้นทางกระบวนการและการปฏิบัติตามข้อกำหนด» เพราะช่วยติดตามรายการกลับไปยังบัญชีแยกประเภททั่วไปเพื่อกระทบยอด. เหตุผลที่สำคัญ ข้อมูลสำคัญสำหรับการตรวจสอบทางการเงินและการกระทบยอด. แหล่งข้อมูล ตาราง: VendInvoiceJour, ฟิลด์: LedgerVoucher ตัวอย่าง VOU-10023INV-ACC-992 | |||
กิจกรรมในกระบวนการชำระเงินเจ้าหนี้การค้า
| กิจกรรม | คำอธิบาย | ||
|---|---|---|---|
| จับคู่ใบแจ้งหนี้กับ PO แล้ว | ระบบเชื่อมรายการใบแจ้งหนี้กับ Purchase Order หรือ Product Receipt ได้สำเร็จ กิจกรรมนี้แสดงว่าได้ตรวจสอบใบแจ้งหนี้กับคำสั่งซื้อแล้ว. | ||
| เหตุผลที่สำคัญ จำเป็นต่อ KPI อัตราการจับคู่ PO สำเร็จในครั้งแรก และช่วยแยกการประมวลผลที่ไม่ต้องทำด้วยตนเองออกจากใบแจ้งหนี้ที่ต้องให้พนักงานดำเนินการ. แหล่งข้อมูล VendInvoiceInfoLine.PurchId และ VendInvoiceInfoTable.MatchStatus อนุมานได้เมื่อ MatchStatus เปลี่ยนเป็น Passed. บันทึก เปรียบเทียบค่า MatchStatus ก่อนและหลัง ประเภทเหตุการณ์ inferred | |||
| ลงบัญชีการจ่ายเงิน | ลงบัญชีสมุดรายวันการจ่ายเงินในบัญชีแยกประเภททั่วไป เพื่อชำระใบแจ้งหนี้และล้างยอดคงเหลือของผู้ขาย ถือเป็นการสิ้นสุดกระบวนการทางการเงิน. | ||
| เหตุผลที่สำคัญ เป็นกิจกรรมสุดท้ายสำหรับคำนวณระยะเวลาเฉลี่ยตั้งแต่ใบแจ้งหนี้จนถึงการจ่ายเงิน และยืนยันว่ารายการบัญชีสำหรับการลดลงของเงินสดเสร็จสมบูรณ์แล้ว. แหล่งข้อมูล ลงบัญชี LedgerJournalTrans และอัปเดต VendTrans เพื่อแสดงการชำระบัญชี เหตุการณ์จริงคือการลงบัญชีสมุดรายวัน. บันทึก บันทึกเมื่อดำเนินธุรกรรม X ประเภทเหตุการณ์ explicit | |||
| ลงบัญชีใบแจ้งหนี้ | ลงบัญชีใบแจ้งหนี้ในบัญชีแยกประเภททั่วไป เพื่อบันทึกหนี้สินในระบบ ระเบียนจะย้ายจากตารางรายการที่รอดำเนินการไปยังตารางธุรกรรมที่ลงบัญชีแล้ว. | ||
| เหตุผลที่สำคัญ หมุดหมายสำคัญที่แสดงการรับรู้หนี้สินทางการเงิน กิจกรรมนี้ทำให้เลือกใบแจ้งหนี้ไปจ่ายเงินได้. แหล่งข้อมูล สร้างระเบียนใน VendInvoiceJour และ VendTrans โดย TransDate คือวันที่ลงบัญชี. บันทึก บันทึกเมื่อดำเนินธุรกรรม X ประเภทเหตุการณ์ explicit | |||
| สร้างใบแจ้งหนี้ | การสร้างระเบียนใบแจ้งหนี้ผู้ขายที่รอดำเนินการในระบบเป็นครั้งแรก เป็นจุดเริ่มต้นที่ใบแจ้งหนี้เข้าสู่เวิร์กโฟลว์ Dynamics 365 ไม่ว่าจะบันทึกด้วยตนเองหรือนำเข้าผ่าน data entity. | ||
| เหตุผลที่สำคัญ ใช้กำหนดเวลาเริ่มต้นสำหรับคำนวณระยะเวลาดำเนินการของกระบวนการ ช่วยให้องค์กรวัดได้ว่าใบแจ้งหนี้อยู่ในระบบนานเท่าใดก่อนเริ่มประมวลผลหรือลงบัญชี. แหล่งข้อมูล เวลาที่สร้าง VendInvoiceInfoTable.CreatedDateTime หรือ VendInvoiceInfoTable.RecId ซึ่งแสดงส่วนหัวของ Pending Vendor Invoice. บันทึก บันทึกเมื่อสร้างระเบียนใน VendInvoiceInfoTable ประเภทเหตุการณ์ explicit | |||
| สร้างรายการจ่ายเงิน | ระบบสร้างไฟล์จ่ายเงิน (EFT, ISO20022) หรือพิมพ์เช็ค จากนั้นสถานะการจ่ายเงินในรายการสมุดรายวันจะเปลี่ยนเป็น Sent หรือ Generated. | ||
| เหตุผลที่สำคัญ ใช้กับ KPI ระยะเวลาตั้งแต่อนุมัติจนถึงดำเนินการเสร็จ และยืนยันว่าระบบสร้างคำสั่งจ่ายเงินแล้ว. แหล่งข้อมูล LedgerJournalTrans.PaymentStatus เปลี่ยนเป็น Sent/Recieved โดยมักอนุมานจากการอัปเดตรายการ. บันทึก เปรียบเทียบค่า PaymentStatus ก่อนและหลัง ประเภทเหตุการณ์ inferred | |||
| สร้างสมุดรายวันการจ่ายเงิน | เลือกใบแจ้งหนี้และเพิ่มลงในรายการของสมุดรายวันการจ่ายเงิน แสดงความตั้งใจที่จะจ่ายเงินและมักเป็นจุดเริ่มต้นของเวิร์กโฟลว์ตรวจสอบการจ่ายเงิน. | ||
| เหตุผลที่สำคัญ แสดงการเปลี่ยนจากการบันทึกหนี้สินไปสู่การดำเนินการจ่ายเงิน ใช้วัดระยะเวลาตั้งแต่เริ่มจนจบการจ่ายเงิน. แหล่งข้อมูล LedgerJournalTrans.CreatedDateTime โดยเชื่อมใบแจ้งหนี้ผ่านช่อง MarkedInvoice หรือตารางการชำระบัญชี. บันทึก บันทึกเมื่อสร้างระเบียนใน LedgerJournalTrans ประเภทเหตุการณ์ explicit | |||
| อนุมัติใบแจ้งหนี้ | อินสแตนซ์เวิร์กโฟลว์ของใบแจ้งหนี้ที่รอดำเนินการมีสถานะเสร็จสมบูรณ์หรืออนุมัติแล้ว ใบแจ้งหนี้พร้อมลงบัญชีแยกประเภท. | ||
| เหตุผลที่สำคัญ ใช้คำนวณระยะเวลาเฉลี่ยในการอนุมัติ ความล่าช้าในขั้นตอนนี้ส่งผลโดยตรงต่อโอกาสรับส่วนลดจากการจ่ายเงินก่อนกำหนด. แหล่งข้อมูล WorkflowTrackingStatusTable.CreatedDateTime เมื่อ TrackingStatus เป็น Completed หรือ VendInvoiceInfoTable.RequestStatus เท่ากับ Approved. บันทึก บันทึกเมื่ออินสแตนซ์เวิร์กโฟลว์เสร็จสมบูรณ์ ประเภทเหตุการณ์ explicit | |||
| จับคู่ใบแจ้งหนี้ไม่สำเร็จ | ขั้นตอนจับคู่พบความแตกต่างระหว่างใบแจ้งหนี้กับ PO/Receipt เช่น ราคา หรือจำนวน ซึ่งมักทำให้กระบวนการหยุดจนกว่าจะแก้ไข. | ||
| เหตุผลที่สำคัญ ช่วยระบุจุดติดขัดในขั้นตอนจับคู่ และใช้กับแดชบอร์ดแนวโน้มการจับคู่ PO และผลต่าง. แหล่งข้อมูล VendInvoiceInfoTable.MatchStatus เปลี่ยนเป็น Failed หรือ Discrepancy นอกจากนี้ยังดูผลต่างจากการจับคู่ใน VendInvoiceInfoLine ได้. บันทึก เปรียบเทียบค่า MatchStatus ก่อนและหลัง ประเภทเหตุการณ์ inferred | |||
| ระงับการจ่ายเงิน | ระงับธุรกรรมผู้ขายเพื่อไม่ให้เลือกไปใส่ในข้อเสนอการจ่ายเงิน โดยมักดำเนินการด้วยตนเองเมื่อมีข้อพิพาท. | ||
| เหตุผลที่สำคัญ ใช้วิเคราะห์การระงับการจ่ายเงินและจุดติดขัด ช่วยให้เห็นการดำเนินการด้วยตนเองที่ทำให้เงินสดจ่ายออกล่าช้า. แหล่งข้อมูล ตั้งค่า VendTrans.Approved เป็น No หรือกรอกข้อมูลในช่องสถานะ OnHold ที่กำหนด ต้องติดตามการอัปเดตของ VendTrans. บันทึก เปรียบเทียบค่าสถานะก่อนและหลัง ประเภทเหตุการณ์ inferred | |||
| ส่งใบแจ้งหนี้เพื่อขออนุมัติ | ส่งใบแจ้งหนี้ที่รอดำเนินการไปยังระบบเวิร์กโฟลว์เพื่อตรวจสอบ เป็นจุดเปลี่ยนจากการบันทึกและจับคู่ข้อมูลเข้าสู่ขั้นตอนอนุมัติ. | ||
| เหตุผลที่สำคัญ ใช้ระบุจุดเริ่มต้นของรอบการอนุมัติ จำเป็นต่อการวิเคราะห์ประสิทธิภาพของลำดับการอนุมัติภายในองค์กร. แหล่งข้อมูล WorkflowTrackingStatusTable.CreatedDateTime โดย ContextTableId เท่ากับ ID ของ VendInvoiceInfoTable และ Status เป็น Submitted. บันทึก บันทึกเมื่อเริ่มอินสแตนซ์เวิร์กโฟลว์ ประเภทเหตุการณ์ explicit | |||
| อนุมัติสมุดรายวันการจ่ายเงิน | อนุมัติเวิร์กโฟลว์ของสมุดรายวันการจ่ายเงินเพื่ออนุญาตให้สร้างรายการจ่ายเงิน เป็นการตรวจสอบขั้นสุดท้ายก่อนเตรียมโอนเงิน. | ||
| เหตุผลที่สำคัญ ช่วยแยกขั้นตอนเตรียมการจ่ายเงินด้านธุรการออกจากคอขวดในการอนุมัติ. แหล่งข้อมูล WorkflowTrackingStatusTable ที่เชื่อมกับ ID ของ LedgerJournalTable (Header) โดยมี Status เป็น Completed. บันทึก บันทึกเมื่ออินสแตนซ์เวิร์กโฟลว์เสร็จสมบูรณ์ ประเภทเหตุการณ์ explicit | |||
| อัปเดตใบแจ้งหนี้ | บันทึกการเปลี่ยนแปลงส่วนหัวหรือรายการของใบแจ้งหนี้ก่อนลงบัญชี การอัปเดตบ่อยครั้งอาจบ่งชี้ว่าการดึงข้อมูลมีปัญหาหรือต้องแก้ไขข้อมูลด้วยตนเองระหว่างตรวจสอบ. | ||
| เหตุผลที่สำคัญ การอัปเดตบ่อยครั้งอาจบ่งชี้ว่ามีการแก้ไขงานซ้ำหรือข้อมูลต้นทางมีคุณภาพต่ำ เช่น ข้อผิดพลาดจาก OCR ข้อมูลนี้ใช้กับตัวติดตามงานแก้ไขและความถูกต้องของข้อมูล. แหล่งข้อมูล บันทึกฐานข้อมูล (SysDatabaseLog) ของ VendInvoiceInfoTable หากเปิดใช้งาน หรืออนุมานจากการเปลี่ยนแปลง ModifiedDateTime หากดึงข้อมูลถี่. บันทึก เปรียบเทียบ ModifiedDateTime ระหว่างการดึงข้อมูลแต่ละครั้ง ประเภทเหตุการณ์ inferred | |||
คู่มือการดึงข้อมูล
ขั้นตอน
เปิดพื้นที่ทำงาน Data Management: เข้าสู่ระบบสภาพแวดล้อม Microsoft Dynamics 365 Finance ของคุณ ไปที่ Workspaces แล้วเลือก Data Management ซึ่งเป็นศูนย์กลางสำหรับตั้งค่าโปรเจกต์ส่งออกข้อมูล
สร้างโปรเจกต์ส่งออก: คลิกไทล์ Export เพื่อสร้างโปรเจกต์ข้อมูลใหม่ ตั้งชื่อให้ชัดเจน เช่น ProcessMining_AP_Export ในช่อง Target data format ให้เลือกรูปแบบปลายทาง เช่น Azure SQL DB สำหรับ BYOD หรือ CSV สำหรับส่งออกเป็นไฟล์
เพิ่มเอนทิตีข้อมูล: เพิ่มเอนทิตีข้อมูลมาตรฐานต่อไปนี้ในโปรเจกต์ทีละรายการ: VendorInvoiceHeaderEntity (สำหรับใบแจ้งหนี้ที่รอดำเนินการ), VendorInvoiceLineEntity (สำหรับรายการใบแจ้งหนี้), VendorInvoiceJournalHeaderEntity (สำหรับใบแจ้งหนี้ที่ผ่านการลงบัญชีแล้ว), VendorPaymentJournalLineEntity (สำหรับการชำระเงิน) และ WorkflowHistoryEntity (สำหรับบันทึกการอนุมัติ) หากไม่มี WorkflowHistoryEntity ให้ใช้งานเป็นค่าเริ่มต้น คุณอาจต้องเปิดใช้เอนทิตีแบบกำหนดเองหรือเอนทิตีระบบเฉพาะที่เปิดให้ส่งออก
กำหนดตัวกรองเอนทิตี: คลิกไอคอน Filter ของแต่ละเอนทิตี กรองข้อมูลให้เหลือเฉพาะ CompanyInfo ที่เกี่ยวข้อง (DataAreaId) และกำหนดช่วงวันที่ในฟิลด์ CreatedDateTime หรือ InvoiceDate เพื่อดึงข้อมูลเฉพาะช่วงที่ต้องการวิเคราะห์ เช่น 12 เดือนล่าสุด
ตั้งค่าการส่งออกตามกำหนดเวลา: สร้างงานดึงข้อมูลตามกำหนดเวลาเพื่อให้บันทึกเหตุการณ์เป็นปัจจุบัน กำหนดความถี่ เช่น รายวันหรือรายชั่วโมง และเปิดใช้ Incremental push หากรองรับ วิธีนี้ช่วยลดภาระระบบโดยส่งออกเฉพาะระเบียนที่มีการเปลี่ยนแปลง
เรียกใช้การส่งออกครั้งแรก: คลิก Export now เพื่อเรียกใช้โปรเจกต์ด้วยตนเองเป็นครั้งแรก ตรวจสอบ Execution summary เพื่อยืนยันว่าระเบียนทั้งหมดส่งออกสำเร็จโดยไม่มีข้อผิดพลาด
แปลงข้อมูล: เมื่อส่งออกข้อมูลไปยังปลายทางแล้ว ไม่ว่าจะเป็น Azure SQL หรือไฟล์ ให้ใช้สคริปต์ SQL ในส่วน Query เพื่อรวมตาราง ตรรกะการแปลงนี้จะรวมระเบียนจากเอนทิตีต่างๆ ให้เป็นบันทึกเหตุการณ์เดียวตามลำดับเวลา
จับคู่แอตทริบิวต์: ตรวจสอบว่าชุดข้อมูลผลลัพธ์จับคู่ InvoiceNumber กับ Case ID, EventTime กับ Timestamp และ Activity กับ Activity Name ตามข้อกำหนดของเครื่องมือ process mining
ตรวจสอบและอัปโหลด: เรียกใช้การตรวจสอบด้านล่างเพื่อยืนยันความถูกต้องของข้อมูล เมื่อตรวจสอบแล้ว ให้ส่งออกผลลัพธ์สุดท้ายเป็นไฟล์ CSV หรือ Parquet แล้วอัปโหลดไปยัง ProcessMind
การกำหนดค่า
- การเลือกเอนทิตี: ใช้ VendorInvoiceHeaderEntity และ VendorInvoiceLineEntity สำหรับขั้นตอนก่อนลงรายการ ใช้ VendorInvoiceJournalHeaderEntity สำหรับเอกสารที่ลงรายการอย่างเป็นทางการ และใช้ VendorPaymentJournalLineEntity เพื่อติดตามการชำระเงิน.
- Incremental Push: เปิดการตั้งค่านี้ในโครงการ Data Management เพื่อส่งออกเฉพาะระเบียนใหม่หรือที่แก้ไขหลังจากโหลดข้อมูลทั้งหมดครั้งแรก ซึ่งสำคัญต่อประสิทธิภาพ.
- ช่วงวันที่: กรองด้วย InvoiceDate >= [Start Date] อย่าส่งออกข้อมูลโดยไม่จำกัดช่วง เพราะอาจหมดเวลา.
- ตัวกรองบริษัท: D365 รองรับหลายเอนทิตี ควรกรองด้วย DataAreaId เสมอเพื่อไม่ให้ข้อมูลจากนิติบุคคลต่างกันปะปนกัน เว้นแต่ต้องการวิเคราะห์ข้ามบริษัท.
- ประวัติเวิร์กโฟลว์: เอนทิตีมาตรฐานสำหรับประวัติเวิร์กโฟลว์อาจมีข้อมูลจำนวนมาก ควรส่งออกเฉพาะประวัติที่เกี่ยวข้องกับประเภท VendInvoice เพื่อควบคุมปริมาณข้อมูล.
ตัวอย่างคำค้น sql
/*
SQL Transformation Script for D365 Finance AP Process
Assumes data is loaded into Staging tables in a SQL environment (BYOD/Data Lake)
*/
SELECT
I.InvoiceNumber AS [InvoiceNumber],
'Invoice Created' AS [Activity],
I.CreatedDateTime AS [EventTime],
I.DataAreaId AS [CompanyCode],
I.InvoiceAccount AS [VendorAccount],
I.InvoiceAmount AS [InvoiceAmount],
I.CurrencyCode AS [Currency],
'D365 FO' AS [SourceSystem],
GETDATE() AS [LastDataUpdate]
FROM Staging_VendorInvoiceHeaderEntity I
UNION ALL
/* Capture updates to invoice headers */
SELECT
I.InvoiceNumber,
'Invoice Updated',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.ModifiedDateTime > I.CreatedDateTime
UNION ALL
/* Invoice Matching Activities */
SELECT
I.InvoiceNumber,
'Invoice Matched to PO',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Matched' -- Adjust value based on system config
UNION ALL
SELECT
I.InvoiceNumber,
'Invoice Match Failed',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Failed'
UNION ALL
/* Workflow Activities */
SELECT
RelatedContext AS InvoiceNumber,
CASE
WHEN Status = 'Submitted' THEN 'Invoice Submitted for Approval'
WHEN Status = 'Approved' THEN 'Invoice Approved'
ELSE 'Workflow Activity'
END AS [Activity],
CreatedDateTime AS [EventTime],
DataAreaId,
NULL AS [VendorAccount],
NULL AS [InvoiceAmount],
NULL AS [Currency],
'D365 FO',
GETDATE()
FROM Staging_WorkflowHistoryEntity
WHERE ContextTableId = 12345 -- Replace with TableId for VendInvoiceInfoTable
AND Status IN ('Submitted', 'Approved')
UNION ALL
/* Invoice Posted */
SELECT
J.InvoiceNumber,
'Invoice Posted',
J.PostedDateTime,
J.DataAreaId,
J.InvoiceAccount,
J.InvoiceAmount,
J.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity J
UNION ALL
/* Payment Block */
SELECT
I.InvoiceNumber,
'Payment Block Applied',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity I
WHERE I.OnHold = 'Yes'
UNION ALL
/* Payment Activities */
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Created' AS [Activity],
P.CreatedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue AS [VendorAccount],
P.DebitAmount AS [InvoiceAmount],
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Approved' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Approved'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Generated' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Sent'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Posted' AS [Activity],
P.PostedDate AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.IsPosted = 'Yes' ขั้นตอน
ตรวจสอบการเชื่อมต่อ BYOD: ตรวจสอบว่าคุณติดตั้ง SQL Server Management Studio (SSMS) หรือเครื่องมือที่คล้ายกันแล้ว และสามารถเชื่อมต่อกับ Azure SQL Database ที่กำหนดเป็นฐานข้อมูล Bring Your Own Database (BYOD) สำหรับสภาพแวดล้อม Dynamics 365 Finance & Operations ของคุณได้
ยืนยันการส่งออกเอนทิตี: ไปที่พื้นที่ทำงาน Data Management ใน Dynamics 365 ตรวจสอบว่าเอนทิตีต่อไปนี้ (หรือตารางที่อยู่เบื้องหลัง) ตั้งค่าให้ส่งออกไปยังฐานข้อมูล BYOD แล้ว:
VendInvoiceInfoTable(ใบแจ้งหนี้ที่รอดำเนินการ),VendInvoiceInfoLine(รายการที่รอดำเนินการ),VendInvoiceJour(ใบแจ้งหนี้ที่ลงบัญชีแล้ว),VendTrans(ธุรกรรมผู้ขาย),LedgerJournalTrans(รายการสมุดรายวัน),LedgerJournalTable(ส่วนหัวสมุดรายวัน) และWorkflowTrackingStatusTable(ประวัติ Workflow)ตั้งค่างานส่งออก: หากยังไม่ได้ส่งออกตารางเหล่านี้ ให้สร้างงานส่งออกใหม่ ตั้งค่า Target Data Format เป็นฐานข้อมูล SQL ของ BYOD เลือก Incremental Push เพื่อซิงค์ข้อมูลโดยไม่ต้องส่งออกข้อมูลทั้งหมดซ้ำ เรียกใช้งานเพื่อบันทึกข้อมูลลงในตาราง
เตรียมสภาพแวดล้อม SQL: เปิด SSMS แล้วเชื่อมต่อกับ Azure SQL Database ของ BYOD จากนั้นเปิดหน้าต่างคิวรีใหม่
กำหนดพารามิเตอร์: ในสคริปต์ด้านล่าง ให้ค้นหาส่วนประกาศตัวแปรที่ด้านบน แล้วแก้ไขตัวแปร
@StartDateและ@EndDateให้ตรงกับช่วงเวลาที่ต้องการวิเคราะห์ หากต้องการกรองตามนิติบุคคล ให้แก้ไขเงื่อนไขตัวกรองDATAAREAIDเรียกใช้สคริปต์: เรียกใช้สคริปต์ T-SQL ทั้งหมด สคริปต์นี้ใช้
UNION ALLเพื่อรวมข้อมูลจากหลายตารางให้อยู่ในรูปแบบบันทึกเหตุการณ์มาตรฐานเดียวกันตรวจสอบข้อมูล: ตรวจดูว่าคอลัมน์
InvoiceNumberหรือEventTimeมีค่าว่างหรือไม่ และตรวจสอบว่ามีทั้งใบแจ้งหนี้ที่ลงบัญชีแล้ว (จากVendInvoiceJour) และใบแจ้งหนี้ที่รอดำเนินการ (จากVendInvoiceInfoTable)ส่งออกผลลัพธ์: คลิกขวาที่ตารางผลลัพธ์ใน SSMS แล้วเลือก Save Results As... บันทึกไฟล์เป็น CSV (คั่นด้วยจุลภาค)
จัดรูปแบบไฟล์ก่อนอัปโหลด: เปิดไฟล์ CSV ใน Excel หรือโปรแกรมแก้ไขข้อความ เพื่อตรวจสอบว่ารูปแบบวันที่เป็นไปตาม ISO 8601 (YYYY-MM-DD HH:MM:SS) หาก ProcessMind กำหนดให้ใช้รูปแบบนี้ หากสคริปต์ทำงานสำเร็จ ก็ไม่จำเป็นต้องแปลงข้อมูลเพิ่มเติม
อัปโหลดไปยัง ProcessMind: นำเข้าไฟล์ CSV ไปยัง ProcessMind แล้วจับคู่คอลัมน์
InvoiceNumberกับรหัสเคส,Activityกับชื่อกิจกรรม และEventTimeกับเวลา
การกำหนดค่า
- แนวทางการส่งออก: ใช้ Incremental Push กับตารางที่มีข้อมูลจำนวนมาก เช่น
LedgerJournalTransและVendTransเพื่อลดภาระของ BYOD ใช้ Full Push เฉพาะเมื่อสงสัยว่าข้อมูลไม่สอดคล้องกัน. - การจัดการเขตเวลา: Dynamics 365 จัดเก็บข้อมูลเป็น UTC โดย script จะถือว่าข้อมูลเป็น UTC หากต้องการวิเคราะห์ตามเวลาท้องถิ่น ให้ปรับด้วย
DATEADDใน script หรือระหว่างนำเข้าข้อมูลเข้า ProcessMind. - การกรองบริษัท: คอลัมน์
DataAreaIdระบุนิติบุคคล โดยค่าเริ่มต้น script จะดึงข้อมูลจากทุกนิติบุคคล หากต้องการกรองเฉพาะบริษัทย่อย ให้เพิ่มWHERE DataAreaId = 'usmf'(ตัวอย่าง). - ประวัติเวิร์กโฟลว์: ตาราง
WorkflowTrackingStatusTableจำเป็นต่อการระบุเวลาที่อนุมัติ ตรวจสอบว่าได้รวมตารางนี้ไว้ในการตั้งค่าส่งออก BYOD เพราะมักไม่ได้เลือกไว้เป็นค่าเริ่มต้น. - การเก็บรักษาข้อมูล: ตรวจสอบว่ามีกระบวนการล้างข้อมูลใดใน D365 ที่อาจลบประวัติเวิร์กโฟลว์ที่เสร็จแล้วหรือรายการสมุดรายวันที่ลงรายการแล้วหรือไม่ เพราะจะทำให้วิเคราะห์ข้อมูลย้อนหลังได้สั้นลง.
ตัวอย่างคำค้น sql
/* T-SQL Extraction Script for D365 AP Payment Processing */
/* Tables required: VendInvoiceInfoTable, VendInvoiceInfoLine, VendInvoiceJour, VendTrans, LedgerJournalTrans, LedgerJournalTable, WorkflowTrackingStatusTable */
DECLARE @StartDate DATETIME = '2023-01-01 00:00:00';
DECLARE @EndDate DATETIME = GETDATE();
WITH RawData AS (
/* 1. Invoice Created: Pending Invoice Header Creation */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Created' AS Activity,
T1.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.CreatedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 2. Invoice Updated: Modifications to Pending Invoice */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Updated' AS Activity,
T1.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.ModifiedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.ModifiedDateTime BETWEEN @StartDate AND @EndDate
AND T1.ModifiedDateTime > T1.CreatedDateTime
UNION ALL
/* 3. Invoice Matched to PO: Line Matching Success */
SELECT
H.Num AS InvoiceNumber,
'Invoice Matched to PO' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 1 /* 1 usually denotes Matched/Passed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 4. Invoice Match Failed: Line Matching Discrepancy */
SELECT
H.Num AS InvoiceNumber,
'Invoice Match Failed' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 2 /* 2 usually denotes Failed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 5. Invoice Submitted for Approval: Workflow Submission */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Submitted for Approval' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 1 /* Submitted */
AND W.ContextTableId = 1425 /* TableId for VendInvoiceInfoTable, adjust if different in version */
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 6. Invoice Approved: Workflow Completion */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Approved' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 2 /* Completed/Approved */
AND W.ContextTableId = 1425
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 7. Invoice Posted: Creation of VendInvoiceJour */
SELECT
J.InvoiceId AS InvoiceNumber,
'Invoice Posted' AS Activity,
J.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
J.CreatedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceJour J
WHERE J.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 8. Payment Block Applied: Updated on VendTrans */
SELECT
J.InvoiceId AS InvoiceNumber,
'Payment Block Applied' AS Activity,
VT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
VT.ModifiedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendTrans VT
JOIN dbo.VendInvoiceJour J ON VT.Invoice = J.InvoiceId AND VT.AccountNum = J.InvoiceAccount AND VT.DataAreaId = J.DataAreaId
WHERE VT.Approved = 0 /* 0 indicates Not Approved/Blocked */
AND VT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 9. Payment Journal Created: Line added to Journal */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Created' AS Activity,
LJT.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.CreatedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.AccountType = 2 /* Vendor */
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 10. Payment Journal Approved: Workflow on Journal Header */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Approved' AS Activity,
LJH.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJH.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTable LJH
JOIN dbo.LedgerJournalTrans LJT ON LJH.JournalNum = LJT.JournalNum AND LJH.DataAreaId = LJT.DataAreaId
WHERE LJH.WorkflowApprovalStatus = 2 /* Approved */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJH.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 11. Payment Generated: Payment Status Changed to Sent */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Generated' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.PaymentStatus = 2 /* Sent/Generated */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 12. Payment Posted: Journal Line Posted */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Posted' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.Posted = 1 /* Posted */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
)
SELECT *
FROM RawData
WHERE InvoiceNumber IS NOT NULL AND InvoiceNumber <> ''
ORDER BY InvoiceNumber, EventTime; พร้อมเริ่มต้นหรือยัง?
ใช้เทมเพลตนี้วางรากฐานข้อมูลให้พร้อม แล้วเริ่มปรับปรุงเวิร์กโฟลว์การชำระเงินได้เลย หากต้องการความช่วยเหลือในการจับคู่ตาราง Dynamics 365 ของคุณ ทีมงานพร้อมช่วยเหลือ.
เริ่มปรับปรุงกระบวนการชำระเงินเจ้าหนี้การค้าได้ทันที
ลดระยะเวลาของรอบกระบวนการลง 30 เปอร์เซ็นต์ และแก้ปัญหาความล่าช้าใน D365.
ไม่ต้องใช้บัตรเครดิต ตั้งค่าเสร็จใน 5 นาที.