メインコンテンツへスキップ

最終明細行の行削除を行うと、ヘッダメモリ・明細メモリ(全行)が消えてしまう

コメント

21件のコメント

  • nkmt

    一般的なキーボード設定だとF3キーで1レコード削除ですが、削除はどのようにして行っているのですか?

  • mari

    nkmtさん

    ご返信ありがとうございます。

    キーボードの設定は変更しておりませんので、F3キーを押しています。

  • nkmt

    明細最終行の行削除をF3キーで行えるという事ですし
    明細最終行にパーキング時、画面の右下には
    修正 と表示されているのですよね?

    mgerror.logには何も書かれていませんか?
    明細入力タスクのレコード後処理に、アクション 式=DELAY(1) を追加し
    そこにブレイクポイントを設けて
    デバッグモードで実行して、明細最終行の行削除を行い
    ブレイクポイントで止まったらF11ボタンを押すとステップ実行で何かわかるかもしれません。

  • Tanda

    mariさん、

    画面に表示されていたレコードが「消える」という現象は次の2つが考えらます。

    1. 画面上、表示がなされていないだけ。
    2. レコードが物理的に削除された。

    どちらに該当するかは、データリポジトリでテーブルをオープンして確認してみるといいですよ。

  • Tanda

    mariさん、

    あと、補足ですが、「メモリテーブル」というのはあくまでメモリ上に展開されているだけのテーブルですので、Magicを再起動したりすると、自動的に全部消えますよ。

     

  • Tanda

    mariさん、

    ちなみに、「メモリテーブル」と「遅延トランザクション」というのは、このような用途においては、やっていることはほとんど同じです。

    「メモリテーブル」を使った場合は、毎回バッチでデータを書き戻してやる必要があるのですが、「遅延トランザクション」を使った場合は、Magicが書き戻し処理を自動で行なってくれますので、プログラムが大幅に簡潔になります。

     

  • mari

    nkmtさん、tandaさん

    ご返信遅くなり申し訳ございません。

    明細最終行がパーキング時には、画面の右下は修正になっています。

    mgerror.logを確認したところ、「インデックスが重複しています」というエラーが出ていました。

    また、データリポジトリでメモリテーブルをオープンすると、レコードが消えていました。

    まずは、エラーの解決をしたいと思います。

    mgerror.logの該当エラーの右端に出ているタスクでエラーが発生したのでしょうか?

    引き続き、ご教示いただけますと幸いです。

    よろしくお願いいたします。

  • nkmt

    質問者様が以前投稿していた画像ですが、このPGの最終明細行で行削除した訳ですか?
    mgerror.logにある「インデックスが重複しています」は明細一時テーブルの事ですか?
    行番号だけが重複インデックスですか?
    行番号は手入力ですか?自動で値を埋め込むのですか?
    行番号はパーキング不可ですか?

  • nkmt

    最終行を削除した事により、次は明細新規登録モードになりますが
    行番号が自動設定で、既存行番号と重複し、パーキング不可なら
    トランザクション設定によっては、全部最初からやり直し!
    みたいな事は起きうる気がします。(以上、予想が外れていたらごめんなさい。)

  • nkmt

    レコード後処理にブレイクポイントを設置して、
    レコード前処理にもブレイクポイントを設置して
    デバッグモードでステップ実行するのもいいと思います。

  • mari

    nkmtさん

    その納品書PGです。

    mgerror.logにあるエラーが出たデータソースは、

    一時テーブルではなく実データの納品書明細テーブルでした。

    納品書明細のインデックスは伝票Noと行番号が重複不可になっています。

    行番号はパーキング不可で、自動採番しており、

    行削除した時に行番号を繰上げるサブタスクがあるので、そこが問題かもしれません。

    デバッグモードで見てみようと思います。

  • nkmt

    最終行削除だと、行番号繰り上げは不要なのでしょうね。

  • nkmt

    ヘッダも明細もメモリテーブルだけど
    明細入力タスクで、実データも読み書きが生じているのですか?

  • mari

    nkmtさん

    最終行の行削除時は繰上げ処理を通らないようにしたら回避できそうです。

    入力タスク内で実データの読み書きはないはずですが、確認方法はありますでしょうか?

  • nkmt

    CTRL+Dでそのタスクのメインソース、各種リンクしたデータ、宣言したデータは把握可能です。

  • nkmt

    3行目を削除したら、
    4行目を3行目に
    5行目を4行目に・・・といった処理をするという事なんだろうと思いますが、
    3行目のレコード後処理時点では、まだ3行目の削除が完了していないので
    その3行目削除のレコード後処理から、行繰り上げをすると、4行目 → 3行目をしようと
    した時点でインデックス重複になりそうな気がします。
    なので行繰り上げお願いしますという意味の変数をTrueにして、
    レコード前処理から行繰り上げタスクを呼ぶようにしております。

  • nkmt

    CTRL+Dでそのタスクのメインソース、各種リンクしたデータ、宣言したデータは把握可能です。

  • nkmt

    CTRL+Dの操作でそのタスクのメインソース、各種リンクしたデータ、宣言したデータを把握できます。

  • nkmt

    コントロール プラス D の操作でいかがでしょうか?

  • nkmt

    なぜだか以下のように 承認待機中 となってしまうので、全角カタカナで投稿したら投稿できました。

  • mari

    nkmtさん

    納品書入力の各タスクで、コントロール+Dを行いましたが、

    実データのデータソースは、確認できませんでした。

    今回は、最終行削除時に、行番号繰上げのサブタスクを通らないように条件を付けることで、

    回避しようと思います。

    ただ、mgerror.logにあるプログラム内に問題のデータソースが使われていなかったのが不思議です。

    関係ないかもしれませんが、参考にしているサンプルプログラムでは、

    メモリテーブルのキャッシュがNoになっていました。

    画像の画面では、変更ができなかったのですが、どこで変えられますでしょうか?

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