プログラム参照作成時の問題
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
null
投稿数: 191
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
今更ですが、Magic の問題点と言いますか、何とかならないかと思う話です。
以下、DB は Btrieve、帳票作成は標準のテキスト印刷で作成するものとします。
レイアウトが違うものの項目としては似たものがそろっているテーブルが
複数あるとします。例えば、売上Aテーブル、売上Bテーブルとします。
売上Aテーブル(イメージ)
1 SEQNO
11 数量
13 単価
15 金額
他にも沢山の項目・・・
売上Bテーブル(イメージ)
1 SEQNO
21 数量
23 単価
25 金額
他にも沢山の項目・・・
この売上Aテーブルをメインテーブルとして印刷するプログラムを作成します。
これを帳票Aとします。ちなみに、帳票へ出力する項目は売上Aテーブルの項目を使用します。
その後、帳票Bの仕様が帳票Aと非常に似ている為、
完成した帳票Aのプログラムを元に売上Bテーブルを
メインテーブルとして印刷するプログラムを作るとします。
帳票Aのプログラムを複写した直後の状態では
メインテーブルには売上Aテーブルが割り当てられているので
売上Bテーブルに変更するのですが、テーブルを変えただけだと
ファイルレイアウトが違うので、帳票フォームに張り付いた項目を
一つ一つ確認して正しい項目に変えていかないといけません。
レコード後処理でテーブル項目を使用して計算をしていれば
その式も全て見直さなければなりません。
まあ、全てが番号管理の Magic では当たり前の話なんですが、毎回それをやるのが面倒です。
恐らく Magic 経験者なら遭遇するであろうこの問題、皆様はどうしていますか?
地道に一つ一つ確認していくしかないんでしょうか?
以下、DB は Btrieve、帳票作成は標準のテキスト印刷で作成するものとします。
レイアウトが違うものの項目としては似たものがそろっているテーブルが
複数あるとします。例えば、売上Aテーブル、売上Bテーブルとします。
売上Aテーブル(イメージ)
1 SEQNO
11 数量
13 単価
15 金額
他にも沢山の項目・・・
売上Bテーブル(イメージ)
1 SEQNO
21 数量
23 単価
25 金額
他にも沢山の項目・・・
この売上Aテーブルをメインテーブルとして印刷するプログラムを作成します。
これを帳票Aとします。ちなみに、帳票へ出力する項目は売上Aテーブルの項目を使用します。
その後、帳票Bの仕様が帳票Aと非常に似ている為、
完成した帳票Aのプログラムを元に売上Bテーブルを
メインテーブルとして印刷するプログラムを作るとします。
帳票Aのプログラムを複写した直後の状態では
メインテーブルには売上Aテーブルが割り当てられているので
売上Bテーブルに変更するのですが、テーブルを変えただけだと
ファイルレイアウトが違うので、帳票フォームに張り付いた項目を
一つ一つ確認して正しい項目に変えていかないといけません。
レコード後処理でテーブル項目を使用して計算をしていれば
その式も全て見直さなければなりません。
まあ、全てが番号管理の Magic では当たり前の話なんですが、毎回それをやるのが面倒です。
恐らく Magic 経験者なら遭遇するであろうこの問題、皆様はどうしていますか?
地道に一つ一つ確認していくしかないんでしょうか?
投票数:0
平均点:0.00
Jiro123
投稿数: 271
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
これは、テキスト形式フォームのフォームレイアウトの編集が大変ということでしょうか。
確か、V7くらいからサポートされた、フォームテンプレートを利用することで、多少作業が軽減できるような気がします。
フォームテンプレートとは、現在のフォームのコントロールの配置レイアウトを、ファイルにテンプレートとして保存できる機能です。
売り上げテーブルAのテキスト形式フォームをテンプレートの書込をして、売り上げテーブルBのテキスト形式フォームで、そのテンプレートを読込ます。
(異なるインターフェースタイプのフォームのテンプレートは読込めないので、ご注意ください。)
フォーム上にコントロールが配置されます。
各コントロールのデータ特性など、一部のコントロール特性は、テンプレートに保存されないので、テンプレートの読込を行った後、各コントロールごとに、データ特性などを割り当てなければなりません。
nullさんが行われている作業に比べれば、少ない工数で対応できるのではないかと思います。
V7以前のバージョンには、フォームのテンプレートは出来ないと思います。
こちらの認識が違って、誤った情報を提示していた場合は、すみません。
ご参考になれば。。。
確か、V7くらいからサポートされた、フォームテンプレートを利用することで、多少作業が軽減できるような気がします。
フォームテンプレートとは、現在のフォームのコントロールの配置レイアウトを、ファイルにテンプレートとして保存できる機能です。
売り上げテーブルAのテキスト形式フォームをテンプレートの書込をして、売り上げテーブルBのテキスト形式フォームで、そのテンプレートを読込ます。
(異なるインターフェースタイプのフォームのテンプレートは読込めないので、ご注意ください。)
フォーム上にコントロールが配置されます。
各コントロールのデータ特性など、一部のコントロール特性は、テンプレートに保存されないので、テンプレートの読込を行った後、各コントロールごとに、データ特性などを割り当てなければなりません。
nullさんが行われている作業に比べれば、少ない工数で対応できるのではないかと思います。
V7以前のバージョンには、フォームのテンプレートは出来ないと思います。
こちらの認識が違って、誤った情報を提示していた場合は、すみません。
ご参考になれば。。。
投票数:0
平均点:0.00
null
投稿数: 191
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
フォームレイアウトをファイルに保存するしくみが無いのかと
思っていましたが、フォームテンプレートというものがあるんですね。
uniPaaS でも同じものがあるのかも含めて、活用出来るかまたどうか調べてみます。
回答ありがとうございました。
ただ、今回書いた問題点というのはちょっと違うんです。
フォームテンプレートならぬ、プログラムテンプレート的なものがあれば又違うんでしょうが。
たまたま帳票プログラムの作業をしていたので判りにくくなってしまいました・・・
その件は長くなるので投稿を分けて書きます。
概要としてはメインテーブルを入れ替えた時にテーブルのカラムが
??になったり、意味合いが変わるのが何とかならないのかと
そうなった状態を正しい状態にする良い方法が無いのかと言うことです。
思っていましたが、フォームテンプレートというものがあるんですね。
uniPaaS でも同じものがあるのかも含めて、活用出来るかまたどうか調べてみます。
回答ありがとうございました。
ただ、今回書いた問題点というのはちょっと違うんです。
フォームテンプレートならぬ、プログラムテンプレート的なものがあれば又違うんでしょうが。
たまたま帳票プログラムの作業をしていたので判りにくくなってしまいました・・・
その件は長くなるので投稿を分けて書きます。
概要としてはメインテーブルを入れ替えた時にテーブルのカラムが
??になったり、意味合いが変わるのが何とかならないのかと
そうなった状態を正しい状態にする良い方法が無いのかと言うことです。
投票数:0
平均点:0.00
null
投稿数: 191
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
問題を判りやすくする為に簡単なテーブルとプログラムで説明します。
先にテーブルから。
-- テーブルA --
1 SEQNO
2 何かの項目
3 数量
4 単価
5 金額
-- テーブルB --
1 SEQNO
2 単価
3 金額
4 数量
仕様としてはテーブルを読み込み、テーブル項目の数量と単価計算して
テーブル項目の金額に書き込むプログラムがあるとします。
-- プログラムA --
メインテーブル テーブルA
セレクト 1 A.SEQNO
セレクト 2 B.何とかフラグ
セレクト 3 C.数量
セレクト 4 D.単価
セレクト 5 E.金額
項目更新 E.金額 式 1 C*D(C.数量*D.単価)
次に上に書いたプログラムを複写してテーブルレイアウトが異なる
テーブルBで同様の処理を行うプログラムを作るとします。
上のプログラム複写し、メインテーブルをテーブルBを変えると
以下のようになると思います。これが今回挙げた問題点です。
-- プログラムB --
メインテーブル テーブルB
セレクト 1 A.SEQNO
セレクト 2 B.単価
セレクト 3 C.金額
セレクト 4 D.数量
セレクト 5 E.??
項目更新 E.?? 式 1 C*D(C.金額*D.数量)
はい。プログラムがおかしくなりました。
これを正しい動作にするには項目更新の 2 箇所を次のように直すか、
変数定義の順番を入れ替えるしかありません。
項目更新 C.金額 式 1 D*B(D.数量*B.単価)
今回挙げたプログラムは単純なものですし、テーブルの項目数も少ないので
極端な話、そんなことはせず一から作った方が下手すると速いのですが、
項目数が多く複雑な場合、そうも行きません。
ゼロから書くより、似ているプログラムから参照作成する方が良いのですが、
これだと全てのコード、式、(フォームがあればその項目も) を確認しながら直していかなくてはならず、
本来の作業とは別のところに時間が掛かっているような気がするのです。
先にテーブルから。
-- テーブルA --
1 SEQNO
2 何かの項目
3 数量
4 単価
5 金額
-- テーブルB --
1 SEQNO
2 単価
3 金額
4 数量
仕様としてはテーブルを読み込み、テーブル項目の数量と単価計算して
テーブル項目の金額に書き込むプログラムがあるとします。
-- プログラムA --
メインテーブル テーブルA
セレクト 1 A.SEQNO
セレクト 2 B.何とかフラグ
セレクト 3 C.数量
セレクト 4 D.単価
セレクト 5 E.金額
項目更新 E.金額 式 1 C*D(C.数量*D.単価)
次に上に書いたプログラムを複写してテーブルレイアウトが異なる
テーブルBで同様の処理を行うプログラムを作るとします。
上のプログラム複写し、メインテーブルをテーブルBを変えると
以下のようになると思います。これが今回挙げた問題点です。
-- プログラムB --
メインテーブル テーブルB
セレクト 1 A.SEQNO
セレクト 2 B.単価
セレクト 3 C.金額
セレクト 4 D.数量
セレクト 5 E.??
項目更新 E.?? 式 1 C*D(C.金額*D.数量)
はい。プログラムがおかしくなりました。
これを正しい動作にするには項目更新の 2 箇所を次のように直すか、
変数定義の順番を入れ替えるしかありません。
項目更新 C.金額 式 1 D*B(D.数量*B.単価)
今回挙げたプログラムは単純なものですし、テーブルの項目数も少ないので
極端な話、そんなことはせず一から作った方が下手すると速いのですが、
項目数が多く複雑な場合、そうも行きません。
ゼロから書くより、似ているプログラムから参照作成する方が良いのですが、
これだと全てのコード、式、(フォームがあればその項目も) を確認しながら直していかなくてはならず、
本来の作業とは別のところに時間が掛かっているような気がするのです。
投票数:0
平均点:0.00
Kurogane
投稿数: 50
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
1.テーブルAを複写してテーブルCを作る
2.プログラムを複写し、テーブルAをテーブルCに変更
3.テーブルCの定義内容をテーブルBになるよう変更
4.複写したプログラムのテーブルCをテーブルBに変更
5.テーブルCを削除
って手法はどうでしょう?
2.プログラムを複写し、テーブルAをテーブルCに変更
3.テーブルCの定義内容をテーブルBになるよう変更
4.複写したプログラムのテーブルCをテーブルBに変更
5.テーブルCを削除
って手法はどうでしょう?
投票数:0
平均点:0.00
null
投稿数: 191
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
なるほど。
条件によってはその方法は使えるかも知れませんね。
回答ありがとうございます。
そもそもの話は msg# 1.2 に書いた参照作成をするような作業の時に
書いた方法でやるとプログラムが崩れたのを修正するのが大変だけど、
どうやるのが早く確実なのかというところから、
他の方々はどうしているのかと思ったので質問させてもらいました。
引き続き、こう言う方法が良いよというのがありましたらお願いします。
条件によってはその方法は使えるかも知れませんね。
回答ありがとうございます。
そもそもの話は msg# 1.2 に書いた参照作成をするような作業の時に
書いた方法でやるとプログラムが崩れたのを修正するのが大変だけど、
どうやるのが早く確実なのかというところから、
他の方々はどうしているのかと思ったので質問させてもらいました。
引き続き、こう言う方法が良いよというのがありましたらお願いします。
投票数:0
平均点:0.00
KITT
投稿数: 9
![新米 新米](../../uploads/rank3e632f95e81ca.gif)
私がしている方法は、
1.複製したプログラムBでテーブルAの照会リンク(項目は空)を作成
2.メインテーブルで指定されているテーブルAの各項目を照会リンクの内側に移動
3.メインテーブルをテーブルBに変更
4.メインテーブルのテーブルBに対応する項目から順番に照会リンク内のテーブルA項目から移動し、項目番号を変更
5.最後に照会リンクを削除
テーブルBに対応するテーブルAの項目を探しながら移動させ、項目番号も変更するという手間がかかりますが、
式やフォームで項目がずれることは防げ、後々の手間が少ないと思うのでこうやっています。
1.複製したプログラムBでテーブルAの照会リンク(項目は空)を作成
2.メインテーブルで指定されているテーブルAの各項目を照会リンクの内側に移動
3.メインテーブルをテーブルBに変更
4.メインテーブルのテーブルBに対応する項目から順番に照会リンク内のテーブルA項目から移動し、項目番号を変更
5.最後に照会リンクを削除
テーブルBに対応するテーブルAの項目を探しながら移動させ、項目番号も変更するという手間がかかりますが、
式やフォームで項目がずれることは防げ、後々の手間が少ないと思うのでこうやっています。
投票数:0
平均点:0.00
null
投稿数: 191
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
これも良い方法ですね。駄目元で質問してよかったです。
> テーブルBに対応するテーブルAの項目を探しながら移動させ、
> 項目番号も変更するという手間がかかりますが
確かにそこは手間ですが、結局、何処に時間を掛ければ良い結果が
得られるかなのでこの方法は使えそうです。活用したいと思います。
回答ありがとうございました。
> テーブルBに対応するテーブルAの項目を探しながら移動させ、
> 項目番号も変更するという手間がかかりますが
確かにそこは手間ですが、結局、何処に時間を掛ければ良い結果が
得られるかなのでこの方法は使えそうです。活用したいと思います。
回答ありがとうございました。
投票数:0
平均点:0.00