【GAS】Google Apps Scriptでマネーフォワードクラウドの請求書を毎月自動発行【④請求書作成篇】

【追記】
この記事のプログラムは2022年時点でのMFクラウド請求書API(v2)を使用しています。
2023年9月30日でv2の提供終了が発表されました。
連載記事を全てお読みいただいた後に、
以下の記事を参考にv3への移行をお願いいたします。

※GASカテゴリー全記事はこちら

こんにちは~!

今回も、前回に引き続き、GASマネーフォワードクラウドの連携をやっていきます!

これまでの記事『Google Apps Scriptでマネーフォワードクラウドの請求書を毎月自動発行』はこちら↓

  1. API準備篇
  2. 認証篇
  3. 請求書データ取得篇

今回は第4回ということで、マネーフォワードクラウドの請求書を作成する手順を紹介します!

あと少しです!頑張っていきましょう!!

GASでのコーディング

それでは、Googleドライブを開き、前回作成したGASを開いてください。

今回もクラシックエディタでも新エディタでもどちらでも大丈夫です!

第1回(API準備篇)第2回(認証篇)では必ずクラシックエディタを使うので、
こちらがまだの方は混乱しないよう注意してください!

私は今回も第3回に引き続き、実行ログを簡単に確認できる新エディタを使っていきます。

まず、実行用関数を下記の通り変更してください。

function start() {
  // 認証
  auth();

  // 請求書一覧取得処理を呼び出し結果文字列を取得してログに出力
  console.log(createNewInvoice_().getContentText());
}

こちらの関数を実行時に指定し実行します。

「auth()」は第2回で作成した認証用の関数です。

次に、上記で呼び出している請求書作成関数「createNewInvoice_()」を下記の通り書いてください。
※billingはご自身の値に書き換えてください(後述)

function createNewInvoice_() {
  // 消費税区分をenumに設定(任意)
  return UrlFetchApp.fetch('https://invoice.moneyforward.com/api/v2/billings?excise_type=enum', {
    method: 'POST',
    contentType: 'application/json',
    muteHttpExceptions: true,
    headers: {
      accept: 'application/json',
      Authorization: 'Bearer ' + getService_().getAccessToken()
    },
    payload: JSON.stringify({
      billing: {
        department_id: '【マネーフォワードに登録している取引先の部門(請求書送付先)のID】',
        payment_condition: '【振込先口座情報】',
        billing_date: '2022-06-01',
        due_date: '2022-06-30',
        sales_date: '2022-05-31',
        billing_number: '202206-000001',
        note: '【取引先への挨拶文や注意書き等】',
        document_name: '請求書',
        items: [
          {
            // 品目コードで品目を指定する場合
            // ※単価・数量・消費税区分は既定値が優先される(プログラムに書いても無視される)ので注意
            code: '【マネーフォワードに登録している品目の品目コード】',
            disp_order: 1
          },
          {
            // 任意の品名・単価・数量・消費税区分を指定する場合
            name: 'テスト',
            unit_price: 20000,
            quantity: 2,
            excise: 'eight_percent_as_reduced_tax_rate',
            disp_order: 2
          }
        ]
      }
    })
  });
}

第1引数及び消費税区分のオプションについての説明は第3回をご覧ください!
公式サイトの消費税区分についての説明はこちら

第2引数のパラメーターは前回とは一部異なります。詳細は下記の通り。

  • method必須
    • APIドキュメントの「請求書の作成」の四角いエリアに書いてあったもの
    • 今回は請求書「作成」なので「POST
  • contentType必須
    • payloadをJSON形式で送信するため「application/json」
    • headersのacceptは結果取得側の設定でこちらは請求書作成内容送信側の設定
  • muteHttpExceptions(任意)
    • エラーとなった場合にエラーメッセージをログ出力して確認するため「true」
    • 「UrlFetchApp.fetch()」は結果がエラーとなるとプログラムごとエラー終了する
  • headers必須)※オブジェクトの中に設定
    • accept…結果をJSON形式で取得するため「application/json」
    • Authorization…認証情報(前回作成したサービスからアクセストークンを取得)
      • 必ず’Bearer ‘と文字列結合させること(半角スペースを忘れずに!)
  • payload必須)※オブジェクトの中に設定
    • リクエストボディとなる請求書作成内容を設定
    • 「JSON.stringify()」でオブジェクトをJSON形式に変換して送信
    • オブジェクトの中に「billing」という名前のオブジェクトを定義
    • 「billing」オブジェクトの中に各項目を設定
    • items(品目)は配列の中に必要な数だけオブジェクトを定義し設定
      • 品目コードを指定する方法品名等をプログラムで指定する方法がある

ここで注意すべき点は、品目をマネーフォワードの品目マスタの品目コードで指定する場合、
単価・数量・消費税区分が品目マスタに設定している既定値の方を優先するということです!

既定値を変更するか、品目コードを諦めて品名等を全てプログラムで指定しまいましょう。

department_idについて

ここまでの説明で、1つ説明していないことがあります。

「payload」の「billing」オブジェクト内の設定項目「department_id」についてです。

これがないと請求書送付先が書かれないのですが、
この「department_id」、一体どこに書いてあるのでしょうか?

というわけで、マネーフォワードクラウド請求書の方に移動しましょう。

画面左側のメニューから、
マスタ管理」→「取引先」をクリックします。

任意の取引先の、
右側にある「詳細」ボタンをクリックします。

下の方に「部門一覧」がありますので、
任意の部門の「編集」ボタンをクリックしてください。

部門編集画面のURLは下記のようになっています。

https://invoice.moneyforward.com/partners?action=departmentEdit&id=[部門ID]&pid=[取引先ID]

ここの「&id=」に続く文字列が部門IDということになります!
※「id」と「pid」を間違えないように注意(「pid」は取引先の方のID)

これをコピーしてプログラムに貼り付けて、実行してみましょう!

無事マネーフォワードクラウド請求書の方に請求書が作成されていれば成功です!

終わりに

今回も最後までお読みいただきありがとうございました!

ちなみに、前回と今回のプログラムを組み合わせれば、
直近の請求書の内容を複製して請求書を作成することも可能です!
※「JSON.parse()」で変換→オブジェクトに代入→「JSON.stringify()」で再変換→payloadに設定し送信

「時間がかかっても自動化を極めたい!」と思える方はプログラミングに向いてると思います!

是非チャレンジしてみてくださいね^^

さて、今回で最終回かと思いきや、まだ終わりではありません!

次回は、請求書を毎月自動発行できるようにする方法を紹介します!お楽しみに!!