获取销售订单定价条件

作者:ABAP三叔 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:SD, 销售分销
获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图

# 获取销售订单定价条件

原创 ABAP三叔 [ ABAP三叔 ](javascript:void\(0\);)

__ _ _ _ _

前言

熟悉SO的朋友们可能都知道VA01创建订单时,输入物料编码、数量和工厂后,会自动确定物料行项目的定价条件,打开条件页签,如下图所示

获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图

‍ 本文将介绍使用ABAP代码获取这些定价条件

ABAP代码

1.通过DEBUG程序可以定位到,是通过调用函数'PRICING'来获取的,结果在返回的TKOMV内表中

获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图

2.实现逻辑

需要对KOMK(定价条件抬头),KOMP(定价条件项目)两个结构中的关键字段赋值即可(销售范围/公司代码/客户/国家/币别/定价例程/物料/工厂/客户税分类/物料税分类)

3.源代码示例,主要字段赋值及解释见代码注释

• * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

REPORT ztest.TYPE-POOLS: slis.DATA: ls_komk TYPE komk, ls_komp TYPE komp, lt_komv TYPE STANDARD TABLE OF komv, ls_knvv TYPE knvv.DATA: lv_kalvg TYPE tvak-kalvg.DATA: lv_auart TYPE vbak-auart, lv_vkorg TYPE vbak-vkorg, lv_vtweg TYPE vbak-vtweg, lv_spart TYPE vbak-spart, lv_kunnr TYPE vbak-kunnr, lv_matnr TYPE vbap-matnr, lv_werks TYPE vbap-werks, lv_kwmeng TYPE vbap-kwmeng. lv_auart = 'ZOR2'.lv_kunnr = '0000800649'.lv_vkorg = '8700'.lv_vtweg = '10'.lv_spart = '00'.lv_matnr = 'TLDD001'.lv_werks = '8800'.lv_kwmeng = 1. "销售组织对应的公司代码SELECT SINGLE bukrs INTO @ls_komk-bukrs FROM tvko WHERE vkorg = @lv_vkorg."根据订单类型获取用于定价过程确定的凭证分类SELECT SINGLE kalvg INTO @lv_kalvg FROM tvak WHERE auart = @lv_auart."根据客户和销售范围获取用于定价过程确定的客户分类/客户组/客户价格组SELECT SINGLE * INTO @ls_knvv FROM knvv WHERE kunnr = @lv_kunnr AND vkorg = @lv_vkorg AND vtweg = @lv_vtweg AND spart = @lv_spart."客户税收分类SELECT SINGLE taxkd INTO @ls_komk-taxk1 FROM knvi WHERE kunnr = @lv_kunnr AND aland = 'CN'."物料税收分类SELECT SINGLE taxm1 INTO @ls_komp-taxm1 FROM mlan WHERE matnr = @lv_matnr AND aland = 'CN'."获取定价过程SELECT SINGLE kalsm INTO @ls_komk-kalsm FROM t683v WHERE kalvg = @lv_kalvg AND kalks = @ls_knvv-kalks AND vkorg = @lv_vkorg AND vtweg = @lv_vtweg AND spart = @lv_spart. MOVE-CORRESPONDING ls_knvv TO ls_komk.*ls_komk-vkorg = lv_vkorg. "knvv-vkorg*ls_komk-vtweg = lv_vtweg. "knvv-vtweg*ls_komk-spart = lv_spart. "knvv-spart*ls_komk-konda = ls_knvv-konda. "knvv-konda*ls_komk-kdgrp = ls_knvv-kdgrp. "knvv-kdgrp*ls_komk-pltyp = ls_knvv-pltyp. "knvv-pltyp*ls_komk-kunnr = lv_kunnr. "knvv-kunnrls_komk-waerk = 'CNY'.ls_komk-kappl = 'V'.ls_komk-prsdt = sy-datum.ls_komk-aland = 'CN'.ls_komk-land1 = 'CN'.ls_komk-werks = lv_werks. "非必须ls_komk-vkorgau = ls_komk-vkorg."销售订单的销售机构,PI01会用到*ls_komk-bukrs =*ls_komk-taxk1 = '1'. "客户税分类,重要MWST/MWSI用到 ls_komp-kposn = '000010'.ls_komp-matnr = lv_matnr. "物料号ls_komp-pmatn = lv_matnr. "定价参考物料,重要PR01用到ls_komp-werks = lv_werks. "工厂ls_komp-mgame = lv_kwmeng."数量ls_komp-prsfd = 'X'."定价相关性,重要ls_komp-evrwr = 'X'."确定成本,重要VPRS用到*ls_komp-taxm1 = '1'."物料税分类,重要MWST/MWSI用到 CALL FUNCTION 'PRICING' EXPORTING calculation_type = 'B' comm_head_i = ls_komk comm_item_i = ls_komp TABLES tkomv = lt_komv.

4.结果

获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图

方法封装

方法封装在我的通用类ZCL_COMMON=>PRICING_SO中,方法见下

• * * * * * * * * * * * * *

