Last active
December 4, 2021 13:18
-
-
Save takemikami/f734457637b66f7ec6899b95fb7b08f8 to your computer and use it in GitHub Desktop.
技術書典売上のMoneyForward会計用インポートファイル作成スクリプト
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 技術書典売上のMoneyForward会計用インポートファイル作成スクリプト | |
# | |
# 実行方法: | |
# 1. 技術書典サイトにログインし、マイページ→売上管理→確定売上 | |
# 2. 「月別確定売上」を選択しExcel等にコピー、「sales.csv」という名称のCSV形式で出力 | |
# 3. スクリプトを実行 | |
# python techbookfest_mf_import.py | |
# 実行後「techbookfest_mf_import_年.csv」が出力されるので、MoneyForward会計の仕訳帳からインポートする | |
import csv | |
import re | |
import time | |
import datetime | |
import calendar | |
# 各種設定 - 消費税の課税事業者、補助科目の設定に応じて変更する | |
YEAR = 2021 # 対象年 | |
TAX_TYPE_SALES = '対象外' # 消費税の種別(売上) | |
TAX_TYPE_COMMISSION = '対象外' # 消費税の種別(手数料) | |
URIAGE_SUBTYPE = '' # 売上高の補助科目 | |
URIKAKE_SUBTYPE = '' # 売掛金の補助科目 | |
journal_no = 0 | |
rows = [] | |
y = YEAR | |
today = datetime.datetime.today() | |
ym_matcher = re.compile('([0-9]*)年([0-9]*)月') | |
with open('sales.csv', encoding = "utf-8-sig") as csvf: | |
r = csv.reader(csvf, delimiter=',', quotechar='"') | |
h = None | |
for row in r: | |
if h is None: | |
h = row | |
continue | |
data = {} | |
for i, c in enumerate(h): | |
data[c] = row[i] | |
m = ym_matcher.search(str(data['期間'])) | |
y = int(m.group(1)) | |
m = int(m.group(2)) | |
sales = int(data['売上'].replace('¥','').replace(',','')) | |
fee = int(data['手数料'].replace('¥','').replace(',','')) | |
if sales == 0 or y != YEAR: | |
continue | |
# 仕訳の作成 | |
journal_no += 1 | |
dt = datetime.datetime(y, m, calendar.monthrange(y, m)[1]) | |
rows.append([ | |
str(journal_no), | |
dt.strftime("%Y/%m/%d"), | |
'売掛金', | |
URIKAKE_SUBTYPE, | |
'対象外', | |
'', | |
sales - fee, | |
'', | |
'売上高', | |
URIAGE_SUBTYPE, | |
TAX_TYPE_SALES, | |
'', | |
sales, | |
'', | |
'技術書典売上 {}年{}月'.format(y, m), | |
'', | |
'', | |
'', | |
'', | |
today.strftime("%Y/%m/%d"), | |
today.strftime("%Y/%m/%d"), | |
]) | |
rows.append([ | |
str(journal_no), | |
dt.strftime("%Y/%m/%d"), | |
'支払手数料', | |
'', | |
TAX_TYPE_COMMISSION, | |
'', | |
fee, | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'', | |
'販売手数料・発送手数料', | |
'', | |
'', | |
'', | |
'', | |
today.strftime("%Y/%m/%d"), | |
today.strftime("%Y/%m/%d"), | |
]) | |
# インポートファイルの出力 | |
HEADER_COLS = ['取引No', | |
'取引日', | |
'借方勘定科目', | |
'借方補助科目', | |
'借方税区分', | |
'借方部門', | |
'借方金額(円)', | |
'借方税額', | |
'貸方勘定科目', | |
'貸方補助科目', | |
'貸方税区分', | |
'貸方部門', | |
'貸方金額(円)', | |
'貸方税額', | |
'摘要', | |
'仕訳メモ', | |
'タグ', | |
'MF仕訳タイプ', | |
'決算整理仕訳', | |
'作成日時', | |
'最終更新日時'] | |
with open('techbookfest_mf_import_{}.csv'.format(YEAR), mode='w') as f: | |
f.write(','.join(HEADER_COLS)) | |
f.write('\n') | |
for r in rows: | |
f.write(','.join([str(v) if v is not None else '' for v in r])) | |
f.write('\n') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment