ブログ

サブスクの売上明細を自動生成する方法

毎月の売上明細をまとめる作業において、対象データの確認や手作業での転記に時間がかかったり、重複して明細を登録してしまったりといった課題はありませんか?

継続的な取引における売上明細の作成は、対象契約が増えるほど作業負担やミスが増加しがちです。そこで本記事では、売上明細の自動生成手順の具体例(サンプル)として「サブスク型の売上管理」を取り上げ、kinkoziデータフロープラグインを活用して対象月の売上計上明細を契約情報から重複なく自動生成する方法をご紹介します。

サブスクリプション型の契約では、契約が継続している間、毎月の売上明細を作成する必要があります。契約件数が少ないうちは手作業でも対応できますが、契約が増えると、対象契約の確認や金額の転記に時間がかかります。すでに作成した明細を再度登録してしまう心配もあります。この記事では、kinkoziデータフロープラグインを使い、対象月の売上計上明細を契約情報から生成する方法を紹介します。
 

今回のサンプルは以下のテンプレートでご確認いただけます。
サブスク売上管理アプリ

目次

  1. 毎月の売上明細作成で起きる課題

  2. 今回実現する処理

  3. 使用するアプリとデータ構成

  4. 売上明細を重複なく生成するフロー

  5. 実行結果を確認する

  6. まとめ

  7. 次回予告

 

毎月の売上明細作成で起きる課題

毎月の売上明細を手作業で作成すると、次のような作業が必要になります。

  • 対象期間中に有効な契約を確認する
  • 顧客名やプラン名、料金を明細へ転記する
  • すでに作成済みの明細がないか確認する
  • 契約件数が増えるたびに同じ作業を繰り返す

特に注意したいのが、同じ契約の売上明細を同じ月に二重登録してしまうことです。

そこで今回は、対象月の既存明細と契約情報を照合し、まだ明細が作られていない契約だけを抽出します。

今回実現する処理

処理を実行する前に、月次売上アプリへ対象月のレコードを1件登録します。

フィールド 入力例
対象開始日 2026-09-01
対象終了日 2026-09-30
対象月 202609
実行前の月次売上レコード
実行前の月次売上レコード。対象期間と対象月を指定していますが、売上計上明細はまだ登録されていません。

月次売上レコードの詳細画面から処理を実行すると、対象期間中の有効な契約を取得し、未作成の売上計上明細だけを追加します。

今回作成するフローの全体像は、次のとおりです。

契約マスターを取得 → 作成済み明細を取得 → アプリ結合 → 未作成契約を抽出 → 明細用データを追加 → 売上計上明細へ出力

売上計上明細を生成するデータフローの全体図
対象期間中の契約と当月の既存明細を結合し、未作成の契約だけを売上計上明細へ出力するフローです。

使用するアプリとデータ構成

月次売上アプリ

処理を実行する対象月を管理するアプリです。対象開始日、対象終了日、対象月を入力して、詳細画面のボタンからデータフローを実行します。

フィールド名 フィールドタイプ
対象開始日 日付
対象終了日 日付
対象月 文字列(1行)

契約マスターアプリ

顧客ごとの契約内容、契約期間、利用プラン、料金を管理します。

顧客コードは顧客マスター、プランコードはプランマスターを参照するルックアップです。顧客名やプラン名などは、それぞれのマスターからコピーします。

フィールド名 フィールドタイプ
契約コード 文字列(1行)
契約状態 ドロップダウン
顧客コード ルックアップ
顧客名 文字列(1行)
プランコード ルックアップ
プラン名 文字列(1行)
契約開始日 日付
契約終了日 日付
税抜単価 数値
消費税 数値
税込金額 数値

売上計上明細アプリ

データフローによって生成された、契約ごとの月次売上明細を保存します。

フィールド名 フィールドタイプ
対象月 文字列(1行)
売上計上日 日付
売上種別 ドロップダウン
契約コード 文字列(1行)
顧客コード 文字列(1行)
顧客名 文字列(1行)
プランコード 文字列(1行)
プラン名 文字列(1行)
税抜金額 数値
消費税 数値
税込金額 数値

