明細行の小計・中計の計算について
いつもお世話になっております。
見積作成プログラムを作成しており、明細データに種別という項目を設けております。
種別には、明細・小計・中計と用意しており、小計・中計をユーザが選択した場合は、それぞれを表示するようにしたいです。
小計・中計の計算はサブタスクのバッチ処理で行うのですが、
レコード後処理でサブタスクをコールしても、書き込みが行われていない状態なので、追加・変更したレコードの金額が反映できません。
レコードの追加・削除・金額変更・移動などを行ったときに、レコード書き込み後にサブタスクを呼び出したいのですが、いい方法はございますでしょうか?
ご教授いただけますと幸いです。
よろしくお願いいたします。
-
今、編集したレコードは、まだ確定していないので、サブタスクやサブPGから自分自身のレコードを読んでも、まだ古い内容のままだったりしますね。
レコード後処理では、V_要再集計 といったフラグにTrueをセットして、レコード前処理で、そのフラグがTrueなら、小計・中計更新バッチタスクを呼び、その後、ビュー再表示などいかがでしょうか? -
nkmtさん
同じくレコード前処理で呼び出す方法で考えていたのですが、
フラグをTrueにするタイミングを、明細の数量・金額が変更された時にしていたため、うまくできておりませんでした。
ご教授いただいた通り、レコード後処理でTrueにすると思い通りの動きになりました。
ありがとうございました。
-
KMさん、
レコード後処理を通過する前にデータを保存したいような場合には、「レコード書込」というイベントが用意されています。
ヘルプを「レコード書込」で検索すると使い方が出てきますよ。
-
オンラインタスクで、メモリWFを編集し、レコード書き込み
→ 子タスクでそのメモリWFをメインソースにして読み込み といった事を試してみたいと思います。
tandaさんありがとうございました。 -
nkmtさん、
「レコード書込」イベントは比較的新しい内部イベントですので、まだご存じないかたも多いと思います。
とても便利ですので、皆さんもぜひ使ってみてください。
-
tandaさん
レコード書込イベントをあまり理解していなかったのですが、改めてヘルプを読むと、どういう処理をしているのか理解できました。
活用していこうと思います。ご教授いただきありがとうございました。
-
オンラインタスクで、メモリWFを編集し、レコード書き込み
→ 子タスクでそのメモリWFをメインソースにしたオンラインタスク
で、今の所、上位オンラインタスクで入力した値が子タスクで表示されません。
私は使いこなせておりません。 -
nkmtさん、
「レコード書込」イベントは、内部的にやっていることは「トランザクションのコミット」です。「Memory」はトランザクションに対応していなかったと。。。
ワークファイルを使うという所作を、トランザクションに変更されることをお勧めします。遅延トランザクションは本当に便利ですよ。
-
ヘルプを見ましたが、以下のような使い方はNGですね。
オンラインタスクで、メモリWFを編集し、レコード書き込み
→ 子タスクでそのメモリWFをメインソースにしたオンラインタスク -
承認待機中と表示されました。初めて目にしました。
-
nkmtさん、
AIで、「フォーラムの荒らし」と判定されると、「承認待機中」になるようです。。。
-
KMさん、tandaさん、以下で成功しました。
オンラインタスクで別レコードへ遷移することなく、編集していたレコードの値を
子タスクで編集していた更新後の内容の把握ができました。 -
nkmtさん、
遅延トランザクションのコミットはなされるんですね。物理トランザクションはないわけです。
考えてみたら、もっともですね。
-
nkmtさん、
その理屈でいくと、Memoryはトランザクションなしでもレコード書込は効くかもです。SQLではトランザクションなしでの書き込みというのはあり得ませんので。
-
結局のところ、
1. Pervasive + Memory
2. SQL + 遅延トランザクションのどちらかの選択が定石になりますね。
-
レコード書き込みイベントは(苦し紛れに)以前使った事がありましたが、ヘルプやtandaさんのアドバイスも再度拝見して理解したいと思います。^^;
-
nkmtさん、
はい、「レコード書込」は便利ですが、一旦書き込んだあとは、ロールバックやアボートはできなくなりますので、その点が要注意です。
-
訂正です。
1. Pervasive + Memory(遅延トランザクションがなかった頃)
2. Pervasive + 遅延トランザクション
3. SQL + 遅延トランザクションのいずれかの選択が定石になりますね。
-
nkmtさん tandaさん
たくさんの情報ありがとうございます。
私もnkmtさんと同じようなサンプルプログラムでテストしてみましたが、成功しました。
これで思い通りの動きができます。ありがとうございました。
サインインしてコメントを残してください。
コメント
19件のコメント