遇到的难点:
1.递归
重点是退出的条件,当时被会计科目所选的等级卡住,想不到选几级科目值就可以是几级,解决办法:把科目都保存在一个列表中,然后根据所选级别,用下标来筛选科目等级
def parse_account_code(self, num, accounts, res):
res.append(accounts)
accounts_parent = accounts.parent_id
if not accounts_parent:
if len(res) > num:
return res[::-1][num - 1].code
else:
return res[::-1][-1].code
return self.parse_account_code(num, accounts_parent, res)
2.求和
res = self.env['account.move.line'].search([('account_id.code', 'like', code), ('id', 'in', items)])
sum_debit = sum(x.debit for x in res)
sum_credit = sum(x.credit for x in res)
3.去重,提高运行速度
def unique_code(self, id, print_level):
move_id = self.env['account.move'].search([('id', '=', id)])
list1 = []
list2 = list(move_id.line_ids.mapped('account_id'))
accounts = list(set(list2))
accounts.sort(key=list2.index)
for account_id in accounts:
code = self.parse_account_code(print_level, accounts=account_id, res=[])
list1.append(code)
new_list = list(set(list1))
new_list.sort(key=list1.index)
return new_list
学到的新知识点
1.wizard
在页面中新增加一个点击按钮,可以弹出框
生成pdf需要用到template
首先在wizard.xml里面加button,name里的是方法的名字,在wizard下新建方法,
针对生成excel
返回的是self.env['report'].get_action(self, report_name, data)
新建一个xml文件,里面写<report/>
id属性写controllers中的方法名,
name属性要写return中的get_action的report_name
model属性写wizard中新建的类名
<record>字段id属性写controllers中的方法名
再在controllers中新定义方法,写具体的生成excel函数
2.上下文之间传递的值
self._context.get('')
3.controllers
生成excel报表需要用到的
也需要定义相应的xml文件
4.git相关
git log
git reset --hard 很长的日志数字
# 恢复以前版本的日志
git add 文件名
git commit -m "merge"
git pull origin optimize
git push origin optimize
5.models.model
基本模型,继承之后具有官方的ORM功能
models.TransientModel
常用于向导模型,数据是存入数据库中,但不是永久的
models.AbstractModel
常用于混合继承
6.mapped
获取到字段的值
records.mapped('字段名')
一些开发中的技巧
1.遇到问题可以先把参数写死,然后看功能能不能跑通
功能跑通之后再传参数
2.可以研究之前的模块怎么写的,当做参考
3.调试的时候,可以从全局出发,也可以从局部一句一句代码粘贴过来调试,看每一句代码是否有问题
4.找字段名,点开凭证,把鼠标放上去,会显示字段的名字
网友评论