872sp1之后版本销售退货业务细节总结872sp1之后版本销售退货业务细节总结姓名:王杨(181号)2011年12月客户需求点在企业流程中,由于质量等原因,经常会出现销售退货的业务,退货就必然涉及到主营业务收入的冲抵,需要开红字销售发票;在实际业务中,存在开票前退货和开票后退货这两种情况,那么作为帮助客户有效管控资源的ERP软件,则必然要有效的考虑到这一点。且在处理退货业务时,客户一般希望可以将退货单据与原发货单单据相关联,这样后续对账核对业务时会更加快捷方便。客户需求点U8系列软件,在872以前,系统只能参照未开票的发货单做退货单,自动冲减发货单的未开票数量;对于已开票的退货业务,以前版本只能变通处理,参照销售订单退货或者直接手工输入退货单。很多客户不满意这样的变通方案,基于此需求,从872sp1开始,系统开始支持参照已开票的发货单做退货业务。软件测试 从872sp1开始,都支持参照已开票的发货单做退货业务,10.0的版本又进一步有了新的变化。 同时在参照上游单据做红字销售发票时,有一些小细节需要我们注意。872sp1、890、890sp1,参照已开票的发货单生成退货单后,在生成红字发票时,过滤条件需注意:“发货单类型”必须是“红字单据”才能过滤到;选择全部过滤出来的记录为空。此时过滤出来的单据是原发货单号。软件测试两者后台语句差别:选择红字单据:cVouchType=N'05'ANDsale_DispToSaleVouch_B.bSettleAll=0ANDISNULL(iSale,0)=0ANDIsNULL(cVerifier,N'')<>N''ANDISNULL(iCorid,0)=0)and(1=1and(cbustype=N'普通销售')and(isnull(bneedsign,0)=0orisnull(bneedsign,0)=1andisnull(bsignover,0)=1andisnull(bneedloss,0)=0)or(isnull(iflowid,0)=0))and(cast(isnull(iquantity,0)-isnull(iSettleQuantity,0)-isnull(iretQuantity,0)asdecimal(26,9))<=0orisnull(iquantity,0)=0oritb=N'退补')and((casewhenISNULL(iquantity,0)=0thencast(ISNULL(isum,0)-isnull(fretsum,0)-ISNULL(isettlenum,0)asdecimal(26,6))elsecast(ISNULL(sale_DispToSaleVouch_B.iQuantity,0)-ISNULL(sale_DispToSaleVouch_B.iSettleQuantity,0)-ISNULL(iRetQuantity,0)asdecimal(26,9))end)<0and(isnull(isum,0)<0or(isnull(isum,0)>=0andcasewhenISNULL(iquantity,0)=0thenisnull(fretsum,0)elseisnull(iretquantity,0)end<>0))选择全部:cVouchType=N'05'ANDsale_DispToSaleVouch_B.bSettleAll=0ANDISNULL(iSale,0)=0ANDIsNULL(cVerifier,N'')<>N''ANDISNULL(iCorid,0)=0)and(1=1and(cbustype=N'普通销售')and(isnull(bneedsign,0)=0or(isnull(bneedsign,0)=1andisnull(bsignover,0)=1andisnull(bneedloss,0)=0)or(isnull(iflowid,0)=0))and(cast(isnull(iquantity,0)-isnull(iSettleQuantity,0)-isnull(iretQuantity,0)asdecimal(26,9))<=0orisnull(iquantity,0)=0oritb=N'退补')and(casewhenISNULL(iquantity,0)=0thencast(abs(ISNULL(isum,0))-abs(isnull(fretsum,0))-abs(ISNULL(isettlenum,0))asdecimal(26,6))elsecast(abs(ISNULL(sale_DispToSaleVouch_B.iQuantity,0))-abs(ISNULL(sale_DispToSaleVouch_B.iSettleQuantity,0))-abs(ISNULL(iRetQuantity,0))asdecimal(26,9))end)>0软件测试10.0,退货业务增加了“已开票部分退货”和“未开票部分退货”。未开票部分退货流程同以前版本,已开票部分退货需注意:生成红字发票时,若退货单上单价为零,则过滤条件:“发货单类型”必须是“全部”。若退货单上单价非零,则过滤条件:“发货单类型”选择是“红字单据”或“全部”,均可。此时过滤出来的是退货单号而不是原发货单号。软件测试两者后台语句差别:选择红字单据:cVouchType=N'05'ANDsale_DispToSaleVouch_B.bSettleAll=0ANDISNULL(iSale,0)=0ANDIsNULL(cVerifier,N'')<>N‘’and(isnull(icorid,0)=0orisnull(bneedbill,0)=1))and(1=1and(cbustype=N'普通销售')and(isnull(bneedsign,0)=0or(isnull(bneedsign,0)=1andisnull(bsignover,0)=1andisnull(bneedloss,0)=0)or(isnull(iflowid,0)=0))and(cast(isnull(iquantity,0)-isnull(iSettleQuantity,0)-isnull(fretqtywkp,0)asdecimal(26,9))<=0orisnull(iquantity,0)=0oritb=N'退补')and((casewhenISNULL(iquantity,0)=0thencast(ISNULL(isum,0)-isnull(fretsum,0)-ISNULL(isettlenum,0)asdecimal(26,6))elsecast(ISNULL(sale_DispToSaleVouch_B.iQuantity,0)-ISNULL(sale_DispToSaleVouch_B.iSettleQuantity,0)-ISNULL(fretqtywkp,0)asdecimal(26,9))end)<0andisnull(isum,0)<0)选择全部:cVouchType=N'05'ANDsale_DispToSaleVouch_B.bSettleAll=0ANDISNULL(iSale,0)=0ANDIsNULL(cVerifier,N'')<>N''and(isnull(icorid,0)=0orisnull(bneedbill,0)=1))and(1=1and(cbustype=N'普通销售')and(isnull(bneedsign,0)=0or(isnull(bneedsign,0)=1andisnull(bsignover,0)=1andisnull(bneedloss,0)=0)or(isnull(iflowid,0)=0))and(cast(isnull(iquantity,0)-isnull(iSettleQuantity,0)-isnull(fretqtywkp,0)asdecimal(26,9))<=0orisnull(iquantity,0)=0oritb=N'退补')and(casewhenISNULL(iquantity,0)=0thencast(abs(ISNULL(isum,0))-abs(isnull(fretsum,0))-abs(ISNULL(isettlenum,0))asdecimal(26,6))elsecast(abs(ISNULL(sale_DispToSaleVouch_B.iQuantity,0))-abs(ISNULL(sale_DispToSaleVouch_B.iSettleQuantity,0))-abs(ISNULL(fretqtywkp,0))asdecimal(26,9))end)>0总结872sp1、890、890sp1,参照已开票的发货单生成退货单后,在生成红字发票时,过滤条件需注意:“发货单类型”必须是“红字单据”才能过滤到;选择全部过滤出来的记录为空。10.0,参照已开票的发货单生成退货单后,在生成红字发票时,过滤条件需注意:若退货单上单价为零,则过滤条件:“发货单类型”必须是“全部”。若退货单上单价非零,则过滤条件:“发货单类型”选择是“红字单据”或“全部”,均可。总结我们处理问题时经常会遇到这种无法参照上游单据制单的情况,其实针对这种业务,并不会有那么多的数据问题,只要注意到细节之处,就绝对能在电话中顺利解决客户问题。客户在日常使用软件时,经常会忽视一些小的细节而查询不到软件中的数据;作为专业工程师,我们不仅要了解客户需求,熟悉软件流程节点,对于这些容易忽视的细节,更要做到心中有数以便随时提醒告知用户。谢谢!