メインコンテンツへスキップ

ZUGFeRD Airtableベースからの電子請求書:PDF4meを使用してMakeでJSONを作成し、ハイブリッドPDFをメールで送信する

· 1分で読める
SEO and Content Writer

PDF4meでZUGFeRDの請求書を作成する これは、構造化された請求書データをPDF/A3サイズの電子請求書に変換するMakeモジュールです。Airtableベースをターゲットとして、1行を読み込み、EN 16931 XMLに変換し、読み取り可能かつ機械解析可能なファイルを返して、レコードに戻します。

電子請求書作成ソフトウェアを検索すると、ベンダー比較(プラットフォーム、スイート、ドキュメントごとの価格設定など)が表示されます。Airtableで請求書を作成できるかどうかを検索すると、できないことを説明する長いスレッドが表示されます。この2つの結果の間には、既にAirtableで業務を行っており、請求書を機械可読形式にする必要があると告げられたものの、フォーマット要件を満たすために業務を請求書作成プラットフォームに移行したくないチームがあります。このシナリオは、まさにそのようなチームのためのものです。

状況の概要
1. Watch records
Airtable. Picks up rows in ZUGFeRD Requests where Status is New.
2. Create a ZUGFeRD invoice
PDF4me. Converts the invoice JSON to EN 16931 XML inside a PDF/A-3.
3. Upload an attachment
Airtable. Puts the hybrid PDF back on the same record.
4. Update a record
Airtable. Writes the result back so the row says what happened.
5. Send an email
Gmail. Sends the e-invoice to the buyer on the row.
要約版

行がAirtableテーブルに格納され、そこには販売者、購入者、明細項目、合計金額が含まれます。Makeがそれを取得し、列からコンパクトなJSONオブジェクトを作成し、PDF4meがそれをEN 16931 XMLが埋め込まれたPDF/A-3ファイルに変換します。ファイルは添付ファイルとしてレコードに戻され、メールで購入者に送信されます。たった5つのモジュールで、XMLを書く人はいません。

なぜ?という問いに対する質疑応答​

なぜ請求書作成ソフトではなくAirtableでこれを実行するのですか? 請求書データは通常、既にどこかで追跡されている作業の副産物だからです。プロジェクト、顧客、合意された料金がデータベースに保存されている場合、そのデータベースこそが、信頼できる情報源に最も近いものです。それをファイル形式に合わせて製品に移行するということは、同じ顧客情報を永久に2か所に保持し続けることを意味します。

請求書をXMLではなくJSONで記述する理由は? クロスインダストリーインボイスの構文は長く、深くネストされており、各コードの配置場所に関して非常に厳格です。JSONオブジェクトは、ビジネス用語のようなキーを使用することで、同じことをはるかに少ないスペースで表現し、PDF4meはそこから準拠したXMLを生成します。間違いやすいのは、保守していない部分です。

ハイブリッドファイルが重要な理由とは? 請求書には2つの対象者がいるからです。購入者の会計システムは埋め込まれたXMLを読み取り、誰も入力しなくても文書を登録します。買掛金担当者は同じファイルを開いてページを確認します。1つの成果物が両方のニーズを満たすため、 フェルドこのフォーマットを開発したドイツのフォーラムは、XMLだけを指定するのではなく、そのように構築した。

なぜ結果を記録に添付する必要があるのか? 後で見つけられない電子請求書は、単に問題を先延ばしにしたに過ぎません。PDFファイルを該当行の「ドキュメント」フィールドに配置することで、その文書を生成したデータと紐付けることができ、18か月後に購入者から金額について異議を申し立てられた際にまさに必要な情報となります。


得られるもの​

入力: 請求書番号、日付、販売者ブロック、購入者ブロック、1つの明細項目、合計金額を含むAirtableの行で、ステータスは「新規」に設定されている。 出力: その記録にZUGFeRDのPDF/A-3ファイルが添付され、購入者には同じファイルが添付されたメールが送信されます。

