4)伝票形式の場合

81 views

プログラムの仕様

  • 伝票番号を入力する
  • 新規登録の場合は0番、修正の場合は該当する番号を入力する
  • 更新、削除ができるようにする。新規登録時は更新のみ
  • 0番を受けて登録を行ったときに最新番号を取得し設定する

その他該当プログラム

M0011、M0021、M0031、M0041


タスクの構造


S0010(オンライン):伝票番号を入力する。
Head(オンライン):伝票番号を元にヘッダ情報を取得し、変数項目に展開する
List(オンライン):メモリテーブル。伝票番号を元にリスト形式を展開、入力可能にする

更新項目(バッチ)

Head、Listはそれぞれ変数、メモリテーブルなので実データに展開を行う
ワークファイル更新処理(バッチ)
実データをHead、Listの変数やメモリテーブルへ展開するためのバッチが必要になります。

なぜこのタスク構造になるのか?

Head、Listを実データにしない理由ですが、例えば削除前に実データを在庫に戻すなど修正前のデータが必要な場合が多いためにこういったタスク構造にしました。

そういう実データを使った制御がない場合はHead、Listとも実データを使ってもよいと思います。
また、実データとのやり取りは一瞬だけで行いたかったので更新処理バッチに対してトランザクションをかけるようにしました。


タスク特性について

S0010(メインタスク)の場合


タスクタイプ:Web Client
インタラクデティブ:入力画面なのでチェックをつける
初期モード:変数項目を修正できるように修正モードに設定します


ルート:ルーティングによってのS0010で呼ばれるためルート名をS0010に設定する。


トランザクション:データベースの更新がありませんのでなしに設定します。


Head(サブタスク)の場合


タスクタイプ:Web Client
インタラクデティブ:入力画面なのでチェックをつける
初期モード:変数項目を修正できるように修正モードに設定します


トランザクション:データベースの更新がありませんのでなしに設定します。


List(Headのサブタスク)の場合


タスクタイプ:Web Client
インタラクデティブ:入力画面なのでチェックをつける
初期モード:変数項目を修正できるように修正モードに設定します


トランザクション:
データベースの更新があります。
また、引き継ぐトランザクションもないため新規の遅延トランザクションに設定します。
メモリテーブルを1行づつ確定させたいため、トランザクションをレコード前の前に開始します。
Listタスクはメモリテーブルを使用したテーブルなので、ビューの事前読み込みをISAM系同様Yesにします。


データビュー、ロジック、フォームについて

S0010(メインタスク)の場合

データビュー


メインソースは未定義のままにします。
伝票番号を入れる項目画.伝票番号を指定します。

フォーム


伝票番号とHeadを表示するサブフォームを設置します。
サブフォーム
キャッシュ:No
自動再表示:式に「伝票番号が0ならば」という条件を入れます。
True(伝票番号が0の時)は自動的に再表示され、0以外の場合は数値が変わった時の自動再表示は行いません。
イベントのサブフォーム再表示にて更新を行います。


伝票番号にはズームボタンの表示をTrueにします。
Trueにすることで項目をクリックした場合ズームイベントが実行されます。

ロジック

伝票番号のコントロール前


コントロール前ですが、最初起動されたときは29行目から始まります。
受注伝票の削除、伝票番号に0を設定、ワークファイルを0で初期化、サブフォームの表示となります。

更新または削除ボタンを押されたのち、伝票番号に戻ってきた場合、受注書の発行を行いプレビューも行います。

伝票番号のコントロール後処理


伝票番号変更時にワークファイルを作成、再表示を行います。

伝票番号にてズーム処理を行った場合


伝票番号を取得後にワークファイルを作成、再表示を行います。


Head(サブタスク)の場合

データビュー



メインソースには何も指定しません。
4~6行目はボタン変数を設定しております。
ヘッダには基本22行目から28行目のように変数を使用しております。
11行目~20行目にて伝票番号で位置付けしたデータを22~28行目で代入しております。

なお消費税はコードにて10%を書いておりますが、消費税マスタなどを作成して値を取得しましょう。

