SAP 对销售价格新增的处理

91 篇文章 10 订阅
45 篇文章 3 订阅

销售价格新增

同一价格类型的账户有如下情形

如果只是调用SAP 新增价格的方法

不去考虑上述几种情形,将会因为价格冲突而报错

​​​​​​SAP VK13 提示 内部错误:T IVAKE F IVAKE_INSERT I MV130F0I_GAVIN-CSDN博客

插入新价格之前先对上述集中场景进行处理

处理function 如下:

FUNCTION ZRFC_SD_KNA_PART_PRICE_M.
*"----------------------------------------------------------------------
*"*"局部接口:
*"  IMPORTING
*"     VALUE(PDATBI) TYPE  SY-DATUM DEFAULT SY-DATUM
*"     VALUE(KUNNR) TYPE  KUNNR OPTIONAL
*"     VALUE(MATNR) TYPE  MATNR OPTIONAL
*"     VALUE(WAERK) TYPE  WAERK OPTIONAL
*"     VALUE(PDATAB) TYPE  SY-DATUM DEFAULT SY-DATUM
*"     VALUE(COND_TYPE) TYPE  CHAR4 DEFAULT 'ZPR1'
*"     VALUE(TABLE_NO) TYPE  NUMC3 DEFAULT '920'
*"     VALUE(APPLICATIO) TYPE  CHAR1 DEFAULT 'V'
*"     VALUE(COND_USAGE) TYPE  CHAR1 DEFAULT 'A'
*"     VALUE(OPERATION) TYPE  CHAR3 DEFAULT '004'
*"  EXPORTING
*"     VALUE(EV_STATUS) TYPE  ZE_STATUS
*"     VALUE(EV_MESSAGE) TYPE  MSGTXT
*"----------------------------------------------------------------------
  DATA:LA920 LIKE A920 OCCURS 0 WITH HEADER LINE,
          LVALUE TYPE KONP-KBETR,
       WA920 TYPE A920,
          LT_BAPICONDCT  TYPE  BAPICONDCT OCCURS 0  ,  "
          WA_BAPICONDCT  TYPE  BAPICONDCT ,
          LT_BAPICONDHD  TYPE  BAPICONDHD OCCURS 0  ,  "
          WA_BAPICONDHD  TYPE  BAPICONDHD ,
          LT_BAPICONDIT  TYPE  BAPICONDIT OCCURS 0  ,
          WA_BAPICONDIT  TYPE  BAPICONDIT ,
          LT_BAPICONDQS  TYPE  BAPICONDQS OCCURS 0  ,
          WA_BAPICONDQS  TYPE  BAPICONDQS ,
          LT_BAPICONDVS  TYPE  BAPICONDVS OCCURS 0  ,
          WA_BAPICONDVS  TYPE  BAPICONDVS .
  FIELD-SYMBOLS: <FS1> TYPE BAPICONDCT,
                 <FS2> TYPE BAPICONDHD,
                 <FS3> TYPE BAPICONDIT.
  DATA: LT_BAPIRET2 LIKE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE .
  DATA: LT_BAPIKNUMHS TYPE BAPIKNUMHS  OCCURS  0 .
  DATA: LT_MEM_INITIAL TYPE  CND_MEM_INITIAL OCCURS 0 .
  DATA: H_VARKEY(255),
        H_COND_UNIT TYPE MEINS .
  DATA:LKUNNR LIKE KNA1-KUNNR,
        LPDATE LIKE SY-DATUM,
        LMATNR LIKE MARA-MATNR.
  DATA:L_KEY   LIKE BAPICONDCT-VARKEY.

  "1待增加区域 被全包含的即  DATAB  < PDATAB <  PDATBI < DATBI   先删后加
  "2待增加区域 全包含的即 PDATAB  <=  DATAB   <  DATBI <= PDATBI  删除
  "3前面冲突    即 PDATAB  < DATAB  < PDATBI < DATBI   先删后加
  "4尾部冲突    即  DATAB  < PDATAB < DATBI < PDATBI   先删后加

  CLEAR LA920[].

  "$. REGION  1被包含的
  SELECT  * INTO TABLE LA920
  FROM  A920
  WHERE A920~DATBI >= PDATBI AND DATAB <= PDATAB  AND
  MATNR  = MATNR AND KUNNR  = KUNNR AND WAERK  = WAERK AND KSCHL = COND_TYPE AND KAPPL = APPLICATIO.

  LOOP AT LA920[] INTO  WA920.
    CLEAR LT_BAPICONDCT[].CLEAR LT_BAPICONDHD[].CLEAR LT_BAPICONDIT[].
    DATA:LWA920 LIKE WA920.

    SELECT SINGLE KBETR INTO LVALUE
    FROM KONP
    WHERE KONP~KNUMH  = WA920-KNUMH.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA920-KUNNR
      IMPORTING
        OUTPUT = LKUNNR.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA920-MATNR
      IMPORTING
        OUTPUT = LMATNR.
    CONCATENATE LKUNNR  LMATNR WAERK INTO H_VARKEY.

    SELECT  SINGLE MEINS FROM MARA
    INTO H_COND_UNIT  WHERE MATNR = LMATNR.

    MOVE WA920 TO LWA920.
    "$. Region 先删除掉
    WA_BAPICONDCT-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDCT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDCT-COND_USAGE = COND_USAGE."'A'.      "条件表用途 ‘A' 定价
    WA_BAPICONDCT-COND_TYPE = COND_TYPE."I_KSCHL.    "定价条件
    WA_BAPICONDCT-OPERATION = '003'."'009'.     "消息功能 : 003 DEL ; 004 MODIFY ;005 REPLACE 009 INITIAL
