【AppSheet】請求書を作ろう~シンプルver.~
目次
はじめに
今回は請求書作成システムの開発を行ないます。
ひとくちに請求書といっても、様々な形式がありますが、今回作るのは『シンプルバージョン』です。
もちろん、シンプルバージョンと言っても、請求書として必要な項目はすべて揃っているのでご安心ください。
では、さっそく解説していきます!
完成イメージ
以下が完成した請求書作成システムのイメージです。
動画
また、作成された請求書は以下です。
テーブルの設定
テーブルは以下の4つです。
①請求ヘッダ
②請求明細
③入金データ
④顧客データ
⑤検索用
以下、ひとつずつ説明していきます。
①請求ヘッダ
請求書の様な合計と明細が必要な書類は、ヘッダと明細の2つに分割します。
見積書や納品書なども同様ですので、これは1つ覚えておきましょう。
青文字はすべてバーチャルカラムです。
・ID
・請求日(Date)
・支払期限(Date)
・ステータス(Enum)
・顧客名(Ref)
・請求書発行回数(Number)
・PDF(File)
・Related 請求明細s(自動生成)
・Related 入金データs(自動生成)
・10%対象金額(Price)
SUM([Related 請求明細s][10%対象])・8%対象金額(Price)
SUM([Related 請求明細s][8%対象])・0%対象金額(Price)
SUM([Related 請求明細s][0%対象])・請求金額(税込)(Price)
[10%対象金額] * 1.1 + [8%対象金額] * 1.08 + [0%対象金額]・請求金額(税抜)(Price)
SUM([Related 請求明細s][金額])・入金金額合計(Price)
SUM([Related 入金データs][入金金額])・請求残高(Price)
[請求金額(税込)]-[入金金額合計]・10%消費税(Price)
[10%対象金額]*0.1・8%消費税(Price)
[8%対象金額]*0.08・消費税合計(Price)
[10%消費税]+[8%消費税]このテーブルのポイントは「消費税」です。
通常であれば、「消費税」というバーチャルカラムを1つ準備し、SELECTなどを使って計算結果を入れるのですが、ここでは各税区分ごとにカラムを作ってます。
理由は、SELECTを使ったバーチャルカラムは、将来的にデータが増えると重くなるためです。
特に、請求書のような数年にわたり保管義務のあるものはデータ量が莫大になるので、今回のような形式にした方が良いでしょう。
②請求明細
ヘッダを作成したら、次に請求明細を作ります。
それぞれの請求明細に請求ヘッダのIDを持たせることで、それぞれの明細を特定の請求ヘッダにまとめることができます。
カラムは以下の通りです。
・ID(Text)
・請求ヘッダ(Number)
・仕様(Text)
・個数(Number)
・単価(Price)
・税率(Enum)
・10%対象(Price)
IF([税率]="10%",[金額],0)・8%対象(Price)
IF([税率]="8%",[金額],0)・0%対象(Price)
IF([税率]="0%",[金額],0)・備考(Text)
・金額(Price)
[個数]*[単価]10%対象、8%対象、0%対象はFOMULAに関数を入力してください。
また、「税率」からむのEnumは「10%、8%、0%」の三つが選択肢です。
ここでとても重要なこととして、
「%」は必ず全角にしてください。
今回、「税率」カラムはテキストとして読み取らせますが、半角の%だと、勝手に百分率に変換されてしまいます。
そのため、%は必ず全角で表記するようにしてください。
③入金データ
・ID(Text)
・請求ヘッダ(Ref)
・入金日(Date)
・入金金額(Price)
・備考(Text)
③顧客データ
・ID(Text)
・顧客名(Text)
・住所(Text)
・担当者(Text)
・Related 請求ヘッダs(自動生成)
・Related 検索用s(自動生成)
④検索用
・ID(Text)
・開始日(Date)
・終了日(Date)
・顧客名(Ref)
「検索用」テーブルの使いどころは、次のUIのViewの設定で詳しく解説していきます。
Viewの設定
テーブルの設定が終わったら、次はビューの設定に入ります。
ビューの全体像は以下です(わかりやすくAppSheetの画像を添付します)

REFERENCE VIEWSにある3つのビューは、「ダッシュボード」ビューの構成要素になります。
「ダッシュボード」ビューの全体像と動きは以下です。
「検索」ビューで指定された条件で「請求ヘッダ」ビューがフィルターされ、「請求ヘッダ」ビューをクリックすると、その詳細が「請求ヘッダ詳細」ビューに表示されます。
それでは、REFERENCE VIEWSのビューから解説します。
「検索」ビュー
・View name:検索
・For this data:検索用
・View type:detail
View Optionsの「Quick edit columns」で「Add」をクリックし、開始日、終了日、顧客名を追加します。

この「Quick edit columns」、今回の検索機能で重要になります。
ここで選択した項目が、検索時に任意で値を変更できる箇所です。
「請求ヘッダ」ビュー
・View name:請求ヘッダ
・For this data:ダッシュボード請求ヘッダ
※スライスで新規につくります
・View type:deck
View Optionsの「Group by」は「請求日」の「Descending」とします。
スライスの作成
請求ヘッダビューでは、先で作成した「検索」ビューに応じて、表示内容をフィルターさせる必要があります。
このフィルターは、スライスによって制御していきます。
・スライス名:ダッシュボード請求ヘッダ
・Row filter condition
AND(
IF(ISBLANK(検索用[検索用[開始日]]), TRUE, [請求日] >= INDEX(検索用[開始日], 1)),
IF(ISBLANK(検索用[検索用[終了日]]), TRUE, [請求日] <= INDEX(検索用[終了日], 1)),
IF(ISBLANK(検索用[顧客名]), TRUE, IN([顧客名], 検索用[顧客名]))
)まず、ISBLANK()に関しては、未選択の状態を制御しています。
IFを使って、ISBLANK()の場合をTRUEとすることで、選択欄が未選択(空欄)の場合に、すべてのレコードを表示するようにしています。
次に、[請求日] >= INDEX(検索用[開始日], 1)は、開始日より後の請求日の請求ヘッダを表示します。
INDEXを使っている理由は、LIST形式からDate形式に変換するためです。
検索用[開始日]だけだと、List形式となってしまい、Date形式である[請求日]と型が一致しません。
そのため、INDEXを使うことで、List内にある任意の値(今回は[開始日])を抽出し、Date型である[請求日]と比較することができます。
IN()関数については、請求ヘッダの「顧客名」カラムから、検索用の「顧客名」と一致したものにTRUEを返す、という形です。
以上のようなスライスをつくることで、検索による動的な値変換が可能になります。
「請求ヘッダ詳細」ビュー
・View name:請求ヘッダ詳細
・For this data:ダッシュボード請求ヘッダ
・View type:detail
「ダッシュボード」ビュー
・View name:ダッシュボード
・View type:dashboard
View Optionの「View entries」は以下です。
・検索:Tall
・請求ヘッダ:Tall
・請求ヘッダ詳細:Large
また、Interactive modeは必ずONにしてください。
これをONにしておかないと、特定の請求ヘッダをクリックしても、「請求ヘッダ詳細」ビューが動的に動きません。
「顧客データ」
・View name:顧客データ
・For this data:顧客データ
・View type:table
これは顧客データを登録するためのViewなので、自由に設定してください。
以上で、Viewの設定は完了です。