另例解析【有效分录数为0,不能生成凭证】用友软件股份有限公司姓名侯国强2010年7月19日问题描述热线问题:应付模块,预付冲应付,制单,提示:有效分录数为0,不能生成凭证!但查看发票的凭证是应付账款科目2202,付款单科目为预付账款1123?简要分析一般来讲,此类问题原因一般是:生成凭证的借贷方分录科目相同,例如借贷方都是应付账款,没有必要生成凭证!但此例中的发票生成凭证对应科目是应付账款,付款单是预付账款科目,两个科目不相同,为何也有此提示??莫非是后台记录有问题,正常情况的科目制单后应该回写明细账的科目呀??Select*fromap_detailwhereiperiod=1andcvouchtypein(‘02’,’49’)其中单据类型02表示采购普通发票,49表示付款单其中第一条记录,为发票审核后的记录,对应科目为2202,第三条记录为付款单审核后的记录,科目为1123,第四条和第五条记录分别为预付冲应付的处理记录,但对应科目也是1123和2202!似乎看起来都没有问题??跟踪一下,是否有蹊跷之处??跟踪门户进程,关注报错前后的T-sql和存储过程分析:cprocstyle=9L的是预付冲应付!但此处的两个科目为什么都是1123呢?是不是因为这个科目相同导致了有效分录数为零?但这是从何处取数的??查询临时表的数据来源??继续查看来源语句原来数据来源中要插入采购发票的记录,但这个1123从哪里出来的,莫非是来自发票发票??查看采购发票的记录分析,采购发票主子表涉及到科目的只有主表的cheadcode(科目编码-应付科目)和子表中的cdebithead(采购科目编码)两个字段,但此处查出来的科目却是1123,看来是此处出了故障??修改为2202后再试??updatepurbillvouchssetcdebithead='2202'wherepbvid=(selectpbvidfrompurbillvouchwherecpbvcode='0000000001')再对【预付冲应付】制单问题虽然解决,但原因呢??既然制单后回写原单据的科目,不妨取消转账,删除凭证,重新制单,测试是否能回写?如能回写,则不用开库操作了……首先恢复到原来的错误状态,purbillvouchs表中的cdebitcode字段为1123.然后删除发票生成的凭证!重新制单查看后台发票子表,发现cdebitcode字段更新为制单的科目2202此时再做转账制单,总结分析看来,跟踪可以定位错误发生的原因,但解决不一定需要后台处理,只要掌握了软件的原理(重新制单可以回写发票科目),一样可以解决问题,另例解析,但愿能起到抛砖引玉之效