*    WA_BAPICONDCT-OPERATION = '004'.         "更改
    WA_BAPICONDCT-VARKEY = H_VARKEY.
    WA_BAPICONDCT-VALID_TO = WA920-DATBI.
    WA_BAPICONDCT-VALID_FROM = WA920-DATAB.
    WA_BAPICONDCT-COND_NO = WA920-KNUMH.   "创建
    APPEND WA_BAPICONDCT TO LT_BAPICONDCT.

    WA_BAPICONDHD-OPERATION = '003'."'009'.
*WA_BAPICONDHD-OPERATION = '004'.
    WA_BAPICONDHD-COND_NO = WA920-KNUMH.
*WA_BAPICONDHD-COND_NO = '0003224015'.
    WA_BAPICONDHD-CREATED_BY = SY-UNAME.
    WA_BAPICONDHD-CREAT_DATE = SY-DATUM.
    WA_BAPICONDHD-COND_USAGE = COND_USAGE."'A'.
    WA_BAPICONDHD-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDHD-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDHD-COND_TYPE = COND_TYPE."I_KSCHL.    "
    WA_BAPICONDHD-VARKEY = H_VARKEY.
    WA_BAPICONDHD-VALID_FROM = WA920-DATAB.
    WA_BAPICONDHD-VALID_TO = WA920-DATBI.

    APPEND WA_BAPICONDHD TO  LT_BAPICONDHD .

    WA_BAPICONDIT-OPERATION = '003'."'009'.
    WA_BAPICONDIT-COND_NO = WA920-KNUMH. "'$000000001'.
    WA_BAPICONDIT-COND_COUNT = '01'.     "条件序列号
    WA_BAPICONDIT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDIT-COND_TYPE =  COND_TYPE."I_KSCHL.    "
    WA_BAPICONDIT-SCALETYPE = 'A'.       "STFKZ STAFFELSOORT
    WA_BAPICONDIT-SCALEBASIN = ''.      "KZBZG TEKEN:REKENEENHEID "  WA_BAPICONDIT-SCALEBASIN = 'C'. 存在数量等级
    WA_BAPICONDIT-SCALE_QTY = '0'.       "KSTBM CONDITIESTAFFELBASIS HOEVEELHEID
    WA_BAPICONDIT-COND_P_UNT = '1'.      "KPEIN PRIJSEENHEID
    WA_BAPICONDIT-COND_UNIT = H_COND_UNIT.      "KMEIN CONDITIE-HOEVEELHEIDSEENHEID
    WA_BAPICONDIT-CALCTYPCON = 'C'.      "KRECH CONDITIE-REKENREGEL
    WA_BAPICONDIT-COND_VALUE = LVALUE.
    WA_BAPICONDIT-CONDCURR = WAERK.

    APPEND  WA_BAPICONDIT  TO LT_BAPICONDIT.

    CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
      EXPORTING
*       PI_INITIALMODE       = ' '
*       PI_BLOCKNUMBER       =
        PI_PHYSICAL_DELETION = 'X'
      TABLES
        TI_BAPICONDCT        = LT_BAPICONDCT
        TI_BAPICONDHD        = LT_BAPICONDHD
        TI_BAPICONDIT        = LT_BAPICONDIT
        TI_BAPICONDQS        = LT_BAPICONDQS
        TI_BAPICONDVS        = LT_BAPICONDVS
        TO_BAPIRET2          = LT_BAPIRET2
        TO_BAPIKNUMHS        = LT_BAPIKNUMHS
        TO_MEM_INITIAL       = LT_MEM_INITIAL
      EXCEPTIONS
        UPDATE_ERROR         = 1
        OTHERS               = 2.
    "$. Endregion 先删除掉
*      加回两头的
    if WA920-DATAB < PDATAB.
      "创建
      CLEAR LT_BAPICONDCT[].CLEAR LT_BAPICONDHD[].CLEAR LT_BAPICONDIT[].
      MOVE WA920 TO LWA920.
      LWA920-DATBI = PDATAB - 1.
      WA_BAPICONDCT-TABLE_NO = TABLE_NO."'941'.
      WA_BAPICONDCT-APPLICATIO = APPLICATIO."'V'.
      WA_BAPICONDCT-COND_USAGE = COND_USAGE."'A'.      "条件表用途 ‘A' 定价
      WA_BAPICONDCT-COND_TYPE = COND_TYPE."I_KSCHL.    "定价条件
      WA_BAPICONDCT-OPERATION = '009'."'009'.     "消息功能 : 003 DEL ; 004 MODIFY ;005 REPLACE 009 INITIAL
*    WA_BAPICONDCT-OPERATION = '004'.         "更改
      WA_BAPICONDCT-VARKEY = H_VARKEY.
      WA_BAPICONDCT-VALID_TO = LWA920-DATBI.
      WA_BAPICONDCT-VALID_FROM = LWA920-DATAB.

      WA_BAPICONDCT-COND_NO = '$000000001'.   "创建

      APPEND WA_BAPICONDCT TO LT_BAPICONDCT.

      WA_BAPICONDHD-OPERATION = '009'."'009'.
*WA_BAPICONDHD-OPERATION = '004'.
      WA_BAPICONDHD-COND_NO = '$000000001'.
