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

2016年6月20日
エクセル向け CSV としてダウンロードできるボタンを設置する。(前回記事

会計システムにデータ投入しなければならない人の視点に立てば、その『Download ボタン』は極めて有効だ。いわゆる「仕訳伝票」のデータを Excel ファイル上に、サクサク追記していくことができる。「アル」と「ナイ」とでは、業務効率が大きく違う。日々の売掛金が、5分で入力されるか、1時間かけて入力されるか、運命の分かれ道・・・。

しかしそれでも、「Excel ファイルに追記する」という作業であるが故に、非常にクローズドな工程のままだ。たとえば、「最新ファイルは何処にあるのか?」、「その作業におけるコツはあるのか?」、「微修正が必要な場合のテクニックは?」などなど、工程に紐づくべきノウハウは俗人的なものになる可能性が高い。(ヌケモレ・コピーミス・不正といった事象発生リスクも気になる)


以下のワークフロー定義は、自動生成された複数の仕訳伝票データが Google SpreadSheets に自動追記される仕組みだ。(「MFクラウド会計」であれ、「Freee」であれ)、どんなクラウド型会計システムにデータ投入するにしても、『仕訳伝票』がクラウドで一元管理されていれば非常に便利だ。

ちなみに、そもそも、ワークフローに沢山の案件が流れ、それらの集計を行うべきは、ワークフローシステム側の仕事といえる。たとえば『案件一覧』は、各プロパティの総計や平均が集計される。しかし、各案件が「不定数の伝票」を生成するようなケースにおいては、その「伝票」を集計したい、といったニーズにはナカナカ応えづらい。その様な場合には『伝票一覧』というテーブルが別途用意されるべきだろう。

ここでは2016年5月に登場した「Sheets API v4」を使う。

[販売報告プロセス-スプレッドシート連携]

[販売報告プロセス-スプレッドシート連携:「3.記帳する」画面]

「API を使いこなす」のは大変だ。

しかし、今日「パソコンが使いこなされている」のと同じように、近い将来「API を使いこなす」のは多くのビジネスパーソンに必要なスキルとなるだろう。事実、「Facebook 投稿と Twitter 投稿を連動させる」といったシステム間の API 通信設定は、すでに多くの人が実体験するに至っている。


ちなみに Google Sheets API v4 は、その設計が v3 と大きく異なる。

> The Sheets API gives you full control over the content and appearence of your spreadsheet data.

と自身を表現しているように、きめ細かなレイアウト操作までできるようになっている。つまり「様々なレベルでの操作」ができるのだ。
ただ、シンプルに使いたい人にとっては、必要な API 情報を調べるのがタイヘンになったともいえるだろう。マニュアル(英語)を参照する場合は、(結局のところ)、「v3からv4への乗り換え」を参照する方が手っ取り早いケースもある。ちなみに v4 では「JSON ベースの REST API」が徹底されており、生産性の観点では非常に使いやすくなっている印象もある。

Sheets API は
  • spreadsheets
  • spreadsheets.sheets
  • spreadsheets.values
の大きく3つのレベルでアクセスすることができるが、このワークフロー例では「spreadsheets」の「batchUpdate」に対して「AppendCells」というリクエストが送られる設定だ。(←ナンダ、これは日本語か?)

▼ Google との OAuth2 通信設定のサンプル (メッセージ送信中間イベント)
POST: https://sheets.googleapis.com/v4/spreadsheets/●{spreadsheetId}●:batchUpdate
Content-Type: application/json

Authorization Code Request URL
https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force
Access Token Request URL
https://accounts.google.com/o/oauth2/token
Scope
https://www.googleapis.com/auth/spreadsheets
Consumer Key
※ 取得すること
Consumer Secret
※ 取得すること

<通信許可の様子>

▼生成されるべき RequestJson のサンプル
Requestsオブジェクトの中に、AppendCellsRequestオブジェクトを埋める。
※ 列データ(RowData オブジェクト)を繰り返し作ることになる。
  1. {"requests": [{"appendCells": {"sheetId": 0,"rows": [
  2. {"values": [
  3. {"userEnteredValue": {"stringValue": ""}},
  4. {"userEnteredValue": {"stringValue": "2000-01-01"}},
  5. {"userEnteredValue": {"stringValue": "売掛金"}},
  6. {"userEnteredValue": {"stringValue": ""}},
  7. {"userEnteredValue": {"stringValue": "対象外"}},
  8. {"userEnteredValue": {"stringValue": ""}},
  9. {"userEnteredValue": {"numberValue": 111}},
  10. {"userEnteredValue": {"stringValue": ""}},
  11. {"userEnteredValue": {"stringValue": "売上高"}},
  12. {"userEnteredValue": {"stringValue": ""}},
  13. {"userEnteredValue": {"stringValue": "課税売上 8%"}},
  14. {"userEnteredValue": {"stringValue": ""}},
  15. {"userEnteredValue": {"numberValue": 111}},
  16. {"userEnteredValue": {"stringValue": ""}},
  17. {"userEnteredValue": {"stringValue": "たいとる"}},
  18. {"userEnteredValue": {"stringValue": ""}},
  19. {"userEnteredValue": {"stringValue": ""}},
  20. ],},
  21. {"values": [
  22. {"userEnteredValue": {"stringValue": ""}},
  23. {"userEnteredValue": {"stringValue": "2000-01-01"}},
  24. {"userEnteredValue": {"stringValue": "売掛金"}},
  25. {"userEnteredValue": {"stringValue": ""}},
  26. {"userEnteredValue": {"stringValue": "対象外"}},
  27. {"userEnteredValue": {"stringValue": ""}},
  28. {"userEnteredValue": {"numberValue": 111}},
  29. {"userEnteredValue": {"stringValue": ""}},
  30. {"userEnteredValue": {"stringValue": "売上高"}},
  31. {"userEnteredValue": {"stringValue": ""}},
  32. {"userEnteredValue": {"stringValue": "課税売上 8%"}},
  33. {"userEnteredValue": {"stringValue": ""}},
  34. {"userEnteredValue": {"numberValue": 111}},
  35. {"userEnteredValue": {"stringValue": ""}},
  36. {"userEnteredValue": {"stringValue": "たいとる"}},
  37. {"userEnteredValue": {"stringValue": ""}},
  38. {"userEnteredValue": {"stringValue": ""}},
  39. ],}
  40. ],"fields": "*",},}],}

▼スクリプト工程『TSV to RequestJson』の設定サンプル (サーバサイド JavaScript)
  1. //// == ワークフローデータの参照 / Retrieving ==
  2. var myTsv = data.get("6") + "";
  3. var sheetGid = data.get("9") + "";
  4.  
  5.  
  6. //// == 演算 / Calculating ==
  7. var myJson = '{"requests": [{"appendCells": {"sheetId": '
  8. + sheetGid
  9. + ',"rows": [';
  10.  
  11. var rowsArray = myTsv.split("\n"); // 改行毎に分割し string[] 配列に格納
  12. for (var i=0; i < rowsArray.length; i++){
  13. myJson += '{"values": [';
  14. myJson += '{"userEnteredValue": {"stringValue": ""}},'; // 1列目(A列)に空行を入れる
  15.  
  16. var cellsArray = rowsArray[i].split("\t"); // Tab毎に分割し string[] 配列に格納
  17. for (var j=0; j < cellsArray.length; j++){
  18. if( j == 5 || j == 11 ){ // 7列目(G列)と13列目(M列)は数値列
  19. myJson += '{"userEnteredValue": {"numberValue": '
  20. + cellsArray[j]
  21. + '}},';
  22. }else{
  23. myJson += '{"userEnteredValue": {"stringValue": "'
  24. + cellsArray[j]
  25. + '"}},';
  26. }
  27. }
  28. myJson += '],},';
  29. }
  30. myJson += '],"fields": "*",},}],}';
  31.  
  32.  
  33. //// == ワークフローデータへの代入 / Updating ==
  34. retVal.put("10", myJson );

<データ項目一覧画面>


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

[英文記事 (English Entry) ]

0 件のコメント :

コメントを投稿