Q99:データ集計用として「単価を代入」する処理を作成したい。
Q99-1:
データ集計用として「単価を代入」する処理を作成したいと考え、サンプルプログラムを作成しています。そこで、単価を書き込むにあたって処理スピードを上げる為に、以下の機能を追加したいと考えています。
(機能追加内容)
処理する前に単価を書き込むデータベースを事前に品名で並べ替えて、また同時に単価マスターも並べ替えて、単価マスターの「a」品名からデータベースに単価書込みをするようにします。
そこで、処理スピードを上げる為にデータベース側の「a」品名の単価書込みが終了したら、「繰り返し制御」を途中で終了し、次の品名の単価書込みをする処理に移るというようにしたいと考えています。
A99-1:
指定したデータが列データ内の何番目に出現するかの取得には[リスト格納変数]のメソッド「indexOf(String)」を使うと簡単になるかと存じます。
「indexOf(String)」は最初に出現したデータの位置を取得するので、単価マスターテーブルの品名は一意であると仮定しています。
一旦テーブルの列を取り出し、[リスト格納変数]に入れます。
「indexOf(String)」で取得した位置番号が、テーブルの行番号と同じになります。
「indexOf」を使ったサンプルには『バーコード入力チュートリアル』がありますので、¥AP_DATA\Tutorial内のサンプルファイルと併せてご覧下さい。
ところで、この「データテーブル」はMZPlatform上にずっとあるものでしょうか。それともMySQLデータベースから取得、更新するものでしょうか。
MySQLデータベース上のデータを更新するのであれば、少し処理の方法も違ってくるかと思います。また、MZPlatform上で無理にソートしない方が良い場合もあるかと思いお伺いする次第です。
ご連絡:
品種の所在認知が、「indexOf(String)」で取得し記憶されて、インデックスとしての役割を果たすことを良く理解できました。
今回の単価代入のシーンですが、以下のケースを想定しています。
1.納品登録時に単価を代入して合計金額を出し、データベースに登録する。
2.データベース内に登録されているデータに対して、ある指定期間を範囲として単価を代入登録する。
です。
「1」のケースは通常の作業でのケースで、登録後、何も変化が無ければ、この処理で日々及び月の売上を集計することが出来ます。
ただ、以下のことが現実にはあります。
★月途中に単価変更がある場合。
・お客様との契約で変わる時
・単価マスターの登録ミスがあった時
良く、アクセスなどは、リレーションを掛けて品種及び単価マスターをリンクするケースがありますが、その方法をとると過去でデータの単価まで変更になり都合が悪くなるケースを過去に経験していますので、確定単価をデータベースに書き込むという方法を選択しています。
もちろんリレーションでも他の工夫で、単価変動が発生しないようにする方法もあるのですが。
(同じ品名でもリスト管理上別管理Noにすれば良いのですが)今回は、単純な方法でデータベースを管理したいと考えています。
そこで、質問にありました「MySQLデータベース上のデータを更新」の件ですが、一括でデータベースの単価メンテをする場合には、質問のケースがあります。
まだ経験はしていませんが、SQLコマンドで照合更新は可能ではとも考えています。
どうでしょうか。
私の方では、まだ、mysqlでのテンポラリーファイルを使ったデータの扱いなどはしたことが無いので、今はワークシートとしてMZPF内のテーブルを利用するようにしています。
今後データが多くなってくることを想定すると、処理スピード的にSQLコマンドを使った処理のほうが早い場合には、併用をしていきたいと考えています。
追記: 「演算」の部分は、あえて変数は使わなくても処理ができることを、お送りいただいたサンプルで知りました。