*WA_BAPICONDHD-COND_NO = '0003224015'.
      WA_BAPICONDHD-CREATED_BY = SY-UNAME.
      WA_BAPICONDHD-CREAT_DATE = SY-DATUM.
      WA_BAPICONDHD-COND_USAGE = COND_USAGE."'A'.
      WA_BAPICONDHD-TABLE_NO = TABLE_NO."'941'.
      WA_BAPICONDHD-APPLICATIO = APPLICATIO."'V'.
      WA_BAPICONDHD-COND_TYPE = COND_TYPE."I_KSCHL.    "
      WA_BAPICONDHD-VARKEY = H_VARKEY.
      WA_BAPICONDHD-VALID_FROM = LWA920-DATAB.
      WA_BAPICONDHD-VALID_TO = LWA920-DATBI.

      APPEND WA_BAPICONDHD TO  LT_BAPICONDHD .

      WA_BAPICONDIT-OPERATION = '009'."'009'.
      WA_BAPICONDIT-COND_NO = '$000000001'.
      WA_BAPICONDIT-COND_COUNT = '01'.     "条件序列号
      WA_BAPICONDIT-APPLICATIO = APPLICATIO."'V'.
      WA_BAPICONDIT-COND_TYPE =  COND_TYPE."I_KSCHL.    "
      WA_BAPICONDIT-SCALETYPE = 'A'.       "STFKZ STAFFELSOORT
      WA_BAPICONDIT-SCALEBASIN = ''.      "KZBZG TEKEN:REKENEENHEID "  WA_BAPICONDIT-SCALEBASIN = 'C'. 存在数量等级
      WA_BAPICONDIT-SCALE_QTY = '0'.       "KSTBM CONDITIESTAFFELBASIS HOEVEELHEID
      WA_BAPICONDIT-COND_P_UNT = '1'.      "KPEIN PRIJSEENHEID
      WA_BAPICONDIT-COND_UNIT = H_COND_UNIT.      "KMEIN CONDITIE-HOEVEELHEIDSEENHEID
      WA_BAPICONDIT-CALCTYPCON = 'C'.      "KRECH CONDITIE-REKENREGEL
      WA_BAPICONDIT-COND_VALUE = LVALUE.
      WA_BAPICONDIT-CONDCURR = WAERK.

      APPEND  WA_BAPICONDIT  TO LT_BAPICONDIT.

      CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
        EXPORTING
*         PI_INITIALMODE       = ' '
*         PI_BLOCKNUMBER       =
          PI_PHYSICAL_DELETION = 'X'
        TABLES
          TI_BAPICONDCT        = LT_BAPICONDCT
          TI_BAPICONDHD        = LT_BAPICONDHD
          TI_BAPICONDIT        = LT_BAPICONDIT
          TI_BAPICONDQS        = LT_BAPICONDQS
          TI_BAPICONDVS        = LT_BAPICONDVS
          TO_BAPIRET2          = LT_BAPIRET2
          TO_BAPIKNUMHS        = LT_BAPIKNUMHS
          TO_MEM_INITIAL       = LT_MEM_INITIAL
        EXCEPTIONS
          UPDATE_ERROR         = 1
          OTHERS               = 2.
    endif.

    IF WA920-DATBI > PDATBI.
      "创建
      CLEAR LT_BAPICONDCT[].CLEAR LT_BAPICONDHD[].CLEAR LT_BAPICONDIT[].
      MOVE WA920 TO LWA920.
      LWA920-DATAB = PDATBI + 1.
      WA_BAPICONDCT-TABLE_NO = TABLE_NO."'941'.
      WA_BAPICONDCT-APPLICATIO = APPLICATIO."'V'.
      WA_BAPICONDCT-COND_USAGE = COND_USAGE."'A'.      "条件表用途 ‘A' 定价
      WA_BAPICONDCT-COND_TYPE = COND_TYPE."I_KSCHL.    "定价条件
      WA_BAPICONDCT-OPERATION = '009'."'009'.     "消息功能 : 003 DEL ; 004 MODIFY ;005 REPLACE 009 INITIAL
*    WA_BAPICONDCT-OPERATION = '004'.         "更改
      WA_BAPICONDCT-VARKEY = H_VARKEY.
      WA_BAPICONDCT-VALID_TO = LWA920-DATBI.
      WA_BAPICONDCT-VALID_FROM = LWA920-DATAB.

      WA_BAPICONDCT-COND_NO = '$000000001'.   "创建

      APPEND WA_BAPICONDCT TO LT_BAPICONDCT.

      WA_BAPICONDHD-OPERATION = '009'."'009'.
*WA_BAPICONDHD-OPERATION = '004'.
      WA_BAPICONDHD-COND_NO = '$000000001'.
