最終明細行の行削除を行うと、ヘッダメモリ・明細メモリ(全行)が消えてしまう
ヘッダ、明細関係のプログラムで、
明細最終行の行削除を行うと、一時テーブルのヘッダメモリ、
明細メモリに登録されているレコードがすべて消えてしまいます。
先頭行や中間行の行削除は問題ありませんでした。
考えられる原因があれば、ご教示お願いいたします。
-
一般的なキーボード設定だとF3キーで1レコード削除ですが、削除はどのようにして行っているのですか?
-
nkmtさん
ご返信ありがとうございます。
キーボードの設定は変更しておりませんので、F3キーを押しています。
-
明細最終行の行削除をF3キーで行えるという事ですし
明細最終行にパーキング時、画面の右下には
修正 と表示されているのですよね?
mgerror.logには何も書かれていませんか?
明細入力タスクのレコード後処理に、アクション 式=DELAY(1) を追加し
そこにブレイクポイントを設けて
デバッグモードで実行して、明細最終行の行削除を行い
ブレイクポイントで止まったらF11ボタンを押すとステップ実行で何かわかるかもしれません。 -
mariさん、
画面に表示されていたレコードが「消える」という現象は次の2つが考えらます。
1. 画面上、表示がなされていないだけ。
2. レコードが物理的に削除された。どちらに該当するかは、データリポジトリでテーブルをオープンして確認してみるといいですよ。
-
mariさん、
あと、補足ですが、「メモリテーブル」というのはあくまでメモリ上に展開されているだけのテーブルですので、Magicを再起動したりすると、自動的に全部消えますよ。
-
mariさん、
ちなみに、「メモリテーブル」と「遅延トランザクション」というのは、このような用途においては、やっていることはほとんど同じです。
「メモリテーブル」を使った場合は、毎回バッチでデータを書き戻してやる必要があるのですが、「遅延トランザクション」を使った場合は、Magicが書き戻し処理を自動で行なってくれますので、プログラムが大幅に簡潔になります。
-
nkmtさん、tandaさん
ご返信遅くなり申し訳ございません。
明細最終行がパーキング時には、画面の右下は修正になっています。
mgerror.logを確認したところ、「インデックスが重複しています」というエラーが出ていました。
また、データリポジトリでメモリテーブルをオープンすると、レコードが消えていました。
まずは、エラーの解決をしたいと思います。
mgerror.logの該当エラーの右端に出ているタスクでエラーが発生したのでしょうか?
引き続き、ご教示いただけますと幸いです。
よろしくお願いいたします。
-
質問者様が以前投稿していた画像ですが、このPGの最終明細行で行削除した訳ですか?
mgerror.logにある「インデックスが重複しています」は明細一時テーブルの事ですか?
行番号だけが重複インデックスですか?
行番号は手入力ですか?自動で値を埋め込むのですか?
行番号はパーキング不可ですか?
-
最終行を削除した事により、次は明細新規登録モードになりますが
行番号が自動設定で、既存行番号と重複し、パーキング不可なら
トランザクション設定によっては、全部最初からやり直し!
みたいな事は起きうる気がします。(以上、予想が外れていたらごめんなさい。) -
レコード後処理にブレイクポイントを設置して、
レコード前処理にもブレイクポイントを設置して
デバッグモードでステップ実行するのもいいと思います。 -
nkmtさん
その納品書PGです。
mgerror.logにあるエラーが出たデータソースは、
一時テーブルではなく実データの納品書明細テーブルでした。
納品書明細のインデックスは伝票Noと行番号が重複不可になっています。
行番号はパーキング不可で、自動採番しており、
行削除した時に行番号を繰上げるサブタスクがあるので、そこが問題かもしれません。
デバッグモードで見てみようと思います。
-
最終行削除だと、行番号繰り上げは不要なのでしょうね。
-
ヘッダも明細もメモリテーブルだけど
明細入力タスクで、実データも読み書きが生じているのですか? -
nkmtさん
最終行の行削除時は繰上げ処理を通らないようにしたら回避できそうです。
入力タスク内で実データの読み書きはないはずですが、確認方法はありますでしょうか?
-
CTRL+Dでそのタスクのメインソース、各種リンクしたデータ、宣言したデータは把握可能です。
-
3行目を削除したら、
4行目を3行目に
5行目を4行目に・・・といった処理をするという事なんだろうと思いますが、
3行目のレコード後処理時点では、まだ3行目の削除が完了していないので
その3行目削除のレコード後処理から、行繰り上げをすると、4行目 → 3行目をしようと
した時点でインデックス重複になりそうな気がします。
なので行繰り上げお願いしますという意味の変数をTrueにして、
レコード前処理から行繰り上げタスクを呼ぶようにしております。 -
CTRL+Dでそのタスクのメインソース、各種リンクしたデータ、宣言したデータは把握可能です。
-
CTRL+Dの操作でそのタスクのメインソース、各種リンクしたデータ、宣言したデータを把握できます。
-
コントロール プラス D の操作でいかがでしょうか?
-
なぜだか以下のように 承認待機中 となってしまうので、全角カタカナで投稿したら投稿できました。

-
nkmtさん
納品書入力の各タスクで、コントロール+Dを行いましたが、
実データのデータソースは、確認できませんでした。
今回は、最終行削除時に、行番号繰上げのサブタスクを通らないように条件を付けることで、
回避しようと思います。
ただ、mgerror.logにあるプログラム内に問題のデータソースが使われていなかったのが不思議です。
関係ないかもしれませんが、参考にしているサンプルプログラムでは、
メモリテーブルのキャッシュがNoになっていました。
画像の画面では、変更ができなかったのですが、どこで変えられますでしょうか?


サインインしてコメントを残してください。
コメント
21件のコメント