第486話:クラウド会計と連携させる(その1)

2016年6月6日
「借方?、貸方?、、、ナニそれ??、おいしいの?!」


たしかに『財務会計用語』に対して "アレルギー反応" を示すプログラマは少なくない。

しかし、社会人なら是非とも知っておきたい単語だ。基本的なITスキルを問う『情報処理技術者試験』ですら、頻出の用語となっている。もっとも「かりかた・かしかた」という、似たような訳語を当てた福沢諭吉の罪も、それなりに悪い。。。


ちなみに実務上は「左列・右列」と呼んでも何ら問題ない。どちらの列も、単に「資産内訳表」に過ぎない。どうしても具体的に言いたければ、「左列:現金資産と現金的資産の内訳」、「右列:返す必要がある資産(借金)と返す必要が無い資産の内訳」と考えれば十分だ。


では、、、クラウドサービス提供会社が
  • 12か月分のクラウド利用権を販売した
  • 12万円で4月1日に一年契約した
  • 5月30日に入金される
という場合に、それぞれの「資産内訳表」(貸借対照表)はどのように変化していくのだろうか?


たとえば、、、

4月には、(まだ何も入金されてないものの)、すでにサービスを提供している訳で、「1か月分(1万円)の資産は増えている」とみなすことができる。「ツケで売る」とか「掛け売り」とか言われる(売掛金)。そして5月以降も毎月変化していく。。。

[販売報告プロセス]



結論を言えば、左右それぞれの増加減少は、以下の通りとなる。
04-01 売掛金:+1万円 / 売上高:+1万円
05-01 売掛金:+1万円 / 売上高:+1万円
05-30 普通預金:+12万円 売掛金:-2万円 / 前受金:+10万円
06-01 (現金的資産かわらず) / 売上高:+1万円、前受金:-1万円
07-01 (現金的資産かわらず) / 売上高:+1万円、前受金:-1万円
08-01 (現金的資産かわらず) / 売上高:+1万円、前受金:-1万円
09-01 (現金的資産かわらず) / 売上高:+1万円、前受金:-1万円
10-01 (現金的資産かわらず) / 売上高:+1万円、前受金:-1万円
11-01 (現金的資産かわらず) / 売上高:+1万円、前受金:-1万円
12-01 (現金的資産かわらず) / 売上高:+1万円、前受金:-1万円
01-01 (現金的資産かわらず) / 売上高:+1万円、前受金:-1万円
02-01 (現金的資産かわらず) / 売上高:+1万円、前受金:-1万円
03-01 (現金的資産かわらず) / 売上高:+1万円、前受金:-1万円

見れば明らかなように、6月以降は「右列:借金と借金以外の資産内訳」が変わっていくだけだ。「前受金」とは「前もって預かるお金」という意味で借金扱いとなる。

経理部門では、これら13の処理を、13枚の「伝票」を作って管理しているのだ。(紙じゃないけど)

ここで紹介するワークフローは、セールスチームによる「1.販売報告工程」が完了後に、これらの伝票が自動生成される仕組みだ。経理による「2.記帳工程」において、すでに伝票が作られた状態となっている。

[販売報告プロセス:「2.記帳する」画面]


▼スクリプト工程『伝票自動生成』の設定サンプル (サーバサイド JavaScript)
//// == ワークフローデータの参照 / Retrieving ==
//var recordDate  = data.get("0");      // 請求日 "2016-03-01"
var cashinDate  = data.get("1");      // 入金予定日
var salesVolume = data.get("2") - 0;  // 請求金額
var recordTitle = data.get("5") + ""; // 契約タイトル

var sMonth = data.get("3");  // 開始月(日付) "2016-03-01"
sMonth = sMonth.getFirstTimeInMonth();
var sMonthStr = data.get("3") + "";  // 開始月(日付) "2016-03-01"
var eMonthStr = data.get("4") + "";  // 終了月(日付) "2016-03-01"


//// == 演算 / Calculating ==
var sMonthYYYY = sMonthStr.substring(0, 4) - 0;
var sMonthMM   = sMonthStr.substring(5, 7) - 0;
var eMonthYYYY = eMonthStr.substring(0, 4) - 0;
var eMonthMM   = eMonthStr.substring(5, 7) - 0;

var numOfMon = (eMonthYYYY - sMonthYYYY) * 12 + eMonthMM - sMonthMM + 1;
var monthlySales = salesVolume / numOfMon; 

var mfRecord = "";
var i=0;
var j=0;
for (i = 0; i < numOfMon; i++){
  var tmpDate = new com.questetra.bpms.util.AddableDate( sMonth.addMonths(i).getTime() );
  var tmpDateStr = tmpDate + "";
  var monthlyTitle = tmpDateStr.substring(0, 7) + " @ " + recordTitle; 

  if( cashinDate.after(tmpDate) ){
    mfRecord += tmpDateStr + "\t売掛金\t\t対象外\t\t";
    mfRecord += monthlySales + "\t\t売上高\t\t課税売上 8%\t\t";
    mfRecord += monthlySales + "\t\t";
    mfRecord += monthlyTitle + "\t\t\t\n";
    j = i + 1;
  } else {
    mfRecord += tmpDateStr + "\t前受金\t\t対象外\t\t";
    mfRecord += monthlySales + "\t\t売上高\t\t課税売上 8%\t\t";
    mfRecord += monthlySales + "\t\t";
    mfRecord += monthlyTitle + "\t\t\t\n";
  }
}

var kakeCredit = monthlySales * j;
var maeukeDeposit = salesVolume - kakeCredit;

mfRecord += cashinDate + "\t普通預金\tみずほ銀行\t対象外\t\t";
mfRecord += salesVolume + "\t\t売掛金\t\t対象外\t\t";
mfRecord += kakeCredit + "\t\t";
mfRecord += recordTitle + "\t\t\t未実現\n";
mfRecord += cashinDate + "\t\t\t\t\t";
mfRecord += "0" + "\t\t前受金\t\t対象外\t\t";
mfRecord += maeukeDeposit + "\t\t";
mfRecord += recordTitle + "\t\t\t未実現\n";


//// == ワークフローデータへの代入 / Updating ==
retVal.put("6", mfRecord );

<データ項目一覧画面>

[雛形ダウンロード (無料)]
<類似プロセス>
≪関連記事≫

[英文記事 (English Entry) ]

0 件のコメント :

コメントを投稿