帳票設計書とは、システムが出力する帳票(PDF・印刷物・CSVなど)について、「何を・どこから取り・どんな書式で・どの順に・どこで改ページして出すか」を決めて書いた設計書です。 画面と違って帳票は、件数によってページ数が変わり、並び順や小計の位置まで結果に含まれます。そのため、見た目のレイアウト図だけでなく、改ページ・ソート・集計の決めごとを文章と表で書いておくことが大切です。

この記事では、帳票一覧と帳票項目定義書のテンプレートを、備品貸出システムを題材にした記入例つきで載せます。あわせて、総ページ数の計算と端数処理、数値・日付の編集書式をPythonで検算した結果も示します。

確認環境:Ubuntu 24.04 / Python 3.11(標準ライブラリのみ)。掲載したコードと出力は、この環境で実行したものです。

帳票設計書の早見表

帳票設計書は、次の5つの部品で組み立てます。

部品 書くこと 主な項目
帳票一覧 システムが出す帳票の全体 帳票ID、名称、出力形式、用紙、出力契機、部数
帳票概要 1帳票ごとの目的と条件 目的、利用者、出力条件、想定件数、保存期間
レイアウト どこに何を置くか ヘッダー、明細、小計、合計、フッターの配置
帳票項目定義書 1項目ごとの中身 項目名、取得元、型、桁、編集書式、出力位置、0件時の扱い
出力制御仕様 件数で変わる動き 改ページ条件、ソート順、小計と合計、繰り返し、総ページ数

決め忘れやすい点を、先に一覧にしておきます。

決めること 選択肢の例
0件のとき 帳票を出さない/「該当データなし」と書いた1ページを出す
改ページのきっかけ 行数がいっぱいになったとき/部署などのキーが変わったとき
ページ番号 通し番号(1/7)/グループごとに1から振り直す
桁あふれ 切り捨てる/折り返す/文字を小さくする/# で埋める
端数処理 四捨五入/切り捨て/切り上げ、どの桁で、明細ごとか合計後か
マイナスの表記 -1,234/△1,234/(1,234)
日付 西暦か和暦か、ゼロ埋めの有無、基準は出力日か対象日か
NULL と 0 空欄にする/0 と書く/ハイフンにする

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「帳票設計書の書き方と項目一覧 帳票一覧テンプレートと改ページ」

帳票一覧テンプレートと記入例

帳票一覧は、システムが出力する帳票を1行ずつ並べた表です。最初にこの表を作ると、帳票の数と種類が決まり、見積もりや担当分けの土台になります。

帳票ID 帳票名 出力形式 用紙・向き 出力契機 部数 想定件数 出力先
RPT-001 備品貸出一覧表 PDF A4 横 画面のボタン(随時) 1 最大2,000行 ダウンロード
RPT-002 貸出票 PDF A4 縦 貸出登録の完了時 2(利用者控え・管理者控え) 1件1ページ プリンター
RPT-003 返却期限のお知らせ PDF A4 縦 日次バッチ(毎朝7時) 対象者ごとに1 最大300通 メール添付
RPT-004 備品台帳 CSV ―(UTF-8、カンマ区切り) 画面のボタン(随時) ― 最大10,000行 ダウンロード
RPT-005 月次利用集計表 Excel A4 横 月次バッチ(毎月1日) 1 部署数×備品分類 共有フォルダ

表計算ソフトに貼るときは、次のタブ区切りを使ってください。

帳票ID    帳票名 出力形式    用紙・向き   出力契機    部数  想定件数    出力先
RPT-001 備品貸出一覧表 PDF A4 横    画面のボタン(随時)  1   最大2,000行    ダウンロード
RPT-002 貸出票 PDF A4 縦    貸出登録の完了時    2(利用者控え・管理者控え)  1件1ページ  プリンター
RPT-003 返却期限のお知らせ   PDF A4 縦    日次バッチ(毎朝7時) 対象者ごとに1 最大300通  メール添付
RPT-004 備品台帳    CSV ―(UTF-8、カンマ区切り) 画面のボタン(随時)  ―   最大10,000行   ダウンロード
RPT-005 月次利用集計表 Excel   A4 横    月次バッチ(毎月1日) 1   部署数×備品分類    共有フォルダ

各列の書き方です。