class-methods PRICING_SO importing value(IV_VKORG) type VKORG value(IV_VTWEG) type VTWEG value(IV_SPART) type SPART value(IV_AUART) type AUART value(IV_KUNNR) type KUNNR value(IV_WERKS) type WERKS_D value(IV_MATNR) type MATNR value(IV_KWMENG) type KWMENG default 1 value(IV_LAND1) type LAND1 default 'CN' value(IV_WAERS) type WAERS default 'CNY' returning value(RT_KOMV) type KOMV_T .

• * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

METHOD pricing_so. DATA: ls_komk TYPE komk, ls_komp TYPE komp, lt_komv TYPE STANDARD TABLE OF komv, ls_knvv TYPE knvv. DATA: lv_kalvg TYPE tvak-kalvg. "销售组织对应的公司代码 SELECT SINGLE bukrs INTO @ls_komk-bukrs FROM tvko WHERE vkorg = @iv_vkorg. "根据订单类型获取用于定价过程确定的凭证分类 SELECT SINGLE kalvg INTO @lv_kalvg FROM tvak WHERE auart = @iv_auart. "根据客户和销售范围获取用于定价过程确定的客户分类/客户组/客户价格组 SELECT SINGLE * INTO @ls_knvv FROM knvv WHERE kunnr = @iv_kunnr AND vkorg = @iv_vkorg AND vtweg = @iv_vtweg AND spart = @iv_spart. "客户税收分类 SELECT SINGLE taxkd INTO @ls_komk-taxk1 FROM knvi WHERE kunnr = @iv_kunnr AND aland = @iv_land1. "物料税收分类 SELECT SINGLE taxm1 INTO @ls_komp-taxm1 FROM mlan WHERE matnr = @iv_matnr AND aland = @iv_land1. "获取定价过程 SELECT SINGLE kalsm INTO @ls_komk-kalsm FROM t683v WHERE kalvg = @lv_kalvg AND kalks = @ls_knvv-kalks AND vkorg = @iv_vkorg AND vtweg = @iv_vtweg AND spart = @iv_spart. MOVE-CORRESPONDING ls_knvv TO ls_komk.* ls_komk-kunnr = iv_kunnr. "knvv-kunnr* ls_komk-vkorg = iv_vkorg. "knvv-vkorg* ls_komk-vtweg = iv_vtweg. "knvv-vtweg* ls_komk-spart = iv_spart. "knvv-spart* ls_komk-konda = ls_knvv-konda. "knvv-konda* ls_komk-kdgrp = ls_knvv-kdgrp. "knvv-kdgrp* ls_komk-pltyp = ls_knvv-pltyp. "knvv-pltyp ls_komk-waerk = iv_waers. ls_komk-kappl = 'V'. ls_komk-prsdt = sy-datum. ls_komk-aland = iv_land1. ls_komk-land1 = iv_land1.* ls_komk-auart = lv_auart."非必须 ls_komk-werks = iv_werks. "非必须 ls_komk-vkorgau = ls_komk-vkorg."销售订单的销售机构,PI01会用到* ls_komk-bukrs =* ls_komk-taxk1 = '1'."客户税分类,重要MWST/MWSI用到 ls_komp-kposn = '000010'. ls_komp-matnr = iv_matnr."物料号 ls_komp-pmatn = iv_matnr."定价参考物料,重要PR01用到 ls_komp-werks = iv_werks."工厂 ls_komp-mgame = iv_kwmeng."数量 ls_komp-prsfd = 'X'."定价相关性,重要 ls_komp-evrwr = 'X'."确定成本,重要VPRS用到*ls_komp-taxm1 = '1'."物料税分类,重要MWST/MWSI用到 CALL FUNCTION 'PRICING' EXPORTING calculation_type = 'B' comm_head_i = ls_komk comm_item_i = ls_komp TABLES tkomv = rt_komv. ENDMETHOD.

‍ 调用

• * * * * * * *

lt_komv = zcl_common=>pricing_so( iv_auart = lv_auart iv_kunnr = lv_kunnr iv_vkorg = lv_vkorg iv_vtweg = lv_vtweg iv_spart = lv_spart iv_matnr = lv_matnr iv_werks = lv_werks ).

定价条件缺失问题排查

如果方法调用中报定价条件缺失错误,请先按上述示例代码中给定的字段赋值并检查。 若问题仍然存在,请按下列步骤检查 **_SPRO-销售与分销-基本功能-

定价-定价控制-访问顺序-设置访问顺序_ ** 找到报错的定价条件,如下图PR01

获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图

检查KOMK和KOMP中的相关字段是否有赋值, 通常赋值后即可解决

获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图

— END —

获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图

**温馨提示**

如果你喜欢本文,请分享给有需要的朋友,想要获得更多信息,请关注我,若有问题以及建议,请在文末留言或者私信。

获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图
获取销售订单定价条 - 封面图

扫码关注我们

以便获取最新更新内容 。

获取销售订单定价条 - 封面图.textContent = new Date().getFullYear();