過去の桐井戸端BBS (桐ver.9)
18488 一括処理で最終行の[印刷区分]が「印刷済」であれば終端行でフォームを開き、そうでないときは最終行で開きたい 衣笠百合子 2003/01/14-20:46
フォームはメイン&サブフォームです。
メイン売上.wfmをオープンする一括処理を作りました。

メインは、管理.tbl
サブは、売上マスター.tblです。

納品書を印刷すれば、[印刷区分]に印刷済と入ります。

私の質問は、
最終伝票番号に、[印刷区分]"印刷済"となっていれば、終端行でフォームを開き
[印刷区分]""であれば、最終行でフォームを開きたいのです。

私が組んだ一括処理は

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

表  "売上マスター",モード=共有更新
表  "管理",モード=共有更新
並べ替え {[伝票番号]昇順}
ジャンプ 行番号=終端行
ケース開始
 ケース([印刷区分]="")
   ジャンプ 行番号=最終
 ケース([印刷区分]<>"")
   ジャンプ 行番号=終端行
ケース終了
使用フォーム  "メイン売上"
フォーム形式編集
---------------------------------

こんな一括処理を組みましたが
希望通りになりません。
どこが、どうだめなんでしょうか?
よろしくお願いいたします。

18490 Re:一括処理で質問 KH 2003/01/14-21:14
記事番号18488へのコメント
衣笠百合子さん、こんばんわ。

>最終伝票番号に、[印刷区分]"印刷済"となっていれば、終端行でフォームを開き
>[印刷区分]""であれば、最終行でフォームを開きたいのです。

・・・
ジャンプ 行番号=最終
絞り込み 行数=1
     ケース開始
     ケース([印刷区分]="")
         絞り込み解除 1
         ジャンプ 行番号=最終
     ケース([印刷区分]<>"")    /* またはケース([印刷区分]="印刷済") 
         絞り込み解除 1
         ジャンプ 行番号=終端
     ケース終了
使用フォーム  "メイン売上"
フォーム形式編集
・・・

ではどうでしょうか。ただし、試していませんので・・・。

18492 Re:一括処理で質問 衣笠百合子 2003/01/14-22:20
記事番号18490へのコメント
KHさん、ありがとうございました。
うまく動作しました。


18496 一括処理で行う場合 佐田 守弘 2003/01/14-22:48
記事番号18488へのコメント
衣笠百合子さん
 >希望通りになりません。
 >どこが、どうだめなんでしょうか?
との事ですが、どこがどう希望通りにならないのかをお書き頂く方が
読んでいる人に状況が理解して貰えると思います。

書かれている一括処理をざっと見ただけで気がついた点を述べますと、
 >並べ替え {[伝票番号]昇順}
 >ジャンプ 行番号=終端行
 >ケース開始
の部分で、上記の2行目のジャンプコマンドは、
 ジャンプ 行番号=終端行
ではなくて
 ジャンプ 行番号=最終
でなければなりません。
なぜなら終端行にはデータがないので、これに続くケースコマンドの
条件式の中で、[印刷区分]の値を評価できないからです。

●その他で気がついた点

【未印刷伝票のチェックアルゴリズム】
伝票番号順に並べて、最後の伝票が未印刷の時は(多分)それを印刷し、
そうでないときには新規の入力に備える事をしているらしいのですが、
もし伝票番号の終わりの方に未印刷のデータが複数件あると、最後の
1件だけの印刷処理をするけど、その前の伝票は永久に印刷対象から
外れてしまうおそれがありそうですね。
業務内容が分かりませんから、私にはこれ以上言えませんが、
多分このアルゴリズムだと伝票の発行忘れが発生するおそれがありますね。
最終伝票だけをチェックするのではなく、[印刷区分]が未定義値の行を
絞り込んでみてチェックする方が良いのではないでしょうか。

【フォーム形式編集の方法】
一括処理からフォーム編集に入る場合、良く使われるのは、
ウインドウ作成コマンドでフォームウインドウを作り、ウインドウ会話でフォーム編集に入る方法です。
これ以外の処理プログラムや、メインメニューとの関係で考える必要があるかとは思いますが。

佐田守弘(KS-00119)
18497 イベントで作る場合には 佐田 守弘 2003/01/14-22:54
記事番号18488へのコメント
衣笠百合子さん
桐のバージョンが書かれていないので正しい答えにはなりませんが、
この種のものを作るには、一括処理で組むよりも、イベントで組んだ方が
全体的には簡単に作れると思います。

このケースの場合には、フォームを開いた時に、最終行の[印刷区分]の
値を調べようとしているので、フォーム開始イベントを使います。
作られたイベントハンドラ(手続き定義開始〜手続き定義終了の間)に、
最終行にジャンプさせ、この項目値のチェックをします。
イベントハンドラに記述するコマンドは、質問文に書かれている様な内容です。

ただし直前コメントにも書きました通り、最終行だけの判定で良いかどうかの課題は残ります。

佐田守弘(KS-00119)

戻る