売上明細を重複なく生成するフロー

月次売上レコードを処理の起点にする

このフローは、月次売上レコードの詳細画面に配置したボタンから実行します。

実行元レコードの対象開始日、対象終了日、対象月を、契約の絞り込みや売上明細の作成に利用します。

対象期間中の有効な契約を取得する

最初に、契約マスターから対象月と契約期間が重なる契約を取得します。この判定では、月次売上レコードの「対象開始日」と「対象終了日」を利用します。

サンプルでは、次の情報を使って対象契約を絞り込みます。

条件 判定する内容
契約状態が「有効」 売上計上の対象となる契約に限定する
契約開始日が「対象終了日」以前 対象月の最終日までに開始している契約を残す

契約開始日を対象終了日と比較するのがポイントです。たとえば、対象期間が2026年9月1日から9月30日の場合、9月15日に開始する契約も9月分の売上計上対象になり得ます。「契約開始日が対象開始日以前」とすると、このような月途中に開始した契約を除外してしまいます。

契約マスターの入力条件
契約状態が有効で、契約開始日が対象期間の終了日以前となる契約を取得します。

続いて、取得した契約に対して「有効期間内の契約を抽出」フィルターを適用し、契約終了日を確認します。フィルターには次の数式を設定します。

OR(
  ISBLANK(contract_end_date),
  contract_end_date >= #period_start#
)

この数式は、次のどちらかを満たす契約を残します。

  • 契約終了日が空欄で、現在も継続している契約
  • 契約終了日が対象開始日以降で、対象月の開始時点では終了していない契約
有効期間内の契約を抽出するフィルター設定
契約終了日が空欄、または契約終了日が対象期間の開始日以降となる契約を抽出します。

作成済みの売上明細を取得する

次に、売上計上明細アプリから、実行元レコードの対象月と一致する明細を取得します。

取得するフィールドには、契約を照合するための契約コードを含めます。結合後に契約マスター側の契約コードと区別できるよう、明細側のフィールド名を「明細側契約コード」などに変更しておきます。

対象月の売上計上明細を取得する入力設定
対象月と一致する売上計上明細を取得し、契約コードのフィールド名を「明細側契約コード」へ変更します。

4つの結合方法の違い

アプリ結合では、2つの入力を共通する結合キーで照合します。どのレコードを結果に残すかは、次の4種類から選択できます。

結合方法 結果に残るレコード
内部結合 左右の入力で結合キーが一致したレコードだけを残す
左外部結合 左側のレコードをすべて残し、一致した右側の情報を結合する
右外部結合 右側のレコードをすべて残し、一致した左側の情報を結合する
完全外部結合 左右両方のレコードをすべて残し、一致するレコードを結合する

たとえば、左側に契約コード「A・B・C」、右側に「B・C・D」がある場合、結果に残る契約コードは次のようになります。

結合方法 結果
内部結合 B・C
左外部結合 A・B・C
右外部結合 B・C・D
完全外部結合 A・B・C・D

一方にしか存在しないレコードでは、もう一方の入力から追加されるフィールドが空欄になります。この空欄を利用すると、「対応するレコードが存在しない」という状態を判定できます。

なお、同じ結合キーを持つレコードが複数ある場合は、該当する組み合わせの数だけ結果が増えます。意図しない重複を防ぐため、結合キーとして使用する値の持ち方も確認しておきましょう。

左外部結合で未作成の契約を判定する

今回の目的は、対象期間中の契約をすべて残したうえで、当月の売上計上明細が存在するかを調べることです。そのため、契約マスターを左側、作成済みの売上計上明細を右側として、契約コードで左外部結合します。

内部結合を選ぶと、すでに明細が存在する契約だけが残り、これから明細を作成したい契約が結果から消えてしまいます。左外部結合なら、明細が存在しない契約も残せます。

