工事進行基準による売上高の計算 70


1.検討事項

原価計算ライブラリ「t1_costing」Ver.2.0(以降) に、工事進行基準による売上高計算を支援する複数のスクリプトを追加しました
工事進行基準は、売上高計算において、長期プロジェクトに係る収益を当該プロジェクトが属する会計期間に適切に配分する一般的な基準です
当期の売上高(X)は、当該プロジェクトの契約額(A)に作業進捗率を乗じて計算します
作業進捗率は、見積総原価(B)に対する実際発生原価(C)の割合をもって計算します
したがって、(A)(B)(C)が与えられれば(X)は簡単に計算することができます
「展開一番」(の原価計算ライブラリ)では、上記の計算を行う仕組みを提供しますが、実際の運用では予め以下の諸点に係る会計処理などを検討しておく必要があります
1.工事進行基準を適用して売上高を計上する(できる)プロジェクトの要件
2.プロジェクト完成までの期間の中途での、契約額や見積原価の変更
3.契約時あるいは契約後に損失が生じる可能性
4.外貨建プロジェクトの為替変動
5.消費税・・・など
これらについては、会計上と税務上で扱いが異なることがあることにも留意して下さい
「展開一番」は仕組みを提供するだけで、会計処理の正確性を保証するするものではありません
例えば、原価が売上高を超えるプロジェクトであれば、受注損失引当金等の設定や取崩の会計処理が必要になります
ユーザは、「展開一番」の工事進行基準による売上高計算の仕組みを理解し、計算要素(上記の(A)〜(C))をプロジェクトファイルにセットし、スクリプトの実行結果(X)を仕訳として「展開一番」に適切にフィードバックさせます、また、これに付随して必要となる仕訳も起票する必要があります


2.事前準備

1.プロジェクトファイル(以下、Prjファイル)
工事進行基準による売上高(以下「売上高」と表記)の計算は、Prjファイルで行います
Prjファイルには、最大27個の項目(フィールド、以下「金額フィールド」)を持たせることができます
この金額フィールドには固有の名前が付けられています
「金額フィールド名」については、原価計算の「マスタファイルの作成(1100_20)」を参照して下さい
原価計算の結果を、どの金額フィールドにセットするかは、スクリプトに渡すパラメタで指定できます
例えば、「C_RefPrjPre_SetPrj("M1")」を実行すると、プロジェクト直課原価が当該Prjファイルの「M1」フィールドにセット(すでにデータがセットされていれば加算)されます
「売上高」の計算では、Prjファイルの金額フィールドのうち任意の8項目を利用します
ユーザは、この7項目を、「売上高」の計算要素と関連づけて基本マスタに登録します
「展開一番」は基本マスタからこの情報を取得して「売上高」を計算し、指定の金額フィールドにその結果をセットします

2.基本マスタ
基本マスタ(XK_hhhh.txt)に登録する情報は以下の10項目で、「タグ名,金額フィールド名」の形式で記述します

1.「K_CUnit」には、計算する「売上高」の単位を記載します、千円単位で売上高を計算するには「1000」一円単位であれば「1」を指定します
2.「K_CFractions」には、端数処理を数字で記載します、消費税と同じで、0:切り捨て、1:四捨五入、2:切り上げ となります
3.「K_CEle0」〜「K_CEle7」には、それぞれに対応するPrjファイル(CstPrj_hhhh.txt)の金額フィールド名を記載します

以下はタグ名の説明であり、当該タグに対応する金額フィールドにその情報(金額)が記載されることになります
例えば、「K_CEle5,G5」であれば、スクリプト〔C_CalSalesPM_CstPrj〕で計算した「売上高」がPrjファイルの金額フィールド名が「G5」のフィールドにセットされることになります
・K_CEle0 : メモ・・・スクリプトのパラメタで指定した任意のメモがセットされます
・K_CEle1 : オペレーション番号・・・任意の番号をセットします、この番号を利用して「売上高」計算の範囲を指定します(*1)
・K_CEle2 : 契約額・・・所与の金額として直接Prjファイルに記録する契約額をセット
・K_CEle3 : 見積総原価・・・所与の金額として直接Prjファイルに記録する見積総原価をセット
・K_CEle4 : 実際発生原価・・・原価計算の結果としてセットされた発生原価(*2)
・K_CEle5 : 「売上高」・・・スクリプトによって計算された「売上高」
・K_CEle6 : 契約残高・・・契約額から「売上高」を控除した残高(「売上高」計上の上限値)
・K_CEle7 : 「売上高」累計額・・・スクリプトによって計算された契約額から契約残高を控除した残高
*1 利用方法は後述
*2 所与の金額等として直接Prjファイルに記録することも可

--------------------------------
基本マスタの記載例
--------------------------------
・・・・・・・
K_CUnit,1000000
K_CFractions,0
K_CEle0,G0
K_CEle1,G1
K_CEle2,G2
K_CEle3,G4
K_CEle4,G5
K_CEle5,G6
K_CEle6,G3
K_CEle7,G7

この例では
「売上高」の計算は百万円以下を切り捨てて計算する設定になっています
例えば、契約額が 124,000,000円で、見積総原価が 84,500,000円、当期の実際発生原価が 20,876,500円であったとすれば
「売上高」は 124,000,000×20,876,500÷84,500,000=30,635,373.278 →30,000,000 と計算され、「K_CEle5」で指定された金額フィールド「G6」すなわちプロジェクトファイルの最初から28番目のフィールドにこの数字がセットされます
このとき、「K_CEle6」で指定された金額フィールド「G3」に 18M がセットされていれば「G6」には30Mではなく18Mがセットされます(「K_CEle6」=「G3」には契約残高がセットされます、工事進行基準により計上された「売上高」は契約高から控除されます、したがって、当期に計上できる「売上高」は「G3」の値を超えることはできません)


