乐于分享
好东西不私藏

金蝶AI星空生产任务计件单均摊费用表单插件

金蝶AI星空生产任务计件单均摊费用表单插件

你是不是还在为计件工资拆分发愁?一条明细费用要手工除以N行、挨个填到子单据体?今天这个表单插件技巧,让你点一下按钮就完事,效率直接拉满。

业务场景:

月底成本会计小张找到我,说生产计件单要对某个工序的费用按子明细行均摊,每次都要拿计算器除一下,再一行一行敲金额,生怕搞错,眼睛都快瞎了。问能不能在金蝶云星空里加个一键均摊。我说当然能,而且用C#表单插件,清爽又安全。

需求分析:

在金蝶云星空的生产计件单里,有一个明细单据体FEntity,里面有个金额字段F_ora_Amount1,代表当前行要分摊的总费用。

而在它下面的子单据体F_ora_SubEntity里,每一行才是真正的费用承担明细,需要把上面的总费用按子行数平均分摊,结果填到子单据体的F_ora_Amount字段里去。

现在要求在明细行上加一个菜单按钮,名字就叫【均摊费用】,标识是ora_tbButton_2。选中某一行,点击按钮,自动把该行的总金额平均分配到子行,填好金额。

这需求在生产制造、计件工资、工序委外场景里极其常见。

为什么用表单插件

金蝶云星空的客户端插件有两种常见形态:列表插件和表单插件。这个需求发生在表单编辑界面,需要响应用户对单据体菜单的点击,还要读写当前行的子单据体数据,表单插件是首选。

我们会在单据明细工具栏的EntryBarItemClick事件里捕捉按钮点击,判断BarItemKey是不是ora_tbButton_2,是的话就开干。这样才不会影响其他按钮的逻辑。

实现步骤:

  1. 获取当前选中的分录行索引

  2. 校验索引有效性并弹窗提示

  3. 获取分录实体及其数据行集合

  4. 获取选中行对象

  5. 读取金额字段并转换为数值

  6. 获取选中行主键(备用)

  7. 获取子单据体实体及数据行集合

  8. 检查员工明细行数量

  9. 计算每行均摊金额和总余数

10.循环分配金额,最后一笔补足余数

11.刷新子单据体界面并提示完成

ShareCost()示例代码:

 避坑指南(过来人的血泪总结)

子单据体可能为空:没有细行时要直接返回并提示,否则插件会报错。

金额精度:务必用decimal类型运算,金蝶云星空金额字段底层就是高精度类型,不要用double或float,不然尾差会让你怀疑人生。

当前行判空:有时候焦点不在数据行上(比如点到空白区),获取行号可能为空,必须前置判空。

单据状态:如果在审核或关闭状态,应禁止执行均摊,插件里加一道状态拦截,避免脏数据。

按钮的可见性:记得在元数据里把按钮挂到正确的单据体菜单上,不要挂到主菜单,否则拿不到选中行。

这些细节,才是决定一个功能是“能用”还是“好用”的关键。

不止于均摊,思维再升维

一旦你跑通了这个“父行金额按子行数均摊”的逻辑,很多场景都可以复用:

  • 材料费用分摊:总材料费按工序列数均摊到各工序。

  • 委外加工费分摊:按产品明细均摊。

  • 班组计件工资分配:总工资按组员人头均分。

你会发现,整个金蝶云星空的插件开发,无非就是在掌握单据模型、实体操作、视图更新这三板斧之后,不断去组合业务逻辑。今天这个均摊按钮,就是一个典型的最小可用产品。

文末彩蛋

如果你想要这份“生产计件一键均摊”表单插件源码,可以这样做:

👉 关注本公众号,在后台回复关键词「均摊」,即可自动获取源码。

还有问题?欢迎在评论区留言,一起交流金蝶云星空开发那些事儿!

按钮点一点,加班少一点。

下期再见!


全文完!

如果你是企业IT,这里有深度的实施避坑指南和开发源码思路;

如果你是终端用户,这里有可直接打印的操作手册。

这里是Henry的一线实战笔记库。欢迎关注