列 書き方
帳票ID RPT-3桁連番のように固定の形にする。削除した番号は再利用しない
帳票名 帳票の上部に印字する名前と同じにする
出力形式 PDF/Excel/CSV/プリンター直接。CSVは文字コードと区切り文字も書く
用紙・向き A4 縦、A4 横など。データファイルは「―」
出力契機 「誰が・何をしたとき」または「いつ動くバッチか」。随時・日次・月次も添える
部数 同じ内容を何部出すか。控えの種類があれば名前も書く
想定件数 最大の行数やページ数。性能とページ数の検討に使う
出力先 ダウンロード、プリンター、メール添付、フォルダなど

「想定件数」を空欄にしないのがポイントです。 最大2,000行なら、1ページ25行で80ページになります。この数字が、生成にかかる時間やファイルの大きさを考える出発点になります。

帳票概要の書き方

1つの帳票について、最初の1ページに次の内容をまとめます。RPT-001 の例です。

項目 記入例
帳票ID・帳票名 RPT-001 備品貸出一覧表
目的 指定した期間の貸出を部署別に一覧し、件数と数量を確かめる
利用者 総務部の備品管理担当
出力条件 貸出日(開始〜終了、必須)、部署(任意、未指定は全部署)、状態(貸出中/返却済み/すべて)
対象データ 貸出テーブルのうち、貸出日が指定期間に入り、取消されていないもの
出力形式・用紙 PDF、A4 横、1ページの明細エリアは25行
ファイル名 備品貸出一覧表_YYYYMMDD_HHMMSS.pdf(出力日時)
0件時 「該当するデータはありません」と書いた1ページを出力する
保存 サーバーには保存しない(その場でダウンロード)

レイアウトの5つの領域

帳票のレイアウトは、多くの場合、次の5つの領域に分けて考えます。領域ごとに「いつ出るか」が決まります。

領域 出る場所 置くものの例
ページヘッダー 各ページの先頭 帳票名、出力条件、出力日時、列見出し
グループヘッダー グループ(部署など)の先頭 部署コード、部署名
明細 データ1件につき1行 貸出日、備品名、数量、利用者
グループフッター グループの最後 部署の小計
ページフッター 各ページの最後 ページ番号、帳票ID

これに、帳票全体の先頭に1回だけ出る表紙と、最後に1回だけ出る総合計を加えることがあります。RPT-001 の配置を文字で表すと、次のようになります。

備品貸出一覧表                          出力日時:2026/10/05 09:05
対象期間:2026/09/01〜2026/09/30        部署:営業部(D020)
--------------------------------------------------------------------
No.  貸出日      備品コード  備品名            数量  利用者    状態
--------------------------------------------------------------------
  1  2026/09/01  EQ-00042    プロジェクター       1  山田太郎  返却済み
  2  2026/09/03  EQ-00108    延長コード 5m        3  鈴木花子  貸出中
  …
                                   営業部 小計  24件   数量 31
--------------------------------------------------------------------
RPT-001                                                        2/7

レイアウト図には、用紙の余白、1ページに入る明細の行数、各項目の開始位置と幅を書き込みます。細かい数値は次の項目定義書に持たせ、図と番号で対応させると、図がすっきりします。

帳票項目定義書の項目と記入例

帳票項目定義書は、帳票に出す1項目につき1行で、中身と書式を決める表です。

