プロジェクト集計 40
プロジェクト集計については、個別問題の「プロジェクト管理」を最初にお読み下さい
スクリプトは、「#---」で挟まれた部分です(「#」以降は、Rubyではコメントとして処理されます)
スクリプト先頭の番号(1:など)は、説明のためのもので、実際には記述しません

最初に、プロジェクト別に費用を集計する方法「1.プロジェクト集計」を説明します
仕訳にプロジェクト番号を付していることが前提となります、プロジェクト番号を入力するのタグは、二科目仕訳のときは「J_DP」「J_CP」、一科目仕訳のときは「J_XP」です
プロジェクト集計では複数のプロジェクトを一括して処理する場合があります、プロジェクト集計のために「展開一番」スクリプトを順次実行するだけでなく、その一連のスクリプトを繰返し実行する場合の例として、「2.プロジェクト一括集計」「3.プロジェクト別科目別一覧表」を紹介します
プロジェクトを一括して処理するためには「プロジェクトリスト」ファイルを使用します
「プロジェクトリスト」のファイル名−「LPJ_hhhh」(hhhh:法人番号)−は既定で、プロジェクトCodeを「from」「to」の形式で記述します、「プロジェクトリスト」ファイルは個別ファイルのフォルダに置きます
プロジェクトリストの記載例
#
---------------------------
100,100
110,110
100,199
(以下、略)

#---------------------------
プロジェクトを一括処理するとき、この(ユーザスクリプトの)例では、プロジェクトの集計期間は、基本マスタの「開始会計日」「終了会計日」から取得するようにしているので、当該項目に適切な値(会計日)をセットして運用することに留意してください

「展開一番」スクリプトを繰り返し処理するユーザスクリプトの書き方の基本は、「ユーザスクリプト」「ユーザスクリプトの作成」に説明してあります、参考にしてください


1.プロジェクト集計

#---------------------
1:require "t1"
2:
Sel9MA1XJ2WXJ_SetV("m","J_M",1,6)
3:
Sum7JAmt1WXJ2ZLT("J_P",100,100)
4:
Sum7JAmt1WXJ2ZLT("J_P",120,120)
5:
Sum7JAmt1WXJ2ZLT("J_P",140,140)
6:
Sum7JAmt1WXJ2ZLT("J_P",100,200)
#------------------------

1:「展開一番」のスクリプトを利用するためのおまじない
2:仕訳ファイルから経過月(J_M)が1から6までの仕訳を抽出し、仕訳抽出ファイルを作成する
3:仕訳抽出ファイルから、借方または貸方のプロジェクトCode欄が100の仕訳を抽出し、金額集計を行いその結果を集計リストに書き出す
4:上記と同様、プロジェクトCodeが120番の集計を行なう
5:上記と同様、プロジェクトCodeが140番の集計を行なう
6:プロジェクトCodeの集計範囲が100から200となっている他は上記と同じ

3:から6:の集計キー「J_P」は、J_DP(借方プロジェクトCodeタグ名) 及び J_CP(貸方プロジェクトCodeタグ名) の両方を指示します、「J_P」と指定したときは借方・貸方いずれかが指定したプロジェクト番号の範囲にあれば集計対象となります(「J_DP」とすれば借方のプロジェクト番号だけで判定され集計対象となります)
集計リストは、集計年月日時間、ファイル名(FullPath)、集計キー、集計範囲、件数と金額、残高の順に、以下のように記録されます
以下は上記3:の例
-----------------------------------------
Sum7JAmt1WXJ2ZLT の実行実行結果
-----------------------------------------
2022/3/20 16:44:22,
e:\a2_mpacs_US\Case_21\WXJ_2100.txt (J_P,100,100)
Dr. 3件 112409円
Cr. 2件 12367円
Bal 100042円
-----------------------------------------

2.プロジェクト一括集計
#-------------------------------
_1:def p_Prj_LK()
_2:
require "t1"
_3:
require "t1_GC"
_4:GetProfileData()
_5:kf=$pathX+"XK_"+$hhhh+".txt"
_6:k=open(kf)
_7:while x=k.gets do
_8:y=x.split(/,/)
_9:if y[0]=="K_fDate" then
10:$fDate=y[1].chomp
11:end
12:if y[0]=="K_tDate" then
13:$tDate=y[1].chomp
14:end
15:end
16:k.close

17:Sel9MA1XJ2WXJ_SetV("m","J_Date",$fDate,$tDate)
18:listPrj=$pathX+"LPJ_"+$hhhh+".txt"
19:lprj=open(listPrj)
20:while x=lprj.gets do
21:y=x.split(/,/)
22:$CodeS=y[0]
23:$CodeE=y[1].chomp