Airtable ベースの PDF4me Live Automations で ZUGFeRD Requests テーブルを開き、RE-2026-0007 行目から RE-2026-0010 を表示しています。InvoiceDate 2026-10-12、DueDate 2026-11-11、Currency EUR、SellerName Muster GmbH (Hauptstrasse 1, 10115 Berlin DE)、SellerVATID DE123456789、BuyerName Test Kunde AG (Bahnhofstrasse 5, 80331 Muenchen DE)、ItemDescription Consulting、Quantity 10.00、UnitPrice 100.50、VATRate 19.00、NetTotal 1005、VATAmount 191、GrossTotal 1196、Status Generated

請求書1件につき1行。ここにある各列は、シナリオが構築するJSONのキーになります。

Gmailで受信したメッセージを表示。件名は「Your e-invoice RE-2026-0009」、本文は「Hello Test Kunde AG、ZUGFeRDの電子請求書RE-2026-0009を添付しました。合計金額は1195.95ユーロです」、サムネイルにレンダリングされたドイツ語の請求書が表示されたPDFファイルが1つ添付されています。

購入者は通常の請求書を見るが、購入者のソフトウェアは請求書内のXMLデータを読み取る。


必要なもの​

  • アカウントを作成する。 オープンメイク標準アプリに関する5つのモジュール。
  • PDF4me APIキー。 APIキーを取得してくださいPDF4meへの接続は1つでこのシナリオに対応できます。
  • Airtableベース占領された基地は PDF4me Live Automations テーブル名 ZUGFeRD Requests請求書ヘッダー、VAT ID を含む販売者ブロック、購入者ブロック、明細項目フィールド、合計、メール列、ステータスフィールド、添付ファイルフィールドが含まれています。 Document。
  • Gmailアカウント 配送のため、Makeに接続されています。
  • 販売者情報(VAT IDを含む)これらは列から取得されるため、1つのデータベースで複数の法人に対して請求書を発行できます。
完成した記事をまずご覧ください
これは、キャプチャされたシナリオが行番号RE-2026-0009に対して生成したファイルそのものです。ページを表示するにはリーダーで開き、埋め込まれたXMLを表示するにはZUGFeRDバリデーターで開いてください。
sample-output-zugferd-re-2026-0009.pdf をダウンロードしてください。

シナリオの概要​

  1. 記録を見る (Airtable)は新しい行を取得します ZUGFeRD Requests。
  2. ZUGFeRDの請求書を作成する (PDF4me)はJSONをハイブリッドPDFに変換します。
  3. 添付ファイルをアップロードする (Airtable)はそれを Document 同じ行にあるフィールド。
  4. 記録を更新する (Airtableは)結果を返信します。
  5. メールを送信する (Gmail)は電子請求書を買い手に配信します。

シナリオの概要全体​

作成シナリオキャンバスには、接続された5つのモジュールが順番に表示されます。Airtableのレコード監視(時計アイコン付き)、PDF4meのZUGFeRD請求書の作成、Airtableの添付ファイルのアップロード、Airtableのレコードの更新、Gmailのメール送信です。それぞれに緑色のチェックマークと1つの操作が表示されています。

スイスのQRコードシナリオと同じ5つのモジュール構成。中央のPDF4meモジュールのみが異なっている。


ステップ1:Airtableの行からシナリオをトリガーするにはどうすればよいですか?​

これまでの流れ: まだ何も起きていない。これが引き金だ。

「準備完了」とマークされた行は、請求書発行の依頼を表します。

  1. 追加 エアテーブル > 記録を見る 引き金として。
  2. 設定する:
    • ベース: PDF4me Live Automations
    • テーブル: ZUGFeRD Requests
    • トリガーフィールド: Created
    • ラベルフィールド: Title
    • 制限: 10
    • 式: {Status}='New'

ウォッチレコードの設定​

AirtableのWatchレコードモジュールを作成し、ベースをPDF4me Live Automations、テーブルをZUGFeRD Requests、トリガーフィールドをCreated、ラベルフィールドをTitle、制限を10、ビューを空のまま、数式中括弧をStatusがNewに等しく設定します。

ステータスは切り替えスイッチです。誰かが行を「新規」に設定するまで、何も発行されません。


