Mẫu dữ liệu xử lý thanh toán khoản phải trả
Mẫu dữ liệu xử lý thanh toán khoản phải trả
- Các thuộc tính riêng của quy trình phục vụ phân tích tài chính
- Các mốc hoạt động quan trọng để theo dõi thanh toán
- Hướng dẫn trích xuất dữ liệu chi tiết cho Dynamics 365
Các thuộc tính của quy trình xử lý thanh toán khoản phải trả
| Tên | Mô tả | ||
|---|---|---|---|
| Hoạt động Activity | Tác vụ cụ thể hoặc thay đổi trạng thái đã diễn ra. | ||
| Mô tả Thuộc tính này mô tả sự kiện hoặc bước được thực hiện trong quy trình, chẳng hạn như 'Invoice Created', 'Invoice Approved' hoặc 'Payment Posted'. Thuộc tính chuyển các loại giao dịch kỹ thuật và thay đổi trạng thái workflow thành sự kiện kinh doanh dễ đọc. Trong Dynamics 365, các hoạt động này thường được xác định từ nhiều nguồn kết hợp: bản ghi được thêm vào bảng, chẳng hạn bản ghi mới trong Vì sao điều này quan trọng Thuộc tính này xác định luồng quy trình và trình tự sự kiện trên sơ đồ quy trình. Lấy dữ liệu ở đâu Được xác định từ nhiều bảng giao dịch và nhật ký lịch sử workflow Ví dụ Tạo hóa đơnPhê duyệt hóa đơnTạo khoản thanh toán | |||
| Số hóa đơn InvoiceNumber | Mã định danh duy nhất được gán cho hóa đơn của nhà cung cấp. | ||
| Mô tả Invoice Number là mã định danh trường hợp chính xác cho chế độ xem quy trình này. Mã này nhóm riêng tất cả sự kiện liên quan đến một hóa đơn nhà cung cấp, giúp phân tích toàn bộ hành trình từ lúc nhận đến khi tất toán. Trong Microsoft Dynamics 365, mã này thường tương ứng với trường Vì sao điều này quan trọng Đây là khóa cơ bản để liên kết các hoạt động công nợ phải trả rời rạc thành một phiên bản quy trình duy nhất. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour, Trường: InvoiceId Ví dụ INV-2023-00198223344ACME-OCT-22 | |||
| Thời điểm sự kiện EventTime | Dấu thời gian ghi nhận lúc hoạt động diễn ra. | ||
| Mô tả Thuộc tính này ghi lại chính xác ngày giờ một hoạt động diễn ra. Dữ liệu được dùng để sắp xếp sự kiện theo trình tự thời gian và tính khoảng thời gian giữa các bước. Trong Dynamics 365, dữ liệu thường lấy từ Vì sao điều này quan trọng Cần thiết để tính thời gian chu kỳ, thời gian xử lý và xác định điểm nghẽn. Lấy dữ liệu ở đâu Các trường hệ thống CreatedDateTime hoặc ModifiedDateTime trong bảng giao dịch Ví dụ 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Hệ thống nguồn SourceSystem | Tên hệ thống nơi dữ liệu bắt nguồn. | ||
| Mô tả Xác định phần mềm hoặc môi trường nguồn được dùng để trích xuất dữ liệu quy trình. Trong trường hợp này, giá trị luôn là phiên bản Microsoft Dynamics 365. Thuộc tính này đặc biệt hữu ích khi phân tích dữ liệu kết hợp từ nhiều hệ thống, chẳng hạn ERP và giải pháp quét tài liệu bên ngoài. Vì sao điều này quan trọng Đảm bảo có thể truy xuất nguồn gốc và theo dõi dữ liệu trong các phân tích nhiều hệ thống. Lấy dữ liệu ở đâu Được mã hóa cứng hoặc cấu hình trong quá trình trích xuất Ví dụ Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Lần cập nhật dữ liệu gần nhất LastDataUpdate | Dấu thời gian cho biết lúc dữ liệu được trích xuất hoặc làm mới. | ||
| Mô tả Cho biết dữ liệu dùng để phân tích còn mới đến đâu. Nhờ đó, người dùng biết mình đang xem dữ liệu theo thời gian thực hay ảnh chụp dữ liệu của kỳ trước. Thông tin này thường do quy trình ETL (Extract, Transform, Load) tạo ra, không phải là trường có sẵn trong Dynamics 365. Vì sao điều này quan trọng Rất quan trọng để tạo niềm tin vào dashboard và KPI. Lấy dữ liệu ở đâu Được tạo bởi tập lệnh trích xuất Ví dụ 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| ID người dùng UserId | Mã định danh của người dùng thực hiện hoạt động. | ||
| Mô tả Xác định người dùng hệ thống chịu trách nhiệm cho một hoạt động cụ thể, chẳng hạn như phê duyệt hóa đơn hoặc ghi nhận thanh toán. Dữ liệu lấy từ các trường Dùng trong “Phân tích chặn thanh toán và trở ngại” để xem nhân viên xử lý nào thường khiến giao dịch bị chặn hơn. Vì sao điều này quan trọng Cho phép phân tích hành vi của người thực hiện và phân tách nhiệm vụ. Lấy dữ liệu ở đâu Các trường hệ thống CreatedBy/ModifiedBy trong bảng giao dịch/lịch sử Ví dụ jdoeadminworkflow_sys | |||
| Mã công ty CompanyCode | Mã định danh pháp nhân hoặc công ty con. | ||
| Mô tả Cho biết pháp nhân trong tổ chức nơi hóa đơn được xử lý. Trong Microsoft Dynamics 365, thông tin này được quản lý chặt chẽ qua trường hệ thống Thuộc tính này rất cần thiết cho 'Phân tích thời gian xử lý từ đầu đến cuối', giúp so sánh giữa các công ty con hoặc khu vực địa lý. Vì sao điều này quan trọng Cho phép so sánh giữa các đơn vị kinh doanh hoặc quốc gia. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour, Trường: DataAreaId Ví dụ USMFDEMFGBSI | |||
| Ngày đến hạn DueDate | Ngày cần thanh toán hóa đơn. | ||
| Mô tả Ngày đến hạn theo hợp đồng để thanh toán, giúp tránh bị phạt. Trong Dynamics 365, ngày này được lưu trong trường Đây là mốc chuẩn chính để tính KPI “Tỷ lệ thanh toán đúng hạn” và giúp ưu tiên công việc trong chế độ xem “Thông lượng và khối lượng quy trình AP”. Vì sao điều này quan trọng Mốc chuẩn để đo lường hiệu quả thanh toán đúng hạn. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour hoặc VendTrans, trường: DueDate Ví dụ 2023-11-302023-12-15 | |||
| Ngày hóa đơn InvoiceDate | Ngày ghi trên hóa đơn. | ||
| Mô tả Ngày in trên hóa đơn của nhà cung cấp. Trong Dynamics 365, ngày này nằm trong trường Dùng trong “Phân tích thời gian xử lý đầu cuối” để đo toàn bộ vòng đời quy trình theo góc nhìn của nhà cung cấp. Vì sao điều này quan trọng Xác định thời điểm bắt đầu tính tuổi hóa đơn. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour, trường: InvoiceDate Ví dụ 2023-10-012023-10-15 | |||
| Phòng ban Department | Phòng ban chịu trách nhiệm về khoản chi phí. | ||
| Mô tả Chiều tài chính cho biết phòng ban nội bộ. Trong Dynamics 365, các chiều được lưu theo cấu trúc động, thường trong Thuộc tính này được dùng trong “Chế độ xem mức độ phức tạp trong quan hệ với nhà cung cấp” để xác định phòng ban nội bộ nào tạo ra nhiều hóa đơn phải trả nhất. Vì sao điều này quan trọng Cho phép đi sâu xuống dữ liệu theo cơ cấu tổ chức và phân tích trách nhiệm. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour, trường: DefaultDimension (cần dùng chế độ xem DimensionAttributeLevelValue) Ví dụ Công nghệ thông tinTài chínhVận hành | |||
| Số đơn đặt hàng PurchaseOrderNumber | Mã tham chiếu của đơn đặt hàng liên quan. | ||
| Mô tả Liên kết hóa đơn với chứng từ mua hàng ban đầu. Trong Dynamics 365, thông tin này nằm trong trường Thuộc tính này hỗ trợ dashboard “Xu hướng đối chiếu và chênh lệch đơn đặt hàng”, giúp phân biệt hóa đơn có đơn đặt hàng và hóa đơn không có đơn đặt hàng. Vì sao điều này quan trọng Cần thiết để phân tích tỷ lệ đối chiếu từ mua hàng đến thanh toán. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour, trường: PurchId Ví dụ PO-000455000342PO-22-998 | |||
| Số tiền hóa đơn InvoiceAmount | Tổng giá trị tiền tệ của hóa đơn. | ||
| Mô tả Tổng giá trị hóa đơn theo đơn vị tiền tệ giao dịch. Trong Dynamics 365, thông tin này nằm trong các trường như Dữ liệu này được dùng trong dashboard 'Phát hiện rủi ro thanh toán trùng lặp' để đối chiếu số tiền với thông tin nhà cung cấp. Vì sao điều này quan trọng Rất quan trọng để phân tích khối lượng chi tiêu và rủi ro tài chính. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour, Trường: InvoiceAmount Ví dụ 1500.00245.5010000.00 | |||
| Tài khoản nhà cung cấp VendorAccount | Số tài khoản duy nhất của nhà cung cấp. | ||
| Mô tả Mã định danh duy nhất của nhà cung cấp tham gia giao dịch. Trong Dynamics 365, mã này tương ứng với trường Thuộc tính này là trọng tâm của chế độ xem 'Độ phức tạp trong quan hệ với nhà cung cấp', cho phép phân tích hiệu suất và vướng mắc theo từng nhà cung cấp. Vì sao điều này quan trọng Cho phép phân nhóm hiệu suất quy trình theo nhà cung cấp. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour, Trường: InvoiceAccount hoặc OrderAccount Ví dụ US-101V000452001 | |||
| Tên nhà cung cấp VendorName | Tên tổ chức cung cấp hàng hóa hoặc dịch vụ. | ||
| Mô tả Tên mô tả của nhà cung cấp. Trong D365, tài khoản nhà cung cấp đóng vai trò là khóa ngoại liên kết đến Global Address Book ( Tên dễ đọc giúp tạo chế độ xem 'Vendor Relationship Complexity View' và giúp người dùng nghiệp vụ dễ sử dụng các bảng điều khiển. Vì sao điều này quan trọng Bổ sung thông tin cho số tài khoản nhà cung cấp. Lấy dữ liệu ở đâu Bảng: DirPartyTable (thông qua VendTable), trường: Name Ví dụ Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| Điều khoản thanh toán PaymentTerms | Mã thể hiện điều khoản thanh toán đã thỏa thuận. | ||
| Mô tả Mã cấu hình quy định ngày đến hạn và mức chiết khấu, chẳng hạn Net30. Trong Dynamics 365, mã này nằm trong trường Phân tích cùng “Thời gian chu kỳ” để xem chậm trễ trong quy trình có vi phạm điều khoản đã thỏa thuận hay không. Vì sao điều này quan trọng Bổ sung thông tin để tính ngày đến hạn. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour, trường: PaymTermId Ví dụ Net302%10Net30COD | |||
| Ngày hưởng chiết khấu tiền mặt CashDiscountDate | Ngày cuối cùng cần thanh toán để được hưởng chiết khấu. | ||
| Mô tả Hạn chót để nhận ưu đãi thanh toán sớm. Trong Dynamics 365, thông tin này nằm trong trường Thuộc tính này cung cấp dữ liệu cho dashboard “Hiệu quả tận dụng chiết khấu tiền mặt”, giúp tổ chức tính toán khoản tiết kiệm bị bỏ lỡ. Vì sao điều này quan trọng Tác động trực tiếp đến KPI hiệu quả tài chính của quy trình. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour hoặc VendTrans, trường: CashDiscDate Ví dụ 2023-10-102023-10-20 | |||
| Phương thức thanh toán PaymentMethod | Cách thanh toán hóa đơn, chẳng hạn như séc, chuyển khoản ngân hàng hoặc EFT. | ||
| Mô tả Cho biết cách chuyển tiền cho nhà cung cấp. Trong Dynamics 365, thông tin này nằm trong trường Thuộc tính này được dùng trong dashboard “Thời gian xử lý thanh toán” để đánh giá hiệu quả của các loại lô thanh toán khác nhau. Vì sao điều này quan trọng Giúp lý giải sự khác biệt trong giai đoạn thực hiện thanh toán. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour (kết hợp với thông tin PaymMode) hoặc VendTrans Ví dụ SÉCACHCHUYỂN KHOẢN | |||
| Số chứng từ kế toán VoucherNumber | Số chứng từ sổ cái liên quan đến giao dịch. | ||
| Mô tả Mã định danh nội bộ của bút toán trong sổ cái tổng hợp. Trong Dynamics 365, trường Dù mang tính kỹ thuật, thông tin này hữu ích cho “Kiểm tra đường đi quy trình và tuân thủ”, giúp truy vết bút toán về sổ cái tổng hợp để đối chiếu. Vì sao điều này quan trọng Thông tin quan trọng để kiểm toán tài chính và đối chiếu. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour, trường: LedgerVoucher Ví dụ VOU-10023INV-ACC-992 | |||
| Thanh toán có bị chặn không IsPaymentBlocked | Cờ cho biết hóa đơn hiện có bị chặn thanh toán hay không. | ||
| Mô tả Giá trị đúng/sai cho biết hóa đơn có đang bị tạm giữ hay không. Trong Dynamics 365, giá trị này thường được xác định từ trạng thái Đây là yếu tố chính trong “Phân tích chặn thanh toán và trở ngại”, giúp làm rõ các gián đoạn trong quy trình. Vì sao điều này quan trọng Giúp xác định ngay các điểm gây trở ngại và những lần cần can thiệp thủ công. Lấy dữ liệu ở đâu Bảng: VendTrans, trường: Approved (đảo ngược giá trị) hoặc các trường Hold chuyên biệt Ví dụ truefalse | |||
| Tiền tệ Currency | Mã tiền tệ của hóa đơn. | ||
| Mô tả Mã ISO của loại tiền tệ dùng để phát hành hóa đơn. Trong Dynamics 365, mã này nằm trong trường Thông tin này cần thiết để chuẩn hóa số tiền trong phần ánh xạ “Giá trị hoạt động” nếu cần quy đổi nhiều loại tiền tệ. Vì sao điều này quan trọng Thông tin cần có để hiểu đúng các giá trị tài chính. Lấy dữ liệu ở đâu Bảng: VendInvoiceJour, trường: CurrencyCode Ví dụ USDEURGBP | |||
Các hoạt động trong quy trình xử lý thanh toán khoản phải trả
| Hoạt động | Mô tả | ||
|---|---|---|---|
| Đối chiếu hóa đơn với đơn đặt hàng | Hệ thống liên kết thành công dòng hóa đơn với Purchase Order hoặc Product Receipt. Hoạt động này cho biết hóa đơn đã được xác thực với đơn đặt hàng. | ||
| Vì sao điều này quan trọng Chỉ số này rất quan trọng để tính KPI tỷ lệ đối chiếu PO thành công ngay lần đầu. Nó giúp phân biệt hóa đơn được xử lý không cần thao tác thủ công với hóa đơn cần can thiệp thủ công. Lấy dữ liệu ở đâu VendInvoiceInfoLine.PurchId và VendInvoiceInfoTable.MatchStatus. Suy ra khi MatchStatus chuyển thành Passed. Thu thập So sánh trường MatchStatus trước và sau Loại sự kiện inferred | |||
| Ghi sổ hóa đơn | Hóa đơn được ghi vào sổ cái, tạo khoản phải trả trong hệ thống. Bản ghi được chuyển từ các bảng đang chờ xử lý sang bảng giao dịch đã ghi sổ. | ||
| Vì sao điều này quan trọng Đây là mốc quan trọng, ghi nhận khoản nợ về mặt tài chính. Sau bước này, hóa đơn có thể được chọn để thanh toán. Lấy dữ liệu ở đâu Tạo bản ghi trong VendInvoiceJour và VendTrans. TransDate là ngày ghi sổ. Thu thập Ghi nhận khi giao dịch X được thực hiện Loại sự kiện explicit | |||
| Ghi sổ khoản thanh toán | Payment Journal được ghi vào sổ cái, tất toán hóa đơn và xóa số dư nhà cung cấp. Đây là bước hoàn tất quy trình tài chính. | ||
| Vì sao điều này quan trọng Hoạt động cuối cùng để tính thời gian trung bình từ hóa đơn đến thanh toán. Xác nhận các bút toán giảm tiền mặt đã được hoàn tất. Lấy dữ liệu ở đâu LedgerJournalTrans được ghi sổ. VendTrans được cập nhật để thể hiện việc tất toán. Sự kiện thực tế là ghi sổ nhật ký. Thu thập Ghi nhận khi giao dịch X được thực hiện Loại sự kiện explicit | |||
| Phê duyệt hóa đơn | Phiên bản workflow của hóa đơn đang chờ xử lý chuyển sang trạng thái hoàn tất hoặc đã phê duyệt. Hóa đơn đã sẵn sàng để ghi vào sổ cái. | ||
| Vì sao điều này quan trọng Dùng để tính thời gian phê duyệt trung bình. Chậm trễ ở bước này ảnh hưởng trực tiếp đến khả năng tận dụng chiết khấu thanh toán sớm. Lấy dữ liệu ở đâu WorkflowTrackingStatusTable.CreatedDateTime khi TrackingStatus là Completed. Hoặc VendInvoiceInfoTable.RequestStatus bằng Approved. Thu thập Ghi nhận khi phiên bản workflow hoàn tất Loại sự kiện explicit | |||
| Tạo hóa đơn | Tạo bản ghi hóa đơn nhà cung cấp đang chờ xử lý trong hệ thống. Đây là thời điểm hóa đơn được đưa vào quy trình làm việc của Dynamics 365, bằng cách nhập thủ công hoặc qua nhập dữ liệu từ thực thể. | ||
| Vì sao điều này quan trọng Xác định thời điểm bắt đầu để tính tổng thời gian xử lý quy trình. Nhờ đó, tổ chức có thể đo thời gian hóa đơn nằm trong hệ thống trước khi được xử lý hoặc ghi sổ. Lấy dữ liệu ở đâu Dấu thời gian tạo VendInvoiceInfoTable.CreatedDateTime hoặc VendInvoiceInfoTable.RecId. Đây là tiêu đề hóa đơn nhà cung cấp đang chờ xử lý. Thu thập Ghi nhận khi tạo bản ghi trong VendInvoiceInfoTable Loại sự kiện explicit | |||
| Tạo khoản thanh toán | Hệ thống tạo tệp thanh toán (EFT, ISO20022) hoặc in séc. Trạng thái thanh toán trên dòng nhật ký được cập nhật thành Sent hoặc Generated. | ||
| Vì sao điều này quan trọng Hỗ trợ KPI về độ trễ từ phê duyệt đến thực hiện. Xác nhận chỉ thị thanh toán đã được tạo. Lấy dữ liệu ở đâu LedgerJournalTrans.PaymentStatus chuyển thành Sent/Recieved. Thường được suy ra từ các cập nhật trên dòng. Thu thập So sánh trường PaymentStatus trước và sau Loại sự kiện inferred | |||
| Tạo nhật ký thanh toán | Hóa đơn được chọn và thêm vào một dòng trong Payment Journal. Điều này cho biết dự định thanh toán và thường khởi động workflow rà soát thanh toán. | ||
| Vì sao điều này quan trọng Đánh dấu bước chuyển từ ghi nhận khoản phải trả sang xử lý chi tiền. Dùng để đo thời gian thực hiện thanh toán. Lấy dữ liệu ở đâu LedgerJournalTrans.CreatedDateTime. Hóa đơn được liên kết qua trường MarkedInvoice hoặc các bảng tất toán. Thu thập Ghi nhận khi tạo bản ghi trong LedgerJournalTrans Loại sự kiện explicit | |||
| Áp dụng chặn thanh toán | Giao dịch với nhà cung cấp bị tạm giữ, không thể được chọn trong đề xuất thanh toán. Việc này thường được thực hiện thủ công khi có tranh chấp. | ||
| Vì sao điều này quan trọng Hỗ trợ phân tích lệnh chặn thanh toán và các vướng mắc. Cho thấy những can thiệp thủ công làm chậm dòng tiền chi ra. Lấy dữ liệu ở đâu Cờ VendTrans.Approved được đặt thành No hoặc các trường trạng thái OnHold cụ thể được điền. Cần theo dõi các cập nhật của VendTrans. Thu thập So sánh trường trạng thái trước và sau Loại sự kiện inferred | |||
| Cập nhật hóa đơn | Ghi lại các thay đổi đối với tiêu đề hoặc dòng hóa đơn trước khi ghi sổ. Việc cập nhật thường xuyên có thể cho thấy dữ liệu trích xuất có vấn đề hoặc cần chỉnh sửa thủ công trong quá trình xác thực. | ||
| Vì sao điều này quan trọng Tần suất cập nhật cao cho thấy quy trình phải làm lại nhiều lần hoặc dữ liệu nguồn kém chất lượng, chẳng hạn như lỗi OCR. Thông tin này hỗ trợ tính năng theo dõi việc làm lại và độ chính xác dữ liệu. Lấy dữ liệu ở đâu Nhật ký cơ sở dữ liệu (SysDatabaseLog) trên VendInvoiceInfoTable nếu được bật, hoặc suy ra từ thay đổi ModifiedDateTime nếu tần suất truy vấn đủ cao. Thu thập So sánh ModifiedDateTime giữa các lần trích xuất liên tiếp Loại sự kiện inferred | |||
| Đối chiếu hóa đơn không thành công | Quá trình đối chiếu phát hiện sai lệch giữa hóa đơn và PO/Receipt, chẳng hạn như chênh lệch giá hoặc số lượng. Quy trình thường bị dừng cho đến khi vấn đề được giải quyết. | ||
| Vì sao điều này quan trọng Giúp xác định các vướng mắc cụ thể trong quá trình đối chiếu. Hỗ trợ dashboard theo dõi đối chiếu PO và xu hướng sai lệch. Lấy dữ liệu ở đâu VendInvoiceInfoTable.MatchStatus chuyển thành Failed hoặc Discrepancy. Sai lệch đối chiếu cũng hiển thị trong VendInvoiceInfoLine. Thu thập So sánh trường MatchStatus trước và sau Loại sự kiện inferred | |||
| Gửi hóa đơn để phê duyệt | Hóa đơn đang chờ xử lý được gửi đến workflow để xem xét. Đây là bước chuyển từ nhập và đối chiếu dữ liệu sang giai đoạn phê duyệt. | ||
| Vì sao điều này quan trọng Đánh dấu thời điểm bắt đầu chu kỳ phê duyệt. Cần thiết để phân tích hiệu quả của các cấp phê duyệt nội bộ. Lấy dữ liệu ở đâu WorkflowTrackingStatusTable.CreatedDateTime, trong đó ContextTableId bằng ID của VendInvoiceInfoTable và Status là Submitted. Thu thập Ghi nhận khi khởi tạo phiên bản workflow Loại sự kiện explicit | |||
| Phê duyệt nhật ký thanh toán | Workflow của Payment Journal được phê duyệt, cho phép tạo khoản thanh toán. Đây là bước kiểm tra cuối cùng trước khi chuẩn bị chuyển tiền. | ||
| Vì sao điều này quan trọng Giúp phân biệt khâu chuẩn bị thanh toán với điểm nghẽn trong phê duyệt. Lấy dữ liệu ở đâu WorkflowTrackingStatusTable liên kết với ID của LedgerJournalTable (Header). Trạng thái là Completed. Thu thập Ghi nhận khi phiên bản workflow hoàn tất Loại sự kiện explicit | |||
Hướng dẫn trích xuất dữ liệu
Các bước
Mở không gian làm việc Quản lý dữ liệu: Đăng nhập vào môi trường Microsoft Dynamics 365 Finance. Mở Workspaces rồi chọn Data Management. Đây là nơi chính để cấu hình các dự án xuất dữ liệu.
Tạo dự án xuất: Nhấp ô Export để tạo dự án dữ liệu mới. Đặt tên rõ ràng, chẳng hạn ProcessMining_AP_Export. Trong trường Target data format, chọn định dạng đích, ví dụ Azure SQL DB cho BYOD hoặc CSV để xuất thành tệp.
Thêm thực thể dữ liệu: Lần lượt thêm các thực thể dữ liệu tiêu chuẩn sau vào dự án: VendorInvoiceHeaderEntity (hóa đơn đang chờ), VendorInvoiceLineEntity (dòng hóa đơn), VendorInvoiceJournalHeaderEntity (hóa đơn đã ghi sổ), VendorPaymentJournalLineEntity (dòng thanh toán) và WorkflowHistoryEntity (nhật ký phê duyệt). Nếu WorkflowHistoryEntity chưa có sẵn, bạn có thể cần bật thực thể tùy chỉnh hoặc thực thể hệ thống được cung cấp để xuất dữ liệu.
Thiết lập bộ lọc cho thực thể: Với mỗi thực thể, nhấp biểu tượng Filter. Lọc dữ liệu theo CompanyInfo liên quan (DataAreaId), rồi đặt khoảng ngày trên trường CreatedDateTime hoặc InvoiceDate để chỉ trích xuất dữ liệu trong kỳ phân tích mong muốn, chẳng hạn 12 tháng gần nhất.
Thiết lập xuất định kỳ: Để nhật ký sự kiện luôn được cập nhật, hãy tạo tác vụ dữ liệu định kỳ. Chọn tần suất, chẳng hạn hằng ngày hoặc hằng giờ, và bật Incremental push nếu được hỗ trợ. Cách này giảm tải cho hệ thống vì chỉ xuất các bản ghi đã thay đổi.
Chạy lần xuất đầu tiên: Nhấp Export now để chạy dự án thủ công lần đầu. Theo dõi Execution summary để đảm bảo tất cả bản ghi được xuất thành công, không có lỗi.
Chuyển đổi dữ liệu: Sau khi dữ liệu được xuất đến đích, chẳng hạn Azure SQL hoặc các tệp, hãy dùng tập lệnh SQL trong phần Query để kết hợp các bảng. Logic chuyển đổi này gộp các bản ghi từ nhiều thực thể thành một nhật ký sự kiện theo trình tự thời gian.
Ánh xạ thuộc tính: Đảm bảo tập dữ liệu kết quả ánh xạ InvoiceNumber với Case ID, EventTime với Timestamp và Activity với Activity Name theo yêu cầu của công cụ process mining.
Xác thực và tải lên: Chạy các bước kiểm tra bên dưới để xác nhận dữ liệu chính xác. Sau khi kiểm tra, xuất kết quả cuối cùng thành tệp CSV hoặc Parquet rồi tải lên ProcessMind.
Cấu hình
- Chọn thực thể: Dùng VendorInvoiceHeaderEntity và VendorInvoiceLineEntity cho các bước trước khi ghi sổ. Dùng VendorInvoiceJournalHeaderEntity cho chứng từ đã ghi sổ theo quy định. Dùng VendorPaymentJournalLineEntity để theo dõi thanh toán.
- Incremental Push: Bật tùy chọn này trong dự án Data Management để chỉ xuất các bản ghi mới hoặc đã sửa đổi sau lần tải đầy đủ đầu tiên. Đây là bước quan trọng để đảm bảo hiệu suất.
- Khoảng ngày: Lọc theo InvoiceDate >= [Start Date]. Tránh xuất dữ liệu không giới hạn vì tác vụ có thể hết thời gian chờ.
- Bộ lọc công ty: D365 hỗ trợ nhiều pháp nhân. Luôn lọc theo DataAreaId để tránh trộn dữ liệu giữa các pháp nhân, trừ khi bạn cần phân tích liên công ty.
- Lịch sử workflow: Các thực thể tiêu chuẩn lưu lịch sử workflow có thể chứa nhiều dữ liệu. Chỉ xuất lịch sử liên quan đến loại VendInvoice để giữ khối lượng dữ liệu ở mức phù hợp.
Truy vấn mẫu 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' Các bước
Kiểm tra kết nối BYOD: Đảm bảo bạn đã cài SQL Server Management Studio (SSMS) hoặc công cụ tương tự và có thể kết nối với Azure SQL Database được cấu hình làm đích Bring Your Own Database (BYOD) cho môi trường Dynamics 365 Finance & Operations của bạn.
Xác nhận xuất thực thể: Mở không gian làm việc Data Management trong Dynamics 365. Kiểm tra các thực thể sau (hoặc bảng nền tương ứng) đã được cấu hình để xuất sang cơ sở dữ liệu BYOD:
VendInvoiceInfoTable(Hóa đơn chờ xử lý),VendInvoiceInfoLine(Dòng hóa đơn chờ xử lý),VendInvoiceJour(Hóa đơn đã ghi sổ),VendTrans(Giao dịch nhà cung cấp),LedgerJournalTrans(Dòng nhật ký),LedgerJournalTable(Tiêu đề nhật ký) vàWorkflowTrackingStatusTable(Lịch sử quy trình làm việc).Thiết lập tác vụ xuất: Nếu các bảng này chưa được xuất, hãy tạo tác vụ xuất mới. Đặt Target Data Format thành cơ sở dữ liệu BYOD SQL của bạn. Chọn Incremental Push để đồng bộ dữ liệu mà không cần xuất lại toàn bộ. Chạy tác vụ để nạp dữ liệu vào các bảng.
Chuẩn bị môi trường SQL: Mở SSMS và kết nối với Azure SQL Database BYOD. Mở cửa sổ truy vấn mới.
Đặt tham số: Trong tập lệnh bên dưới, tìm phần khai báo biến ở đầu. Cập nhật biến
@StartDatevà@EndDatetheo khoảng thời gian bạn muốn phân tích. Nếu cần lọc theo một pháp nhân cụ thể, hãy cập nhật điều kiện lọcDATAAREAID.Chạy tập lệnh: Chạy toàn bộ tập lệnh T-SQL. Tập lệnh dùng
UNION ALLđể kết hợp dữ liệu từ nhiều bảng thành một nhật ký sự kiện thống nhất.Kiểm tra dữ liệu: Kiểm tra các giá trị rỗng trong cột
InvoiceNumberhoặcEventTime. Đảm bảo có cả hóa đơn đã ghi sổ (từVendInvoiceJour) và hóa đơn đang chờ xử lý (từVendInvoiceInfoTable).Xuất kết quả: Nhấp chuột phải vào lưới kết quả trong SSMS và chọn Save Results As.... Lưu tệp dưới dạng CSV (Comma Delimited).
Định dạng để tải lên: Mở tệp CSV bằng Excel hoặc trình soạn thảo văn bản để đảm bảo ngày giờ theo chuẩn ISO 8601 (YYYY-MM-DD HH:MM:SS), nếu ProcessMind yêu cầu. Nếu tập lệnh chạy thành công, bạn không cần chuyển đổi thêm.
Tải lên ProcessMind: Nhập tệp CSV vào ProcessMind, ánh xạ cột
InvoiceNumberthành Mã trường hợp,Hoạt độngthành Tên hoạt động vàEventTimethành Dấu thời gian.
Cấu hình
- Chiến lược xuất dữ liệu: Dùng Incremental Push cho các bảng có khối lượng lớn như
LedgerJournalTransvàVendTransđể giảm tải cho BYOD. Chỉ dùng Full Push khi nghi ngờ dữ liệu không nhất quán. - Xử lý múi giờ: Dynamics 365 lưu dữ liệu theo UTC. Tập lệnh giả định dữ liệu dùng UTC. Nếu cần phân tích theo giờ địa phương, hãy điều chỉnh bằng
DATEADDtrong tập lệnh hoặc khi nhập dữ liệu vào ProcessMind. - Lọc công ty: Cột
DataAreaIdđại diện cho pháp nhân. Mặc định, tập lệnh trích xuất dữ liệu của tất cả pháp nhân. ThêmWHERE DataAreaId = 'usmf'(ví dụ) để lọc một công ty con cụ thể. - Lịch sử workflow: Bảng
WorkflowTrackingStatusTablerất quan trọng để lấy dấu thời gian phê duyệt. Hãy đảm bảo bảng này có trong cấu hình xuất BYOD vì thường không được đưa vào mặc định. - Lưu giữ dữ liệu: Lưu ý các tác vụ dọn dẹp trong D365 có thể xóa lịch sử workflow đã hoàn tất hoặc các dòng nhật ký đã ghi sổ. Điều này sẽ giới hạn khoảng thời gian lịch sử có thể dùng để phân tích process mining.
Truy vấn mẫu 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; Bạn đã sẵn sàng bắt đầu chưa?
Dùng mẫu này để xây dựng nền tảng dữ liệu vững chắc và bắt đầu tối ưu hóa quy trình thanh toán ngay hôm nay. Nếu cần trợ giúp xác định các bảng Dynamics 365 phù hợp, đội ngũ của chúng tôi luôn sẵn sàng hỗ trợ.
Tối ưu hóa quy trình xử lý thanh toán khoản phải trả ngay hôm nay
Rút ngắn 30% thời gian xử lý và loại bỏ tình trạng chậm trễ trên D365.
Không cần thẻ tín dụng. Thiết lập trong 5 phút.