财务报表处理,和财务报表分析当中有大量的数据,如果用excel实在是效率太低了.
现在尝试用go语言进行程序化分析判断.
会计分录的数据通常是这样的.(存储于excel表或数据库sql)

转化为数据结构为
//会计分录entry
type Entry struct{
Index string //该会计分录在该excel表或sql数据库中的索引位置
Id string //唯一识别码
Describe string //业务描述
Dr float64 //借方
Cr float64 //贷方
}
//一笔会计record记录由2笔或2笔以上会计分录组成,故有数据结构
type Record []Entry
如何用go语言实现 借:原材料 贷:银行存款?
// 借记
func (record Record) Debit (item string) bool{
for _,entry := range record {
if entry.Item == item && entry.Dr > 0 {
return true
}
}
return false
}
//贷记
func (record Record) Credit (item string) bool{
for _,entry := range record {
if entry.Item == item && entry.Cr > 0 {
return true
}
}
return false
}
思考:很多时候,会计分录有二级甚至三级分录,如借:预付账款-预付XX-XX款,不同的二级或三级分录,会有不同的业务判断.
所以进一步改进上述代码,利用正则表达式进行模糊逻辑判断.
//改进后的 借记
func (record Record) Debit (item string) bool{
for _,entry := range record {
matched,_ := regexp.MatchString( item, entry.Item )
if matched && entry.Dr > 0 {
return true
}
}
return false
}
同样对贷记Credit增加正则表达式的改进.
如此一来,会计分录
借:原材料 贷:银行存款
go语言代码表述:
if record.Debit("原材料") && record.Credit("银行存款")
借:预付账款-预付XX-XX款 贷:银行存款
go语言代码表述:
if record.Debit("预付账款.*XX.*") && record.Credit("银行存款")
而后就可以进行后续一系列逻辑判断,从而得出对报表影响.