24:
Sum7JAmt1WXJ2ZLT("J_P",$CodeS,$CodeE)
25:end
26:lprj.close
27:end
28:p_Prj_LK()

#-------------------------------

1:から27:までがプログラム(ユーザ定義のメソッド)であり、def以下のp_Prj_LKがその名前になります
28:でこれを実行(詳細はユーザスクリプトの実行−間接法を参照のこと)
2:と3:は「展開一番」を利用するためのおまじない
4:でプロファイルのデータを取得し、5:と6:で基本マスタをオープンする
7:から15:で基本マスタからK_fDate・K_tDateタグの値を読み出し、グローバル変数$fDate・$tDateにその値を格納する
16:で基本マスタをクローズし
17:でグローバル変数$fDate・$tDateを利用し、集計期間の仕訳を仕訳ファイルから切り出す
18:と19:でプロジェクトリストを開き
20:から25:で、プロジェクトリストの値(プロジェクトCode)がなくなるまで、プロジェクト集計のスクリプトを繰り返し実行する
20:でプロジェクトリストの行データを読み込み、21:でこれをカンマをキーにフィールド単位に分割し
22:で最初のフィールドの値をグローバル変数$CodeSに代入、23:で二番目のフィールドの値をグローバル変数$CodeEに代入する、なお「chomp」は、二番目のフィールドの値(文字列)に付いている改行Codeを削除するメソッド
24:でグローバル変数をパラメタに代入し、Sum7JAmt1WXJ2ZLTスクリプトを実行する
26:でプロジェクトリストをクローズする


3.プロジェクト別科目別一覧表
#-----------------------------------------------------------
_1:def p_Prj_TB()
_2:
$ACCodeS=6201
_3:$ACCodeE=7999
_4:
require "t1"
_5:
require "t1_GC"
_6:
GetProfileData()
_7:kf=$pathX+"XK_"+$hhhh+".txt"
_8:k=open(kf)
_9:while x=k.gets do
10:y=x.split(/,/)
11:if y[0]=="K_fDate" then
12:$fDate=y[1].chomp
13:end
14:if y[0]=="K_tDate" then
15:$tDate=y[1].chomp
16:end
17:end
18:k.close
19:listPrj=$pathX+"LPJ_"+$hhhh+".txt"
20:lprj=open(listPrj)
21:i=1
22:
MkF1YA2ZWS(20)
23:while x=lprj.gets do
24:y=x.split(/,/)
25:$CodeS=y[0]
26:$CodeE=y[1].chomp
27:
MkF1YA2ZTB()
28:
Sel9MA1XJ2WXJ_SetV("m","J_Date",$fDate,$tDate)
29:
Sel12WXJ("J_P",$CodeS,$CodeE)
30:MkF1WXJ2WSumDC()
31:
Pst1WSumDC2ZTB(1,0)
32:
Cal7Bal12ZTB(6)
33:
Bal7CgF12ZTB()
34:
Pst1ZTB2ZWS($ACCodeS,$ACCodeE,9,i)
35:i=i+1
36:end
37:end
38:p_Prj_TB()
#-----------------------------------------------------------

1:から37:までがプログラム(ユーザ定義のメソッド)であり、def以下のp_Prj_TBがその名前になる
38:でこれを実行(詳細はユーザスクリプトの実行−間接法を参照のこと)
2:と3:は後述

4:〜6:は「展開一番」を利用するためのおまじない
7:〜18:は基本マスタからプロジェクト集計期間を取り出す処理、「2.プロジェクト一括処理」と同じなので説明は省略
19:で「プロジェクトリスト」ファイル名を作成し、20:でこれをオープンする
21:で変数i(列ポインタ)に1を代入
22:で空のワークシートファイルを作成する、ここでは金額欄として20列を指定(20のプロジェクトを処理する予定)している
23:から36:までで繰り返し処理を行う
23:で「プロジェクトリスト」の行を読み込み、24:でこれをカンマをキーにフィールド単位に分割し、25:と26:でその値(プロジェクトCode)をグローバル変数に代入する
27:で科目マスタから空の試算表ファイルを作成し
28:で、仕訳ファイルから12:と15で取得した集計期間の仕訳を抽出し、29:でさらにその中から25:と26:で取得したプロジェクトの仕訳を抽出する
30:から33:で上記抽出仕訳の発生額を集計し、試算表ファイルの期間発生額欄に転記し、繰越残高を計算する
34:で試算表ファイルから、2:と3:で指定した科目(Code)範囲の繰越残高の金額をワークシートのi列に転記する
35:で次の処理のために列ポインタiを1つ増加させる
36:で23:に戻り、「プロジェクトリスト」のデータがなくなるまで上記の処理を繰り返す

ワークシートファイルに、プロジェクト別に科目別発生額が記録されるので、後は、アウトプット処理で、整形します



Last Update 2022/03/22