見出し画像

kintone 基本機能で全銀フォーマットを作成する方法

kintone 基本機能(標準機能)のみで全銀フォーマットを出力する方法を詳しく書きます!kintone hive 2023 仙台でお話させていただきましたネタでございます!

カスタマインを使った方法はこちらのイシイさんの記事をご参照~☆

krewを使った方法、きったんさんの記事はcoming soon~★

柳谷さんに取り上げていただいた記事です。先にこちらを読んでいただくと、作業の流れがわかりやすいですのでご一読願います!


はじめに

全銀フォーマットの中身がどんな内容かについては、ご自身の取引先銀行の仕様書があると思うのでそれを参照してください。
私は楽天銀行(全銀フォーマット(固定長)仕様)を参照しました。弊社では別な4つの銀行のインターネットバンキングを使っていますが、全部この仕様で問題なく動作しています。

やってみたよ!参考になったよ!という方がもしいらっしゃったら、コメントやXなどで投稿いただけるとめちゃくちゃ喜びます🫶
私のXです。https://twitter.com/rieyamazaki1007

概要

作るアプリは3つです。

①金融機関マスタ…全国の銀行の店番・支店番号などを登録しておくアプリ。
②取引先口座マスタ…振込先の口座情報を登録しておくアプリ。
③支払い一覧(全銀出力アプリ)…振込指定日や、金額などを入力するアプリ。

全銀フォーマット出力用のアプリを新しく作ってもいいのですが、「振込指定日」とか「支払い合計金額」などが入っている支払い系アプリをお持ちでしたら、それを改修する、という感じでできますので、アプリ間の転記も不要かと思います。

【1】金融機関マスタアプリを作る

金融機関コードのデータを入手する

金融機関コードのデータを配布していらっしゃる方がいらっしゃいます。すごいデータです。こちらをダウンロードしてください。

CSVを全銀用に加工する

金融機関コード、支店コード、半角カナ表示などが揃っている

C列の銀行名(半角カナ)、E列の支店名(半角カナ)の文字数が、15になるように加工します。

  1. D列に、15文字になるために必要な半角スペース数を算出します。

  2. E列に、D列で出した数だけ半角スペースを入力します(見えない)。

  3. F列に、CとEを連結させて、15文字の銀行名を作ります。

  4. G列に、念のためちゃんとF列が15文字になっているか確認(LENB)します。実際に「銀行名(半角カナ)」として使うのは F列 になります

  5. 同様に支店名の方も処理します。

見えないけどちゃんと15文字になってるよ~

銀行を呼び出す時のルックアップで使う、重複禁止項目を作る

この銀行たちを別アプリでルックアップ参照する際に、例えば銀行名で検索すると、支店がうわーって出てきて選択が大変です。さらに、銀行名の場合は重複するので一括更新や登録ができない事態となります。
一方、銀行コード&支店コードは請求書等に記載がない場合が多く検索しにくい。なので、検索ワードとなるルックアップ値を作っておきます。
ここでは、「銀行名&支店名」にしました。

CSVからアプリを作る!

CSVからアプリを作る機能の出番がやってきます。余計な計算式の列を削除して、CSVを整えます。
できあがるフィールドは以下で、全て文字列(1行)です。

・銀行名
・銀行名(半角カナ)
・支店名
・支店名(半角カナ)
・銀行コード
・支店コード
・銀行名&支店名

銀行コードと支店コードは、数値フィールドになっているので、文字列に変更。

アプリを整える

フィールド名やフィールドコードなど整えます。
ルックアップに使う項目を、重複禁止にしておきます。

このあと、銀行名→金融機関名支店名→金融機関支店名というフィールド名で説明を続けます。私が見た銀行のマニュアルにもそういう表記がされていることが多かったので、項目は揃えておいたほうがわかりやすいと思います。

【2】取引先口座マスタアプリを作る

フィールド設定

★は自動計算で、後述で計算式の説明があるフィールドです。

【相手の銀行情報系】
・取引先名(文字列一行、取引先マスタ系のアプリ等からひっぱってもok)
・金融機関名&支店名(ルックアップ)
・金融機関名(文字列一行)
・金融機関支店名(文字列一行)
・普通_当座(ドロップダウン)
・口座番号(文字列一行、最小文字数7、最大文字数7)
・受取人名(文字列一行、最小文字数30、最大文字数30)

