#15 登録時のレシート印刷

パソコンレジでは、売上データが確定したと同時にレシートを発行します。一般的なレシートの印刷については、「レシートプリンタ」という専用のプリンタを用意する必要があります。

レシートプリンタにはさまざまなものがあります。インクジェットやドットインパクト、熱転写といった印字方式の違いも検討すべきですが、データベース側のソフト的処理の面からは、どのようにそのハードウェアを制御するかという点を主に考えなければなりません。

この制御方式あるいはパソコンからのデータの転送方式を分類すると、次のようなものが市販されています。
  • Windowsのプリンタドライバによる方法
  • RS232Cによってコマンドを送出する方法
  • LPTポートにデータを送出する方法

RS232Cを使ってシリアルポートにデータを送出するようなタイプの場合、Windows APIを使ってRS232Cを制御するなどのプログラミングテクニックが必要とされます。また、印刷の開始や改行、レシートのカットなど、どのようなコマンドを送出すればよいのかについては、メーカーや機種によってまったく違います。そこでここでは、一般的なAccessのレポートとしてレシートをデザインする場合のポイントと、印刷を実行するタイミングについてのみ説明するものとします。おそらくプリンタドライバによる方法であればそれでうまく連携されるはずですが、実際に試しているわけではありませんので、その点は留意してください。


レシート用レポートの作成は次のような手順で行います。
  1. 新規レポートのデザインビューを開きます。

  2. 「レコードソース」プロパティとして"qsel納品書請求書"を選択します。
    このクエリは「売上伝票入力」画面のレコードソースである「wtbl売上」や「wtbl売上明細」をメインに構成されているものです。入力画面に表示されているデータは、「tbl売上」といったメインのテーブルではなく、作業用のテーブルと連結されていることがこのデータベースのポイントとなっています。
    ※このクエリには"スポット顧客"がメインの場合には必要でないフィールドも含まれています。できれば必要な項目だけのクエリを新規作成した方がよいかもしれません。

  3. [表示]-[フィールド リスト]メニューによって「フィールド リスト」を表示します。
    フィールドリスト

  4. フィールドリストからレシートに必要と思われる項目をレポート上に配置します。
    このとき、「伝票番号」や「売上日付」など特定の伝票に付随したデータはレポートヘッダーセクションに、また「商品名」や「数量」などの商品明細データは詳細セクションに配置します。

  5. さらに新規にテキストボックスを3つ、レポートフッターセクションに挿入します。

  6. 1つ目のテキストボックスは合計金額を印刷するためのものです。「レコードソース」プロパティを「=Sum([税込金額])」、「書式」プロパティを"通貨"に設定します。

  7. 2つ目のテキストボックスは受取金額を印刷するためのものです。今回の場合このデータはテーブルには保存されていないので、売上伝票入力のフォーム上のテキストボックスを参照するものとします。「レコードソース」プロパティを「=Forms!frm売上伝票入力!frm売上伝票入力_sub!txt受取金額」、「書式」プロパティを"通貨"に設定します。

  8. 3つ目のテキストボックスはおつりの金額を印刷するためのものです。これは上記2つのテキストボックスから演算することができますし、売上伝票入力のフォーム上のテキストボックスを参照することもできます。後者の場合、「レコードソース」プロパティを「=Forms!frm売上伝票入力!frm売上伝票入力_sub!txtおつり」とします。また、「書式」プロパティを"通貨"に設定します。
レポートのデザイン


全体のデザインを整えたあと、「売上伝票入力」画面を開き、各データを入力後、プレビューで確認してみましょう。
レポートのプレビュー結果

さらに既存の「rpt納品書請求書」レポートなどを参考にしてカスタマイズすれば、レポートヘッダーにタイトルを付けたり自社の会社名等を出力したりすることもできます。あるいは基本的なレポートデザインになりますが、フォントを変えたり、色(濃淡)を付けたり、線を加えたり、あるいはイメージコントロールで自社のロゴマークを追加したりすることもできると思います。


続いて、このレポートを出力するタイミングを押さえておきましょう。前述のように、「売上伝票入力」画面のデータは「wtbl売上」や「wtbl売上明細」テーブルと連結しています。これらの作業テーブルは次の伝票番号の入力時にはクリアされてしまいますので、データが正しく入力完了しかつ次伝票に進む前に印刷するようにします。

具体的には、ファンクションキー「F4」が押されたところで呼ばれる登録処理の本体部分、「cbfRegistData」プロシージャで処理するとよいでしょう。ここならメインフォームでF4が押されたときにもサブフォームでF4が押されたときにも処理されますし、事前の入力チェックがOKのときだけ印刷を行うようにすることもできます。

ここでは、次のような記述にします。太字部分が今回追加したところです。

Private Function cbfRegistData() As Boolean
'登録処理を実行

  Dim dbs As Database
  Dim qdf As QueryDef
  Dim varNewSlipNum As Variant

  '返り値の初期値を設定
  cbfRegistData = False

  '入力必須データの未入力チェック
  If IsEmptyData(Me!納品先コード, Me!請求先コード, Me!frm売上伝票入力_sub!txt受取金額) Then Exit Function
  '明細データの未入力チェック
  If IsEmptyDetailData(Me!frm売上伝票入力_sub) Then Exit Function

  If Me!取引区分 = 2 Then
    '売掛のとき、請求先の取引データが登録されているかチェック
    If Not cbfChkTransactData(Me!請求先コード) Then Exit Function
  End If

  '編集中のレコードを強制的に書き込む
  DoCmd.RunCommand acCmdSaveRecord

  'レシートレポートを開く
  DoCmd.OpenReport "レポート1"


  Set dbs = CurrentDb

  If Not IsNull(Me.OpenArgs) Then
    '売上一覧から編集モードで開かれたとき

 (後略)


  • 上記処理においては、万一、プリンタのハードウェアや用紙等が原因で印刷に失敗したときでも、ワークテーブルにあったデータは正式の保存用テーブルに移されます。そのときのリカバリー策として、「売上一覧」画面から「売上伝票入力」画面を表示させたとき、つまり過去の伝票についてもレシートを再発行できるような処理も別途付けておくとよいでしょう。

  • この応用として、レシートではなく「領収書」を発行させることもできます。上記要領でそのレポートを作成し、MsgBoxや専用の選択フォーム、あるいは売上伝票入力画面上のチェックボックスなどによって通常レシートを印刷するか領収書を印刷するかを選択できるようにします。そして、それに応じて実際に出力するレポート名を切り替えてやればよいわけです。

  • このような外部のハードウェアを制御する処理においては、実際には、「事前にハードウェアが動作可能か」、「用紙切れなどが発生していないか」、あるいは「正常に印字が完了したか」などの情報をレシートプリンタ側に問い合わせし、それらを逐一確認しながら所定のコマンドやデータを送るという、より細かい処理が必要となることが多々あります。Accessの通常のレポートで対応できればよいですが、そうでない環境で自分でプログラミングする場合、ハードウェア選定にあたっては、そういったプログラム例などの情報が提供されているか、あるいは簡単に印刷プログラムを作れそうか、COMコンポーネントやActiveXコントロールなどが提供しているかどうかもチェックポイントです。
| Index | Prev | Next |

 

Copyright © T'sWare All rights reserved