フォーム


入力項目はすべて変数にて行っております。
右上にボタンを配置しておりますが、Magicフォーム上ではどこでも構いません。


一番左の更新ボタンにはイベントPressESCを割り当てております。
ユーザーイベントは以下のようになっております。



削除はPressF3を割り当てております。


キャンセルはPressF2を割り当てております。


明細を表示するサブフォームですが
キャッシュ:False、自動再表示:True、非表示の再表示はTrueとなります。
伝票番号を受け取るパラメーターが変更されるたびに明細表示をリロードいたします。

ロジック

PressESC(更新処理)

明細行がない場合は更新できません。

更新確認をおこなってOKの場合、伝票番号が0の場合はここで新規の伝票番号を取得します。
更新処理バッチを走らせて親タスクの伝票番号入力へと移動します。

親タスクの伝票番号では、項目前処理により伝票番号が0になりヘッダ、明細の再描画がお行われます。

PressF3(伝票削除処理)

削除フラグをTrueにして更新処理を行います。
その後の伝票番号入力項目への移動はPressESCと同じ処理を行います。

PressF2(キャンセル)

更新処理も行わずに親タスクの伝票番号入力項目へ移動しますので、何も更新されずにキャンセル扱い同様の動きとなります。


ListHead(Headのサブタスク)の場合

データビュー


メインソースには受注明細テーブルが指定されています。これはメモリテーブルです。
同様に1行受注明細テーブルをデータリンクしていますが、方向が逆方向になっていることに注目してください。
常に最後の受注明細番号を確保しているということです。

フォーム


フォームにはテーブルにコントロールを配置したものとボタンになります。
左側には削除、右側にはデータの挿入ボタンを配置します。

ロジック

行挿入・行削除

主に行挿入、行削除の処理となります。
今回は1,2,3行目があった場合、2行目と3行目の間に何もせずに行挿入を行うと1,2,4,3となるのですが
最初に2行目以降のデータを+1することで、1,2,4としたのちに3行目を挿入する方法です。

2行目削除の場合は、一旦自行を0行目にして0,1,3としてから
2行目以降を-1することで0,1,2として0行目を削除する方法です。

削除


一旦確定させてから行削除を行います。
現在のタスクが削除モードになりレコード後処理が動きます。

レコード後処理


Stat(0,’D’MODE)現在のタスクが削除モードならIF文の中が動きます。
行削除処理をおこなって明細行の再表示を行います。

挿入処理


現在のレコードを確定させてからF4キーイベントを動かします。

Stat(0,’M’MODE)ということで、新規追加行の上では再度追加できないことがわかります。
行挿入処理を行って明細行の再表示を行います。


バッチ処理について

更新処理の場合


更新時にヘッダの変数および明細のメモリテーブルを実データに反映させます。
明細削除時の前に現在の数量を在庫ファイルに追加して、明細更新処理で在庫ファイルから数量を引くなどの処理も行うことができます。

更新処理データビュー


このタスク以降トランザクションを開始すると、メインソースを定義していないので受注テーブルと受注明細テーブルを宣言してトランザクションを開始できるようにします。


メインソースがないので
タスク終了条件:Yes
チェック時期:後置
と設定し、1回だけ動かすようにします。


オープンしたときに物理トランザクションをかけます。

更新処理ロジック


S0010タスクにある更新フラグをTrueにして伝票番号に項目が移動した場合のフラグを確定させます。
更新・削除処理ともヘッダ削除、明細削除を行います。
在庫のプラスは大体この上に書きます。

データを更新する場合はヘッダ更新、明細更新を行い実データに対してヘッダ変数と明細メモリテーブルを反映させます。 
在庫ファイルがある場合はこのあとに記述します。

ワークファイル更新処理


明細テーブルを一度クリアしたのちに、伝票番号によって合致する明細テーブルをメモリテーブルに反映させます。

以上で伝票形式の説明を終わります。

Share this Article

4)伝票形式の場合

Or copy link

CONTENTS