ステップ2:行をZUGFeRD請求書に変換するにはどうすればよいですか?​

これまでの流れ: Airtableのトリガー。

これは電子請求書を作成するモジュールです。設定によってフォーマットが決定され、JSONデータによって内容が決定されます。

  1. 追加 PDF4me > ZUGFeRDの請求書を作成する。
  2. 出力の設定:
    • ファイル名: ZUGFeRD_ プラス 請求書番号 プラス .pdf
    • 入力形式: JSON
    • 出力モード: XML With PDF
    • ZUGFeRD バージョン: 2*
    • 適合レベル: EN16931
    • 請求書をPDF形式でレンダリングする: Yes
  3. 請求書オブジェクトを貼り付けます の中へ 請求書JSONデータ そして、以下の列をマッピングします。
{
"InvoiceId": "{{1.InvoiceNumber}}",
"TypeCode": "380",
"InvoiceType": "RECHNUNG",
"IssueDate": "{{formatDate(1.InvoiceDate; "YYYY-MM-DD")}}T00:00:00",
"DeliveryDate": "{{formatDate(1.InvoiceDate; "YYYY-MM-DD")}}T00:00:00",
"IsTest": false,
"Seller": {
"Name": "{{1.SellerName}}",
"VatId": "{{1.SellerVATID}}",
"Address": {
"Street": "{{1.SellerStreet}}",
"PostalCode": "{{1.SellerPostalCode}}",
"City": "{{1.SellerCity}}",
"Country": "{{1.SellerCountry}}"
}
},
"Buyer": {
"Name": "{{1.BuyerName}}",
"Address": {
"Street": "{{1.BuyerStreet}}",
"PostalCode": "{{1.BuyerPostalCode}}",
"City": "{{1.BuyerCity}}",
"Country": "{{1.BuyerCountry}}"
}
},
"LineItems": [
{
"ProductName": "{{1.ItemDescription}}",
"Quantity": {{1.Quantity}},
"UnitCode": "C62",
"UnitPrice": {{1.UnitPrice}},
"LineTotal": {{parseNumber(1.NetTotal; ".")}}
}
],
"Totals": {
"Currency": "{{1.Currency}}",
"LineTotal": {{parseNumber(1.NetTotal; ".")}},
"TaxBasisTotal": {{parseNumber(1.NetTotal; ".")}},
"TaxPercent": {{1.VATRate}},
"TaxTotal": {{parseNumber(1.VATAmount; ".")}},
"GrandTotal": {{parseNumber(1.GrossTotal; ".")}},
"ChargeTotal": 0,
"AllowanceTotal": 0
},
"Payment": {
"Currency": "{{1.Currency}}",
"PaymentReference": "{{1.InvoiceNumber}}",
"DueDate": "{{formatDate(1.DueDate; "YYYY-MM-DD")}}T00:00:00"
}
}

その物体の3つの部分に注目する価値がある。 TypeCode 380 これは商業請求書のコードであり、基本となるコードから派生したものではなく、固定されています。 UnitCode C62 は「何かの1つ」を表すUN/ECEコードで、時間やサービス単位に使うものです。 Payment 最後のブロックは PaymentReference購入者が支払い時に引用するテキストで、ここでは単に請求書番号です。

ZUGFeRD請求書構成を作成する​

PDF4me で ZUGFeRD 請求書モジュールを作成します。ファイル名は ZUGFeRD_ に InvoiceNumber トークンと .pdf を付加し、ベース PDF 用の空のドキュメント スロット、入力形式は JSON、InvoiceId、TypeCode 380、InvoiceType RECHNUNG、formatDate 式からの IssueDate と DeliveryDate を含む請求書 JSON データ ブロック、住所を持つ Seller オブジェクトと Buyer オブジェクト、UnitCode C62 を含む LineItems 配列、Totals オブジェクト、出力モードは XML With PDF、ZUGFeRD バージョンは 2 star、適合レベルは EN16931、PDF への請求書レンダリングは Yes に設定されています。

エディタ上ではフィールドがスクロールするため、オブジェクトの一部しか一度に表示されます。上のブロックはオブジェクト全体を表しています。