設定項目 設定値
元となる入力 対象期間中の契約
結合する入力 対象月の売上計上明細
結合方法 左外部結合
結合キー 契約コード
契約マスターと売上計上明細の左外部結合設定
有効期間内の契約を左側、当月の売上計上明細を右側として、契約コードで左外部結合します。

左外部結合では、左側に指定した契約レコードがすべて残ります。

すでに売上計上明細がある契約には明細側の情報が結合され、明細がない契約では「明細側契約コード」が空欄になります。

続くフィルターノードで、明細側契約コードが空欄のレコードだけを抽出します。

フィールド 条件 値
明細側契約コード 等しい 空欄

売上明細に必要なデータを作成する

未作成の契約だけに絞り込んだ後、売上計上明細へ保存するフィールドを追加します。

追加するフィールド 設定する値
対象月 実行元の月次売上レコードの対象月
計上日 実行元の月次売上レコードの対象開始日
売上種別 固定値「サブスク」

契約コード、顧客情報、プラン情報、金額については、契約マスターから取得した値をそのまま使用します。

対象月を追加するデータ加工設定
実行元の月次売上レコードに入力された対象月を、新しい「対象月」フィールドへ設定します。
計上日を追加するデータ加工設定
実行元の月次売上レコードの対象開始日を、新しい「計上日」フィールドへ設定します。
売上種別を追加するデータ加工設定
新しい「売上種別」フィールドを作成し、固定値として「サブスク」を設定します。

売上計上明細アプリへ追加する

最後にアプリ出力ノードを配置し、作成したデータを売上計上明細アプリへ保存します。

設定項目 設定値
出力先アプリ 売上計上明細
出力方法 追加

出力フィールドには、次の対応付けを設定します。

出力先フィールド 入力データ
対象月 対象月
売上計上日 計上日
売上種別 売上種別
契約コード 契約マスターの契約コード
顧客コード 契約マスターの顧客コード
顧客名 契約マスターの顧客名
プランコード 契約マスターのプランコード
プラン名 契約マスターのプラン名
税抜金額 契約マスターの税抜単価
消費税 契約マスターの消費税
税込金額 契約マスターの税込金額
売上計上明細アプリへの出力設定
出力先に売上計上明細アプリ、出力方法に「追加」を指定し、入力データを各フィールドへ対応付けます。

実行結果を確認する

未作成の明細だけが追加される

月次売上レコードの詳細画面から処理を実行すると、対象期間中の契約から売上計上明細が作成されます。

売上計上明細を生成するデータフローの完了画面
売上計上明細を生成するフローが正常に完了し、対象期間中の契約から6件の明細が追加されました。

売上計上明細アプリを開くと、契約ごとに対象月の明細が登録されていることを確認できます。

作成された2026年9月分の売上計上明細
対象期間中の有効な契約から、2026年9月分の売上計上明細が6件作成されました。

再実行しても重複しない

同じ月次売上レコードから処理を再実行すると、対象月の既存明細がもう一度取得されます。

作成済みの契約はアプリ結合後のフィルターで除外されるため、同じ契約と対象月の売上計上明細は追加されません。

これにより、処理の再実行が必要になった場合でも、未作成の契約だけを追加できます。

再実行時に未作成契約が0件となるフィルター結果
再実行時はすべての契約に作成済み明細が結合されるため、フィルター通過後は0件になります。

まとめ

今回は、対象期間中の契約から、未作成の売上計上明細だけを生成するフローを作成しました。

  • 月次売上レコードを起点として対象期間と対象月を指定する
  • 契約マスターから計上対象の契約を取得する
  • 対象月の既存明細と左外部結合する
  • 明細側の契約コードが空欄の契約だけを抽出する
  • 必要な情報を追加して売上計上明細へ保存する

左外部結合を使うことで、作成済みかどうかを目視で確認せず、未作成の契約だけを処理できるようになります。

次回予告

次回は、今回作成した売上計上明細を対象月ごとに集計し、売上、税込合計、明細件数を月次売上レコードへ反映するフローを紹介します。

ブログ一覧に戻る