オーバーラップまだつづく

そうか、仮締めの段階で無条件で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句に突っ込んでる日付はアプリ上で動的に生成します。

でも、そもそもこれがやりたくないから、リアルタイムで月次サマリー更新なんですよね、多分。ふんがー。