こんにちは、あんこ先生です。
令和5年10月からインボイス制度が始まりますね。
今回はその事前準備として、適格請求書発行事業者の情報をコピペしてSharePointリストに登録するアプリを作成します。
実務上では、他の手法(特にPAD)を使った方が早くて便利です。
従って、アプリの作り方を学ぶことに重きを置いて読み進めてください。
いつもどおり、コードは極力コピペで動くようにしています。
- アプリからリンクをたどりブラウザ経由でサイトに移動できること
- コピペで単一項目のテーブルが生成できること
- そのテーブルからレコードへの変換できること
- フォームモードによって初期値を変えられること
適格請求書発行事業者の情報をコピペで登録する
今回のゴール
適格請求書発行事業者の情報を、アプリにコピペしてSharePointリストに登録します。
一行ずつコピペするとめんどくさいため、必要な情報を含む範囲を指定して1度で終わらせます。
適格請求書発行事業者とは
仕入税額控除の要件として、適格請求書発行事業者から交付を受けた適格請求書の保存が必要となります。
適格請求書発行事業者とは、その適格請求書を交付できる事業者のことです。
適格請求書を交付するには、所轄の税務署長に申請し、適格請求書発行事業者として登録を受ける必要があります。
その際、氏名又は名称及び登録番号等を適格請求書発行事業者登録簿に登録されます。
登録情報の確認方法
適格請求書発行事業者の登録情報は、国税庁のホームページで確認できます。
国税庁インボイス制度適格請求書発行事業者公表サイト (nta.go.jp)
法人番号を有する課税事業者は法人番号の頭にTを加えた番号で検索できます。
登録番号の構成は、次のとおりです。
- 法人番号を有する課税事業者
「T」(ローマ字) + 法人番号(数字13桁) - 上記以外の課税事業者(個人事業者、人格のない社団等)
「T」(ローマ字) + 数字13桁(注)
(注)13桁の数字には、マイナンバー(個人番号)は用いず、法人番号とも重複しない事業者ごとの番号になります。
なお、制度開始後は取引先が本当に適格請求書発行事業者かどうかを確認する必要があります。
従って、法人番号を有さない場合は、直接聞き取らないといけませんね。
サイトから情報をコピペしてコレクションに取り込む
法人番号から確認する機能を搭載する
直接国税庁のサイトを見に行ってもよいのですが、せっかくアプリ化するので検索結果を表示する機能を搭載します。
一応入力内容からリンク先を変える手法が学べます。
なくても困らない機能なので、飛ばしても大丈夫です。
まず、入力する値は固定長なので13文字の場合のみボタンコントロールを有効化します。
テキスト入力コントロール横のラベルコントロールは文字数をカウントしています。
有効化されたボタンコントロールを押すと、ブラウザを開き検索結果を表示します。
今回使用するURLとパラメータはそのままなので、Launch関数を使って指定します。
Label01.Textプロパティ
Len(TextInput01)&"桁"
Button.DisplayModeプロパティ
If(IsBlank(TextInput01) || Len(TextInput01)<>13,
DisplayMode.Disabled,
DisplayMode.Edit
)
Button.OnSelectプロパティ
Launch("https://www.invoice-kohyo.nta.go.jp/regno-search/detail?selRegNo="&TextInput01.Text)
必要な情報を含む範囲をコピー
図のように登録番号から最終更新年月日までコピーします。
その後、テキスト入力コントロールに貼り付けます。
Split関数で分解
Split関数はテキスト文字列を指定した文字列でテーブルに分割します。
区切りにコンマやスラッシュ、スペースなどが使用されている場合に使用できます。
戻り値は単一項目のテーブルになります。縦長のイメージですね。
今回は利便性を考慮して、OnChangeプロパティでコピペしたら実行するように設定します。
OnChangeプロパティ
//スペースで区切ってテーブルに展開
Clear(_SplitA);
ForAll(
Split(Self.Text," "), //ここの文字で分割、スペースやタブ
Collect(
_SplitA,
{
Index:CountRows(_SplitA)+1, //連番付与
Result:Result
}
)
);
複数の区切り文字がある場合は、Substitute関数で変換していおくと1回で処理できるよ。
ギャラリーで可視化
分解してテーブル化しても、そのままだと使い勝手が悪いです。
そこで人が認識できるように、ギャラリーコントロールに展開し、コレクションを可視化します。
今回は、数字を入れた部分が必要になります。
本番では不要なので、作業としてお使いください。
コピペした情報をコレクションからレコードに変換する
レコード形式の変数に代入
今回は1レコードしかないので簡単です。
可視化したギャラリーコントロールから項目を埋めていくだけです。
テーブルには連番を振っているため、それをキーにフィールドを特定します。
OnChangeプロパティ つづき
//データ成形
Set(_data,
{
KNo:If(IsBlank(LookUp(M_取引先情報,登録番号=LookUp(_SplitA,Index=2,Result))),
First(Sort(M_取引先情報,管理番号,Descending)).管理番号+1,
LookUp(M_取引先情報,登録番号=LookUp(_SplitA,Index=2,Result),管理番号)
),
Result1:LookUp(_SplitA,Index=9,Result),
Result2:LookUp(_SplitA,Index=2,Result),
Result3:DateValue(LookUp(_SplitA,Index=12,Substitute(First(Split(Result,"年")).Result,"令和","")+2018&"年"&Last(Split(Result,"年")).Result)),
Result4:LookUp(_SplitA,Index=15,Result),
Result5:LookUp(_SplitA,Index=18,Substitute(First(Split(Result,"年")).Result,"令和","")+2018&"年"&Last(Split(Result,"年")).Result)
}
);
ResetForm(Form01);
If(IsBlank(LookUp(M_取引先情報,管理番号=_data.KNo)),
NewForm(Form01),EditForm(Form01)
);
最初に既存レコードがないか管理番号(KNo)で確認しています。
新規の場合は、管理番号降順に並び替え、最初のレコード値+1にしています。
次に必要項目をResult1-5に指定します。
令和を西暦に変換させる
日付部分が和暦のため、まどろっこしいやり方で西暦に変換させています。
まずSplit関数で年を境に分割します。
制度上、令和しかありえないため和暦に2018を足して年を算出します。
その後、月日を結合させたら完成です。
新規か既存か確認する
最後に、取引先情報に管理番号を含むレコードがないか確認します。
その結果をもとに、新規か修正かを判定させ、フォームモードをコントロールします。
変更箇所のマークアップ
フォームの設定に移ります。
まず、修正の場合、前回値を展開するよう初期値を設定します。
これは、DisplayModeプロパティの値がEditかNewかで判定します。
また、どこが変わったのかわかりやすくするため、背景色を変える処理を追加します。
これは、Parent.Default(初期値)とParent.Update(変更値)を比較させて判定します。
Defaultプロパティ
If(Parent.DisplayMode=DisplayMode.Edit,_data.Result1,Parent.Default)
Fillプロパティ
If(Parent.Default=Parent.Update,RGBA(255,255,255, 1),RGBA(255, 255, 0, 1))
適格請求書発行事業者情報をSharePointリストに書き込む
これはSubmitForm関数を実行するだけです。
フォームモードに基づいて新規登録か修正を行います。
これで仕組みは完成です。
あとは、登録したい取引先分だけ作業を繰り返します。
まとめ
今回は適格請求書発行事業者情報の取り込みを例に、便利な機能を多数紹介しました。
特に、コピペした情報をコレクションに取り込み、必要な情報だけレコードに展開する方法は多々活用できると思います。
今回は単一レコードでしたが、複数レコードに展開することも可能です。
例えば、通販サイトの商品情報や銀行の支店情報などを一括で取り込んだりすることもできます。
使い方はアイデア次第!さっそくアプリに組み込んで動作させてみましょう!