简介:这是一份面向SAP系统销售与分销(SD)模块用户的退换货流程操作手册,主要服务于企业销售顾问及相关业务人员,旨在规范退货与换货场景下的系统操作与业务处理。文档涵盖退货订单创建、退货提单生成、退货入库及退款开票等完整环节,也细致讲解了换货过程中的退货订单、退运提单、收货过账、库存类型调整、换货出库与发货跟踪等步骤,有助于读者理解并落地执行SAP SD模块的核心退换货操作。资源共1个doc文档,压缩包约422KB,内容结构清晰、目录完整,便于按流程查阅。已有88人学习下载,适合正在使用SAP或准备优化退换货流程的企业员工参考。借助手册中的标准化步骤,业务人员可有效减少操作差错、缩短处理周期,同时提升客户满意度,降低企业运营风险;手册亦强调销售顾问保持专业态度、维护公司形象,有助于统一服务标准。
1. SD退换货流程操作手册到底在管什么事
SAP顾问接手“SD退换货流程操作手册”这类资料整理时,容易被VA01一张退货订单的表象带偏。退换货实际是跨越订单、交货、库存过账、开票四个环节的综合流程,后台任何一段配置断裂,前端就表现为贷项凭证金额不对、退货无法入冻结库存、免费换货单带出价格。2021到2022年退换货量明显上涨,这类问题在SAP运维中尤为集中,手册的价值正是把订单类型、项目类别、退回原因、移动类型和单据流的对应关系固化下来。这篇按SD退换货的完整链路走一遍,适合SAP业务顾问、ABAP开发以及负责FICO与SD协同的运维人员对照排查。
2. 拆开SD退换货流程:订单类型、项目类别与单据流
要理解退换货,先得理解SAP销售单据的骨架:订单类型控制单据整体走向,项目类别控制每一行的具体行为。SAP SD里退货不是简单把销售订单数量改成负数,而是用一套独立单据类型支撑。标准配置中,订单类型RE是退货订单专用类型,RET是退货行项目类别,REN是免费换货行项目类别。这套设计的好处是退货与普通销售完全隔离,会计过账、库存移动、信用检查各有各的规则,不会互相污染。
2.1 退换货订单类型与项目类别怎么定
订单类型用VOV8维护,项目类别用VOV6查看、VOV9批量复制。VOV8里,RE类型的页签控制着销售区域、文本策略、信用范围、开票计划,其中最关键的“交货类型”默认指向LR(退货交货),“开票类型”指向RE(退货贷项凭证)。项目类别确定则是在VOV7里维护,它决定用户录入RE订单时,系统给行项目补什么默认项目类别。
项目里我通常不建议直接改标准RE,而是复制出一个ZRET再做调整。原因是标准类型在系统升级或传输其他请求时容易被覆盖,自定义类型则保留了单独的命名空间、权限对象和条件记录。复制时重点检查两个字段:销售单据类型页签里的“交货类型”,以及开票页签里的“开票类型”。这两处填错,后面VL01N找不到交货类型、VF01找不到开票类型,整个退货流会在第二步就断掉。
2.2 退回原因代码怎么维护和落库
退回原因的主数据表是TVGR,在IMG路径“销售与分销-销售-销售单据-销售活动-退货单-退回原因”下维护,也可以用SE16N直接改表。退回原因不只是给业务填的文本备注,它参与三件事:决定退回物料收货后进冻结库存还是非限制库存,决定是否联动质量通知单,以及决定贷项凭证的定价条件类型。运维排错时遇到“货到了仓库却过不了账”,十有八九是退回原因没有在后台分配对应的移动类型映射。
维护退回原因代码时,要同时维护它的账户分配类型和物品移动映射。举例来说,原因代码“Z01-客户拒收”如果对应651移动类型,那MIGO收货时会直接进非限制库存;如果对应652,则进冻结库存等待质检。很多项目的遗漏点在于退回原因维护了,但项目类别确定里没有把这个原因代码挂上去,录单界面可能根本看不到原因字段。排查时先查TVGR确认主数据,再回VA02行项目页签看“退回原因”能否输入。
2.3 VBFA表:如何用一条链串起订单、交货、开票
单据流的核心存储表是VBFA,退货订单、交货单、物料凭证、贷项凭证之间的前后关联全部写在这里。它同时记录前置单据类型VBTYP_V和后继单据类型VBTYP_N,其中H代表交货单、M代表物料凭证、L代表开票凭证。排查“流程走到哪一步断了”时,直接按退货单号查VBFA的后继记录,比逐张VA03、VL03N、VF03去点快得多。
用ABAP查一段退货单据流的代码可以这样写:
DATA: lt_vbfa TYPE TABLE OF vbfa. CLEAR lt_vbfa. SELECT vbeln posnr vgtyp vgbel vgpos vbtyp_n FROM vbfa INTO CORRESPONDING FIELDS OF TABLE lt_vbfa WHERE vbelv = @lv_return_order AND vbtyp_n IN ('C', 'H', 'M', 'L'). LOOP AT lt_vbfa INTO DATA(ls_vbfa). WRITE: / ls_vbfa-vgbel, ls_vbfa-vgpos, ls_vbfa-vbtyp_n. ENDLOOP.这里lv_return_order是VA01创建的退货订单号,VBF A按前置单号vbelv过滤,DISTINCT不是必须的,因为业务上同一张退货单可以有多个交货和开票;看输出时注意不要被重复记录干扰。参数说明:IN后面的C代表关联的后续销售订单,H是交货单,M是MIGO物料凭证,L是开票凭证。如果结果里缺少M,说明退货还没做收货过账;缺少L,说明贷项凭证没生成。用这个思路能把一张退货单的完整生命周期压缩成几行输出,排查效率高很多。
3. SD退换货流程操作:从VA01到VF01的完整动作
退换货的单据操作至少涉及五个事务代码:VA01创建退货订单、VL01N创建退货交货、MIGO收货过账、VF04检查开票到期清单、VF01开贷项凭证。实务里最后开票不一定走VL01N,可以直接参照订单生成,但物流在途的企业大多把交货单作为库存移动的触发单据。这一章按一条完整路径写,读者可以照着在自己系统里走一遍。
3.1 VA01创建退货订单:字段和选项
创建退货订单用VA01,订单类型选RE或自定义ZRET。抬头维护客户、销售区域、PO号,行项目维护物料、数量、批次、退回原因。其中批次字段在启用批次管理的物料上必须输入,否则后续MIGO收货参照不到库存。退回原因字段如果界面上看不到,先回VOV8检查订单类型的字段状态组,而不是硬改屏幕变式。
一个可以直接套用的录单示例如下:
订单类型:RE 售达方:100001 售达方PO:RMA20220101 物料:P-1001 数量:10 退回原因:Z01(客户拒收) 批次:LOT2021011 项目类别:RET(系统自动带出)保存后系统返回退货单号。如果行项目自动带出的类别不是RET,而是TAN或TAS这类标准销售项目类别,说明VOV7里RE订单类型没有绑定退货专用项目类别确定规则,必须回后台补配置。即使强行保存,后面VL01N和MIGO也无法按退货流程处理。
3.2 MIGO退货收货:移动类型不是随便选
退货收货的移动类型有651、652、653,三者的差异在库存状态和质检控制上。多数企业把652设为默认,因为退回货物是否合格需要质检部门确认。三者的对比如下:
| 移动类型 | 库存状态 | 使用场景 | 适用注意 |
|---|---|---|---|
| 651 | 非限制使用库存 | 退回可直接上架销售 | 免检,直接可用 |
| 652 | 冻结库存 | 退回必须质检后转正式库存 | 常用默认值,配合631释放到非限制库存 |
| 653 | 冻结库存 | 冻结退回收货,业务不启用批次管理 | 启用批次时不要使用 |
MIGO操作时事务类型选A01收货,移动类型填652,参照凭证填VL01N创建的退货交货单号。数量、批次和交货单保持一致,工厂和库存地点在抬头里维护。过账后物料进入冻结库存。这里三个高频报错:批次不一致会提示批次错误;库存地点和交货单不一致会提示无法确定存储位置;参照凭证填成退货订单而不是交货单,会生成第二张重复收货。
如果希望把MIGO的动作自动化,可以调BAPI_GOODSMVT_CREATE,参数示例如下:
DATA: ls_header TYPE bapi2017_gm_head_01, lt_item TYPE TABLE OF bapi2017_gm_item_create, lt_return TYPE TABLE OF bapiret2. ls_header-pstng_date = sy-datum. ls_header-doc_date = sy-datum. ls_header-move_type = '652'. " 退货到冻结库存 APPEND VALUE #( material = 'P-1001' plant = '1000' stge_loc = '0001' move_type = '652' entry_qnt = 10 ) TO lt_item. CALL FUNCTION 'BAPI_GOODSMVT_CREATE' EXPORTING goodsmvt_header = ls_header goodsmvt_code = '01' TABLES goodsmvt_item = lt_item return = lt_return.注意BAPI里抬头和行项目的move_type必须一致,plant和stge_loc不能为空,entry_qnt按交货单剩余数量填写。返回值lt_return里如果有E类型消息,优先检查物料状态和批次,而不是重复提交。
3.3 VF01开贷项凭证:金额从哪里来
退货流程走到VF01,系统生成贷项凭证。开票金额不是从MIGO来的,而是来自退货订单的定价条件,所以前面订单上PR00等条件是否带入正确,直接决定最终金额。如果退货订单上的价格在VA02里被退回原因改写,或者条件记录丢失,VF01会开出金额偏小或为零的凭证。
开票前先走VF04开票到期清单,按销售区域、客户筛出到期交货单,点“个别开票”把交货行的数量和价格带到贷项凭证。VF04里看不到交货单时,先确认交货单是否已发货过账,未过账的交货单不会进开票清单,这是最容易被忽略的前提。
3.4 VA03与VF03核对单据流状态
开票完成后,用VA03打开退货订单,切到“后续单据”页签,交货单、物料凭证、贷项凭证应完整排开。每行状态变成“已完成”才算闭环。贷项凭证显示“未过账”就进VF02改记账状态,物料凭证数量对不上则回MIGO查参照凭证。批量对账时不逐个点VA03,直接查VBRK和VBRP按VGBEL字段反查退货单号,把所有贷项状态一次拉出来,这个技巧在月结前特别实用。
4. 换货流程的两种典型处理方式与参数选择
换货是退货的延伸。业务上两种常见做法:免费补发新货,或退款后重新开单。SAP SD里对应REN免费换货行项目和RET退货行项目。选择哪种取决于定价和库存:客户已经付过款的产品换货不需要第二次收款,使用REN并把价格强制设为零;客户要求退款则走RET收货和贷项凭证,把款项退回去。
4.1 免费换货:退货单上加一个REN行项目
免费换货的做法是在同一张退货订单里同时维护RET和REN两个行项目。RET行负责把坏货收回,REN行负责补发新货。REN项目类别在后台配置里交货类型是LF,也就是免费交货,VL01N创建交货单时不会检查销售价格,只触发免费发货。补发货物的成本在成本对象上归集,不在销售开票环节体现。
创建REN行的方式是复制RET行,然后手动把项目类别改成REN。复制后必须检查定价条件:REN行绑定的定价过程应有一个强制价格为零的条件类型,如果后台没配,系统会沿用RET行的价格,导致免费换货单上带出价格。在VOV6里查看REN项目类别,页签中定价类型应设置为F,表示该行项目免费。交付类型LF和开票类型RE的搭配,也在这个画面里确认。
4.2 退款不换货:贷项凭证直接完成
如果客户只要退款,那么RET行收货后直接VF01开贷项凭证即可。此时没有补发动作,也就不会生成第二张交货单。开票类型在标准配置里通常是RE退货贷项凭证,也有企业统一用G2普通贷项凭证区分财务科目,具体映射在订单类型RE的开票页签维护。这个流程最短,但财务侧要注意贷项凭证是否参与信用更新,避免客户信用额度被重复扣减。
4.3 部分退货部分换货怎么拆
实际业务里经常是退回五件,两件退款,三件补发。典型做法是同一张退货订单两行:一行RET数量三件,一行REN数量两件,各行挂不同退回原因。仓库一次收货完成,财务按行分别处理。换货行的新批次在VA02里修改,不能沿用旧批次,因为旧批次对应的是退回的坏货。只有验收地点不同、财税要求强制分离时,才拆成两张退货单,否则一张单多行是最优方式。
5. 退换货流程落地后的验证与排错
流程上线后问题最集中的在月末对账。我的习惯是固定跑两个检查:一个对账报表,一个手工抽单。对账报表直接统计VBFA里后继类型为M和L的记录,快速发现货收了票没开、票开了货没到的订单。可以用CDS视图实现:
@AbapCatalog.sqlViewName: 'ZSD_RET_CHK' @AbapCatalog.compiler.compareFilter: true @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: '退货流程单据流检查' define view ZSD_RETURN_CHECK as select from vbak as h inner join vbfa as f on f.vbelv = h.vbeln where h.auart = 'RE' and f.vbtyp_n in ('M', 'L') };视图把退货抬头表VBAK和单据流表VBFA关联,统计退货订单的后继记录。@AbapCatalog.sqlViewName是底层SQL视图名称,部署后在SE11能看到同名数据库视图;@AccessControl.authorizationCheck: #NOT_REQUIRED表示不强制启用CDS访问控制,适合内部运维直接查询。后续使用建议按创建日期再加过滤条件,避免全量扫描VBAK影响报表性能。
5.1 三个高频错误定位
第一个高频错误是“找不到定价过程”。先到VOV8看订单类型RE的定价过程,再到VOV6看RET和REN项目类别的定价类型,确认RVAALU等标准定价过程没有被覆盖或删除。第二个是“贷项凭证金额为零”。检查退货订单行项目的PR00条件是否存在,再看退回原因是否设置了覆盖价格的条件类型,两者有一个失效都会导致金额为零。第三个是“批次未找到”。确认物料主数据的批次管理状态,核对VA01和MIGO输入批次是否完全一致,包括前后空格。
5.2 用报表把问题前置
给运维人员的实操做法是每周跑一次VBFA后继单缺失清单,对照清单处理“已收货但未开票”的订单,统一在VF02里补记账或做凭证冲销。用这种前置检查代替用户提单后再定位,能避免月底自动开票时一次性爆发错误。
本文还有配套的精品资源,点击获取