On Printing DetailでSUM関数の挙動について
2 posters
On Printing DetailでSUM関数の挙動について
4D V16.3 C/S環境にて
出荷データと明細データのテーブル構成(例)で、出荷データの一覧表示に明細の合計を表示/印字行う際。
On Display Detailにて
その一覧を印刷の際にOn Printing Detailで同様の処理を行うとSUMの結果が0になってしまいます。
SUMを使わずに明細1件の重量データを取り出すことは問題なくできるのですが、明細の結果を集計しようとすると問題が発生します。
ご確認のほどいただければ幸いです。
出荷データと明細データのテーブル構成(例)で、出荷データの一覧表示に明細の合計を表示/印字行う際。
On Display Detailにて
- Code:
QUERY([明細データ];[明細データ]出荷ID = [出荷データ]ID)
v重量:=SUM([明細データ]重量)
その一覧を印刷の際にOn Printing Detailで同様の処理を行うとSUMの結果が0になってしまいます。
SUMを使わずに明細1件の重量データを取り出すことは問題なくできるのですが、明細の結果を集計しようとすると問題が発生します。
- Code:
Begin SQL
SELECT SUM([重量]) FROM [明細データ] WHERE [ID] = <<v出荷ID>> INTO <<v重量>>
End SQL
ご確認のほどいただければ幸いです。
osaru- 投稿数 : 67
登録日 : 2017/08/14
Re: On Printing DetailでSUM関数の挙動について
こんにちは。
配列を介在させるはどうでしょうか。
クライアントサーバー版でネットワークアクセスが気になるようであれば,「サーバー上で実行」メソッドプロパティを活用して,クエリ〜統計をサーバー側で実行させると良いかもしれません。
配列を介在させるはどうでしょうか。
- Code:
Case of
: (Form event=On Display Detail) | (Form event=On Printing Detail)
QUERY([明細データ];[明細データ]出荷ID=[出荷データ]ID)
SELECTION TO ARRAY([明細データ]重量;$重量)
v重量:=Sum($重量)
End case
クライアントサーバー版でネットワークアクセスが気になるようであれば,「サーバー上で実行」メソッドプロパティを活用して,クエリ〜統計をサーバー側で実行させると良いかもしれません。
miyako- 投稿数 : 468
登録日 : 2016/07/05
Re: On Printing DetailでSUM関数の挙動について
PRINT SELECTIONは,非常に古いコマンドで,小計を計算させるために,BREAK LEVEL, ACCUMULATE, Sum等を併用する,という特殊な設計になっています。
http://doc.4d.com/4Dv16/4D/16.3/Sum.301-3651247.ja.html
http://doc.4d.com/4Dv16/4D/16.3/ACCUMULATE.301-3651115.ja.html
http://doc.4d.com/4Dv16/4D/16.3/BREAK-LEVEL.301-3651114.ja.html
http://doc.4d.com/4Dv16/4D/16.3/PRINT-SELECTION.301-3651129.ja.html
ちなみに,Sumは記念すべき(?)コマンド第1号です。
PRINT SELECTIONの実行中,通常のSumが効かないのは,こうした設計が関係しているのではないでしょうか。
Print formやPrint objectのほうがずっと便利なこともあり,PRINT SELECTIONの経験はほとんどない,というのが正直なところです。
なお,Print formを使用する場合,リストフォームに「v重量」というプロセス変数ではなく,「Sum([明細データ]重量)」という式をオブジェクトとして配置し,PRINT SELECTIONの代わりにPrint formで帳票を印刷することもできます。
http://doc.4d.com/4Dv16/4D/16.3/Sum.301-3651247.ja.html
http://doc.4d.com/4Dv16/4D/16.3/ACCUMULATE.301-3651115.ja.html
http://doc.4d.com/4Dv16/4D/16.3/BREAK-LEVEL.301-3651114.ja.html
http://doc.4d.com/4Dv16/4D/16.3/PRINT-SELECTION.301-3651129.ja.html
ちなみに,Sumは記念すべき(?)コマンド第1号です。
PRINT SELECTIONの実行中,通常のSumが効かないのは,こうした設計が関係しているのではないでしょうか。
Print formやPrint objectのほうがずっと便利なこともあり,PRINT SELECTIONの経験はほとんどない,というのが正直なところです。
なお,Print formを使用する場合,リストフォームに「v重量」というプロセス変数ではなく,「Sum([明細データ]重量)」という式をオブジェクトとして配置し,PRINT SELECTIONの代わりにPrint formで帳票を印刷することもできます。
miyako- 投稿数 : 468
登録日 : 2016/07/05
Re: On Printing DetailでSUM関数の挙動について
miyako様、配列を介するアイデアは修正が少なくて良さそうですね、ありがとうございます。
私もPRINT SELECTIONは殆ど使用しませんがページ物の一覧印刷ではお手軽なのでさすがに全くというわけにもいきません。動作していた物が動かなくなるのは過去の資産を運用していく上で非常に不便ですので、修正されることを期待しております。
以上、よろしくお願い致します。
Print formやPrint objectのほうがずっと便利なこともあり,PRINT SELECTIONの経験はほとんどない,というのが正直なところです。
私もPRINT SELECTIONは殆ど使用しませんがページ物の一覧印刷ではお手軽なのでさすがに全くというわけにもいきません。動作していた物が動かなくなるのは過去の資産を運用していく上で非常に不便ですので、修正されることを期待しております。
以上、よろしくお願い致します。
osaru- 投稿数 : 67
登録日 : 2017/08/14
Re: On Printing DetailでSUM関数の挙動について
開発部からのコメントがありました。
印刷中にSum()を計算させるためには,ACCUMUATEを使用しなければならない,というのが本来の仕様です。On Printing Detailイベントの最中であったとしても,その点は変わりません。v13では,この仕様に反してSum()が使用できてしまったのですが,これはバグであり,v14で元の動作が復元されました。
ちなみに,v14のベータ版では,ファイルメニューからカレントセレクションを出力フォームでプリントすると,空のページが出力されるという問題(ACI0080572)があり,これが修正されたことにともない,Sum()の振る舞いも元に戻った,という経緯があります。
印刷中にSum()を計算させるためには,ACCUMUATEを使用しなければならない,というのが本来の仕様です。On Printing Detailイベントの最中であったとしても,その点は変わりません。v13では,この仕様に反してSum()が使用できてしまったのですが,これはバグであり,v14で元の動作が復元されました。
ちなみに,v14のベータ版では,ファイルメニューからカレントセレクションを出力フォームでプリントすると,空のページが出力されるという問題(ACI0080572)があり,これが修正されたことにともない,Sum()の振る舞いも元に戻った,という経緯があります。
miyako- 投稿数 : 468
登録日 : 2016/07/05
Re: On Printing DetailでSUM関数の挙動について
miyako様、ご連絡ありがとうございます。
v16以前に使用していたのはv12ですが、結構長い期間バグの仕様になっていたように思います。自分は6.8時代から触りはじめしたが、On Display DetailとOn Printing Detailは発生場所が違うだけで、同じ処理ができる物と思っていました。なので単純な集計はACCUMULATE関係無くSUMしていたと思います。(ウチのシステムでは表示フォームをそのまま印刷に使用するところも少なくありませんし・・・)
カレントセレクションをSUMしてくれても実害は無いと思いますが仕様ということなら仕方ないですね〜。
v16以前に使用していたのはv12ですが、結構長い期間バグの仕様になっていたように思います。自分は6.8時代から触りはじめしたが、On Display DetailとOn Printing Detailは発生場所が違うだけで、同じ処理ができる物と思っていました。なので単純な集計はACCUMULATE関係無くSUMしていたと思います。(ウチのシステムでは表示フォームをそのまま印刷に使用するところも少なくありませんし・・・)
カレントセレクションをSUMしてくれても実害は無いと思いますが仕様ということなら仕方ないですね〜。
osaru- 投稿数 : 67
登録日 : 2017/08/14
Permissions in this forum:
返信投稿: 不可
|
|