各設定が決定する内容​

分野ここで価値それが制御するもの
入力形式JSON既製のXMLやCSV行ではなく、構造化されたオブジェクトを提供する。
出力モードXML With PDFハイブリッドファイルを1つ返します。 XML Only 請求書のXMLを単独で返します
ZUGFeRD バージョン2*2.x世代はEN 16931に準拠しています。従来の1.0は準拠していません。
適合レベルEN16931請求書が満たすべきプロファイル、したがってJSONで提供しなければならないキー
請求書をPDF形式でレンダリングするYes同じデータから読みやすい請求書ページを作成します。ベースとなるPDFが提供されていない場合、これがファイルに人間的な要素を与えることになります。
書類空のここに、レターヘッド付きのベースPDFを配置します。空欄のままにしておくと、PDF4meはプレーンなページを生成します。

ヒント。 金額と数量のキーは引用符付きの文字列ではなく、生の数値として到着する必要があります。そのため、それらは parseNumber テキストフィールドは引用符で囲まれています。引用符で囲まれた 「1005」 平文の場合拒否されます 1005 が受け入れられ、返されるエラーメッセージは引用符ではなくスキーマに関するものになります。2番目の引数に注意してください。 parseNumber(1.NetTotal; ".") 小数点区切り文字はドットです。ドットを省略し、 1005,00 失敗するよりも、間違った数値に解析される方が、より悪い結果となる。


ステップ3:電子請求書を記録に戻すにはどうすればよいですか?​

これまでの流れ: トリガーとPDF4meモジュール。

  1. 追加 エアテーブル > 添付ファイルをアップロードする。
  2. 設定する:
    • ベース そして テーブルステップ1と同様
    • レコードID: その id トリガーから
    • 添付ファイル欄: Document
    • ファイル: 出力 PDF4me - ZUGFeRDの請求書を作成する
    • ファイル名: ZUGFeRD_ プラス 請求書番号 プラス .pdf
    • データ: その 書類 モジュール2の出力
    • コンテンツタイプ: PDF file

添付ファイルの設定をアップロードします​

Airtable Upload an attachmentモジュールをBase PDF4me Live Automationsで作成します。テーブルはZUGFeRD Requests、レコードIDはトリガーIDからマッピングされ、添付ファイルフィールドはDocument、ファイルはPDF4me Create a ZUGFeRD invoice outputに設定され、ファイル名はZUGFeRD_にInvoiceNumberトークンと.pdfが付加され、データはモジュール2 Document outputに設定され、コンテンツタイプはPDFファイルになります。

コンテンツの種類はPDFファイルです。スイスのQRコード関連シナリオでは、同じスロットにPNG画像を使用しています。


ステップ4:行に結果をどのように記録しますか?​

これまでの流れ: すべて添付ファイルアップロードを通じて行います。

  1. 追加 エアテーブル > 記録を更新する。
  2. 設定する:
    • ベース そして テーブルステップ1と同様
    • レコードID: その id トリガーから
    • 記録: 書き戻したい内容のみを入力してください。通常はステータスと出力リンクです。

レコード構成を更新する​

Airtable Update を、Base PDF4me Live Automations、Table ZUGFeRD Requests、トリガーからマッピングされた Record ID、およびテーブル フィールド Title、InvoiceNumber、InvoiceDate、DueDate、Currency (マップ切り替えが有効)、SellerName、SellerStreet、SellerPostalCode、SellerCity、SellerCountry を空の入力としてリストするレコード モジュールにします。

テーブルのすべての列がここに表示されます。キャプチャ画像では列が空でパネルがスクロールされているため、ステータスを意図的に設定してください。

ヒント。 マッピングされているが空のフィールドはセルをクリアします。請求書テーブルでは、これはVAT IDが空白であったり、実行結果が成功と報告されたにもかかわらず支払期日が欠落していることを意味します。したがって、意図的に書き込む場合を除き、すべての項目はそのままにしておいてください。


ステップ5:電子請求書をバイヤーに送信するにはどうすればよいでしょうか?​

