T3 填制凭证 运行时错误 3021 完整解决方案
报错全称:运行时错误 '3021':BOF 或 EOF 中有一个是真,或者当前的记录已被删除
核心本质:档案关联断档、数据库表外键缺失、档案数据残缺,95% 是客户 / 供应商往来科目选辅助核算时触发。
一、先做 3 步简易前台排查(不用数据库,优先试)
场景 1:选客户 / 供应商辅助项就报错(最常见)
-
基础设置→往来单位→客户档案,打开报错对应的客户
-
查看【专营业务员】字段:里面填了职员编码,但职员档案里该职员已删除
-
供应商报错同理:供应商档案清空专营业务员、分管部门。
场景 2:损益结转 / 新增损益科目填制报错
-
总账→期末→转账定义→期间损益
-
删掉右上角本年利润科目编码,重新选择 4103 本年利润,保存定义,重进填制凭证。
场景 3:所有凭证都报错、打开总账就弹 3021
-
关闭所有 T3,重启【用友通服务】+SQL 服务;
-
用T3 数据库修复工具(畅捷通自带)检测修复账套;
-
打上对应版本最新补丁,重启软件。
二、前台处理无效,数据库修复方案(需 SQL,必备份账套)
情况 1:客户档案业务员断档(应收科目报错)
-
登录 SSMS,打开对应年度账套库
-
先查询所有异常客户:
select*fromcustomerwhereccusppersonnotin(selectcpersoncodefromperson)
updatecustomersetccuspperson=null
情况 2:供应商档案业务员断档(应付科目报错)
--查询异常供应商select*fromvendorwherecvendpersonnotin(selectcpersoncodefromperson)--清空无效业务员updatevendorsetcvendperson=null
情况 3:凭证结算方式编码不存在(保存 / 打印凭证报错)
凭证表 csettle 字段存了不存在的结算编码,执行:
updateGL_accvouchsetcsettle=null
情况 4:会计期间 / 账套年度记录缺失(打开总账即报错)
打开系统库 UFSystem,补全账套年度、会计期间记录,需对照正常演示账套 UA_Account_sub、UA_Period 表补记录。
三、其他少见触发场景
-
客户 / 供应商简称重复、档案重复
基础档案删除重复往来单位,做并户处理;
-
项目 / 部门辅助核算断档
项目档案、部门档案里引用的职员被删除,清空对应负责人字段;
-
多客户端同时填制凭证锁表
系统管理清除异常任务、清除单据锁定,再填制凭证。
四、标准处理流程(按顺序操作)
-
前台打开往来档案,清空专营业务员、分管负责人;
-
清除异常任务 + 单据锁定,重启 T3;
-
仍报错:备份账套,执行上面往来档案更新 SQL;
-
通用报错:执行 GL_accvouch 结算方式清空脚本;
-
全局总账报错:数据库修复工具 + 打软件补丁;
-
终极:重建期间损益转账定义,重新结转测试。