2009年6月 5日

アクセスでタックシール作成

 Accessでタックシールを作る案件が出てきて、今日作業をした。受注テーブルから品名などを引っ張ってきてシールに印刷するのだが、たとえば数量500で箱の入数が60だとしたら、「入数60」のシールが8枚と「入数20」のシールが1枚欲しいらしい。で、商品マスターにはまだ標準の入数のデータは入っていないし、歩留まりを考慮して数量の変更も出来るようにしなくてはならない。

 あと、シールは2列×4行で8枚並んでいるが、毎回8の倍数で出てくる訳じゃないので余りが生じる。これにも対応してあげたい(プリンターの故障のことを考えると、一度機械を通した紙、特にシール紙は使わない方がいいんだけど・・・)。

 両方とも以前やったことがある内容だが、2つを同時に処理したことはない。まあなんとかなるでしょうと思いながらスタート。

 まずはクエリを作成し、

「商品コード」「商品名」「数量」

を引っ張ってくる。次に商品マスターも見に行って標準入数を持ってくる。

商品コード,商品A,500,60

 次に割り算をし結果は切り捨てて、標準入数での箱数を計算。

商品コード,商品A,500,60,8

出てきた値×標準入数を数量から引くと、入数の端数が出てくる。端数の有り無しで0か1が入るようにし「箱数2」とした。

商品コード,商品A,500,60,8,20,1

 これらを作業テーブルに書き出すことにした。テストデータではうまく行くが、商品マスターに入数の登録がない商品では0除算でエラーが出るので、IIF関数などを使い回避した。

 作業テーブルをベースにしたフォームを作成し、

「商品コード」「品名」「入数1」「箱数1」「入数2」「箱数2」

を編集できるようにした。使いやすくなればと思い、横の方に数値の合計を表示するようにしておいた。

 指定した枚数分のシールが印刷出来るようにするにはネットで紹介されている技を使った。

----------------------------------

1)カウント用のテーブルを用意する(フィールドは1つ「count」だけ、データは1~n・・・nは最大印刷枚数)

  今回は「一度に印刷するのは最大200枚位」とのことだったので、念のために300までセットした。

2)カウント用のテーブルと上記の作業テーブルを元にクエリを作成。二つのテーブルはコードなどで結ばない。箱数1の列で抽出条件に「>=count」としておく。

----------------------------------

 簡単なシールだったらこのクエリを基に印刷すればいいのだが、今回はもう二ひねりする。

 上記のクエリを追加クエリに変更し、作業テーブル2に書き出す。抽出を「箱数1」でやるものと「箱数2」でやるものをそれぞれ作成。

 作業テーブル1に空データを仕込んでおき、他のデータと区別が出来るようフラグを立てておく。空データだけ開くフォームを作成し、1~8を指定するボタン(タックシールの並びと同じ配置)を設置する。ボタンを押すと空データの箱数1に「指定した数字-1」をセットする。出来上がった空データを処理する追加クエリを作成。

 これら3つの追加クエリを実行し、空データ判別フラグ→商品コード→入数でソートしたデータでタックシールを印刷。入数は降順にする。

 あとは作業データを消去するクエリを作成し、適切に流れるようボタンを配置したりしておしまい。比較的短時間で思っていた通りのものが出来た。出張の限られた時間の中で即興演奏のような作業は非常にいい刺激になる。悔しい思いをすることも多いが、今回はまあうまく行った。

トラックバック(0)

トラックバックURL: http://www.leftkick.com/mt/mt-tb.cgi/1084

コメントする

Powered by Movable Type 4.22-ja