*WA_BAPICONDHD-COND_NO = '0003224015'.
      WA_BAPICONDHD-CREATED_BY = SY-UNAME.
      WA_BAPICONDHD-CREAT_DATE = SY-DATUM.
      WA_BAPICONDHD-COND_USAGE = COND_USAGE."'A'.
      WA_BAPICONDHD-TABLE_NO = TABLE_NO."'941'.
      WA_BAPICONDHD-APPLICATIO = APPLICATIO."'V'.
      WA_BAPICONDHD-COND_TYPE = COND_TYPE."I_KSCHL.    "
      WA_BAPICONDHD-VARKEY = H_VARKEY.
      WA_BAPICONDHD-VALID_FROM = LWA920-DATAB.
      WA_BAPICONDHD-VALID_TO = LWA920-DATBI.

      APPEND WA_BAPICONDHD TO  LT_BAPICONDHD .

      WA_BAPICONDIT-OPERATION = '009'."'009'.
      WA_BAPICONDIT-COND_NO = '$000000001'.
      WA_BAPICONDIT-COND_COUNT = '01'.     "条件序列号
      WA_BAPICONDIT-APPLICATIO = APPLICATIO."'V'.
      WA_BAPICONDIT-COND_TYPE =  COND_TYPE."I_KSCHL.    "
      WA_BAPICONDIT-SCALETYPE = 'A'.       "STFKZ STAFFELSOORT
      WA_BAPICONDIT-SCALEBASIN = ''.      "KZBZG TEKEN:REKENEENHEID "  WA_BAPICONDIT-SCALEBASIN = 'C'. 存在数量等级
      WA_BAPICONDIT-SCALE_QTY = '0'.       "KSTBM CONDITIESTAFFELBASIS HOEVEELHEID
      WA_BAPICONDIT-COND_P_UNT = '1'.      "KPEIN PRIJSEENHEID
      WA_BAPICONDIT-COND_UNIT = H_COND_UNIT.      "KMEIN CONDITIE-HOEVEELHEIDSEENHEID
      WA_BAPICONDIT-CALCTYPCON = 'C'.      "KRECH CONDITIE-REKENREGEL
      WA_BAPICONDIT-COND_VALUE = LVALUE.
      WA_BAPICONDIT-CONDCURR = WAERK.

      APPEND  WA_BAPICONDIT  TO LT_BAPICONDIT.

      CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
        EXPORTING
*         PI_INITIALMODE       = ' '
*         PI_BLOCKNUMBER       =
          PI_PHYSICAL_DELETION = 'X'
        TABLES
          TI_BAPICONDCT        = LT_BAPICONDCT
          TI_BAPICONDHD        = LT_BAPICONDHD
          TI_BAPICONDIT        = LT_BAPICONDIT
          TI_BAPICONDQS        = LT_BAPICONDQS
          TI_BAPICONDVS        = LT_BAPICONDVS
          TO_BAPIRET2          = LT_BAPIRET2
          TO_BAPIKNUMHS        = LT_BAPIKNUMHS
          TO_MEM_INITIAL       = LT_MEM_INITIAL
        EXCEPTIONS
          UPDATE_ERROR         = 1
          OTHERS               = 2.

    ENDIF.
  ENDLOOP.

  "$. ENDREGION 被包含的

  CLEAR LA920[].

  "$. REGION 2全包含 PDATAB  <=  DATAB   <  DATBI <= PDATBI  删除
  SELECT  * INTO TABLE LA920
  FROM  A920
  WHERE ( ( A920~DATBI < PDATBI AND DATAB > PDATAB ) or ( A920~DATBI < PDATBI AND DATAB = PDATAB )
    or ( A920~DATBI = PDATBI AND DATAB = PDATAB ) or ( A920~DATBI = PDATBI AND DATAB > PDATAB ) ) AND
  MATNR  = MATNR AND KUNNR  = KUNNR AND WAERK  = WAERK AND KSCHL = COND_TYPE AND KAPPL = APPLICATIO.

  LOOP AT LA920[] INTO  WA920.
    CLEAR LT_BAPICONDCT[].CLEAR LT_BAPICONDHD[].CLEAR LT_BAPICONDIT[].
    OPERATION = '003'.
    SELECT SINGLE KBETR INTO LVALUE
    FROM KONP
    WHERE KONP~KNUMH  = WA920-KNUMH.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA920-KUNNR
      IMPORTING
        OUTPUT = LKUNNR.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA920-MATNR
      IMPORTING
        OUTPUT = LMATNR.
    CONCATENATE LKUNNR  LMATNR WAERK INTO H_VARKEY.

    SELECT  SINGLE MEINS FROM MARA
    INTO H_COND_UNIT  WHERE MATNR = LMATNR.

    WA_BAPICONDCT-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDCT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDCT-COND_USAGE = COND_USAGE."'A'.      "条件表用途 ‘A' 定价
    WA_BAPICONDCT-COND_TYPE = COND_TYPE."I_KSCHL.    "定价条件
    WA_BAPICONDCT-OPERATION = OPERATION."'009'.     "消息功能 : 003 DEL ; 004 MODIFY ;005 REPLACE 009 INITIAL
*    WA_BAPICONDCT-OPERATION = '004'.         "更改
    WA_BAPICONDCT-VARKEY = H_VARKEY.
    WA_BAPICONDCT-VALID_TO = WA920-DATBI.
    WA_BAPICONDCT-VALID_FROM = WA920-DATAB.
    WA_BAPICONDCT-COND_NO = WA920-KNUMH.   "创建
    APPEND WA_BAPICONDCT TO LT_BAPICONDCT.

    WA_BAPICONDHD-OPERATION = OPERATION."'009'.
*WA_BAPICONDHD-OPERATION = '004'.
    WA_BAPICONDHD-COND_NO = WA920-KNUMH.
*WA_BAPICONDHD-COND_NO = '0003224015'.
    WA_BAPICONDHD-CREATED_BY = SY-UNAME.
    WA_BAPICONDHD-CREAT_DATE = SY-DATUM.
    WA_BAPICONDHD-COND_USAGE = COND_USAGE."'A'.
    WA_BAPICONDHD-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDHD-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDHD-COND_TYPE = COND_TYPE."I_KSCHL.    "
    WA_BAPICONDHD-VARKEY = H_VARKEY.
    WA_BAPICONDHD-VALID_FROM = WA920-DATAB.
    WA_BAPICONDHD-VALID_TO = WA920-DATBI.

    APPEND WA_BAPICONDHD TO  LT_BAPICONDHD .

    WA_BAPICONDIT-OPERATION = OPERATION."'009'.
    WA_BAPICONDIT-COND_NO = WA920-KNUMH. "'$000000001'.
    WA_BAPICONDIT-COND_COUNT = '01'.     "条件序列号
    WA_BAPICONDIT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDIT-COND_TYPE =  COND_TYPE."I_KSCHL.    "
    WA_BAPICONDIT-SCALETYPE = 'A'.       "STFKZ STAFFELSOORT
    WA_BAPICONDIT-SCALEBASIN = ''.      "KZBZG TEKEN:REKENEENHEID "  WA_BAPICONDIT-SCALEBASIN = 'C'. 存在数量等级
    WA_BAPICONDIT-SCALE_QTY = '0'.       "KSTBM CONDITIESTAFFELBASIS HOEVEELHEID
    WA_BAPICONDIT-COND_P_UNT = '1'.      "KPEIN PRIJSEENHEID
    WA_BAPICONDIT-COND_UNIT = H_COND_UNIT.      "KMEIN CONDITIE-HOEVEELHEIDSEENHEID
    WA_BAPICONDIT-CALCTYPCON = 'C'.      "KRECH CONDITIE-REKENREGEL
    WA_BAPICONDIT-COND_VALUE = LVALUE.
    WA_BAPICONDIT-CONDCURR = WAERK.

    APPEND  WA_BAPICONDIT  TO LT_BAPICONDIT.

    CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
      EXPORTING
*       PI_INITIALMODE       = ' '
*       PI_BLOCKNUMBER       =
        PI_PHYSICAL_DELETION = 'X'
      TABLES
        TI_BAPICONDCT        = LT_BAPICONDCT
        TI_BAPICONDHD        = LT_BAPICONDHD
        TI_BAPICONDIT        = LT_BAPICONDIT
        TI_BAPICONDQS        = LT_BAPICONDQS
        TI_BAPICONDVS        = LT_BAPICONDVS
        TO_BAPIRET2          = LT_BAPIRET2
        TO_BAPIKNUMHS        = LT_BAPIKNUMHS
        TO_MEM_INITIAL       = LT_MEM_INITIAL
      EXCEPTIONS
        UPDATE_ERROR         = 1
        OTHERS               = 2.
  ENDLOOP.
  "$. ENDREGION 全包含

  CLEAR LA920[].

  "$. REGION 3部分冲突  即  PDATAB  < DATAB  < PDATBI < DATBI  先删除再加回来
  SELECT  * INTO TABLE LA920
  FROM  A920
  WHERE A920~DATBI => PDATBI AND DATAB > PDATAB AND DATAB < PDATBI AND
  MATNR  = MATNR AND KUNNR  = KUNNR AND WAERK  = WAERK AND KSCHL = COND_TYPE AND KAPPL = APPLICATIO.

  LOOP AT LA920[] INTO  WA920.
    CLEAR LT_BAPICONDCT[].CLEAR LT_BAPICONDHD[].CLEAR LT_BAPICONDIT[].
    OPERATION = '003'.
    SELECT SINGLE KBETR INTO LVALUE
    FROM KONP
    WHERE KONP~KNUMH  = WA920-KNUMH.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA920-KUNNR
      IMPORTING
        OUTPUT = LKUNNR.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA920-MATNR
      IMPORTING
        OUTPUT = LMATNR.
    CONCATENATE LKUNNR  LMATNR WAERK INTO H_VARKEY.

    SELECT  SINGLE MEINS FROM MARA
    INTO H_COND_UNIT  WHERE MATNR = LMATNR.

    "$. Region 删除
    WA_BAPICONDCT-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDCT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDCT-COND_USAGE = COND_USAGE."'A'.      "条件表用途 ‘A' 定价
    WA_BAPICONDCT-COND_TYPE = COND_TYPE."I_KSCHL.    "定价条件
*    WA_BAPICONDCT-OPERATION = '004'."'009'.     "消息功能 : 003 DEL ; 004 MODIFY ;005 REPLACE 009 INITIAL
*    WA_BAPICONDCT-OPERATION = '004'.         "更改
    WA_BAPICONDCT-VARKEY = H_VARKEY.
    WA_BAPICONDCT-VALID_TO = WA920-DATBI.
    WA_BAPICONDCT-VALID_FROM = LPDATE.
    WA_BAPICONDCT-COND_NO = WA920-KNUMH.   "创建

    APPEND WA_BAPICONDCT TO LT_BAPICONDCT.

    WA_BAPICONDHD-OPERATION = OPERATION."'009'.
*WA_BAPICONDHD-OPERATION = '004'.
    WA_BAPICONDHD-COND_NO = WA920-KNUMH.
*WA_BAPICONDHD-COND_NO = '0003224015'.
    WA_BAPICONDHD-CREATED_BY = SY-UNAME.
    WA_BAPICONDHD-CREAT_DATE = SY-DATUM.
    WA_BAPICONDHD-COND_USAGE = COND_USAGE."'A'.
    WA_BAPICONDHD-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDHD-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDHD-COND_TYPE = COND_TYPE."I_KSCHL.    "
    WA_BAPICONDHD-VARKEY = H_VARKEY.
      WA_BAPICONDHD-VALID_FROM = WA920-DATAB.
      WA_BAPICONDHD-VALID_TO = WA920-DATBI.
    APPEND WA_BAPICONDHD TO  LT_BAPICONDHD .

    WA_BAPICONDIT-OPERATION = OPERATION."'009'.
    WA_BAPICONDIT-COND_NO = WA920-KNUMH. "'$000000001'.
    WA_BAPICONDIT-COND_COUNT = '01'.     "条件序列号
    WA_BAPICONDIT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDIT-COND_TYPE =  COND_TYPE."I_KSCHL.    "
    WA_BAPICONDIT-SCALETYPE = 'A'.       "STFKZ STAFFELSOORT
    WA_BAPICONDIT-SCALEBASIN = ''.      "KZBZG TEKEN:REKENEENHEID "  WA_BAPICONDIT-SCALEBASIN = 'C'. 存在数量等级
    WA_BAPICONDIT-SCALE_QTY = '0'.       "KSTBM CONDITIESTAFFELBASIS HOEVEELHEID
    WA_BAPICONDIT-COND_P_UNT = '1'.      "KPEIN PRIJSEENHEID
    WA_BAPICONDIT-COND_UNIT = H_COND_UNIT.      "KMEIN CONDITIE-HOEVEELHEIDSEENHEID
    WA_BAPICONDIT-CALCTYPCON = 'C'.      "KRECH CONDITIE-REKENREGEL
    WA_BAPICONDIT-COND_VALUE = LVALUE.
    WA_BAPICONDIT-CONDCURR = WAERK.

    APPEND  WA_BAPICONDIT  TO LT_BAPICONDIT.

    CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
      EXPORTING