【全銀フォーマット用】
・被仕向銀行番号(文字列一行、最小文字数4、最大文字数4)
・被仕向銀行名(文字列一行、最小文字数15、最大文字数15)
・被仕向支店番号(文字列一行、最小文字数3、最大文字数3)
・被仕向支店名(文字列一行、最小文字数15、最大文字数15)
★手形交換所番号(文字列一行、自動計算)
★預金種目(文字列一行、自動計算)
★データレコード_振込先情報(文字列一行、自動計算)

ルックアップの設定

・フィールド名 金融機関名&支店名
・関連付けるアプリ 金融機関マスタ
・ほかのフィールドのコピー
 金融機関名 ⇦ 金融機関名
 金融機関支店名 ⇦ 金融機関支店名
 被仕向銀行番号 ⇦ 金融機関コード
 被仕向銀行名 ⇦ 金融機関名(半角)
 被仕向支店番号 ⇦ 金融機関支店コード
 被仕向支店名 ⇦ 金融機関支店名(半角)

自動計算の設定

★手形交換所番号(文字列一行、自動計算)

デフォで半角スペース4つが入るようにします。自動計算じゃなくて初期値を"    "でも良いけど、レコード編集画面でさわってほしくないので自動計算にしています。

★預金種目

IF(普通_当座="当座","2","1") 

★データレコード_振込先情報

最初の"2"は、データレコードだよっていう番号になります。固定値。
"2"&被仕向銀行番号&被仕向銀行名&被仕向支店番号&被仕向支店名&手形交換所番号&預金種目&口座番号&受取人名

受取人名がやっかいなのである

受取人名は半角カナ、半角大文字英、゙゚()「」/-.\以外使用禁止で、30文字であります。これは標準機能では手作りしなければならないです。
しかし取引先の銀行口座名なのでそう変わることはありません、最初だけ頑張ってください。

弊kintoneでは、ラベルに書いておき、スペースや記号をコピーできるようにしています。

ャュョ・がまじ間違える

ここまでできたらお手持ちの取引先を登録してみてください。

【3】支払い一覧(全銀フォーマット出力)アプリを作る

①ヘッダレコード
②データレコード
③トレーラレコード
④エンドレコード
がそれぞれ1行120byteになるように作っていきます!

前提として、2つの銀行(A銀行、B銀行)から振込を行う(全銀フォーマットを2種類作る場合)とします。

フィールド設定

【まず最初に👇これ作ってください】
・レコード種別(ラジオボタン、"ヘッダレコード"、"データレコード"、"トレーラレコード"、"エンドレコード")

デフォは"データレコード"

※異なる4つのレコードのタイプを1アプリに入力するので、レコード種別を作っておきます。

【ヘッダ用】振込元(当方口座)情報の部分
・振込元銀行選択(ドロップダウン必須、"A銀行"、"B銀行")
・振込指定日(日付)
★ヘッダ用委託者コード(文字列一行、自動計算)
★ヘッダ用日付(文字列一行、自動計算)
★ヘッダ用被仕向口座情報(文字列一行、自動計算)

【データ用】相手先別の振込内容の部分
・取引先名(ルックアップ ※取引先口座情報マスタを参照)
・振込先金融機関名(文字列一行)
・振込先金融機関支店名(文字列一行)
・データレコード_振込先情報(文字列一行)
・請求金額(数値)
・振込手数料負担(ラジオ、ドロップダウンなど、"当方"、"先方")
★振込手数料(計算)
★差し引き振込金額(計算)
★振込手数料_A銀行(計算)
★振込手数料_B銀行(計算)
 ※振込手数料は全部当方だよっていう場合は手数料項目は不要です。
 ※全銀フォーマットを使う場合、手数料の負担を選択する指定はできないので、先方持ちの場合、支払い金額から手数料をあらかじめ引いておく必要があります。
★振込金額文字列変換用(文字列一行、自動計算)
★新規コード(文字列一行、自動計算)

【トレーラ用】
・合計件数(数値)
・合計金額(数値)
★合計件数桁数調整用(文字列一行、自動計算)
★合計金額桁数調整用(文字列一行、自動計算)