3.運用

1.Prjファイルの金額フィールドの使い方が決まれば、これに基づいて基本マスタに設定情報を追加します

2.工事進行基準による売上高(以下「売上高」と表記)の計算に必要な情報を、Prjファイルの各Prjごとに設定します(どの情報をどの金額フィールドにセットするかは基本マスタの設定に従います)

【契約残高】
「K_CEle6」(契約残高)に対応する金額フィールドには、原則としてプロジェクト登録時には、「K_CEle2」(契約額)に対応する金額フィールドと同じ値をセットします
「契約残高」欄には「契約額」からこれまでに計上した「売上高」の総額を控除した額が格納されます、これは今回計上可能な「売上高」の上限を意味しています
「C_CalSalesPM_CstPrj」スクリプトは、「売上高」を計算した後、この額が「契約残高」を超えていないかチェックし、超えている場合は、この額を「売上高」とします
「C_CalOdrVolBal_CstPrj」スクリプトは「契約残高」を計算〔契約残高=契約残高−「売上高」〕します、契約残高を更新するスクリプトを、「売上高」を計算するスクリプトとは別に用意したのは、売上高を洗い替え方式で計上する運用があるからです
前月(まで)に計上した「売上高」を当月に取り消し、当月に改めて当月までの進捗割合に応じて「売上高」を計上する場合は、契約残高を契約額と同じにしておく必要があるからです
契約額が契約期間中に変更された場合、その影響額を当月計上の売上高で吸収させる方針を採るときは、「売上高」を洗い替え方式で計算します、この場合は、「契約額」と「契約残高」を変更後の契約額とし、契約残高を更新するスクリプトは実行しません

3.当月の実際発生原価を「K_CEle4」に対応する金額フィールドにセットします
Prjファイルの金額フィールドの管理はユーザに任されています、どの金額フィールドの原価が、「売上高」の計算に必要な原価であるかはユーザが決める必要があり、その原価を指定の金額フィールドにセットします
「C_CalPrj_StVPrj」「C_SumPrj_StVPrj」スクリプトを利用すれば、異なる金額フィールド間の値を合計したり、指定範囲の値を集計して、指定の金額フィールドにセットできます

4.「売上高」の計算に必要な要素がすべてセットされたら「C_CalSalesPM_CstPrj」スクリプトを実行します
「売上高」が計算されて、その結果が「K_CEle5」に対応する金額フィールドにセットされます
「売上高」を計算する条件は以下のとおりです
1.プロジェクトのオペレーション番号が、スクリプトの第二及び第三パラメタの範囲内である
2.売上高がゼロである
3.契約額がゼロでない
4.見積原価がゼロでない
5.発生原価がゼロでない
6.契約残高がゼロでない
以上、6つの条件を全て満たすプロジェクトについて「売上高」を計算します

【メモとオペレーション番号】
「売上高」を計算する「C_CalSalesPM_CstPrj」スクリプトは三つの引数を要求します
第一引数がメモ、第二・第三引数がオペレーション番号です
例えば、「C_CalSalesPM_CstPrj("2021年4月度",401,430)」とすれば、オペレーション番号が 401〜430 であるプロジェクトが計算対象となり、(その全てのプロジェクトの)「K_CEle0」に対応する金額フィールドに「2021年4月度」がセットされます

5.「売上高」の計算が済んだら、計算内容を検証し間違いがないかどうかチェックします
スクリプト「C_ApdSalesPMBook_CstPrj」は、Prjファイルの、「売上高」計算要素等(「K_CEle0」〜「K_CEle7」)に対応する金額フィールドの値を、「SalesPMBook_hhhh」ファイルに出力します(註)、プロジェクトの範囲はパラメタでオペレーション番号を指定します
以下はその出力例です(この例では値の並びは、Prj番号、Prj名、取引先、メモ、オペレーション番号、契約額、見積総原価、実際発生原価、「売上高」、契約残高、「売上高」累計 となっています)
---------------------------------------------
Script...C_ApdSalesPMBook_CstPrj
Operation No. 331 - 333
2021/04/05 10:02:12
---------------------------------------------
PrjCode,プロジェクト名,取引先,Memo,OpeNo.,契約額,売上高,契約残高、売上高累計
---------------------------------------------
61230,環境省受託事業2021,環境省,21年4月2nd,331,6000000,6500000,2387899,2204000,3796000,2204000
64350,薬品副作用訴訟調査,小笠原薬品,21年4月2nd,332,3600000,2000000,2548353,3600000,0,3600000
71430,石油輸送最適化計算,日本石油開発,21年4月2nd,333,3000000,2800000,4022164,3000000,0,3000000
---------------------------------------------
Sales...8,804,000円 (3件)
---------------------------------------------

6.「売上高」の計算チェックが済んだら、オペレーション番号でプロジェクトの範囲を指定して「C_ResSales_CstPrj」スクリプトを実行します
「売上高」欄がゼロになり次回の計算が可能になります

(註)スクリプト「C_ApdSalesPMBook_CstPrj」は、プロジェクトファイルの「売上高」計算要素等を出力しますが、その内容はスクリプトの実行によって変化することに注意して下さい
「C_CalSalesPM_CstPrj」では、「売上高」だけが計算され、契約残高と売上高累計は計算されません
「C_CalOdrVolBal_CstPrj」では、「売上高」はそのままで、契約残高と売上累計額が計算されます
「C_ResSales_CstPrj」では、「売上高」がゼロにリセットされ、契約残高と売上累計額に変更はありません

7.最後に終了処理を行います
処理手順は、「プロジェクト別原価計算の仕組み(1100_10)」の「8.終了処理」を参照して下さい






Last Update 2021/04/03