No. 領域 項目名 取得元 型 桁 編集書式 出力位置 0件・NULL時
1 ページヘッダー 帳票名 固定文字「備品貸出一覧表」 文字 10 ― 左・1行目 0件でも出力
2 ページヘッダー 出力日時 システム日時 日時 16 YYYY/MM/DD HH:MM 右・1行目 0件でも出力
3 ページヘッダー 対象期間 画面の入力値(開始日・終了日) 日付 21 YYYY/MM/DD〜YYYY/MM/DD 左・2行目 0件でも出力
4 グループヘッダー 部署 部署.部署名、部署.部署コード 文字 20 部署名(部署コード) 中央・2行目 0件の部署は出力しない
5 明細 No. 部署内の連番(1から) 数値 3 右寄せ、ゼロ埋めなし 1列目 ―
6 明細 貸出日 貸出.貸出日 日付 10 YYYY/MM/DD 2列目 ―
7 明細 備品コード 備品.備品コード 文字 8 EQ-+5桁ゼロ埋め 3列目 ―
8 明細 備品名 備品.備品名 文字 全角10 左寄せ、超えた分は切り捨て 4列目 ―
9 明細 数量 貸出.数量 数値 4 右寄せ、桁区切りあり 5列目 NULLは空欄
10 明細 利用者 社員.氏名 文字 全角8 左寄せ 6列目 退職者は「(退職)」を付ける
11 明細 状態 貸出.返却日 文字 全角4 返却日がNULLなら「貸出中」、それ以外は「返却済み」 7列目 ―
12 グループフッター 小計 件数 部署内の明細の件数 数値 5 右寄せ、桁区切り、末尾に「件」 右 ―
13 グループフッター 小計 数量 部署内の数量の合計 数値 7 右寄せ、桁区切り 右 NULLは0として合計
14 最終ページ 総合計 全明細の件数・数量の合計 数値 7 右寄せ、桁区切り 右 0件時は出力しない
15 ページフッター ページ番号 現在ページ/総ページ数 数値 7 N/M 右 0件時は 1/1
16 明細の代わり 0件メッセージ 固定文字「該当するデータはありません」 文字 ― 中央寄せ 明細エリアの1行目 0件のときだけ出力

貼り付け用のタブ区切り(見出しと先頭3行)です。

No. 領域  項目名 取得元 型   桁   編集書式    出力位置    0件・NULL時
1   ページヘッダー 帳票名 固定文字「備品貸出一覧表」   文字  10  ―   左・1行目   0件でも出力
2   ページヘッダー 出力日時    システム日時  日時  16  YYYY/MM/DD HH:MM    右・1行目   0件でも出力
3   ページヘッダー 対象期間    画面の入力値(開始日・終了日) 日付  21  YYYY/MM/DD〜YYYY/MM/DD   左・2行目   0件でも出力

各列の書き方のコツです。

列 書き方
取得元 「テーブル名.列名」で書く。計算する項目は式を、固定の文字は「固定文字」と書く
型 文字/数値/日付/日時。編集する前の型を書く
桁 編集した後に印字する最大の桁数。桁区切りのカンマやマイナス記号も数える
編集書式 ゼロ埋め、桁区切り、寄せ、日付の形、条件による出し分け
出力位置 列の番号、または左端からの位置と幅
0件・NULL時 データが無いとき、値がNULLのときにどう出すか

「取得元」と「0件・NULL時」の2列が、帳票の項目定義ならではの列です。 この2つが埋まっていれば、SQLと出力処理を迷わず書けます。

改ページ・ソート・小計を仕様として書く型

レイアウト図だけでは、件数が増えたときの動きが伝わりません。次の表のように、「項目・仕様・補足」の3列で文章にして書きます。

項目 仕様(RPT-001 の例) 補足
ソート順 第1キー:部署コードの昇順、第2キー:貸出日の昇順、第3キー:貸出IDの昇順 最後のキーを一意な値にして、何度出しても同じ並びにする
改ページ条件1 明細エリアが25行に達したら改ページする 行数は明細・小計・総合計を合わせて数える
改ページ条件2 部署コードが変わったら改ページする ソートの第1キーと同じ項目にする
ページヘッダー すべてのページに繰り返し出力する 列見出しも含む
グループヘッダー 部署が次のページに続く場合も、部署名を繰り返し出力する 続きのページだとわかるようにする
小計 部署の最後の明細の次の行に、件数と数量の小計を1行出力する 入らないときは次のページの先頭に出力する
総合計 最後の部署の小計の次の行に1行出力する 入らないときは次のページに出力する
ページ番号 帳票全体の通し番号を「現在ページ/総ページ数」で出力する 部署ごとに振り直さない
ページフッター すべてのページに繰り返し出力する 帳票IDとページ番号
0件の部署 出力しない ページも小計も作らない
全体が0件 ヘッダーと0件メッセージを書いた1ページを出力する ページ番号は 1/1

改ページのキーは、必ずソートの上位キーにします。 部署で改ページするのに貸出日で並べると、同じ部署が何度も現れて、そのたびにページが変わってしまいます。

ソート順を書くときは、次の点も決めておくと、開発とテストで結果がそろいます。

