On Printing DetailでSUM関数の挙動について

Go down

On Printing DetailでSUM関数の挙動について

投稿 by osaru on 2018-01-17, 2:38 pm

4D V16.3 C/S環境にて

出荷データと明細データのテーブル構成(例)で、出荷データの一覧表示に明細の合計を表示/印字行う際。

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
On Printing Detailで明細の集計したい場合、SQLを使用してSUMする方法にて回避できることは確認しました。
ご確認のほどいただければ幸いです。

osaru

投稿数 : 32
登録日 : 2017/08/14

トップに戻る Go down

Re: On Printing DetailでSUM関数の挙動について

投稿 by miyako on 2018-01-23, 3:20 am

こんにちは。

配列を介在させるはどうでしょうか。


Code:
Case of
   : (Form event=On Display Detail) | (Form event=On Printing Detail)
      
      QUERY([明細データ];[明細データ]出荷ID=[出荷データ]ID)
      
      SELECTION TO ARRAY([明細データ]重量;$重量)
      
      v重量:=Sum($重量)
      
End case

クライアントサーバー版でネットワークアクセスが気になるようであれば,「サーバー上で実行」メソッドプロパティを活用して,クエリ〜統計をサーバー側で実行させると良いかもしれません。

miyako

投稿数 : 248
登録日 : 2016/07/05

トップに戻る Go down

Re: On Printing DetailでSUM関数の挙動について

投稿 by miyako on 2018-01-23, 3:27 am

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で帳票を印刷することもできます。

miyako

投稿数 : 248
登録日 : 2016/07/05

トップに戻る Go down

Re: On Printing DetailでSUM関数の挙動について

投稿 by osaru on 2018-01-23, 9:28 am

miyako様、配列を介するアイデアは修正が少なくて良さそうですね、ありがとうございます。

Print formやPrint objectのほうがずっと便利なこともあり,PRINT SELECTIONの経験はほとんどない,というのが正直なところです。

私もPRINT SELECTIONは殆ど使用しませんがページ物の一覧印刷ではお手軽なのでさすがに全くというわけにもいきません。動作していた物が動かなくなるのは過去の資産を運用していく上で非常に不便ですので、修正されることを期待しております。

以上、よろしくお願い致します。

osaru

投稿数 : 32
登録日 : 2017/08/14

トップに戻る Go down

Re: On Printing DetailでSUM関数の挙動について

投稿 by miyako on 2018-07-10, 9:52 am

開発部からのコメントがありました。

印刷中にSum()を計算させるためには,ACCUMUATEを使用しなければならない,というのが本来の仕様です。On Printing Detailイベントの最中であったとしても,その点は変わりません。v13では,この仕様に反してSum()が使用できてしまったのですが,これはバグであり,v14で元の動作が復元されました。

ちなみに,v14のベータ版では,ファイルメニューからカレントセレクションを出力フォームでプリントすると,空のページが出力されるという問題(ACI0080572)があり,これが修正されたことにともない,Sum()の振る舞いも元に戻った,という経緯があります。

miyako

投稿数 : 248
登録日 : 2016/07/05

トップに戻る Go down

Re: On Printing DetailでSUM関数の挙動について

投稿 by osaru on 2018-07-10, 3:23 pm

miyako様、ご連絡ありがとうございます。

v16以前に使用していたのはv12ですが、結構長い期間バグの仕様になっていたように思います。自分は6.8時代から触りはじめしたが、On Display DetailとOn Printing Detailは発生場所が違うだけで、同じ処理ができる物と思っていました。なので単純な集計はACCUMULATE関係無くSUMしていたと思います。(ウチのシステムでは表示フォームをそのまま印刷に使用するところも少なくありませんし・・・)

カレントセレクションをSUMしてくれても実害は無いと思いますが仕様ということなら仕方ないですね〜。

osaru

投稿数 : 32
登録日 : 2017/08/14

トップに戻る Go down

Re: On Printing DetailでSUM関数の挙動について

投稿 by Sponsored content


Sponsored content


トップに戻る Go down

トップに戻る


 
Permissions in this forum:
返信投稿: 不可