*       PI_INITIALMODE       = ' '
*       PI_BLOCKNUMBER       =
        PI_PHYSICAL_DELETION = 'X'
      TABLES
        TI_BAPICONDCT        = LT_BAPICONDCT
        TI_BAPICONDHD        = LT_BAPICONDHD
        TI_BAPICONDIT        = LT_BAPICONDIT
        TI_BAPICONDQS        = LT_BAPICONDQS
        TI_BAPICONDVS        = LT_BAPICONDVS
        TO_BAPIRET2          = LT_BAPIRET2
        TO_BAPIKNUMHS        = LT_BAPIKNUMHS
        TO_MEM_INITIAL       = LT_MEM_INITIAL
      EXCEPTIONS
        UPDATE_ERROR         = 1
        OTHERS               = 2.
     "$. Endregion 删除

    CLEAR LT_BAPICONDCT[].
    CLEAR LT_BAPICONDHD[].CLEAR LT_BAPICONDIT[].
    LPDATE = PDATBI + 1.
    OPERATION  = '009'.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = WA920-KUNNR
    IMPORTING
      OUTPUT = LKUNNR.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      INPUT  = WA920-MATNR
    IMPORTING
      OUTPUT = LMATNR.
    CONCATENATE LKUNNR  LMATNR WAERK INTO H_VARKEY.

    WA_BAPICONDCT-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDCT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDCT-COND_USAGE = COND_USAGE."'A'.      "条件表用途 ‘A' 定价
    WA_BAPICONDCT-COND_TYPE = COND_TYPE."I_KSCHL.    "定价条件
    WA_BAPICONDCT-OPERATION = OPERATION."'009'.     "消息功能 : 003 DEL ; 004 MODIFY ;005 REPLACE 009 INITIAL
*    WA_BAPICONDCT-OPERATION = '004'.         "更改
    WA_BAPICONDCT-VARKEY = H_VARKEY.
    WA_BAPICONDCT-VALID_TO = WA920-DATBI.
    WA_BAPICONDCT-VALID_FROM = LPDATE.
    WA_BAPICONDCT-COND_NO = '$000000001'.   "创建

    APPEND WA_BAPICONDCT TO LT_BAPICONDCT.

    WA_BAPICONDHD-OPERATION = OPERATION."'009'.
*WA_BAPICONDHD-OPERATION = '004'.
    WA_BAPICONDHD-COND_NO = '$000000001'.
*WA_BAPICONDHD-COND_NO = '0003224015'.
    WA_BAPICONDHD-CREATED_BY = SY-UNAME.
    WA_BAPICONDHD-CREAT_DATE = SY-DATUM.
    WA_BAPICONDHD-COND_USAGE = COND_USAGE."'A'.
    WA_BAPICONDHD-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDHD-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDHD-COND_TYPE = COND_TYPE."I_KSCHL.    "
    WA_BAPICONDHD-VARKEY = H_VARKEY.
    WA_BAPICONDHD-VALID_TO = WA920-DATBI.
    WA_BAPICONDHD-VALID_FROM = LPDATE.

    APPEND WA_BAPICONDHD TO  LT_BAPICONDHD .

    WA_BAPICONDIT-OPERATION = OPERATION."'009'.
    WA_BAPICONDIT-COND_NO = '$000000001'.
    WA_BAPICONDIT-COND_COUNT = '01'.     "条件序列号
    WA_BAPICONDIT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDIT-COND_TYPE =  COND_TYPE."I_KSCHL.    "
    WA_BAPICONDIT-SCALETYPE = 'A'.       "STFKZ STAFFELSOORT
    WA_BAPICONDIT-SCALEBASIN = ''.      "KZBZG TEKEN:REKENEENHEID "  WA_BAPICONDIT-SCALEBASIN = 'C'. 存在数量等级
    WA_BAPICONDIT-SCALE_QTY = '0'.       "KSTBM CONDITIESTAFFELBASIS HOEVEELHEID
    WA_BAPICONDIT-COND_P_UNT = '1'.      "KPEIN PRIJSEENHEID
    WA_BAPICONDIT-COND_UNIT = H_COND_UNIT.      "KMEIN CONDITIE-HOEVEELHEIDSEENHEID
    WA_BAPICONDIT-CALCTYPCON = 'C'.      "KRECH CONDITIE-REKENREGEL
    WA_BAPICONDIT-COND_VALUE = LVALUE.
    WA_BAPICONDIT-CONDCURR = WAERK.

    APPEND  WA_BAPICONDIT  TO LT_BAPICONDIT.

    CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
    EXPORTING
