取引先別の売掛金(取引先コード順)の試算表を作ってみた〜会計ソフトfreeeのAPI連携〜
はじめに
クラウド会計ソフトfreee(以下、freee)の試算表は、売掛金を取引先別で表示すると取引残高順で表示され、画面上では表示順を変更することはできません。しかし、「取引先コード順に試算表を確認したい」という方もいらっしゃるのではないでしょうか。
そこで、freeeAPIを活用してスプレッドシートに取引先コード順の取引先別の売掛金残高を出力・確認する方法を記事にしました。
なお、本記事では取引先別の売掛金(取引先コード順)の試算表の作り方ですが、例えば、売掛金を買掛金に置き換えるなどのカスタマイズは可能です。
対象読者
・freeeのユーザー
・freeeのAPI機能の仕組みを理解しているユーザー
・Google(スプレッドシート)のユーザー
・Google Apps Scriptを読み書き可能なユーザー
・経営者や財務、経理、経営管理などの管理職や担当者、会計・税理士事務所の関係者
を対象読者と想定して執筆しています。
この記事を読んでできるようになること
・freeeから取引先情報(取引先や取引先コード)を取得すること(パラーメーターの指定)
・freeeから期間指定した試算表(取引先別の売掛金)を取得すること(パラーメーターの指定)
・取得した取引先情報と試算表を連結させ、取引先コードを表示する試算表と作り変えること(データの加工)
・連結した取得情報をスプレッドシートに指定したシート、セルに出力し、並び替え、罫線などの必要な装飾を加えること(データの出力と表現)
実装方針
・プログラミング知識のないユーザーが操作でき、簡単に最新情報に更新できること
前提
・freeeのユーザーアカウント(権限は「取引先登録」以外)を保持しており、Googleアカウントでログインできる状態であること
・最新データはfreee上に登録してあること
・freeeのAPI認証済みであること。*なお、本記事でのAPI認証方法はこちらの記事のサンプルを参考に実施しており、その方法は割愛しています。
・freeeの取引先設定で取引先コードを登録してあること
・freeeに登録済みの取引先数が500以下であること。*500を超える場合も対応可能ですが、一部、コードの書き換えが必要です。
・スプレッドシートに表示させるのは、取引先別の売掛金データとして、取引先コード、取引先名、期首残高、期中借方金額、期中貸方金額、期末残高を表示すること
目標成果物
取引先コード順に取引先別の売掛金の試算表を表示させる。
流れ
スプレッドシートの作成〜設定
スプレッドシートを新規作成
スプレッドシートを新規で作成します。*次のURLをクリックすると簡単に作成することができます。spreadsheet.new
「売掛金残高」「日付」の名称でシートを作成する
・売掛金残高
・日付
という名称のシートを作成します。
Google Apps Scriptでコードを記述
スクリプトを表示
スプレッドシート => ツール => スクリプト を選択
メインコード(Google Apps Script)
function getAccountReceivavle() { //スプレッドシートの設定 var ss = SpreadsheetApp.openById("*********************************"); //スプレッドシートを指定する***にはスプレッドシートIDを入力してください var date_sheet = ss.getSheetByName('日付'); //スプレッドシートのシートを指定する var start_date = date_sheet.getRange('A2').getDisplayValue(); //期首の日付を指定する var end_date = date_sheet.getRange('B2').getDisplayValue(); //期末の日付を指定する var sheet = ss.getSheetByName("売掛金残高"); //売掛金情報を出力したいシートを指定する //合鍵を制作する var freeeApp = getService(); //freeeのAPI認証 var accessToken = freeeApp.getAccessToken(); //パラメーターを指定する ***にはcompany_idが入ります var requestUrlBs = "https://api.freee.co.jp/api/1/reports/trial_bs?company_id=**********&breakdown_display_type=partner" + '&end_date=' + end_date + '&start_date=' + start_date; //期間指定した取引先別のBS情報を取得するパラメーター var requestUrlPartners = "https://api.freee.co.jp/api/1/partners?company_id=**********&limit=500"; //取引先情報を取得するパラメーター //データをリクエストする var headers = { "Authorization" : "Bearer " + accessToken}; var options = { "method" : "get", "headers" : headers }; //レスポンスデータを受け取る var JSON_response_bs = UrlFetchApp.fetch( requestUrlBs , options ).getContentText(); var JSON_response_partners = UrlFetchApp.fetch( requestUrlPartners , options ).getContentText(); var Data_bs = JSON.parse( JSON_response_bs ); var Data_partners = JSON.parse( JSON_response_partners ); //レスポンスデータを加工する var Target = Data_bs.trial_bs.balances; var partners = Data_partners.partners; var partners_name_only = []; //取引先名の名前を保管する配列 for(var p = 0; p < partners.length; p++) { partners_name_only.push( partners[p].name ); }; var search = "売掛金" //加工済みのレスポンスデータの中で売掛金が配列の何番目に保存されているか検索し、該当する番号で繰り返し処理から抜ける for(var i = 0; i < Target.length; i++) { if(Target[i]["account_item_name"] == search) { var index = i; break; } } var Target = Target[index]["partners"]; //BSの中の売掛金だけを取引先別で変数に保存し直す var header_data = [[ //スプレッドシートへの出力用のヘッダー 'コード', '取引先名', start_date + '時点', '借方金額', '貸方金額', end_date + '時点' ]]; var account_receivavle_data = []; //売掛金情報を保存する配列 for (var i = 0 ; i < Target.length ; i++) { if(Target[i].name == "未選択"){ //取引先が未選択の場合 account_receivavle_data.push([ "00000", //未選択用の仮コード "未選択", //取引先名を未選択で表示 Target[i].opening_balance, //期首残高 Target[i].debit_amount, //借方金額 Target[i].credit_amount, //貸方金額 Target[i].closing_balance //期末残高 ]); } else { account_receivavle_data.push([ partners[partners_name_only.indexOf(Target[i].name)].code, //取引先一覧の配列の中から、売掛金のある取引先の取引先コードを出力 Target[i].name, //取引先名 Target[i].opening_balance, //期首残高 Target[i].debit_amount, //借方金額 Target[i].credit_amount, //貸方金額 Target[i].closing_balance //期末残高 ]); } }; //出力初期設定 var body_row_length = account_receivavle_data.length; //中核となるデータの行数 var all_row_length = body_row_length + 2; //全データの行数 var column_length = account_receivavle_data[0].length; //全タータの列数 var color_black = '#000000'; //罫線の色 var border_style_solid = SpreadsheetApp.BorderStyle.SOLID; //罫線のスタイル var range_all = sheet.getRange(1, 1, body_row_length + 2, column_length); //全データの範囲を指定 var range_header = sheet.getRange(1, 1, 1, column_length); //見出しに当たる部分を指定 var range_body = sheet.getRange(2, 1, body_row_length, column_length); //中核となるデータの範囲を指定 var range_number = sheet.getRange(1, 3, all_row_length, 4); //データが数字である範囲を指定 var range_footer = sheet.getRange(body_row_length + 2, 1, 1, column_length); //最終行となるフッターの範囲を指定 sheet.clear(); //データをクリアする sheet.clearFormats(); //データのフォーマットをクリアする //出力する データ range_header.setValues(header_data); //見出し部分にデータをセット(出力)する range_body.setValues(account_receivavle_data); //中核となる部分のデータをセット(出力)する range_body.sort(1); //データを昇順で並べ替える range_footer.setFormulas([[ //フッターのデータをセット(出力)する '', '', '=sum(C2:C'+ (body_row_length + 1) + ')', //SUM関数で各列の合計 '=sum(D2:D'+ (body_row_length + 1) + ')', '=sum(E2:E'+ (body_row_length + 1) + ')', '=sum(F2:F'+ (body_row_length + 1) + ')' ]]) range_number.setNumberFormat('#,##0'); //データが数字部分のフォーマットをセットする range_all.setBorder(true, true, true, true, true, true, color_black, border_style_solid); //罫線をセット(出力)する sheet.setColumnWidth(1, 100); //列の幅をセットする sheet.setColumnWidth(2, 180); sheet.setColumnWidth(3, 125); sheet.setColumnWidth(6, 125); for(var i = 0; i < all_row_length; i++) { //データが保存されている行の高さをセットする sheet.setRowHeight(i+1, 30); }; };
コマンドを表示させるコードを記述
function onOpen(){ var ui = SpreadsheetApp.getUi(); var menu = ui.createMenu('売掛金コマンド'); menu.addItem('売掛金情報を取得', 'getAccountReceivavle'); menu.addToUi(); }
カスタマイズ事例
上記のコードをベースに、以下のようなカスタマイズも可能です。
他の勘定科目を取得する
・取引先別の買掛金(取引先コード順)の試算表を取得する
・取引先別の未払金(取引先コード順)の試算表を取得する
エラーを表示する
・取引先コードが未入力の場合、エラーを表示する
・取引先名が”未選択”の場合、エラーを表示する
・期末残高が金額が一定額以上であればエラーを表示する
・期首残高と期末残高の増加率が一定以上であればエラーを表示する
ユーザーに通知する
・エラー内容をMailやチャットツール(slackやchatworkなど)に通知する
・エラー内容をブラウザ上にアラートとして表示する
・エラー箇所を明示した上でエラー内容を通知する
まとめ
いかがでしたでしょうか。
今回は、取引先別の売掛金の試算表を取引先コード順でスプレッドシートに出力する方法をお伝えしました。
自社の業務に沿ったカスタマイズを行い、業務効率化などのお力になれれば幸いです。
*本記事に関するご質問や感想はコメント欄で受け付けております。