これまでの流れ: 記録更新を通じてすべて。

ベースに保存されている電子請求書は発行されていません。

  1. 追加 Gmail > メールを送信する。
  2. 設定する:
    • に: その メール トリガーからの列
    • 主題: Your e-invoice プラス 請求書番号
    • 体型: Raw HTML
    • コンテンツ購入者名、請求書番号、合計金額を記載した短いHTML本文
  3. 添付ファイルを追加してください:
    • ファイル: その PDF4me - ZUGFeRDの請求書を作成する 出力
    • ファイル名: ZUGFeRD_ プラス 請求書番号 プラス .pdf
    • データ: その 書類 モジュール2の出力

メール設定を送信​

Gmail のメール送信モジュールを作成し、受信者を「メール」列からマッピングし、件名を「電子請求書」に「請求書番号トークン」を追加し、本文タイプを「生の HTML」とし、購入者に挨拶し、合計金額と通貨を示す HTML コンテンツブロックと、ファイル名が「ZUGFeRD_ + 請求書番号 + .pdf」の PDF4me モジュール出力を添付します。

添付ファイルはモジュール2から取得されるため、Airtableはファイルの読み込みを行いません。


シナリオを実行して検証する​

  1. 保存 シナリオを作成して、一度実行してください。
  2. 行を追加 ZUGFeRD Requests 売り手、買い手、1行の商品、日付とステータスの両方を含む New。
  3. 5つのモジュールすべてが、それぞれ1つの操作を報告する必要があります。
  4. 行を開く: Document このフィールドには、請求書番号と同じ名前のPDFファイルが格納されている必要があります。
  5. 添付ファイルを開いてください。読みやすい請求書ページが表示され、ZUGFeRDバリデーターが同じファイル内にEN 16931 XMLを検出するはずです。
  6. 購入者の受信トレイにメッセージとその添付ファイルが届いているか確認してください。

キャプチャされた実行では、行 RE-2026-0009 ベルリンの Muster GmbH (VAT ID DE123456789) からミュンヘンの Test Kunde AG 宛ての請求書が作成され、コンサルティング 10 ユニットが 100.50 で、メールには合計 1195.95 ユーロと記載されていました。

小数点以下の数値については、グリッドを信用しないでください。 AirtableのグリッドにはVATAmountが表示されます 191 および総計 1196請求書とメールの両方にはこう書いてある 190.95 そして 1195.95再計算は行われません。 TaxTotal そして GrandTotal これらの数値は、2つの列から直接読み取られています。グリッドは、数値フィールドに設定されている精度でそれらを表示しているだけです。数値が矛盾しているように見えるだけなので、誰かが列と請求書を照合しようとする前に、その精度を広げてください。


再構築せずに追加できる一般的なバリエーション​

複数行の請求書
LineItemsは既に配列です。行を別のリンクテーブルに保持し、検索レコードを使用してそれらを取得し、PDF4meモジュールの前にアグリゲーターを使用して配列を構築します。
レターヘッドに載せてください
モジュール2の「ドキュメント」スロットは、ベースとなるPDFファイルを受け取ります。そこにブランドロゴ入りのページを読み込むと、「PDFに請求書をレンダリング」機能が、空白のページではなく、そのページに請求書を描画します。
XMLも別々に保存してください。
購入者によっては、構造化ファイルのみを希望する場合があります。その場合は、出力モードを「XMLのみ」に設定してモジュールを再度実行し、その結果をPDFファイルと一緒に添付してください。
購入者ごとにフォーマットを切り替える
フォーマット列とルーターを追加します。ドイツの公共部門の購買担当者は通常、ハイブリッドファイルではなくXRechnungを希望しますが、これは再構築ではなくルーティングの決定事項です。

これは、他の電子請求書作成方法と比べてどうなのか​

各行はそれぞれ異なる選択肢を示しています。最後の行はこのシナリオを表しています。