【エンド用】
※なし(固定値のため)

【出力用】
★出力する文字列(文字列一行、自動計算)👈これを最終的に書き出す

ルックアップの設定

・フィールド名 取引先名
・関連付けるアプリ 取引先口座マスタ
・ほかのフィールドのコピー
 データレコード_振込先情報 ⇦ データレコード_振込先情報
 振込先金融機関名 ⇦ 金融機関名
 振込先金融機関支店名 ⇦ 金融機関支店名
 ※その他必要に応じて口座番号などの確認のための参照フィールドを作成してください

自動計算の設定

★ヘッダ用委託者コード(文字列一行、自動計算)
総合振込の場合最初に"1210"がきて、振込元銀行の委託者コード10桁(**********のところ)、委託者名40桁、の固定の値になります。(総合振込でない場合は要確認)

IF(振込元銀行選択="A銀行","1210**********カ)テスト                                   ",
IF(振込元銀行選択="B銀行","1210**********カ)テスト                                   ","")
)

★ヘッダ用日付(文字列一行、自動計算)
振込予定日をMMddにします。

DATE_FORMAT(振込指定日,"MMdd","Asia/Tokyo")

★ヘッダ用被仕向口座情報(文字列一行、自動計算)
振込元銀行の銀行コード4桁、銀行名15桁、支店コード3桁、支店名15桁、預金種目1桁、口座番号7桁、スペース17桁
預金種目は当座の場合2、普通の場合1が入ります。

IF(振込元銀行選択="A銀行","0000エエ             000エエ             10000000                 ",
IF(振込元銀行選択="B銀行","0000ビイ            000ビイ            10000000                 ","")
)

★振込手数料_A銀行(計算)
★振込手数料_B銀行(計算)
手数料の計算式を設定します。

振込手数料の例
IF(AND(振込元銀行選択="A銀行",振込先金融機関名="A",振込先金融機関支店名="a"),0,
IF(AND(振込元銀行選択="A銀行",振込先金融機関名="A",請求金額<30000),55,
IF(AND(振込元銀行選択="A銀行",請求金額<30000),330,
IF(AND(振込元銀行選択="A銀行",振込先金融機関名="A",請求金額>=30000),220,
IF(AND(振込元銀行選択="A銀行",請求金額>=30000),550,"")
))))

B銀行も同様に作ります。

★振込手数料(計算)
A銀かB銀かによって変わる金額を表示。

IF(振込元銀行選択="A銀行",振込手数料_A銀行,振込手数料_B銀行)

手数料項目は今回、A銀、B銀、表示用と分けていますが1つの計算フィールドに集結しても良いと思います。弊社は銀行がもっとあるのでわかりやすくするために分けております。

★差し引き振込金額(計算)
手数料負担を加味して最終的に登録する振込額

請求金額-IF(振込手数料負担="先方",振込手数料,0)

★振込金額文字列変換用(文字列一行、自動計算)
振込金額は10桁にしなければならないのですが、数値のままだと頭の0が落ちてしまうので、文字列にし、さらに頭に0を足して10桁にします。

IF(AND(差し引き振込金額>=1,差し引き振込金額<10),"000000000"&差し引き振込金額,
IF(AND(差し引き振込金額>=10,差し引き振込金額<100),"00000000"&差し引き振込金額,
IF(AND(差し引き振込金額>=100,差し引き振込金額<1000),"0000000"&差し引き振込金額,
IF(AND(差し引き振込金額>=1000,差し引き振込金額<10000),"000000"&差し引き振込金額,
IF(AND(差し引き振込金額>=10000,差し引き振込金額<100000),"00000"&差し引き振込金額,
IF(AND(差し引き振込金額>=100000,差し引き振込金額<1000000),"0000"&差し引き振込金額,
IF(AND(差し引き振込金額>=1000000,差し引き振込金額<10000000),"000"&差し引き振込金額,
IF(AND(差し引き振込金額>=10000000,差し引き振込金額<100000000),"00"&差し引き振込金額,
IF(AND(差し引き振込金額>=100000000,差し引き振込金額<1000000000),"0"&差し引き振込金額,
IF(AND(差し引き振込金額>=1000000000,差し引き振込金額<10000000000),差し引き振込金額,"桁数エラー")
)))))))))

