前回「申告のお知らせ」の転送について書きましたが、今回は転送設定をした後に税理士が効率的に「申告のお知らせ」を確認する方法について考えてみたいと思います。

「申告のお知らせ」を転送しても、閲覧・保存はラクじゃない

マイナンバーカードがないと「申告のお知らせ」を税理士が確認できないという課題は、転送設定により解決されていますが、このお知らせを受け取った税理士側で、複数のお知らせを一括して保存する機能はありません。

つまり、「申告のお知らせ」を受け取った税理士は、一つずつお知らせを開いて内容を確認し、手元に残しておきたい場合には、印刷するなりPDFファイルとして保存する必要があります。

まとめて見ることができないため、所得税などの申告書を作成するときに毎回確認するとなると、その都度
・パソコンにカードリーダーをつないで、
・税理士の電子証明書を取り出して、
・e-Taxにログインしてから確認
となってしまい、生産性の向上など望むべくもありません。

「申告のお知らせ」を自動取得する現実的な手段はRPA

受領した「申告のお知らせ」をとりあえず印刷するなり、PDFファイルに保存するなりすれば、閲覧の度にログイン・電子証明書の認証をすることを避けることはできますが、受け取る度に印刷や保存といった付加価値の低い作業に時間を取られてしまい、これも生産的ではありません。

「こんな仕事、パソコンが自動的にメッセージ開いて、勝手に保存してくれたらいいのに!」と思いますが、本格的なプログラムを組むことはハードルが高く、現実的ではないでしょう。

そこで活用したいのがRPAです。プログラミングの知識が一切ない状態で使えるほど簡単ではありませんが、本格的にプログラムを組むほど難しくはありません。

今回は、RPAの一つであるUiPath Community Editionを使って、メッセージボックスにあるすべての「申告のお知らせ」を自動的にPDFファイルとして保存する方法を検討してみました。

UiPathでのロボット作成の具体的な流れ

今回実現したい作業の大まかな流れは、次のとおりです。

  1. Internet Explorerを起動して、e-Taxのホームページを開く
  2. e-Taxのメッセージボックスにログインする
  3. 税理士の電子証明書を使って閲覧申請(認証)を行う
  4. メッセージボックス一覧を表示して、表示されたデータを読み込む
  5. 読み込んだデータの中に「所得税等、消費税及び贈与税の申告について」という文字列がある場合のみメッセージを開いて、PDFファイルとして保存する
  6. 5の作業を4で読み込んだデータすべてに対して行ったら、ログアウトする

まずはウエブレコーディングで自動記録

