買掛金の支払処理データテンプレート
買掛金の支払処理データテンプレート
- 財務分析に必要なプロセス固有の属性
- 支払状況の追跡に欠かせない主要アクティビティ
- Dynamics 365からのデータ抽出手順
買掛金の支払処理に関する属性
| 名前 | 説明 | ||
|---|---|---|---|
| アクティビティ Activity | 発生した具体的なタスクまたはステータス変更。 | ||
| 説明 この属性は、「Invoice Created」「Invoice Approved」「Payment Posted」など、プロセスで実行されたイベントやステップを表します。技術的な取引種別やワークフローのステータス変更を、業務で理解しやすいイベントに置き換えます。 Dynamics 365では、テーブルへのレコード追加(例: 重要な理由 プロセスマップにおけるプロセスの流れとイベントの順序を定義します。 入手先 各種取引テーブルとワークフロー履歴ログから特定 例 請求書を作成請求書を承認支払いデータを作成 | |||
| イベント時刻 EventTime | アクティビティが発生した時刻。 | ||
| 説明 この属性には、特定のアクティビティが発生した正確な日時が記録されます。イベントを時系列に並べ、各ステップ間の所要時間を計算するために使います。 Dynamics 365では、通常、対象テーブルに応じて 重要な理由 サイクルタイムやリードタイムの計算、ボトルネックの特定に欠かせません。 入手先 取引テーブルのシステムフィールドCreatedDateTimeまたはModifiedDateTime 例 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| 請求書番号 InvoiceNumber | 仕入先請求書に割り当てられた一意の識別子。 | ||
| 説明 請求書番号は、このプロセスビューにおける確定的なケース識別子です。1件の仕入先請求書に関するすべてのイベントを一意にまとめ、受領から決済までの経過を詳しく分析できます。 Microsoft Dynamics 365では、通常、 重要な理由 分散した買掛金アクティビティを1つのプロセスインスタンスにまとめるための基本キーです。 入手先 テーブル:VendInvoiceJour、フィールド:InvoiceId 例 INV-2023-00198223344ACME-OCT-22 | |||
| ソースシステム SourceSystem | データの取得元となるシステムの名前。 | ||
| 説明 プロセスデータを抽出したソフトウェアまたは環境を示します。この場合は、Microsoft Dynamics 365のインスタンスが一貫して表示されます。 ERPや外部スキャンソリューションなど、複数のシステムのデータを組み合わせる環境で特に役立ちます。 重要な理由 複数システムにまたがる分析で、データの来歴と追跡可能性を確保します。 入手先 抽出時にハードコードまたは設定 例 Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| 最終データ更新 LastDataUpdate | データを抽出または更新した時刻。 | ||
| 説明 分析に使用するデータの鮮度を示します。リアルタイムのデータを見ているのか、過去のある時点のデータを見ているのかを把握できます。 通常、Dynamics 365自体のフィールドではなく、ETL(抽出、変換、読み込み)プロセスによって生成されます。 重要な理由 ダッシュボードと重要業績評価指標(KPI)の信頼性を確保するうえで重要です。 入手先 抽出スクリプトによって生成 例 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| ユーザーID UserId | アクティビティを実行したユーザーの識別子です。 | ||
| 説明 請求書の承認や支払いの転記など、特定のアクティビティを担当したシステムユーザーを特定します。D365の 「支払いブロックと処理上の障害の分析」で、特定の担当者がほかの担当者より多くのブロックを発生させているかを確認するために使います。 重要な理由 担当者の行動や職務分掌を分析できます。 入手先 取引/履歴テーブルのシステムフィールドCreatedBy/ModifiedBy 例 jdoeadminworkflow_sys | |||
| 仕入先勘定 VendorAccount | 仕入先に割り当てられた一意の勘定番号。 | ||
| 説明 取引に関与する仕入先を一意に識別します。Dynamics 365では、 この属性は「仕入先関係の複雑さビュー」の中心となり、仕入先ごとのパフォーマンスや滞留を分析できます。 重要な理由 仕入先ごとにプロセスのパフォーマンスを分類できます。 入手先 テーブル:VendInvoiceJour、フィールド:InvoiceAccountまたはOrderAccount 例 US-101V000452001 | |||
| 仕入先名 VendorName | 仕入先組織の名称です。 | ||
| 説明 仕入先を識別する名称です。D365では、仕入先アカウントがグローバルアドレス帳( 人が読みやすい名称を表示することで、「仕入先との関係の複雑さ」ビューを利用しやすくなり、業務担当者もダッシュボードを確認できます。 重要な理由 仕入先アカウント番号の内容を把握するための情報です。 入手先 テーブル:DirPartyTable(VendTable経由)、フィールド:Name 例 Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| 会社コード CompanyCode | 法人または子会社を識別するコード。 | ||
| 説明 請求書を処理する組織内の法人を示します。Microsoft Dynamics 365では、システムフィールド この属性は「処理全体のリードタイム分析」に欠かせません。子会社や地域単位で比較できます。 重要な理由 異なる事業部門や国を比較できます。 入手先 テーブル:VendInvoiceJour、フィールド:DataAreaId 例 USMFDEMFGBSI | |||
| 支払期日 DueDate | 請求書の支払い期限。 | ||
| 説明 ペナルティを避けるために、支払いを完了しなければならない契約上の日付です。Dynamics 365では、請求書ヘッダーまたは取引レコードの 「期日どおりの支払い率」KPIの基準となり、「買掛金プロセスの処理量と件数」ビューで作業の優先順位を決める際に役立ちます。 重要な理由 期日どおりの支払い実績を測定するための基準です。 入手先 テーブル:VendInvoiceJourまたはVendTrans、フィールド:DueDate 例 2023-11-302023-12-15 | |||
| 発注書番号 PurchaseOrderNumber | 関連する発注書の参照番号です。 | ||
| 説明 請求書と元の購買文書を関連付けます。Dynamics 365では、 この属性により、発注書に基づく請求書と発注書のない請求書を区別でき、「発注書との照合と差異の傾向」ダッシュボードで確認できます。 重要な理由 調達から支払いまでの照合率を分析するうえで欠かせません。 入手先 テーブル:VendInvoiceJour、フィールド:PurchId 例 PO-000455000342PO-22-998 | |||
| 請求書日付 InvoiceDate | 請求書に記載された文書の日付です。 | ||
| 説明 仕入先の請求書に記載された日付です。Dynamics 365では、 「エンドツーエンドのリードタイム分析」で、仕入先側から見たプロセス全体の所要期間を測定するために使います。 重要な理由 請求書の経過期間を測定する起点となる日付です。 入手先 テーブル:VendInvoiceJour、フィールド:InvoiceDate 例 2023-10-012023-10-15 | |||
| 請求金額 InvoiceAmount | 請求書の合計金額。 | ||
| 説明 取引通貨での請求書の合計金額です。Dynamics 365では、請求書仕訳帳テーブルの 「二重支払いリスク検出」ダッシュボードで、金額と仕入先の詳細を関連付けるために使用します。 重要な理由 支出額と財務リスクの分析に欠かせません。 入手先 テーブル:VendInvoiceJour、フィールド:InvoiceAmount 例 1500.00245.5010000.00 | |||
| 部門 Department | 費用を負担する部門です。 | ||
| 説明 社内の部門を示す財務分析コードです。Dynamics 365では、分析コードは動的に保存され(多くの場合、 この属性は「仕入先との関係の複雑さ」ビューで、買掛金の処理件数が最も多い社内部門を確認するために使います。 重要な理由 組織内の詳細な分析や説明責任の確認に役立ちます。 入手先 テーブル:VendInvoiceJour、フィールド:DefaultDimension(DimensionAttributeLevelValueビューが必要) 例 IT財務業務 | |||
| 伝票番号 VoucherNumber | 取引に関連付けられた総勘定元帳の伝票番号です。 | ||
| 説明 会計仕訳を識別するための内部総勘定元帳IDです。Dynamics 365では、 技術的な項目ですが、「プロセス経路とコンプライアンス監査」で、照合のために仕訳を総勘定元帳まで追跡する際に役立ちます。 重要な理由 財務監査と照合に必要な識別情報です。 入手先 テーブル:VendInvoiceJour、フィールド:LedgerVoucher 例 VOU-10023INV-ACC-992 | |||
| 支払いブロックの有無 IsPaymentBlocked | 請求書が現在、支払い保留になっているかを示すフラグです。 | ||
| 説明 請求書が保留中かどうかを示す真偽値です。Dynamics 365では、通常、 「支払いブロックと処理上の障害の分析」の中心となる指標で、プロセスの中断を明らかにします。 重要な理由 すぐに対処すべき障害や手作業による介入を特定できます。 入手先 テーブル:VendTrans、フィールド:Approved(反転値)または専用の保留フィールド 例 truefalse | |||
| 支払い方法 PaymentMethod | 請求書の支払いに使う方法です(例:小切手、電信送金、電子資金振替)。 | ||
| 説明 仕入先への資金の送金方法を示します。Dynamics 365では、 「支払い実行のリードタイム」ダッシュボードで、支払いバッチの種類ごとの効率を評価するために使います。 重要な理由 支払い実行段階で生じる差異の要因を把握できます。 入手先 テーブル:VendInvoiceJour(PaymMode情報と結合)またはVendTrans 例 小切手ACH電信送金 | |||
| 支払条件 PaymentTerms | 合意した支払条件を表すコードです。 | ||
| 説明 支払期限や割引条件を定める設定コードです(例:Net30)。Dynamics 365では、 「サイクルタイム」と合わせて分析し、プロセスの遅延によって合意した条件に違反していないかを確認します。 重要な理由 支払期日の算出に必要な情報です。 入手先 テーブル:VendInvoiceJour、フィールド:PaymTermId 例 Net302%10Net30COD | |||
| 現金割引日 CashDiscountDate | 割引を受けるために支払いを完了する期限です。 | ||
| 説明 早期支払いによる割引を受けるための期限です。Dynamics 365では、 この属性を使う「現金割引の獲得実績」ダッシュボードでは、組織が割引を逃したことによる損失額を把握できます。 重要な理由 プロセスの財務効率に関するKPIに直接影響します。 入手先 テーブル:VendInvoiceJourまたはVendTrans、フィールド:CashDiscDate 例 2023-10-102023-10-20 | |||
| 通貨 Currency | 請求書の通貨コードです。 | ||
| 説明 請求書の発行に使われた通貨のISOコードです。Dynamics 365では、 複数通貨の換算が必要な場合、「アクティビティ金額」のマッピングで金額を統一するために重要です。 重要な理由 財務データの値を解釈するために必要な情報です。 入手先 テーブル:VendInvoiceJour、フィールド:CurrencyCode 例 USDEURGBP | |||
買掛金の支払処理に関するアクティビティ
| アクティビティ | 説明 | ||
|---|---|---|---|
| 支払いデータを作成 | システムが支払いファイル(EFT、ISO20022)を作成するか、小切手を印刷します。仕訳帳明細の支払いステータスはSentまたはGeneratedに更新されます。 | ||
| 重要な理由 承認から実行までの遅延時間を示す重要業績評価指標(KPI)に役立ちます。支払い指示が作成されたことを確認できます。 入手先 LedgerJournalTrans.PaymentStatusがSentまたはRecievedに変わります。明細の更新から推定することもあります。 記録 変更前後のPaymentStatusフィールドを比較 イベントタイプ inferred | |||
| 支払いを転記 | 支払い仕訳帳を総勘定元帳に転記し、請求書を決済して仕入先残高を消し込みます。これで財務処理が完了します。 | ||
| 重要な理由 請求書から支払いまでの平均サイクルタイムを測定する際の最終アクティビティです。現金減少に関する会計仕訳が確定したことを示します。 入手先 LedgerJournalTransを転記します。VendTransを更新して決済済みであることを示します。実際のイベントは仕訳帳の転記です。 記録 取引Xの実行時に記録 イベントタイプ explicit | |||
| 支払い仕訳帳を作成 | 請求書を選択し、支払い仕訳帳の明細に追加します。支払いの意思を示し、通常は支払い確認ワークフローを開始します。 | ||
| 重要な理由 債務処理から現金支払い処理への移行を示します。支払い実行のリードタイム測定に使用します。 入手先 LedgerJournalTrans.CreatedDateTime。MarkedInvoiceフィールドまたは決済テーブルを介して請求書に紐付けます。 記録 LedgerJournalTransにレコードが作成された時点で記録 イベントタイプ explicit | |||
| 請求書と発注書を照合 | システムが請求書明細を発注書または製品受領書に正常に紐付けます。このアクティビティは、調達注文に対する請求書の検証を示します。 | ||
| 重要な理由 初回発注書照合率の重要業績評価指標(KPI)に欠かせません。手作業なしで処理できた請求書と、手動対応が必要な請求書を区別できます。 入手先 VendInvoiceInfoLine.PurchIdおよびVendInvoiceInfoTable.MatchStatus。MatchStatusがPassedに変わった時点から推定します。 記録 変更前後のMatchStatusフィールドを比較 イベントタイプ inferred | |||
| 請求書を作成 | システムに未処理の仕入先請求書レコードを新規作成します。手動入力またはデータエンティティのインポートにより、請求書がDynamics 365のワークフローに登録されたことを示します。 | ||
| 重要な理由 プロセスのリードタイムを計算する際の開始時刻になります。請求書が処理または転記されるまで、システム内にどのくらい滞留しているかを測定できます。 入手先 VendInvoiceInfoTable.CreatedDateTime、またはVendInvoiceInfoTable.RecIdの作成タイムスタンプ。未処理の仕入先請求書ヘッダーを示します。 記録 VendInvoiceInfoTableにレコードが作成された時点で記録 イベントタイプ explicit | |||
| 請求書を承認 | 未処理の請求書に関するワークフローのインスタンスが完了または承認の状態になります。請求書は元帳に転記できる状態です。 | ||
| 重要な理由 平均承認リードタイムを計算します。この段階での遅延は、早期支払い割引を受けられるかどうかに直接影響します。 入手先 WorkflowTrackingStatusTable.CreatedDateTime。TrackingStatusがCompletedの場合。別の方法として、VendInvoiceInfoTable.RequestStatusがApprovedの場合も使用できます。 記録 ワークフローのインスタンス完了時に記録 イベントタイプ explicit | |||
| 請求書を転記 | 請求書を総勘定元帳に転記し、システムに債務を記録します。レコードは未処理テーブルから転記済み取引テーブルに移動します。 | ||
| 重要な理由 債務を財務上認識したことを示す重要な節目です。このアクティビティの後、請求書を支払い対象として選択できます。 入手先 VendInvoiceJourおよびVendTransにレコードを作成します。TransDateは転記日を示します。 記録 取引Xの実行時に記録 イベントタイプ explicit | |||
| 支払いブロックを適用 | 仕入先取引に保留を設定し、支払い提案の対象から除外します。紛争がある場合などに、手動で設定することがあります。 | ||
| 重要な理由 「支払いブロックと滞留の分析」に役立ちます。資金流出を遅らせる手動対応を明らかにします。 入手先 VendTrans.ApprovedフラグがNoに設定されるか、特定のOnHoldステータスフィールドに値が設定されます。VendTransの更新を追跡する必要があります。 記録 変更前後のステータスフィールドを比較 イベントタイプ inferred | |||
| 支払い仕訳帳を承認 | 支払い仕訳帳のワークフローを承認し、支払いデータの作成を許可します。資金の振込準備に入る前の最終確認です。 | ||
| 重要な理由 支払いの事務的な準備と、承認時のボトルネックを切り分けます。 入手先 LedgerJournalTable(ヘッダー)のIDに紐付くWorkflowTrackingStatusTable。StatusはCompletedです。 記録 ワークフローのインスタンス完了時に記録 イベントタイプ explicit | |||
| 請求書の照合に失敗 | 照合処理で請求書と発注書または受領書の不一致(価格差または数量差)が検出されます。解決するまで処理が停止することがあります。 | ||
| 重要な理由 照合プロセスで具体的な滞留箇所を特定します。「発注書照合と差異の傾向」ダッシュボードに役立ちます。 入手先 VendInvoiceInfoTable.MatchStatusがFailedまたはDiscrepancyに変わったことを示します。VendInvoiceInfoLineの照合差異からも確認できます。 記録 変更前後のMatchStatusフィールドを比較 イベントタイプ inferred | |||
| 請求書を承認に申請 | 未処理の請求書をワークフローエンジンに送信し、審査を依頼します。データ入力と照合から承認段階へ移ったことを示します。 | ||
| 重要な理由 承認サイクルタイムの開始を示します。社内の承認階層の効率を分析するうえで欠かせません。 入手先 WorkflowTrackingStatusTable.CreatedDateTime。ContextTableIdがVendInvoiceInfoTableのIDと一致し、StatusがSubmittedの場合。 記録 ワークフローのインスタンス開始時に記録 イベントタイプ explicit | |||
| 請求書を更新 | 転記前に請求書ヘッダーまたは明細に加えられた変更を記録します。更新が頻繁な場合、データ抽出の問題や、検証時に必要となる手動修正が考えられます。 | ||
| 重要な理由 更新頻度が高い場合は、手戻りの繰り返しや、ソースデータの品質不良(OCRエラーなど)が考えられます。「手戻りとデータ精度の監視」に役立ちます。 入手先 有効な場合はVendInvoiceInfoTableのデータベースログ(SysDatabaseLog)を使用します。ポーリング頻度が高い場合は、ModifiedDateTimeの変更から推定します。 記録 後続の抽出データ間でModifiedDateTimeを比較 イベントタイプ inferred | |||
データ抽出ガイド
ステップ
データ管理ワークスペースを開く:Microsoft Dynamics 365 Finance環境にサインインします。「ワークスペース」に移動し、「データ管理」を選択します。ここでデータエクスポートプロジェクトを設定します。
エクスポートプロジェクトを作成する:「エクスポート」をクリックして、新しいデータプロジェクトを作成します。たとえば、ProcessMining_AP_Exportのように、内容が分かる名前を付けます。「対象データ形式」では、出力先の形式(BYODの場合はAzure SQL DB、ファイルに出力する場合はCSVなど)を選択します。
データエンティティを追加する:次の標準データエンティティを1つずつプロジェクトに追加します。未処理の請求書にはVendorInvoiceHeaderEntity、請求書明細にはVendorInvoiceLineEntity、転記済み請求書にはVendorInvoiceJournalHeaderEntity、支払にはVendorPaymentJournalLineEntity、承認履歴にはWorkflowHistoryEntityを使用します。WorkflowHistoryEntityが既定で利用できない場合は、エクスポート用のカスタムエンティティまたは特定のシステムエンティティを有効にする必要があります。
エンティティのフィルターを設定する:各エンティティのフィルターアイコンをクリックします。対象のCompanyInfo(DataAreaId)にデータを絞り込み、CreatedDateTimeまたはInvoiceDateに期間を指定して、分析対象のデータだけを抽出します(例:直近12か月)。
定期エクスポートを設定する:イベントログを最新の状態に保つため、定期実行するデータジョブを作成します。実行頻度(毎日、毎時など)を指定し、対応している場合は増分プッシュを有効にします。変更されたレコードのみをエクスポートするため、システムの負荷を抑えられます。
初回エクスポートを実行する:「今すぐエクスポート」をクリックし、プロジェクトを手動で実行します。「実行の概要」を確認し、エラーなくすべてのレコードがエクスポートされたことを確かめます。
データを変換する:Azure SQLまたはファイルにデータをエクスポートしたら、「クエリ」セクションにあるSQLスクリプトを使ってテーブルを結合します。この変換処理により、複数のエンティティのレコードを時系列順の単一イベントログにまとめます。
属性を対応付ける:プロセスマイニングツールの要件に合わせて、出力データセットのInvoiceNumberをケースID、EventTimeをタイムスタンプ、Activityをアクティビティ名に対応付けます。
検証してアップロードする:以下の検証を実行し、データが正確であることを確認します。確認後、最終データをCSVまたはParquetファイルとしてエクスポートし、ProcessMindにアップロードします。
設定
- エンティティの選択:転記前のプロセス手順にはVendorInvoiceHeaderEntityとVendorInvoiceLineEntityを使用します。法的に有効な転記済み伝票にはVendorInvoiceJournalHeaderEntityを使用します。支払の追跡にはVendorPaymentJournalLineEntityを使用します。
- 増分プッシュ:初回の全件読み込み後に新規または変更されたレコードだけをエクスポートするには、データ管理プロジェクトでこの設定を有効にします。パフォーマンスを保つうえで重要です。
- 期間の指定:InvoiceDate >= [開始日]で絞り込みます。タイムアウトを避けるため、期間を限定しないエクスポートは避けてください。
- 会社の絞り込み: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)などのツールがインストールされており、Dynamics 365 Finance & Operations環境のBYOD(Bring Your Own Database)出力先として設定されたAzure SQL Databaseに接続できることを確認します。
エンティティのエクスポートを確認する:Dynamics 365のデータ管理ワークスペースを開きます。次のエンティティ(または基になるテーブル)がBYODデータベースへのエクスポート対象に設定されていることを確認します。未処理の請求書は
VendInvoiceInfoTable、未処理の明細はVendInvoiceInfoLine、転記済み請求書はVendInvoiceJour、仕入先取引はVendTrans、仕訳明細はLedgerJournalTrans、仕訳ヘッダーはLedgerJournalTable、ワークフロー履歴はWorkflowTrackingStatusTableです。エクスポートジョブを設定する:これらのテーブルが現在エクスポートされていない場合は、新しいエクスポートジョブを作成します。「対象データ形式」にBYOD SQLデータベースを指定します。全件を再エクスポートせずにデータを同期できるよう、増分プッシュを選択します。ジョブを実行してテーブルにデータを取り込みます。
SQL環境を準備する:SSMSを開き、BYODのAzure SQLデータベースに接続して、新しいクエリウィンドウを開きます。
パラメーターを設定する:以下のスクリプトの先頭にある変数宣言を確認します。分析対象期間に合わせて
@StartDateと@EndDateの値を変更します。特定の法人に絞り込む場合は、DATAAREAIDのフィルター条件も変更します。スクリプトを実行する:T-SQLスクリプト全体を実行します。このスクリプトでは
UNION ALLを使い、複数のテーブルのデータを標準形式の単一イベントログにまとめます。データを検証する:
InvoiceNumber列またはEventTime列にNULL値がないか確認します。転記済み請求書(VendInvoiceJour)と未処理の請求書(VendInvoiceInfoTable)の両方が含まれていることも確認してください。結果をエクスポートする:SSMSの結果グリッドを右クリックし、**「結果を名前を付けて保存...」**を選択します。ファイルはCSV(カンマ区切り)形式で保存します。
アップロード用に形式を整える:CSVをExcelまたはテキストエディターで開き、ProcessMindで必要な場合は、日付がISO 8601形式(YYYY-MM-DD HH:MM:SS)になっていることを確認します。スクリプトが正常に実行されていれば、それ以上の変換は不要です。
ProcessMindにアップロードする:CSVファイルをProcessMindにインポートし、
InvoiceNumber列をケースID、Activity列をアクティビティ名、EventTime列をタイムスタンプに対応付けます。
設定
- エクスポート方法:BYODの負荷を抑えるため、
LedgerJournalTransやVendTransなどデータ量の多いテーブルには増分プッシュを使用します。データに不整合が疑われる場合に限り、全件プッシュを使用してください。 - タイムゾーンの処理:Dynamics 365ではデータがUTCで保存されます。このスクリプトもUTCを前提としています。現地時刻で分析する場合は、スクリプト内またはProcessMindへのインポート時に
DATEADDで時刻を調整してください。 - 会社による絞り込み:
DataAreaId列は法人を表します。既定ではすべての法人のデータを抽出します。特定の子会社に絞り込むには、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分で設定できます。