決めること 例
昇順か降順か キーごとに書く
NULLの位置 先頭に並べるか、末尾に並べるか
文字の並び コード順か、読みがな順か(読みがなの列が必要)
同じ値のときの順 最後に一意なキー(IDなど)を足す

総ページ数の計算と端数処理をPythonで検算する

改ページ条件が行数だけのとき

1ページに25行入る帳票で、明細がN行あるときの総ページ数は、N÷25 の切り上げです。0件でも1ページ出す仕様なら、1との大きいほうを取ります。

import math

def total_pages(rows, per_page):
    """改ページ条件なし。0件でも「該当データなし」の1ページを出す仕様。"""
    return max(1, math.ceil(rows / per_page))

for rows in (0, 1, 24, 25, 26, 50, 51, 1000):
    print(f"明細{rows:>5}行 ÷ 25行/ページ → {total_pages(rows, 25):>3}ページ")

print(-(-51 // 25), (51 + 25 - 1) // 25, math.ceil(51 / 25), round(51 / 25), 51 // 25)

実行結果

明細    0行 ÷ 25行/ページ →   1ページ
明細    1行 ÷ 25行/ページ →   1ページ
明細   24行 ÷ 25行/ページ →   1ページ
明細   25行 ÷ 25行/ページ →   1ページ
明細   26行 ÷ 25行/ページ →   2ページ
明細   50行 ÷ 25行/ページ →   2ページ
明細   51行 ÷ 25行/ページ →   3ページ
明細 1000行 ÷ 25行/ページ →  40ページ
3 3 3 2 2

最後の行は、51行を25行ずつに分けるときの5通りの書き方を比べたものです。左から3つ(-(-51 // 25)、(51 + 25 - 1) // 25、math.ceil(51 / 25))は切り上げで3ページになります。round と //(切り捨て)は2ページになり、最後の1行が入るページが足りなくなります。 ページ数の端数は必ず切り上げます。確かめる値は、24・25・26行のように、ちょうど1ページになる行数とその前後です。

部署ごとの改ページと小計があるとき

改ページ条件にキーの切り替わりが加わると、計算は部署ごとになります。

部署ごとのページ数 = (明細の行数 + 小計1行)÷ 1ページの行数 の切り上げ
総ページ数 = 部署ごとのページ数の合計(総合計の1行が最後のページに入らなければ +1)

この式が正しいかを、1行ずつ並べて数える方法と突き合わせます。総務部12件、営業部24件、開発部25件、企画部61件、広報部0件の例です。

import math

PER_PAGE = 25          # 1ページに入る明細エリアの行数
groups = [("総務部", 12), ("営業部", 24), ("開発部", 25), ("企画部", 61), ("広報部", 0)]

def by_formula(groups, per_page):
    """部署が変わったら改ページ。各部署の最後に小計1行、最終ページに総合計1行。"""
    pages = 0
    last_used = 0
    for _, rows in groups:
        if rows == 0:
            continue                      # 0件の部署は出力しない仕様
        lines = rows + 1                  # 明細 + 小計1行
        pages += math.ceil(lines / per_page)
        last_used = lines % per_page or per_page
    if pages == 0:
        return 1                          # 全体が0件なら「該当データなし」の1ページ
    if last_used + 1 > per_page:          # 総合計の1行が入らなければ次のページへ
        pages += 1
    return pages

def by_layout(groups, per_page):
    """実際に1行ずつ並べてページを作る(検算用)。"""
    pages, page = [], []
    def put(line):
        nonlocal page
        if len(page) == per_page:
            pages.append(page); page = []
        page.append(line)
    for name, rows in groups:
        if rows == 0:
            continue
        if page:                          # 部署が変わったら改ページ
            pages.append(page); page = []
        for i in range(1, rows + 1):
            put(f"{name} 明細{i}")
        put(f"{name} 小計")
    if not pages and not page:
        return [["該当データなし"]]
    put("総合計")
    pages.append(page)
    return pages

pages = by_layout(groups, PER_PAGE)
for no, p in enumerate(pages, 1):
    print(f"{no}/{len(pages)}ページ {len(p):>2}行  先頭: {p[0]:<10} 末尾: {p[-1]}")
print("式で求めた総ページ数:", by_formula(groups, PER_PAGE))
print("並べて数えた総ページ数:", len(pages))

for case in ([("総務部", 24)], [("総務部", 23)], [("総務部", 0)], [("総務部", 25), ("営業部", 49)]):
    a, b = by_formula(case, PER_PAGE), len(by_layout(case, PER_PAGE))
    print(case, "→ 式", a, "/ 並べて", b, "一致" if a == b else "不一致")

実行結果

1/7ページ 13行  先頭: 総務部 明細1    末尾: 総務部 小計
2/7ページ 25行  先頭: 営業部 明細1    末尾: 営業部 小計
3/7ページ 25行  先頭: 開発部 明細1    末尾: 開発部 明細25
4/7ページ  1行  先頭: 開発部 小計     末尾: 開発部 小計
5/7ページ 25行  先頭: 企画部 明細1    末尾: 企画部 明細25
6/7ページ 25行  先頭: 企画部 明細26   末尾: 企画部 明細50
7/7ページ 13行  先頭: 企画部 明細51   末尾: 総合計
式で求めた総ページ数: 7
並べて数えた総ページ数: 7
[('総務部', 24)] → 式 2 / 並べて 2 一致
[('総務部', 23)] → 式 1 / 並べて 1 一致
[('総務部', 0)] → 式 1 / 並べて 1 一致
[('総務部', 25), ('営業部', 49)] → 式 5 / 並べて 5 一致

この結果から、仕様に書いておくべき3つの点が読み取れます。

見えたこと 仕様に書くこと
開発部は明細25行でページが埋まり、小計だけが4ページ目に出た 小計だけのページを認めるか。認めないなら「最後の明細1行を小計と一緒に次のページへ送る」と書く
総務部24件だけのときは、小計で25行が埋まり、総合計だけの2ページ目ができた 総合計だけのページを認めるか
122行÷25行の切り上げは5ページだが、帳票は7ページになった 総ページ数は、全体の行数ではなく部署ごとに計算する

小計・総合計の行数と、キーによる改ページを含めて計算するのが、総ページ数のポイントです。想定件数から最大ページ数を見積もるときも、同じ式を使います。

数値・日付の編集書式の早見表

編集書式は、同じ値でも書き方がいくつもあります。項目定義書には、下の表の「書式の名前」と「出力例」を組にして書くと伝わりやすくなります。出力例は、表の後のコードで確かめた値です。

数値・文字

書式の名前 元の値 出力例 主な用途
ゼロ埋め5桁 42 00042 コード、伝票番号
右寄せ5桁(空白埋め) 42 42(前に空白3つ) 数量、件数
桁区切り 1234567 1,234,567 数量、合計
マイナス(符号) -1234567 -1,234,567 差分
マイナス(三角) -1234567 △1,234,567 差分
マイナス(かっこ) -1234567 (1,234,567) 差分
小数2桁+桁区切り 1234.5 1,234.50 平均、単位あたりの値
パーセント小数1桁 0.125 12.5% 割合
ゼロの表示 0 0(空欄やハイフンにする場合は明記) 数量
左寄せ8桁 A-12 A-12(後ろに空白4つ) コード、名称
右寄せ8桁 A-12 A-12(前に空白4つ) 右端をそろえる項目
全角空白で6文字に埋める 備品 備品+全角空白4つ 固定幅の名称
先頭10文字で切る ノートPC 14型 メモリ16GB ノートPC 14型(後ろに空白1つ) 桁あふれの対策

日付・時刻

書式の名前 出力例(2026年10月5日 9時5分)
西暦スラッシュ区切り(ゼロ埋め) 2026/10/05
西暦ハイフン区切り 2026-10-05
西暦の年月日(ゼロ埋めなし) 2026年10月5日
西暦下2桁の6桁 261005
曜日 月
時刻(24時間、ゼロ埋め) 09:05
和暦(漢字) 令和8年10月5日
和暦(記号と2桁) R08.10.05

和暦は、元号が切り替わる日と「元年」の書き方を決めておきます。2019年5月1日は「令和元年5月1日」、その前日は「平成31年4月30日」です。

端数処理

元の値 四捨五入 切り捨て 切り上げ 偶数丸め
2.5(整数に) 3 2 3 2
3.5(整数に) 4 3 4 4
0.125(小数2桁に) 0.13 0.12 0.13 0.12
-2.5(整数に) -3 -2 -3 -2

Pythonの組み込みの round は偶数丸めで、round(2.5) は2になります。 帳票で四捨五入と決めたら、decimal モジュールの ROUND_HALF_UP のように、丸め方を明示できる方法で実装します。マイナスの値は、切り捨てが「0に近づける」のか「小さいほうへ」なのかも仕様に書きます(上の表は0に近づける切り捨てと、0から遠ざける切り上げです)。

割合を丸めて並べると、合計が100%にならないことがあります。3等分した 33.3% を3つ足すと 99.9% です。「合計欄は明細を足さず100.0%と出す」「差は最大の項目で調整する」など、扱いを決めて書きます。

検算に使ったコード

from datetime import date, datetime
from decimal import Decimal, ROUND_HALF_UP, ROUND_DOWN, ROUND_UP, ROUND_HALF_EVEN

n = 1234567
print(f"{42:05d}", f"{42:>5d}|", f"{n:,}", f"{-n:,}", f"△{abs(-n):,}", f"({abs(-n):,})")
print(f"{1234.5:,.2f}", f"{0.125:.1%}", f"{0:,}", f"{'A-12':<8}|", f"{'A-12':>8}|")
print(str(7).zfill(3), "備品".ljust(6, " ") + "|", "ノートPC 14型 メモリ16GB"[:10])

d = date(2026, 10, 5)
print(d.strftime("%Y/%m/%d"), d.strftime("%Y-%m-%d"), f"{d.year}年{d.month}月{d.day}日", d.strftime("%y%m%d"))
print("月火水木金土日"[d.weekday()], datetime(2026, 10, 5, 9, 5).strftime("%H:%M"))

ERAS = [(date(2019, 5, 1), "令和", "R"), (date(1989, 1, 8), "平成", "H"), (date(1926, 12, 25), "昭和", "S")]
def wareki(d, short=False):
    for start, name, initial in ERAS:
        if d >= start:
            y = d.year - start.year + 1
            if short:
                return f"{initial}{y:02d}.{d.month:02d}.{d.day:02d}"
            return f"{name}{'元' if y == 1 else y}年{d.month}月{d.day}日"
    raise ValueError("対象外の日付")
for x in (date(2026, 10, 5), date(2019, 5, 1), date(2019, 4, 30), date(1989, 1, 7)):
    print(x, wareki(x), wareki(x, True))

for v in ("2.5", "3.5", "0.125", "-2.5"):
    x = Decimal(v)
    q = Decimal("1") if v != "0.125" else Decimal("0.01")
    print(v, "四捨五入", x.quantize(q, ROUND_HALF_UP), "切り捨て", x.quantize(q, ROUND_DOWN),
          "切り上げ", x.quantize(q, ROUND_UP), "偶数丸め", x.quantize(q, ROUND_HALF_EVEN))
print(round(2.5), round(3.5), round(0.125, 2))
parts = [Decimal("33.3"), Decimal("33.3"), Decimal("33.3")]
print(sum(parts), [f"{p}%" for p in parts])

実行結果

00042    42| 1,234,567 -1,234,567 △1,234,567 (1,234,567)
1,234.50 12.5% 0 A-12    |     A-12|
007 備品    | ノートPC 14型 
2026/10/05 2026-10-05 2026年10月5日 261005
月 09:05
2026-10-05 令和8年10月5日 R08.10.05
2019-05-01 令和元年5月1日 R01.05.01
2019-04-30 平成31年4月30日 H31.04.30
1989-01-07 昭和64年1月7日 S64.01.07
2.5 四捨五入 3 切り捨て 2 切り上げ 3 偶数丸め 2
3.5 四捨五入 4 切り捨て 3 切り上げ 4 偶数丸め 4
0.125 四捨五入 0.13 切り捨て 0.12 切り上げ 0.13 偶数丸め 0.12
-2.5 四捨五入 -3 切り捨て -2 切り上げ -3 偶数丸め -2
2 4 0.12
99.9 ['33.3%', '33.3%', '33.3%']

右寄せや左寄せの結果は、空白がわかるように末尾に縦棒を付けて出力しています。

帳票設計書のレビューチェックリスト

観点 確かめること
帳票一覧 すべての帳票に、出力形式・用紙・出力契機・部数・想定件数が書かれているか
取得元 すべての項目に、テーブル名と列名、または計算式が書かれているか
桁 最大の値を入れたとき、桁区切りや符号を含めて枠に収まるか
桁あふれ 収まらないときの扱い(切り捨て・折り返し)が書かれているか
0件 全体が0件のとき、グループが0件のときの出力が決まっているか
NULL NULLのときの表示(空欄・0・ハイフン)が項目ごとに決まっているか
ソート 最後のキーが一意で、何度出しても同じ並びになるか
改ページ 改ページのキーが、ソートの上位キーと一致しているか
小計・合計 出す位置、ページに入らないときの扱いが書かれているか
ページ数 ちょうど1ページになる行数と、その前後でページ数を確かめたか
端数処理 丸め方、丸める桁、丸めるタイミング(明細ごとか合計後か)が書かれているか
日付 西暦か和暦か、基準が出力日か対象日かが書かれているか
最大件数 想定の最大件数で、生成時間とファイルの大きさを見積もったか

よくある質問

Q. 帳票設計書は基本設計と詳細設計のどちらで書きますか? A. 帳票一覧・帳票概要・レイアウトは基本設計で、項目定義書と出力制御仕様(改ページ・ソート・集計)の細部は詳細設計で書くことが多いです。分け方は開発の進め方によって変わるので、「利用者と合意する内容」を先に、「実装に必要な細部」を後に書くと考えると決めやすくなります。

Q. CSVやExcelの出力にも帳票設計書は必要ですか? A. 必要です。用紙や改ページは無くなりますが、項目の順番、取得元、型、編集書式、ソート順、0件時の扱いは同じように決めます。CSVでは、文字コード、区切り文字、見出し行の有無、改行コード、値にカンマや改行が入るときの囲み方も書きます。

Q. 1ページの行数はどう決めますか? A. 用紙の高さから上下の余白、ページヘッダー、ページフッターの高さを引き、残りを1行の高さで割って、端数を切り捨てます。ページ数は切り上げ、1ページに入る行数は切り捨て、と向きが逆になる点に気をつけてください。

Q. 総ページ数(N/M の M)は、どの時点でわかりますか? A. 全体を最後まで並べ終えた時点で確定します。そのため、先に全ページを組んでから総ページ数を書き込むか、この記事の式で先に計算します。使う帳票ツールが総ページ数の出力に対応しているかは、設計の早い段階で確かめておくと安心です。

まとめ

  • 帳票設計書は、帳票一覧・帳票概要・レイアウト・項目定義書・出力制御仕様の5つの部品で書く
  • 帳票一覧には、帳票ID・名称・出力形式・用紙・出力契機・部数・想定件数を1行ずつ書く
  • 項目定義書は、取得元・型・桁・編集書式・出力位置・0件とNULLの扱いを1項目1行で決める
  • 改ページ・ソート・小計と合計・繰り返しは、図だけに頼らず「項目・仕様・補足」の表で文章にする
  • 総ページ数は切り上げで求める。キーによる改ページがあるときは、小計の行を足して部署ごとに計算する
  • ちょうど1ページになる行数とその前後、0件で、ページ数と小計の位置を確かめる
  • 編集書式は書式の名前と出力例を組にして書き、端数処理は丸め方・桁・タイミングまで決める

本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。

(記載例)出典:株式会社RJC「帳票設計書の書き方と項目一覧 帳票一覧テンプレートと改ページ」

株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。

WE ARE HIRING

RJCで一緒に開発しながら、
成長を楽しみませんか?

RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!

  • 127日年間休日
  • 12時間平均残業時間
  • 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!

ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。

ABOUT RJC RJCがどんな会社か知る 考え方、研修、働き方、福利厚生、社員の前職まで。RJCのことが丸わかり! RJC丸わかりページへ JOB DESCRIPTION 仕事内容・待遇を見てみる 仕事内容、給与・待遇、選考の流れ。経験者も未経験も!応募前に知りたいこと、まとめました! 募集要項を見る ENTRY エントリーする エントリーは1〜2分・履歴書不要です。まずは話を聞いてみたい、という方でも歓迎です! エントリーフォームへ

RJCで一緒に開発しながら、 成長を楽しみませんか?