报销系统对接金蝶云星空:凭证推送字段与常见报错
对接的难点从来不是接口怎么调,而是辅助核算维度怎么传、账期状态怎么校验——这两处是报错的主要来源。接口本身有标准文档,照着写就行;真正花时间的是把费控侧的部门、项目、员工编码,和金蝶那边的基础资料对齐。
凭证推送的必需字段
| 字段 | 说明 | 注意 |
|---|---|---|
| 账簿 | 目标账簿标识 | 多组织时需按公司主体映射 |
| 凭证字 | 记账凭证 / 付款凭证等 | 由谁生成需事先约定 |
| 凭证日期 | 记账日期 | 决定落入哪个会计期间 |
| 摘要 | 分录行摘要 | 注意金蝶侧的长度上限 |
| 科目编码 | 必须是末级科目 | 上级科目会被拒绝 |
| 借贷方向与金额 | 借贷合计必须相等 | |
| 辅助核算 | 部门 / 项目 / 员工 / 客户 / 供应商 | 科目要求的维度必须齐全 |
| 来源单据号 | 报销单号 | 用于追溯与幂等判重 |
辅助核算是最容易卡住的一环
金蝶的科目可以挂多个核算维度,而且不同科目要求的维度不一样。管理费用可能只要部门,研发支出还要项目,其他应付款要员工。
如果费控侧不知道每个科目要求哪些维度,就只能全部都传或者全部不传——前者可能传了科目不接受的维度,后者会因为缺维度被拒。
正确做法是在费控侧的科目主数据里维护 required_dims 字段,凭证生成时按科目要求填充并校验,缺什么在草稿阶段就报出来。
编码对不上怎么办
费控系统里的部门编码,未必和金蝶基础资料里的一致,尤其是费控用了 OA 或 HR 的组织架构时。
这时候需要一张编码转换对照表:费控侧编码 → 金蝶侧编码。这张表要在实施阶段就建立并维护,不要指望两边编码天然一致。
调研阶段必须问清楚的一个问题就是:维度值的编码两边是否一致,不一致是否需要转换表。
五类常见报错
| 报错现象 | 原因 | 处理 |
|---|---|---|
| 科目不存在或已停用 | 总账停用了科目,费控侧规则未同步 | 定期同步科目主数据,停用科目在规则中标记失效 |
| 账期已关闭 | 目标期间已结账 | 生成前校验账期状态,草稿阶段拦截 |
| 必需辅助核算维度缺失 | 科目要求项目/成本中心,单据未提供 | 科目主数据配置 required_dims,生成前校验 |
| 非末级科目不允许记账 | 规则指向了上级科目 | 科目主数据标记 is_leaf,配置时限制只能选末级 |
| 借贷不平衡 | 不含税金额算法错误 | 税额取发票值,不含税倒挤 |
这五类里,前四类都应该在推送之前就被拦下来。等金蝶返回错误码再排查,财务看到的是技术信息,既不知道哪张单出问题,也不知道该怎么改。
幂等:同一张单不能推出两张凭证
接口超时、网络抖动、人工重试,都可能导致同一张报销单被推送多次。必须在数据库层面建立唯一索引,用「报销单号 + 业务类型」作为唯一键,而不是仅靠应用层判断——并发情况下应用层判断会失效。
失败重试的状态机
| 状态 | 含义 | 可执行动作 |
|---|---|---|
| 草稿 | 已生成,校验通过,未推送 | 编辑 / 推送 / 作废 |
| 推送中 | 已调用接口,等待返回 | 锁定,防重复推送 |
| 成功 | 总账已接收,返回凭证号 | 查看 / 红冲 |
| 失败 | 推送被拒,已记录原因 | 修正后重试 / 作废 |
失败原因必须完整记录并以可读方式呈现给财务,而不是只存一个错误码。
作废用红冲,不要删除
报销单作废或退回时,应生成红字凭证冲回,原凭证保留。原因有两点:会计档案完整性要求,以及总账系统通常不允许删除已过账凭证。
这个场景在开灵科技费控系统里怎么处理
科目主数据维护必需辅助核算维度,凭证生成前完成末级科目、维度齐全、借贷平衡、账期状态四项校验,问题在草稿阶段暴露。支持费控侧与总账侧的编码转换对照。以报销单号加业务类型建立数据库唯一索引保证幂等,推送状态机完整记录失败原因并支持人工重试,作废走红字冲回。
常见问题
辅助核算维度传递和账期校验。接口本身不难,难在把两侧的基础资料编码对齐。
建立编码转换对照表,在实施阶段维护。不要假设两边编码天然一致。
用报销单号加业务类型在数据库层建唯一索引,不能只靠应用层判断,并发下会失效。
生成红字凭证冲回,原凭证保留。总账通常不允许删除已过账凭证,且会计档案要求完整性。
