u-regi(USENレジ)のレジクローズ情報のデータを元にして、
- 借方:仮払金、貸方:売上高で税率10%と8%の売り上げを計上する
- 貸方:仮払金を借方:現金、借方:売掛金(クレジット支払)、借方:売掛金(paypay)等に振替する
JDLIBEX出納帳のCSV入力用ファイルを作成するPythonのプログラムです。
飲食店向けです。
import pandas as pd
import os
from decimal import Decimal, ROUND_HALF_UP
import shutil
folder = r'C:\xxxxx\xxxxx\xxxxx'
csv = folder + r'\Regi_Close_xxxxxx_xxx_2024xx.csv'
shutil.copyfile('org.csv','py_uriage.csv')
shutil.copyfile('org.csv','py_furikae.csv')
def r_round(x):
return int(Decimal(str(x)).quantize(Decimal('0'),rounding=ROUND_HALF_UP))
os.chdir(folder)
df_temp1 = pd.read_csv(csv,encoding='utf-16',skiprows=lambda x: x not in [0],delimiter='\t',engine='python')
df_temp2 = pd.read_csv(csv,encoding='utf-16',skiprows = [0,1],delimiter='\t',header = None,engine='python')
df_temp2[0] = df_temp2[76]
df_temp2.drop(columns=df_temp2.columns[76],inplace = True)
df_temp2.columns = df_temp1.columns.tolist()
df_temp2.replace({',': '', r'¥':''},inplace = True,regex=True)
df = df_temp2.astype({'売上(10%)': 'float', '売上(8%)': 'float', '現金': 'float','クレジット': 'float', '電子マネー': 'float', '商品券(釣無し)': 'float'})
def proc_1(val_1):
df_uriage = pd.DataFrame(index = df.index,columns=['//識別フラグ','伝番','日付','借方科目','借方科目名称','借方科目正式名称','借方補助','借方補助名称','借方課区','借方税区','借方税入力方法','借方金額','借方消費税','貸方科目','貸方科目名称','貸方科目正式名称','貸方補助','貸方補助名称','貸方課区','貸方税区','貸方税入力方法','貸方金額','貸方消費税','摘要','借方取引科目','貸方取引科目','借方部門コード','借方部門名称','貸方部門コード','貸方部門名称'])
df_uriage['//識別フラグ'] = 1000
df_uriage['伝番'] = '0'
df_uriage['日付'] = df['営業日']
df_uriage['借方科目'] = '183'
df_uriage['借方科目名称'] = ''
df_uriage['借方科目正式名称'] = ''
df_uriage['借方補助'] = '1'
df_uriage['借方補助名称'] = ''
df_uriage['借方課区'] = ''
df_uriage['借方税区'] = ''
df_uriage['借方税入力方法'] = ''
if val_1 == '10%':
df_uriage['借方金額'] = df['売上(10%)']
df_uriage['貸方税区'] = '10%'
df_uriage['貸方金額'] = df['売上(10%)']
df_uriage['貸方消費税'] = df['売上(10%)'] - (df['売上(10%)']/1.1).map(r_round)
elif val_1 == '8%':
df_uriage['借方金額'] = df['売上(8%)']
df_uriage['貸方税区'] = '軽減8%'
df_uriage['貸方金額'] = df['売上(8%)']
df_uriage['貸方消費税'] = df['売上(8%)'] - (df['売上(8%)']/1.08).map(r_round)
df_uriage['借方消費税'] = '0'
df_uriage['貸方科目'] = '612'
df_uriage['貸方科目名称'] = ''
df_uriage['貸方科目正式名称'] = ''
df_uriage['貸方補助'] = ''
df_uriage['貸方補助名称'] = ''
df_uriage['貸方課区'] = '売 上'
df_uriage['貸方税入力方法'] = '内税'
df_uriage['摘要'] = '売上'
df_uriage['借方取引科目'] = ''
df_uriage['貸方取引科目'] = ''
df_uriage['借方部門コード'] = '0'
df_uriage['借方部門名称'] = ''
df_uriage['貸方部門コード'] = '0'
df_uriage['貸方部門名称'] = ''
df_uriage_int = df_uriage.astype({'借方金額': int,'貸方金額': int,'貸方消費税': int})
df_uriage_int[df_uriage_int['借方金額'] != 0].to_csv('py_uriage.csv',mode = 'a',encoding = 'cp932',header = False,index = False)
def proc_2(val_2):
df_furikae = pd.DataFrame(index = df.index,columns=['//識別フラグ','伝番','日付','借方科目','借方科目名称','借方科目正式名称','借方補助','借方補助名称','借方課区','借方税区','借方税入力方法','借方金額','借方消費税','貸方科目','貸方科目名称','貸方科目正式名称','貸方補助','貸方補助名称','貸方課区','貸方税区','貸方税入力方法','貸方金額','貸方消費税','摘要','借方取引科目','貸方取引科目','借方部門コード','借方部門名称','貸方部門コード','貸方部門名称'])
df_furikae['//識別フラグ'] = 1000
df_furikae['伝番'] = '0'
df_furikae['日付'] = df['営業日']
if val_2 == '現金':
df_furikae['借方科目'] = '111'
df_furikae['借方補助'] = ''
df_furikae['借方金額'] = df['現金']
df_furikae['貸方金額'] = df['現金']
df_furikae['摘要'] = '現金'
elif val_2 == 'クレジット':
df_furikae['借方科目'] = '152'
df_furikae['借方補助'] = '1'
df_furikae['借方金額'] = df['クレジット']
df_furikae['貸方金額'] = df['クレジット']
df_furikae['摘要'] = 'クレジット'
elif val_2 == 'paypay':
df_furikae['借方科目'] = '152'
df_furikae['借方補助'] = '2'
df_furikae['借方金額'] = df['電子マネー']
df_furikae['貸方金額'] = df['電子マネー']
df_furikae['摘要'] = '電子マネー'
elif val_2 == '商品券':
df_furikae['借方科目'] = '152'
df_furikae['借方補助'] = '3'
df_furikae['借方金額'] = df['商品券(釣無し)']
df_furikae['貸方金額'] = df['商品券(釣無し)']
df_furikae['摘要'] = '北名古屋市商品券'
df_furikae['借方科目名称'] = ''
df_furikae['借方科目正式名称'] = ''
df_furikae['借方補助名称'] = ''
df_furikae['借方課区'] = ''
df_furikae['借方税区'] = ''
df_furikae['借方税入力方法'] = ''
df_furikae['借方消費税'] = '0'
df_furikae['貸方科目'] = '183'
df_furikae['貸方科目名称'] = ''
df_furikae['貸方科目正式名称'] = ''
df_furikae['貸方補助'] = '1'
df_furikae['貸方補助名称'] = ''
df_furikae['貸方課区'] = ''
df_furikae['貸方税区'] = ''
df_furikae['貸方税入力方法'] = ''
df_furikae['貸方消費税'] = '0'
df_furikae['借方取引科目'] = ''
df_furikae['貸方取引科目'] = ''
df_furikae['借方部門コード'] = '0'
df_furikae['借方部門名称'] = ''
df_furikae['貸方部門コード'] = '0'
df_furikae['貸方部門名称'] = ''
df_furikae_int = df_furikae.astype({'借方金額': int,'貸方金額': int})
df_furikae_int[df_furikae_int['借方金額'] != 0].to_csv('py_furikae.csv',mode = 'a',encoding = 'cp932',header = False,index = False)
proc_1('10%')
proc_1('8%')
proc_2('現金')
proc_2('クレジット')
proc_2('paypay')
proc_2('商品券')
事前準備として、JDLIBEX出納帳の入力用CSVファイルの1行目から4行目だけを「org.csv」という名前で保存しておきます。このファイルをコピーして、そこにデータフレームのデータを追加で書き込みします。
売上計上のデータと振替のデータは同一のファイルでも良いと思いますが一応分けてあります。
レジクローズ情報のデータは、1行目の列数と2行目以降の列数が異なっているため、1行目だけ読み込んだデータフレームと3行目以降を読み込んだデータフレームとを、後者の最終列を削除して結合しています。(2行目は月間のトータル行であるため読み込まない)
その削除される最終列の日付データがJDLIBEX出納帳の日付データと形式が同じであるため、最終列の内容を1列目(営業日の列)にコピーしています。
レジクローズ情報のデータは、コンマではなくタブで区切られており、金額の項目には
- 全角の円マーク(¥)が付いている
- 千の位、百万の位にコンマが付いている
ということがありますので、これらを削除(空白に変換)しています。