オーバーラップまだつづく
そうか、仮締めの段階で無条件で0円サマリー作っちゃうからいけないんですな。本締めで作るようにすれば良いのではないかな。
仮締め、要するにオーバーラップ期間中に8月分取引があれば、その時作る。なければ何もなし。で、本締めの時に、8月分集計しなおして洗替え。取引なければ0円で作る、と。
折角月次決算が仕訳に専念って形になってたのに、サマリー生成処理までやらせるのは気が引けますが。
やっぱりすっきりしないなあ。
月次サマリーはリアルタイム更新じゃなくて、全部本締め段階で作るって事にすればOKなんだけども。ただし、画面や帳票に現在の残を出す時のSQLが濃くはなりますね。今まで散々やって来たんで全然慣れっこですけどね。
例えば、得意先ごとに現在の売掛金残を一覧表示したい場合(ORACLE限定、COALESCEってタイプすんのめんどいんだもん)。
SELECT 得.得意先C, NVL(月次.前月売掛残,0) + NVL(売上.売上合計,0) AS 売掛金残 FROM 得意先マスタ 得 LEFT JOIN ( SELECT 得意先C, 月末売掛残 AS 前月売掛残 FROM 得意先別月次売上SUM WHERE 年月 = (システム年月の1ヶ月前) GROUP BY 得意先C )月次 ON 得.得意先C = 月次.得意先C LEFT JOIN ( SELECT 得意先C, SUM(売上金額) AS 売上合計 FROM 売上明細 WHERE 計上日 >= (システム年月の月初) GROUP BY 得意先C )売上 ON 得.得意先C = 売上.得意先C
こんな感じですかねー。WHERE句に突っ込んでる日付はアプリ上で動的に生成します。
でも、そもそもこれがやりたくないから、リアルタイムで月次サマリー更新なんですよね、多分。ふんがー。