テーブルに追記する

既存のテーブルに追記する形で別なテーブルから転記したい

  • ほぼ同じ構造を持つ二つのテーブルがあります。

  • 【手配内容詳細】社内的に部品を発注する内容のテーブル

  • 【売上計上詳細】請求書を起票に関するテーブル

  • フィールド構造はほぼ同じです。

  • 計算式プラグインにて、スペースフィールドをボタン化して、テーブルの転記は実現しています。

DIALOG(
  ARRAY("テーブルコピー","手配内容詳細 -> 売上計上詳細"),
  FSET(売上計上詳細,
    LET(
      // --- CSVを生成 ---
      rawcsv,
        OTCSV(手配内容詳細,
          TPFILTER(IN(結果,"使用","送料")),
          TPOUT(部品番号, 部品名称, 備考, 数量, 単位, 仕切, 小売),
          TPLABEL(
            "売上計上_部品番号",
            "売上計上_部品名称",
            "売上計上_備考",
            "売上計上_数量",
            "売上計上_単位",
            "売上計上_仕切",
            "売上計上_小売"
          )
        ),

      // --- 不要文字(タブ、NBSP、全角スペース)を削除 ---
      csv, REPLACERE(rawcsv, "[\t\u00A0\u3000]", "gu", ""),

      // --- CSVをテーブル化してセット ---
      vals, CSV_TVAL(csv),

      vals
    )
  )
)

既存のテーブルの内容を保持したまま、追記したい。

  • 現在のコードは「上書き」の処理になり、元々転記先のテーブルに存在していたデータは消去されます。
  • フェリスちゃんに色々相談しながら、「売上計上詳細テーブル」のデータも一度CSV化して、転記するデータと結合するしてから上書きすれば?という事になりました。
  • 結合がうまく出来ないようで、解決出来ずにいます。

現在検討していたコード

DIALOG(
  ARRAY("実績コピー","手配実績詳細 -> 売上計上詳細に追記"),
  FSET(売上計上詳細,
    LET(
      // --- A. 現在の「売上計上詳細」をCSV化 ---
      current_csv, 
        OTCSV(売上計上詳細, 
          TPOUT(売上計上_部品番号, 売上計上_部品名称, 売上計上_備考, 売上計上_数量, 売上計上_単位, 売上計上_仕切, 売上計上_小売),
          TPLABEL(
            "売上計上_部品番号",
            "売上計上_部品名称",
            "売上計上_備考",
            "売上計上_数量",
            "売上計上_単位",
            "売上計上_仕切",
            "売上計上_小売"
           )
        ),

      // --- B. 新しく追加したい「手配内容詳細」をCSV化 ---
      new_csv,
        OTCSV(手配内容詳細,
          TPFILTER(IN(結果,"使用","送料")),
          TPOUT(部品番号, 部品名称, 備考, 数量, 単位, 仕切, 小売),
          TPLABEL(
            "売上計上_部品番号",
            "売上計上_部品名称",
            "売上計上_備考",
            "売上計上_数量",
            "売上計上_単位",
            "売上計上_仕切",
            "売上計上_小売"
          )
        ),

      // --- C. 二つを合体(どちらかが空の場合も考慮) ---
      combined_csv, 
        IFS(
          AND(current_csv <> "", new_csv <> ""), current_csv & NEWLINE() & new_csv,
          current_csv <> "", current_csv,
          new_csv <> "", new_csv,
          ""
        ),

      // 不要文字削除
      clean_csv, REPLACERE(combined_csv, "[\t\u00A0\u3000]", "gu", ""),

      // --- CSVをテーブル化してセット ---
      vals, CSV_TVAL(clean_csv),

      vals
    )
  )
)

エラーが出ているフィールド(数量、仕切、小売、単位)は全て数値フィールドです。
もしかしてcsvを結合するときにヘッダー行も含んでいるのでは?というヒントもフェリスちゃんから聞きましたが、解決までには至っていません。

数値フィールドを除外して実行してみた。

上の数値フィールドの件。書いてから「そうか、試して見よう」と思い、数値フィールドを除外したコードで実行してみたところ、エラーは表示されなくなりました。
そして、ヘッダー行がレコードに追加されることも確認できました。

「既存のテーブルに追記する」はどう解決するのが良いでしょうか?
何かアドバイスを頂けると助かります。

よろしくお願いします。

とりあえず試してみました。
rex0220 アプリマイスター・レイにアプリを作ってもらい、計算式を実行してみました。
空テーブルですが数値エラーになりましたので、セットデータをLOG で表示してみたところ、値に項目ラベルが設定されていました。
実際に設定されている値を見ることで、問題が明確になると思います。

OTCSV では、オプションで項目ラベルを無しに出来ます。
TPOPT(“HEADER”,“N”),

      vals, CSV_TVAL(clean_csv),
      dummy,LOG(vals),
      vals

あと単純にテーブル行の追加であれば、FSET_TADD 関数で1行ずつ追加する処理でもいいかもしれません。

「いいね!」 1

検証&アドバイス有り難うございます!
ヘッダーを含めないように対策することで期待通りの結果が得られました。
大変助かりました!

「いいね!」 1