*       PI_INITIALMODE       = ' '
*       PI_BLOCKNUMBER       =
      PI_PHYSICAL_DELETION = 'X'
    TABLES
      TI_BAPICONDCT        = LT_BAPICONDCT
      TI_BAPICONDHD        = LT_BAPICONDHD
      TI_BAPICONDIT        = LT_BAPICONDIT
      TI_BAPICONDQS        = LT_BAPICONDQS
      TI_BAPICONDVS        = LT_BAPICONDVS
      TO_BAPIRET2          = LT_BAPIRET2
      TO_BAPIKNUMHS        = LT_BAPIKNUMHS
      TO_MEM_INITIAL       = LT_MEM_INITIAL
    EXCEPTIONS
      UPDATE_ERROR         = 1
      OTHERS               = 2.
  ENDLOOP.

  "$. ENDREGION 尾部冲突

  CLEAR LA920[].

  "$. REGION  4部分冲突  即  DATAB  < PDATAB < DATBI < PDATBI   先删除再加回来
  SELECT  * INTO TABLE LA920
  FROM  A920
  WHERE A920~DATBI < PDATBI AND DATAB < PDATAB AND  A920~DATBI > PDATAB AND
  MATNR  = MATNR AND KUNNR  = KUNNR AND WAERK  = WAERK AND KSCHL = COND_TYPE AND KAPPL = APPLICATIO.

  LOOP AT LA920[] INTO  WA920.
    CLEAR LT_BAPICONDCT[].CLEAR LT_BAPICONDHD[].CLEAR LT_BAPICONDIT[].
    SELECT SINGLE KBETR INTO LVALUE
    FROM KONP
    WHERE KONP~KNUMH  = WA920-KNUMH.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA920-KUNNR
      IMPORTING
        OUTPUT = LKUNNR.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA920-MATNR
      IMPORTING
        OUTPUT = LMATNR.
    CONCATENATE LKUNNR  LMATNR WAERK INTO H_VARKEY.

    SELECT  SINGLE MEINS FROM MARA
    INTO H_COND_UNIT  WHERE MATNR = LMATNR.

    MOVE WA920 TO LWA920.
    "$. Region 先删除掉
    WA_BAPICONDCT-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDCT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDCT-COND_USAGE = COND_USAGE."'A'.      "条件表用途 ‘A' 定价
    WA_BAPICONDCT-COND_TYPE = COND_TYPE."I_KSCHL.    "定价条件
    WA_BAPICONDCT-OPERATION = '003'."'009'.     "消息功能 : 003 DEL ; 004 MODIFY ;005 REPLACE 009 INITIAL
*    WA_BAPICONDCT-OPERATION = '004'.         "更改
    WA_BAPICONDCT-VARKEY = H_VARKEY.
    WA_BAPICONDCT-VALID_TO = WA920-DATBI.
    WA_BAPICONDCT-VALID_FROM = WA920-DATAB.
    WA_BAPICONDCT-COND_NO = WA920-KNUMH.   "创建
    APPEND WA_BAPICONDCT TO LT_BAPICONDCT.

    WA_BAPICONDHD-OPERATION = '003'."'009'.
*WA_BAPICONDHD-OPERATION = '004'.
    WA_BAPICONDHD-COND_NO = WA920-KNUMH.
*WA_BAPICONDHD-COND_NO = '0003224015'.
    WA_BAPICONDHD-CREATED_BY = SY-UNAME.
    WA_BAPICONDHD-CREAT_DATE = SY-DATUM.
    WA_BAPICONDHD-COND_USAGE = COND_USAGE."'A'.
    WA_BAPICONDHD-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDHD-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDHD-COND_TYPE = COND_TYPE."I_KSCHL.    "
    WA_BAPICONDHD-VARKEY = H_VARKEY.
    WA_BAPICONDHD-VALID_FROM = WA920-DATAB.
    WA_BAPICONDHD-VALID_TO = WA920-DATBI.

    APPEND WA_BAPICONDHD TO  LT_BAPICONDHD .

    WA_BAPICONDIT-OPERATION = '003'."'009'.
    WA_BAPICONDIT-COND_NO = WA920-KNUMH. "'$000000001'.
    WA_BAPICONDIT-COND_COUNT = '01'.     "条件序列号
    WA_BAPICONDIT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDIT-COND_TYPE =  COND_TYPE."I_KSCHL.    "
    WA_BAPICONDIT-SCALETYPE = 'A'.       "STFKZ STAFFELSOORT
    WA_BAPICONDIT-SCALEBASIN = ''.      "KZBZG TEKEN:REKENEENHEID "  WA_BAPICONDIT-SCALEBASIN = 'C'. 存在数量等级
    WA_BAPICONDIT-SCALE_QTY = '0'.       "KSTBM CONDITIESTAFFELBASIS HOEVEELHEID
    WA_BAPICONDIT-COND_P_UNT = '1'.      "KPEIN PRIJSEENHEID
    WA_BAPICONDIT-COND_UNIT = H_COND_UNIT.      "KMEIN CONDITIE-HOEVEELHEIDSEENHEID
    WA_BAPICONDIT-CALCTYPCON = 'C'.      "KRECH CONDITIE-REKENREGEL
    WA_BAPICONDIT-COND_VALUE = LVALUE.
    WA_BAPICONDIT-CONDCURR = WAERK.

    APPEND  WA_BAPICONDIT  TO LT_BAPICONDIT.

    CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
      EXPORTING
