读取销售订单行项目特性值

博客介绍了读取销售订单行项目上特性值的方法。前台操作可通过函数VC_I_GET_CONFIGURATION,在tcode VA03中双击进入行项目,再点击相关按钮查看特性值及ID。还给出了取特定订单行项目特性值的例子代码。

VC_I_GET_CONFIGURATION
INSTANCE = VBAP-CUOBJ
在这里插入图片描述

  1. 前台操作
    可以通过函数VC_I_GET_CONFIGURATION读取销售订单行项目上的特性值。
    在这里插入图片描述

前台操作,tcode VA03,双击进入行项目
在这里插入图片描述

双击Characteristics 按钮
在这里插入图片描述

可以看到特性 Actual Lead Time-total 有值,16.0 days,双击右边的叹号按钮。
在这里插入图片描述

可以看到特性ID
在这里插入图片描述

  1. 例子代码
    通过下面代码可以取到上面订单300行项目的特性 WIF_9000_ACLTT_A 的值
REPORT ztest_read_so_characteristic.

DATA: lit_confi TYPE STANDARD TABLE OF conf_out,
      lwa_confi TYPE conf_out.
DATA:l_cuobj TYPE vbap-cuobj.

SELECT SINGLE cuobj
  FROM vbap
  INTO l_cuobj
 WHERE vbeln = '0640001056'
   AND posnr = '000300'.
CALL FUNCTION 'VC_I_GET_CONFIGURATION'
  EXPORTING
    instance            = l_cuobj
    language            = sy-langu
  TABLES
    configuration       = lit_confi
  EXCEPTIONS
    instance_not_found  = 1
    internal_error      = 2
    no_class_allocation = 3
    instance_not_valid  = 4
    OTHERS              = 5.

READ TABLE lit_confi INTO lwa_confi WITH KEY atnam = 'WIF_9000_ACLTT_A'.
IF sy-subrc = 0.
  WRITE: lwa_confi-atwrt.
