Search Posts

Visits: 391

電子的に作成した業務文書をAmazon Web Service (AWS) の Simple Strage Service (S3)に保存するとともに弥生の青色申告にインポートするためのCSVファイルを作成するプログラムをmacOS Monterey環境のPython3で作成した。
請求書は、請求書発行サービスあるいはExcelから印刷したものに角印を押してスキャナーで電子化したJPEGファイルの2種類。消耗品などの購入品は、ネットショップが発行するメール添付(あるいはサイトからのダウンロード)の領収書や紙のレシートをスキャンしたデータなど。これまでは、紙をそのままか、メールやサイトからダウンロードしたものを印刷してファイルしていた。

電子的な保存を行うには、電子化とそのクラウド上での保存が追加作業として発生するため、これまで手入力していた仕分け日記帳の記帳作業も併せて合理化しないと記帳作業だけで作業時間が大幅に割かれてしまうので、この際プログラム対策を行うこととした。メール連絡など通常の作業はMACで行っており、Windows 10での弥生の青色申告との連携にはOneDriveを使用することとした。

S3への保存と記帳作業は、次のステップ。

  1. 保存対象の電子化 (1)
  2. 弥生の青色申告のための登録表(CSV)の作成 (2)
  3. Pythonプログラムで上記(1)(2)を入力としてAWS S3にデータ保存および弥生の青色申告のインポート用のファイル作成
  4. 弥生の青色申告でインポート

インポート用の登録表の適用らんの先頭に保存データ検索用のコードとしてデータ日付と識別情報として取引先名をコードとして記入することで自動化できるようにした。
電子インボイス対応できると、請求書発行の際のこれらの一連の手作業は発生しないのだが。

ディレクトリ構造

ファイル名は日本語でも問題ないが、S3のバケット名(ディレクトリ名)に日本語があるとエラーとなるので文書の種類ごとに分けたディレクトリ名をアルファベット表記とした。
Windows 10もS3も同じディレクトリ構造とした。
OneDriveを使うことで、MacでPythonを実行するとWindows 10に弥生の青色申告インポートファイル220201entry.csvが登録できた。

ElectronicBook
├── 2022
│   ├── AccountsPayable
│   │   ├── 2202***.pdf
│   │   ├── 2203***.pdf

│   ├── AccountsReceivable
│   │   ├── 220104***.jpeg
│   │   ├── 220104***.pdf

│   ├── FTE_Salary
│   │   └── 220128***.jpeg

│   ├── NewspaperBook
│   │   ├── 220102The New York Times**.pdf
│   │   └── Amazon.co.jp***.html
│   └── YAYOI
│       ├── 220201entry.csv

弥生の青色申告のインポート用のファイル

これについての情報は色々出されているのでここでは省略する。
当初うまくいかなかったのは、日付の形式がISO書式ではなくて制限されたパターンでないといけない点と次の欄に固定値を指定していないとエラーとなったことによる。

T欄/20 W欄/23 X欄/24 Z欄/26
タイプ 付箋1 付箋2 調整
0 0 0 no

Pythonからシェルコマンド実行

当初、バケット名を日本語で売掛金などとしていたが、パラメタ指定が間違っているというエラーが返されてしまい。原因不明だったが、名称をアルファベット表記にしたところ正常処理できた。
s3cmdの実行には、subprocessを使用している。
参考:https://contentgardening.com/articles/wrapping-s3cmd-in-a-script-for-files-backup-to-amazon-s3

import subprocess

base_dir = '/Users/xxx/OneDrive/ElectronicBook/2022/AccountsReceivable/'
BUCKET_AR = "s3://bucket_name/ElectronicBook/2022/AccountsReceivable/"

name = '220201'

SRC = f'{base_dir}{name}*'
DEST = BUCKET_AR
CMD = "s3cmd put --force %s %s" % (SRC, DEST)

subprocess.call(CMD, shell=True)

# Print feedback to know the current files that are backed up
LSCMD = "s3cmd ls %s" % DEST
out = subprocess.check_output(LSCMD, shell=True)
print(out)

写真は、2018年10月杭州の西湖