レイアウトやデザインを一切気にしない場合の帳票印刷を考えてみる


概要

日本語プログラミング言語「プロデル」を用いて、レイアウトなどを一切気にしない場合に限った簡単な帳票印刷プログラムを作ります。Excelでやったほうが早いとかいう突っ込みはなしで。

準備する物

帳票として印刷したいデータを用意します。本記事ではCSVデータを使用します。例として、下図のような出荷データを用意しました。

作り方

1 ウィンドウに必要な部品を配置する

最低限必要な部品は「テキスト」(又はラベルでも可)×1、「ボタン」×2、「テキスト領域」×1です。お好みのサイズや配置でどうぞ。

必要に応じて各部品を増やしたり、「チェックボックス」や「オプション」なども追加します。

2 ファイルを選択して必要な情報を取得する

上図のボタン1を押したときに、ファイルを選択する画面が表示され、印刷したいデータを選択できるようにします。

ボタン1がクリックされた時の手順
    開く画面のフィルタを、「データファイル|*.csv|すべてのファイル|*.*」に変える
    開く画面を表示する
    もし開く画面のキャンセルなら、手順から抜ける
    ファイル名は、開く画面のファイル名
    テキスト1の内容を[ファイル名]に変える
    データ表を作ってデータとする
    データに{「日付」,「宛先」,「商品」,「数量」}という列を加える
    データへ「[ファイル名]」から読み込む
終わり

開く画面のフィルタを目的のファイル拡張子にしておけば、目的のデータファイルがスムーズに見つけられます。今回の場合はCSVとしています。(手順内の最初の行)
ファイルを選択したら、そのファイル名がテキストに自動的に入力されます。(手順内の5行目)
6行目で「データ表」を作り、8行目で選択したデータの中身を取得します。

3 必要な情報を整理して印刷する

例えば、この先のリンゴの出荷予定が知りたいとしましょう。(データを見れば一目瞭然なのはさておき・・・)
ということで、リンゴの出荷予定について帳票を作ってみましょう。

ボタン2がクリックされた時の手順
    「リンゴの出荷予定表[改行]」をテキスト領域1へ入力する
    日付は、(データの1列目を一覧で取得したもの)
    宛先は、(データの2列目を一覧で取得したもの)
    商品名は、(データの3列目を一覧で取得したもの)
    数量は、(データの4列目を一覧で取得したもの)
    行数を1から1ずつ増やしながら「[商品名の個数]」まで繰り返す
        もし 商品名の[行数]番目の内容が「リンゴ」なら
          「[改行][(日付の[行数]番目の内容)]   [(宛先の[行数]番目の内容)]   [(数量の[行数]番目の内容)]」をテキスト領域1へ入力する
        もし終わり
    繰り返し終わり
    テキスト領域1を確認して印刷する
終わり

まず、印刷する帳票のタイトルとして「リンゴの出荷予定表」を入力します。その後、データからリンゴの出荷予定だけを抜き出し、いつ、どこへ、いくつ出荷するかをテキスト領域に入力するのを繰り返すだけという、構造はとてもシンプルなものです。
最後に、入力が完了したテキスト領域を印刷します。


印刷イメージです。

最終行に合計数を表示したり、日付や宛先ごとにまとめたり、アレンジはいろいろできると思います。

活用例


筆者が開発・公開している「学習支援ソフトKeyKnowledge」では、この仕組みをペーパーテスト作成機能に活用しています。3つまでのデータからランダムに抽出した問題をテキスト領域へ流し込み、ペーパーテストを自動で作成するプログラムです。もちろん、作り方はより複雑になりますが。

最後に

プログラムで帳票を作成しようとすると、罫線の座標指定だの、文字列の配置だのなかなか思うようにいかないことが多々あると思います。しかし、「自分さえ分かればいい」「内部の人間さえ分かればいい」ような帳票類は、今回記した方法もシンプルでよいのかもしれません。もちろんしっかりとした帳票もプロデルで作ることができます。作例がすでにプロデル開発者ゆうと氏により公開されていますので、そちらをご参考ください。https://rdr.utopiat.net/cgi/progbbs/forump.php?mode=viewcode&id=86&rtn=86