关于890库存与存货对账用友软件股份有限公司U8客服中心79号工程师2010年4月最近常有最近常有U890U890用户致电,询用户致电,询问库存与存货对账不平,库存期初问库存与存货对账不平,库存期初数据不正确?数据不正确?查找补丁,我们可得知该问题已经出具补丁,查找补丁,我们可得知该问题已经出具补丁,补丁号:补丁号:CP-U890-9246-100408-STCP-U890-9246-100408-ST。。(问题号:(问题号:200912170072200912170072描述:此问题验证描述:此问题验证::11、录入库存期初数量为、录入库存期初数量为1010,保存并审核;,保存并审核;22、存货期初从库存期初取数,并期初记账;、存货期初从库存期初取数,并期初记账;33、录入一张其他入库单,数量为、录入一张其他入库单,数量为22,保存并记账;,保存并记账;44、库存与存货对账,发现库存结存为、库存与存货对账,发现库存结存为22,而存货结,而存货结存为存为1212,对账不平。应该是平的,对账不平。应该是平的,,都为都为1212。)。)但是该问题究竟是什么但是该问题究竟是什么原因导致?或者用户如果不希望原因导致?或者用户如果不希望通过打补丁处理(实际情况是有通过打补丁处理(实际情况是有的),那这个时候我们应该怎样的),那这个时候我们应该怎样办?办?但是该问题究竟是什么但是该问题究竟是什么原因导致?或者用户如果不希望原因导致?或者用户如果不希望通过打补丁处理(实际情况是有通过打补丁处理(实际情况是有的),那这个时候我们应该怎样的),那这个时候我们应该怎样办?办?我们先重现一下问题现象:我们先重现一下问题现象:此时进行库存与存货对账(注:本案例中存货核算系统未相应录入期初余额)。此时进行库存与存货对账(注:本案例中存货核算系统未相应录入期初余额)。可以发现,这个界面上并没有出现库存期初余额中的两个存货:pe母件和pe子件。可以发现,这个界面上并没有出现库存期初余额中的两个存货:pe母件和pe子件。事件探查器跟踪:事件探查器跟踪:语句如下:SELECTRdRecord.cWhCode,RdRecords.cInvCode,Inventory.cInvName,Inventory.cInvStd,Str(Sum(CaseWhendDate>='2009-11-01'AnddDate<='2009-11-30'AndbRdFlag<>0AndIsNull(bIsSTQc,0)=0Thenconvert(dec(38,6),RdRecords.iQuantity)Else0End),30,2)ASiIQuantity,Str(Sum(CaseWhendDate>='2009-11-01'AnddDate<='2009-11-30'AndbRdFlag<>1AndIsNull(bIsSTQc,0)=0Thenconvert(dec(38,6),RdRecords.iQuantity)Else0End),30,2)AsiOQuantity,Str((SUM((CaseWhenIsNull(bIsSTQc,0)=1ORdDate<'2009-11-01'Then((CASEWHENbRdFlag<>0then1else-1end)*convert(dec(38,6),RdRecords.iQuantity))ELSE0END)))+(SUM(CaseWhendDate>='2009-11-01'AnddDate<='2009-11-30'AndbRdFlag<>0AndIsNull(bIsSTQc,0)=0Thenconvert(dec(38,6),RdRecords.iQuantity)Else0End))-(SUM(CaseWhendDate>='2009-11-01'AnddDate<='2009-11-30'AndbRdFlag<>1AndIsNull(bIsSTQc,0)=0Thenconvert(dec(38,6),RdRecords.iQuantity)Else0End)),30,2)ASiBQuantityINTO#qdfTotal_UFIDA_XD_0FROMRdRecordINNERJOINRdRecordsONRdRecord.Id=RdRecords.IdINNERJOINInventoryONRdRecords.cInvCode=Inventory.cInvCodeinnerjoinwarehousewonw.cwhcode=rdrecord.cwhcodeWHERE((RdRecord.dDate<'2009-11-01'AndIsNull(RdRecord.bIsSTQc,0)=1)Or(RdRecord.dDate>='2009-11-01'AndIsNull(RdRecord.bPUFirst,0)=0AndIsNull(RdRecord.bIAFirst,0)=0AndIsNull(RdRecord.bOMFirst,0)=0And(not(RdRecord.cBusType='假退料'andRdRecord.cVouchType=11))))andRdRecords.bCosting=1GROUPBYRdRecord.cWhCode,RdRecords.cInvCode,Inventory.cInvName,Inventory.cInvStd语句如下:SELECTRdRecord.cWhCode,RdRecords.cInvCode,Inventory.cInvName,Inventory.cInvStd,Str(Sum(CaseWhendDate>='2009-11-01'AnddDate<='2009-11-30'AndbRdFlag<>0AndIsNull(bIsSTQc,0)=0Thenconvert(dec(38,6),RdRecords.iQuantity)Else0End),30,2)ASiIQuantity,Str(Sum(CaseWhendDate>='2009-11-01'AnddDate<='2009-11-30'AndbRdFlag<>1AndIsNull(bIsSTQc,0)=0Thenconvert(dec(38,6),RdRecords.iQuantity)Else0End),30,2)AsiOQuantity,Str((SUM((CaseWhenIsNull(bIsSTQc,0)=1ORdDate<'2009-11-01'Then((CASEWHENbRdFlag<>0then1else-1end)*convert(dec(38,6),RdRecords.iQuantity))ELSE0END)))+(SUM(CaseWhendDate>='2009-11-01'AnddDate<='2009-11-30'AndbRdFlag<>0AndIsNull(bIsSTQc,0)=0Thenconvert(dec(38,6),RdRecords.iQuantity)Else0End))-(SUM(CaseWhendDate>='2009-11-01'AnddDate<='2009-11-30'AndbRdFlag<>1AndIsNull(bIsSTQc,0)=0Thenconvert(dec(38,6),RdRecords.iQuantity)Else0End)),30,2)ASiBQuantityINTO#qdfTotal_UFIDA_XD_0FROMRdRecordINNERJOINRdRecordsONRdRecord.Id=RdRecords.IdINNERJOINInventoryONRdRecords.cInvCode=Inventory.cInvCodeinnerjoinwarehousewonw.cwhcode=rdrecord.cwhcodeWHERE((RdRecord.dDate<'2009-11-01'AndIsNull(RdRecord.bIsSTQc,0)=1)Or(RdRecord.dDate>='2009-11-01'AndIsNull(RdRecord.bPUFirst,0)=0AndIsNull(RdRecord.bIAFirst,0)=0AndIsNull(RdRecord.bOMFirst,0)=0And(not(RdRecord.cBusType='假退料'andRdRecord.cVouchType=11))))andRdRecords.bCosting=1GROUPBYRdRecord.cWhCode,RdRecords.cInvCode,Inventory.cInvName,Inventory.cInvStd执行发现:如果去掉where值的“andRdRecords.bCosting=1”,此时库存期初数据正确(注:此案例中的所有仓库均计入成本)。执行发现:如果去掉where值的“andRdRecords.bCosting=1”,此时库存期初数据正确(注:此案例中的所有仓库均计入成本)。此时发现,期初余额的bcosting字段值均为0?——软件bug,补丁已解决。此时发现,期初余额的bcosting字段值均为0?——软件bug,补丁已解决。接下来我们查看期初余额情况:selectb.bcosting,a.bisstqc,b.*fromrdrecordajoinrdrecordsbona.id=b.idwherecvouchtype='34'接下来我们查看期初余额情况:selectb.bcosting,a.bisstqc,b.*fromrdrecordajoinrdrecordsbona.id=b.idwherecvouchtype='34'如果暂不希望通过打补丁处理,且用户的库存期初余额将不再变更,可执行以下语句处理:updaterdrecordssetbcosting=1whereautoidin(selectb.autoidfromrdrecordajoinrdrecordsbona.id=b.idjoinwarehousewona.cwhcode=w.cwhcodewherecvouchtype='34'andw.bincost=1)如果暂不希望通过打补丁处理,且用户的库存期初余额将不再变更,可执行以下语句处理:updaterdrecordssetbcosting=1whereautoidin(selectb.autoidfromrdrecordajoinrdrecordsbona.id=b.idjoinwarehousewona.cwhcode=w.cwhcodewherecvouchtype='34'andw.bincost=1)修改后,对账界面中库存期初余额正确:修改后,对账界面中库存期初余额正确:谢谢!谢谢!