*       PI_INITIALMODE       = ' '
*       PI_BLOCKNUMBER       =
        PI_PHYSICAL_DELETION = 'X'
      TABLES
        TI_BAPICONDCT        = LT_BAPICONDCT
        TI_BAPICONDHD        = LT_BAPICONDHD
        TI_BAPICONDIT        = LT_BAPICONDIT
        TI_BAPICONDQS        = LT_BAPICONDQS
        TI_BAPICONDVS        = LT_BAPICONDVS
        TO_BAPIRET2          = LT_BAPIRET2
        TO_BAPIKNUMHS        = LT_BAPIKNUMHS
        TO_MEM_INITIAL       = LT_MEM_INITIAL
      EXCEPTIONS
        UPDATE_ERROR         = 1
        OTHERS               = 2.
    "$. ENDREGION 尾部冲突
     CLEAR LT_BAPICONDCT[].
    CLEAR LT_BAPICONDHD[].CLEAR LT_BAPICONDIT[].
    LPDATE = PDATAB - 1.
    OPERATION  = '009'.

    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA920-KUNNR
      IMPORTING
        OUTPUT = LKUNNR.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        INPUT  = WA920-MATNR
      IMPORTING
        OUTPUT = LMATNR.
    CONCATENATE LKUNNR  LMATNR WAERK INTO H_VARKEY.

    SELECT  SINGLE MEINS FROM MARA
    INTO H_COND_UNIT  WHERE MATNR = LMATNR.

    WA_BAPICONDCT-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDCT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDCT-COND_USAGE = COND_USAGE."'A'.      "条件表用途 ‘A' 定价
    WA_BAPICONDCT-COND_TYPE = COND_TYPE."I_KSCHL.    "定价条件
    WA_BAPICONDCT-OPERATION = OPERATION."'009'.     "消息功能 : 003 DEL ; 004 MODIFY ;005 REPLACE 009 INITIAL
*    WA_BAPICONDCT-OPERATION = '004'.         "更改
    WA_BAPICONDCT-VARKEY = H_VARKEY.
      WA_BAPICONDCT-VALID_TO = LPDATE.
      WA_BAPICONDCT-VALID_FROM = WA920-DATAB.
    WA_BAPICONDCT-COND_NO = '$000000001'.   "创建

    APPEND WA_BAPICONDCT TO LT_BAPICONDCT.

    WA_BAPICONDHD-OPERATION = OPERATION."'009'.
*WA_BAPICONDHD-OPERATION = '004'.
    WA_BAPICONDHD-COND_NO = '$000000001'.
*WA_BAPICONDHD-COND_NO = '0003224015'.
    WA_BAPICONDHD-CREATED_BY = SY-UNAME.
    WA_BAPICONDHD-CREAT_DATE = SY-DATUM.
    WA_BAPICONDHD-COND_USAGE = COND_USAGE."'A'.
    WA_BAPICONDHD-TABLE_NO = TABLE_NO."'941'.
    WA_BAPICONDHD-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDHD-COND_TYPE = COND_TYPE."I_KSCHL.    "
    WA_BAPICONDHD-VARKEY = H_VARKEY.

      WA_BAPICONDHD-VALID_TO = LPDATE.
      WA_BAPICONDHD-VALID_FROM = WA920-DATAB.


    APPEND WA_BAPICONDHD TO  LT_BAPICONDHD .

    WA_BAPICONDIT-OPERATION = OPERATION."'009'.
    WA_BAPICONDIT-COND_NO = '$000000001'.
    WA_BAPICONDIT-COND_COUNT = '01'.     "条件序列号
    WA_BAPICONDIT-APPLICATIO = APPLICATIO."'V'.
    WA_BAPICONDIT-COND_TYPE =  COND_TYPE."I_KSCHL.    "
    WA_BAPICONDIT-SCALETYPE = 'A'.       "STFKZ STAFFELSOORT
    WA_BAPICONDIT-SCALEBASIN = ''.      "KZBZG TEKEN:REKENEENHEID "  WA_BAPICONDIT-SCALEBASIN = 'C'. 存在数量等级
    WA_BAPICONDIT-SCALE_QTY = '0'.       "KSTBM CONDITIESTAFFELBASIS HOEVEELHEID
    WA_BAPICONDIT-COND_P_UNT = '1'.      "KPEIN PRIJSEENHEID
    WA_BAPICONDIT-COND_UNIT = H_COND_UNIT.      "KMEIN CONDITIE-HOEVEELHEIDSEENHEID
    WA_BAPICONDIT-CALCTYPCON = 'C'.      "KRECH CONDITIE-REKENREGEL
    WA_BAPICONDIT-COND_VALUE = LVALUE.
    WA_BAPICONDIT-CONDCURR = WAERK.

    APPEND  WA_BAPICONDIT  TO LT_BAPICONDIT.

    CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
      EXPORTING
*       PI_INITIALMODE       = ' '
*       PI_BLOCKNUMBER       =
        PI_PHYSICAL_DELETION = 'X'
      TABLES
        TI_BAPICONDCT        = LT_BAPICONDCT
        TI_BAPICONDHD        = LT_BAPICONDHD
        TI_BAPICONDIT        = LT_BAPICONDIT
        TI_BAPICONDQS        = LT_BAPICONDQS
        TI_BAPICONDVS        = LT_BAPICONDVS
        TO_BAPIRET2          = LT_BAPIRET2
        TO_BAPIKNUMHS        = LT_BAPIKNUMHS
        TO_MEM_INITIAL       = LT_MEM_INITIAL
      EXCEPTIONS
        UPDATE_ERROR         = 1
        OTHERS               = 2.
  ENDLOOP.

  "$. ENDREGION 尾部冲突

ENDFUNCTION.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gavin_gxh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值