ENDIF.
<think>我们正在讨论的是销售订单的后继订单(拒收订单)的SCHED_TYPE。请注意,在销售订单(Sales Order)中,通常没有名为SCHED_TYPE的标准字段。SCHED_TYPE通常出现在采购订单(Purchase Order)中,用于计划(Schedule Line)的计划类型。 但是,用户提到“销售订单的后继订单(拒收订单)”,这可能是销售退货场景。在销售退货中,我们通常会创建退货订单(Return Order),而退货订单也是销售订单的一种类型(订单类型为RE)。在销售订单中,与计划相关的字段在计划(Schedule Line)中,其中有一个字段是“计划类别”(Schedule Line Category),对应的字段是`SCHED_LINE`(在表VBEP中),而不是SCHED_TYPE。 因此,在销售订单(包括退货订单)中,我们通常不会使用SCHED_TYPE。但是,用户特别提到了“拒收订单”,并且引用了之前关于采购订单拒收的讨论,所以这里可能存在概念混淆。 在销售退货流程中,退货订单(作为后继订单)的创建和标准销售订单类似,但订单类型不同(例如RE)。在退货订单中,我们关注的是退货的原因、退货的处理方式(例如是否换货、是否退款)等。在计划中,退货订单的计划类别通常为“RE”(退货),但这不是SCHED_TYPE。 所以,我们需要澄清: 1. 在销售订单中,没有名为SCHED_TYPE的字段。采购订单中才有。 2. 在销售退货订单中,计划信息存储在表VBEP中,其中字段`SCHED_LINE`(计划类别)用于控制物料的移动类型和需求类型。 因此,如果用户确实在销售订单的上下文中询问SCHED_TYPE,那么可能是混淆了采购订单销售订单的术语。在销售订单中,与计划类别相关的字段是`SCHED_LINE`(在VBEP表中),而不是SCHED_TYPE。 如果用户坚持在销售订单的后续订单(拒收订单)中查找SCHED_TYPE,那么我们需要检查销售订单的相关表结构,但标准SAP中没有这样的字段。 但是,根据引用[3]中提到的销售订单屏幕增强,我们看到在表VBAK中有一个自定义字段ZZHTLB(合同类别),这说明用户可能通过增强添加了字段。因此,也有可能用户自定义了一个名为SCHED_TYPE的字段用于销售订单的计划类型。但这种情况非常特殊,需要查看具体系统实现。 因此,在标准SAP中,销售订单(包括退货订单)没有SCHED_TYPE字段。采购订单才有。 如果用户实际想了解的是销售退货订单的计划类别(Schedule Line Category),那么我们可以提供相关信息。 在销售退货订单中,计划类别(VBEP-SCHED_LINE)决定了物料的移动类型。例如: - 对于退货订单,计划类别通常为“RE”,对应的移动类型是651(退货入库)。 在ABAP中处理退货订单时,我们使用类似创建标准销售订单的BAPI,如`BAPI_SALESORDER_CREATE`或`BAPI_SALESORDER_CREATEFROMDAT2`,并在订单类型中指定退货类型(如RE)。在项目数据中,我们需要设置计划,其中计划类别(SCHED_LINE)设置为“RE”。 示例代码片段(创建退货订单): ```abap DATA: lt_header TYPE bapisdhd1, lt_items TYPE TABLE OF bapisditm, lt_schedule TYPE TABLE OF bapischdl, ls_items TYPE bapisditm, ls_schedule TYPE bapischdl, lt_return TYPE TABLE OF bapiret2, lv_salesdoc TYPE bapivbeln-vbeln. " 设置订单头 lt_header-doc_type = 'RE'. " 退货订单类型 lt_header-sales_org = '1000'. lt_header-distr_chan = '10'. lt_header-division = '00'. " 设置项目 ls_items-material = 'MAT001'. ls_items-plant = '1000'. ls_items-itm_number = '000010'. APPEND ls_items TO lt_items. " 设置计划 ls_schedule-itm_number = '000010'. ls_schedule-sched_line = '0001'. " 计划号 ls_schedule-req_type = 'RE'. " 需求类型(退货) ls_schedule-req_qty = '1'. " 退货数量 APPEND ls_schedule TO lt_schedule. " 调用BAPI创建退货订单 CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' EXPORTING order_header_in = lt_header TABLES return = lt_return order_items_in = lt_items order_schedules_in = lt_schedule. " 检查错误 READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc <> 0. " 提交 CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. " 获取订单号 SELECT SINGLE vbeln INTO lv_salesdoc FROM vbak ORDER BY erdat DESCENDING erzet DESCENDING. WRITE: / '退货订单创建成功:', lv_salesdoc. ELSE. " 错误处理 CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. LOOP AT lt_return WHERE type = 'E'. WRITE: / '错误:', lt_return-message. ENDLOOP. ENDIF. ``` 在上面的代码中,我们通过`order_schedules_in`参数传递计划,其中`req_type`字段设置为'RE'(退货)。注意,这里没有使用SCHED_TYPE,而是使用了计划类别(在BAPI结构中为`req_type`,对应字段为`VBEP-BDART`,即需求类型)。 总结: 1. 在标准SAP中,销售订单(包括退货订单)没有名为SCHED_TYPE的字段,采购订单才有。 2. 销售订单的计划中,关键字段是计划类别(Schedule Line Category),在表VBEP中为`BDART`(需求类型),在BAPI中为`req_type`。 3. 如果用户确实在销售订单中遇到了SCHED_TYPE,那可能是自定义字段,需要根据具体实现分析。 因此,针对用户的问题,在ABAP中销售订单的后继订单(拒收订单)没有标准的SCHED_TYPE信息。如果用户实际想了解的是销售退货订单的计划类别,那么应该关注`req_type`(在BAPI中)或`VBEP-BDART`(在表中)字段。 如果用户的问题是基于之前的采购订单拒收讨论,那么请注意销售退货和采购拒收是两种不同的流程(销售退货是客户退货给公司,采购拒收是公司退货给供应商)。在采购拒收中,我们使用SCHED_TYPE;在销售退货中,我们使用计划类别(如RE)。 因此,请用户明确: - 他们指的是销售退货(客户退货)还是采购拒收(退货给供应商)? - 如果是指采购拒收,则参考之前关于采购订单拒收的回答,其中详细说明了SCHED_TYPE的作用。 - 如果是指销售退货,则使用上述关于退货订单的说明,关注计划类别(req_type)而不是SCHED_TYPE。 如果用户仍然坚持在销售订单中查找SCHED_TYPE,那么需要检查自定义字段的可能性,或者可能是用户将采购订单销售订单的术语混淆了。 基于以上分析,我们给出如下回答:</think>在 ABAP 中处理销售订单的后继拒收订单时,**SCHED_TYPE 不是标准字段**。这与采购订单中的 SCHED_TYPE 有本质区别。销售订单拒收(退货)流程的核心是**计划类别(Schedule Line Category)**,而非 SCHED_TYPE。以下是关键说明: ### 1. 销售订单拒收的核心字段:计划类别 在销售退货场景中,控制拒收逻辑的关键字段是 **`VBEP-BDART`(需求类型/计划类别)**,而非 SCHED_TYPE: - **标准 `RE`**:表示退货计划,对应移动类型 **651**(退货入库) - **在退货订单创建时**需在计划中显式指定: ```abap DATA: lt_schedule TYPE TABLE OF bapischdl, ls_schedule TYPE bapischdl. ls_schedule-itm_number = '000010'. " 项目号 ls_schedule-req_type = 'RE'. " ✅ 关键:退货计划类型 ls_schedule-req_qty = '5'. " 退货数量 APPEND ls_schedule TO lt_schedule. ``` ### 2. 完整退货订单创建示例 ```abap DATA: lt_header TYPE bapisdhd1, lt_items TYPE TABLE OF bapisditm, lt_return TYPE TABLE OF bapiret2, lv_salesdoc TYPE bapivbeln-vbeln. " 1. 订单头设置(退货订单类型RE) lt_header-doc_type = 'RE'. " 退货订单类型 lt_header-sales_org = '1000'. " 销售组织 lt_header-distr_chan = '10'. " 分销渠道 lt_header-division = '00'. " 产品组 " 2. 项目设置 APPEND VALUE #( material = 'MAT001' " 物料号 plant = '1000' " 工厂 itm_number = '000010' " 号 ) TO lt_items. " 3. 计划设置(关键退货标识) APPEND VALUE #( itm_number = '000010' " 对应号 sched_line = '0001' " 计划号 req_type = 'RE' " ✅ 退货计划类型 req_qty = '5' " 退货数量 ) TO lt_schedule. " 4. 调用BAPI创建退货订单 CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' EXPORTING order_header_in = lt_header TABLES return = lt_return order_items_in = lt_items order_schedules_in = lt_schedule " 传递计划 order_partners = lt_partners. " 5. 错误处理 IF line_exists( lt_return[ type = 'E' ] ). CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' IMPORTING salesdocument = lv_salesdoc. " 返回退货订单号 ENDIF. ``` ### 3. 与采购订单 SCHED_TYPE 的本质区别 | **特性** | **销售订单退货** | **采购订单拒收** | |------------------|--------------------------------------|--------------------------------| | **控制字段** | `VBEP-BDART` (计划类别) | `EKPO-SCHED_TYPE` (计划类型) | | **关键** | `RE` (退货) | `1`(常规)/`2`(寄售)等 | | **移动类型** | 651 (退货入库) | 122/161 (采购退货) | | **核心BAPI** | `BAPI_SALESORDER_CREATEFROMDAT2` | `BAPI_GOODSMVT_CREATE` | | **库存影响** | 客户库存减少 → 公司库存增加 | 公司库存减少 → 供应商库存增加 | ### 4. 增强注意事项 若需特殊处理(如自定义拒收规则),可通过以下方式增强: ```abap " 在屏幕增强中控制字段可编辑性(参考引用[3]) LOOP AT SCREEN. IF screen-name = 'VBEP-BDART'. " 计划类别字段 screen-input = '0'. " 设为只读 MODIFY SCREEN. ENDIF. ENDLOOP. ``` > ⚠️ **关键结论**: > 销售订单拒收流程中**不存在 SCHED_TYPE 字段**,需通过计划类别 **`RE`** 控制退货逻辑。采购订单拒收才使用 SCHED_TYPE(如 `1`/`2`),两者属于不同业务场景[^1][^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值