比較誰が運営しているのかデータの出所あなたが維持するもの
電子請求書プラットフォームとこのシナリオの比較ポータルを通じて金融アップロードまたは統合文書ごとの契約とそれとの関連性
ERPモジュールとこのシナリオとの比較ERPシステム内の財務ERP独自の台帳ライセンス、およびデータを移行するための
開発者ライブラリとこのシナリオの比較アプリケーション内の開発者コードを通してデータベースをコード、スキーマの更新、リリース
このシナリオAirtableの行を追加できる人チームが既に維持しているベース5つのモジュールと1つのJSONオブジェクト

よくある質問​

買掛金自動化とは何ですか?​

受信側では、請求書が届き、入力なしでその項目が読み取られ、数値が確認され、結果が計上されるか承認のために送付されます。ハイブリッド電子請求書は、データがページの画像から復元されるのではなく埋め込まれているため、読み取りステップの信頼性を高めます。

このシナリオは、その取り決めにおける送信側の役割を担っています。購入者のシステムが解析できるファイルを作成することで、購入者の買掛金処理を自動化することが可能になります。

Airtableで請求書を作成できますか?​

規格に準拠していません。Airtableは請求書データを保存し、インターフェースや印刷可能なビューにレイアウトすることはできますが、EN 16931 XMLに準拠したPDF/A-3形式の請求書を作成することはできません。そして、電子請求書の義務化では、まさにそのような形式の請求書の作成が求められているのです。

このシナリオで使用されている分割方法は、実用的なものです。Airtableがレコードとなり、PDF4meが成果物を生成し、その成果物が添付ファイルとしてレコードに戻ってきます。

買掛金自動化はどのように機能するのですか?​

これは、取り込み、抽出、転記の3つの部分から構成されます。取り込みとは、文書を1か所に集めることです。抽出とは、文書をフィールドに変換することです。転記とは、それらのフィールドを台帳に書き込むことです。通常、転記の前には信頼度または承認ゲートが設けられています。

ハイブリッド型電子請求書は、中間部分を省略します。XMLが既にファイル内に含まれている場合、抽出は認識ではなく解析となるため、規制当局は引き続きこの方向へと推進しています。

Airtableの自動化とは何ですか?​

Airtableには、ベース内でトリガーやアクションを実行するための独自の自動化ビルダーが搭載されており、内部処理の大部分はこれでカバーされます。しかし、ドキュメントAPIを呼び出して添付ファイルフィールド用のファイルを返すことはできません。このシナリオでは、まさにその処理が必要なのです。

Makeがその隣に配置されているのはまさにそのためです。トリガーは引き続きAirtableテーブルを監視しますが、シナリオの中間部分では、Airtable独自の自動化機能ではアクセスできないサービスにアクセスできます。


トラブルシューティング​

モジュールは請求書のJSONを拒否します

実行履歴からモジュールの入力バンドルを開き、JSONとして読み込みます。Airtableの列が空の場合、キーが空になり、引用符付きの金額が数値が期待される場所にテキストとして渡されます。どちらの場合も、見た目は問題ないオブジェクトが生成されますが、変換は失敗します。

バリデーターが適合レベルを拒否する

適合レベルは、プロファイルに必要なフィールドを決定します。JSONファイルにプロファイルが期待するキーが欠落している状態でEN16931を主張すると、ファイルが正常に開いたとしても検証に失敗します。欠落しているキーを指定するか、より低いプロファイルに切り替えてください。

PDFファイルは空白で開きます

「PDFへの請求書レンダリング」が「いいえ」に設定されており、ベースとなるPDFファイルも指定されていないため、XMLファイルが埋め込まれましたが、何も描画されませんでした。ファイル自体は有効な電子請求書ですが、入力欄は空欄になっています。

購入者は、ファイルにXMLが含まれていないと言っています。

出力モードがXML with PDFになっていることを確認し、モジュール3とモジュール5の両方がモジュール2からデータを取得していることを確認してください。それ以外のものを添付すると、見た目は正しくても、ソフトウェアが読み取れない内容を含むページが送信されます。


次のステップ​

委任状は通常、ファイル形式の問題として現れます。つまり、請求書データが既にどこに保存されているのか、そしてそれを読み取れるシステムが存在するのか、という問題なのです。