销售价格新增
同一价格类型的账户有如下情形
如果只是调用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.