1から3までの工程については、e-Taxのホームページ(http://www.e-tax.nta.go.jp/)を開いた状態で、UiPathのウエブレコーディング(下図)という機能を使えば、実際の作業を記録することができますので、それほど難しくはありません(Excelのマクロ記録をイメージしてもらうとわかりやすいかと)。

次にスクレイピングでデータを取得

4の工程についてはメッセージボックス一覧が表示されている状態で、ウエブレコーディングの中の「テキスト」-「スクレイピング」-「データをスクレイピング」を選んでから、受信メッセージの一覧のどこか(今回は「格納日時」の下の日時が表示されているところ、下図赤枠部分)をクリックします。

そうすると、以下のメッセージが順次表示されますので、「次へ」、「はい」と進めていくと・・・

データを読み込むことができました。なお下記画面は、お客さまの名前を見えないようにするため、電子証明書での認証を行わなかった状態で取り込んだものになっています。認証してから行えば「氏名又は名称」欄にはお客さまの名前が表示されます。

ここで「終了」を押すと、次のメッセージが表示されますので、「はい」を押して、受信メッセージの中の次のページへ進むボタン(「次へ」)を押すと、複数ページのデータも自動的に取得してくれます。

データを1行ずつ判定するには「繰り返し(各行)」と「条件分岐」

さて、いよいよ5の工程になりますが、4の工程で読み込んだデータは、UiPathの中では、”ExtractDataTable”という名前で保存されています。

このデータを一行ずつ取り出すには、「繰り返し(各行)」というアクティビティ(UiPathで使う命令)を使います。さらに取り出したデータに「所得税等、消費税及び贈与税の申告について」 という文字列が含まれているか判断するために「条件分岐」というアクティビティを組み合わせます。

もし「所得税等、消費税及び贈与税の申告について」という文字列が含まれている行であれば、印刷処理へ進む。含まれていなければ何もしない、という流れになります。この部分はUiPathでは下図のように作っていきます。

Thenの下にはこの後の処理を設定し、Elseの下には何もアクティビティを置きません。

条件分岐の中の条件として「row(3).ToString=”所得税等、消費税及び贈与税の申告について”」とありますが、「row(3)」はその行の中の何番目のデータかを示しています。UiPathではデータは0から数えるため、左から4番目の項目(=「手続き名」)のところに対象の文字列が含まれているかを確認しています。

その後の「ToString」というのは、読み込まれたデータが文字列として扱われていないため、文字列に変換するための処理です。

各行のリンクを正しくクリックするには?

次に、条件に合致した場合には、メッセージを開くために「手続き名」のリンクをクリックすることになるのですが、このクリックする作業を自動記録しただけでは、うまく処理することができません。

ウエブレコーディングで「申告のお知らせ」を開くためのクリック操作を記録すると、それはその行を開く操作しか記録されません。
1行目の操作を記録してしまうと、繰り返し処理の中で2行目以降が条件に合致しても、1行目のメッセージを開いてしまうため、期待した動作をしてくれないからです。

UiPathでは、セレクターといわれる情報を元にどこを操作するか決めています。そのため今回は、ウエブレコーディングで異なる行のメッセージを開く操作を記録し、どのような規則性があるかを確認しました。

すると「手続き名」のリンクは 
<webctrl id=’lnkDetail_1′ tag=’A’ />
<webctrl id=’lnkDetail_2′ tag=’A’ />
・・・
というセレクターで指定されていて、「lnkDetail_」の後の数字が1から順に増えていることがわかります。

そのため、この数字の部分を条件に合致した行に対応する数字に変えれば、開きたい行のメッセージを開くことができます。

繰り返し処理の何番目が処理されているかという情報は、「繰り返し(各行)」アクティビティの「出力」欄で得ることができますので、ここに変数(今回はcounterという名前にします)を設定します。

ただ、ここで出力される数字は0から始まるため、そのまま使うと1行ずれてしまいます。そのため、セレクターで指定する前に、「代入」アクティビティを使って、counterに1を足した数字を別の変数に入れておきます。今回はindexという名前の変数に入れることにしました。

そして最後に対象のセレクターを次のように書き換えます。
“<webctrl id=’lnkDetail_”+index.ToString+”‘ tag=’A’ />”

もともとのセレクターの数字の部分をindex.ToStringに置き換えています。セレクターはすべて文字列として指定する必要があるため、ダブルクオーテーションで囲む必要があることと、indexの中には数字が入っているため、ToStringで文字列に変換することに注意が必要です。また文字列をつなぐ際には、+でつなぎます。

プリンターの選択には少し注意が必要

この後のPDF保存処理は、ウエブレコーディングで記録して作成しますが、印刷処理を記録するときには、「タイプ」-「ホットキーを押下」を選んでから、対象となる画面をクリックして、操作したいキーを指定します。

このとき、最初は印刷画面を表示するショートカットキーである「Ctrl+P」を指定したのですが、実際に処理したときにうまく動かなかったため、「Alt+F」でファイルメニューを表示させてから、再度「ホットキーを押下」で「P」を送ることで対処しています。

また、印刷メニューが表示された後、「Microsoft Print to PDF」というプリンターを選択して、PDFファイルに保存しましたが、最初からこのプリンターをクリックする操作を記録すると、実際に実行したときに問題が生じます。

2回目以降の印刷のときには、すでにこのプリンターが選ばれている状態となるため、その状態で再度クリックしてしまうと、プリンターの名前が編集状態となってしまい、うまく印刷することができません。

そのため、この処理の中で使われないであろうプリンター(「Fax」など)を一旦クリックする操作を記録して、その後に 「Microsoft Print to PDF」をクリックしてから「印刷」ボタンを押すように作業を記録しています。

PDF保存する際のファイル名には、お客さまの名前を使うとわかりやすいため、「代入」というアクティビティを使って、row(4)のデータをあらかじめ変数に入れておき、その変数をファイル名に使用します。

あとは、6のログアウト処理をウエブレコーディングで記録し、つなげれば完成です。

ここまでUiPathを使って、メッセージボックス内の「申告のお知らせ」をPDFファイルとして自動保存する方法の概略を説明しましたが、いかがでしたでしょうか?

「これでも難しすぎる」という方もいれば、「少し勉強すればなんとかなるかも」と思われた方もいらっしゃると思います。

UiPathに関する情報はネット上にありますし、書籍なども出始めていますので、RPAによる自動化に興味を持たれた方は、是非基礎から学んでみてください。

なおこの記事では、大まかな流れとロボットを作成する中で悩んだ点を中心に解説しました。全体像を示すために多少正確さに欠ける説明をしている部分や端折った部分もありますが、その点ご了承ください。