★新規コード(文字列一行、自動計算)
これは0で固定なので、自動計算で最初から0を入れておくだけになります。

★合計件数桁数調整用(文字列一行、自動計算)
トレーラレコードの合計件数は6桁なので、振込金額同様に頭に0をつけます。

IF(AND(合計件数>=1,合計件数<10),"00000"&合計件数,
IF(AND(合計件数>=10,合計件数<100),"0000"&合計件数,
IF(AND(合計件数>=100,合計件数<1000),"000"&合計件数,
IF(AND(合計件数>=1000,合計件数<10000),"00"&合計件数,
IF(AND(合計件数>=10000,合計件数<100000),"0"&合計件数,
IF(AND(合計件数>=100000,合計件数<1000000),合計件数,"桁数エラー")
)))))

★合計金額桁数調整用(文字列一行、自動計算)
こちらは、12桁にします。

IF(AND(合計金額>=1,合計金額<10),"00000000000"&合計金額,
IF(AND(合計金額>=10,合計金額<100),"0000000000"&合計金額,
IF(AND(合計金額>=100,合計金額<1000),"000000000"&合計金額,
IF(AND(合計金額>=1000,合計金額<10000),"00000000"&合計金額,
IF(AND(合計金額>=10000,合計金額<100000),"0000000"&合計金額,
IF(AND(合計金額>=100000,合計金額<1000000),"000000"&合計金額,
IF(AND(合計金額>=1000000,合計金額<10000000),"00000"&合計金額,
IF(AND(合計金額>=10000000,合計金額<100000000),"0000"&合計金額,
IF(AND(合計金額>=100000000,合計金額<1000000000),"000"&合計金額,
IF(AND(合計金額>=1000000000,合計金額<10000000000),"00"&合計金額,
IF(AND(合計金額>=10000000000,合計金額<100000000000),"0"&合計金額,
IF(AND(合計金額>=100000000000,合計金額<1000000000000),合計金額,"桁数エラー")
)))))))))))

★出力する文字列
この子のために準備して参りました。いよいよすべてを連結する‥!!

IF(レコード種別="ヘッダレコード",ヘッダ用委託者コード&ヘッダ用日付&ヘッダ用被仕向口座情報,
IF(レコード種別="データレコード",データレコード_振込先情報&振込金額文字列変換用&新規コード&
"                             ",
IF(レコード種別="トレーラレコード","8"&合計件数桁数調整用&合計金額桁数調整用&
"                                                                                                     ",
IF(レコード種別="エンドレコード",
"9                                                                                                                       ","")
)))

半角スペースいっぱい入ってるんですけど、全て一行120byteになるようになっているはずです。上記のコピペでいけると思いますが、最初の方に書いたフォーマットの仕様書のbyte数のところをよくみて、文字数(桁数)を確認してみてください。

【4】出力手順

いよいよ出力!!
3月31日支払い、A銀からの振込用ファイルを出力するとします!

データを登録していく!

①振込予定日を3/31、振込元銀行選択をA銀にし、それぞれレコード種別の、ヘッダ・トレーラ・エンドを1レコードずつ作ります。(これは私は日付を書き換えて毎回使いまわしています)

②データレコードを登録していきます。振込予定日、取引先、金額などなど入力していきます。

③A銀の3/31合計件数と合計金額の集計をします。

銀行と日別で集計できる表を作っておく

④3/31のトレーラレコードに、③で集計した合計件数と合計金額を入力します。

⑤3/31、A銀で絞り込み、「出力する文字列」項目のみを、「出力する文字列」を昇順、先頭行を項目名にするのチェックを外し、CSVで出力します。

項目は「出力する文字列」だけ。全銀フォーマット出力用一覧を作っておきましょう!
こんな感じの一覧を出力するよ!

⑥メモ帳で開いて””を置換で消したら完成です!

四角い!右端が揃ってて美しい!

いよいよ振込を実行‥!

ドキドキ‥うまくいきましたでしょうか?

ちょっと設定大変だと思いますが、一度作りますととても便利だと思います。重ねてですが、一生懸命作りましたので、やってみたよ!て方は、コメント、Xなどで教えていただけたらうれしいです🥰

この記事が気に入ったらサポートをしてみませんか?