「展開一番」の導入運用事例 20

財務会計ソフトウェアパッケージ「勘定奉行」のデータから、「展開一番」の仕訳データと科目マスタを作成する手順を紹介します
仕訳データの概要は以下のとおりです
・業種:製造業
・期間:2012年4月〜2013年3月
・件数:8,922件
なお、以下の変換手順は参考例です、筆者の利用するツールはフリーのソフトウェアが多く、データの形式などは個人的な好みもあるので、ユーザの利用環境に適合しないこともあると考えられます
そのようなときは、適宜、代替的な手順や・ソフトウェアを適用して下さい


1.仕訳データ(XJ_hhhh.txt)の作成
1. 「勘定奉行」から仕訳データをエクスポートする
ファイルは「rar」形式で出力される
2. ファイルを解凍し、カンマ区切りのテキストデータに戻す
この時点では、各データの前後に""が付いている
3. ファイルをEXCELで開き、摘要欄のカンマを削除し、CSV形式で保存する
CSV形式で保存することで、データに付いている""が削除される
「,」を「nil」に置き換えることでカンマを削除できる
利用する項目にカンマが含まれていないか確認する
4. 再度ファイルをEXCELで開き、会計日の列を選択後、形式をユーザ定義の「yyyymmdd」にする
5. 不要な行や列を削除、必要な列を追加し、CSV形式で保存し、拡張子を「txt」に変更する
不要な列を削除後、先頭行の[項目名」を削除する
なお、「項目名」は後で仕訳定義ファイル作成時の参考になるので、メモ帳などに複写しておく
必要な列として「経過月」がある、この他に予備の列を追加しておいてもよい
追加列はブランクのままでよい、「経過月」は「CalJM」スクリプトで自動計算が可能
6. ファイル名を「XJ_hhhh.txt」に変更し、仕訳データを完成させる
7. 保存しておいた「項目名」を参考にして仕訳定義ファイル「DJ_hhhh.txt」を作成する
「展開一番」で定義されている項目名以外にはユーザ定義の項目名を付ける
例えば、借方勘定科目名には「J_U_DAName」など(「展開一番」では科目名は定義されていない)


2.科目マスタ(YA_cc.txt)の作成
1. 仕訳ファイルから科目Codeと科目名以外の列を削除する
CSVエディタを利用して削除、貸借2列で計4列を残す
2. 貸方の2行を借方の下に移動し、科目名に含まれるスペースを削除し、別名で保存する
スペースの削除は、エディタの置換機能を利用する
3. 重複データ(科目Codeと科目名が同じデータ)を削除する
EXCELを利用するときは以下のとおり
データ→フィルター→フォルダオプションの設定→リスト範囲を指定(例、$A$1:$B$17844)し「重複レコードは無視する」にチェックを入れる→抽出された部分を複写し、別シートに貼り付ける→科目Code順にソート→CSV形式で保存して拡張子を「txt」にする
Rubyスクリプトで処理するときは以下のとおり
Rubyには、配列内の重複するデータを削除する「uniq!」という便利なメソッドがある
重複するデータを取り除くスクリプトは以下のようになる
__________________________________________
def メッソド名(fs,ft)
sf=fs+".txt"
tf=ft+".txt"
z=Array.new
i=0
s=open(sf)
t=open(tf,"w")
while x=s.gets do
z[i]=x
i=i+1
end
z.uniq!
z.sort!
k=0
while z[k] do
t.print z[k]
k=k+1
end
s.close
t.close
end
__________________________________________
引数の「fs」には2.で作成したファイル名を、「ft」には作成するファイル名を指定する
「ft」には、重複するデータを除いた科目Codeと科目名のリストが出力される

4. 科目名が同じで科目Codeが異なるデータを抽出する(変更対象を特定する)
この事例では、原価の費目と販管費の費目に同じ科目名を使用している(科目Codeは異なる)
「展開一番」では科目Codeが異なれば科目名が同じでも運用に支障は生じないが、紛らわしいので原価の費目には、例えば「通信費(製)」のように科目名の後ろに「(製)」を付けることにする
EXCELを利用するときは以下のとおり
科目名の列をソートし、該当するデータ(同じ科目名が並んでいるその科目名)を別シートに複写する
この作業は、件数が少ないので手作業で行う
Rubyスクリプトで処理するときは以下のとおり
3.で作成したファイルでは、データの並びが「科目Code,科目名」となっている、科目Codeは4バイトなので先頭から6バイト目を基準にこのデータを並び替えるスクリプトは以下のようになる
__________________________________________
while x=s.gets do
z[i]=x
i=i+1
end
z.sort!{|a,b|
a[5,10] <=> b[5,10]
}
k=0
while z[k] do
t.print z[k]
k=k+1
end
__________________________________________
メソッドの作成(def〜end)やファイルのオープン・クローズの処理部分は省略している、3.のスクリプトを参照のこと
ここでのポイントは、sortメソッドの比較方法にブロック内のCodeを利用すること
作成されたファイルから、同じ科目名が並んでいる科目を特定する(件数が少ないので、手作業でメモを取る、プリントして印を付ける)

5. 科目名を変更する
4.で特定したデータのうち、原価の費目の科目名に「(製)」を追加する
件数が少ないので、手作業で修正するほうが効率的
Rubyスクリプトで処理しようとすれば、以下のようになる
__________________________________________
while x=s.gets do
y= x.split(/,/)
i=y[0]
if i=="6536" then
y[1]="運賃(製)"+"\n"
end
・・・(if〜endの繰り返し)・・・
j=y[0]+","+y[1]
t.print j
end
__________________________________________
メソッドの作成(def〜end)やファイルのオープン・クローズの処理部分は省略している、3.のスクリプトを参照のこと

6. 科目マスタを作成する
仕訳から抽出できない科目(例えば、株主資本に属する科目など)は個別に追加する
科目Codeと科目名のリストに必要な属性を追加して科目マスタ「YA_cc.txt」を作成する
一般的な科目の属性を「科目Code,科目名」に付加し、後で必要部分を修正する方が効率的である
Rubyスクリプトで処理しようとすれば、以下のようになる
__________________________________________
AddString=",D,0,10"
while x=s.gets do
z0=x.chomp!
z1=z0+AddString+"\n"
t.print z1
end
__________________________________________
メソッドの作成(def〜end)やファイルのオープン・クローズの処理部分は省略している、3.のスクリプトを参照のこと




Last Update 2013/08/17