![](https://community.sap.com/html/assets/img_tile-default.png)
LOOP AT gt_upload ASSIGNING <fs_gt_upload>.
lv_amount = <fs_gt_upload>-old_price +
<fs_gt_upload>-act .
READ TABLE lt_tcurc ASSIGNING <fs_lt_tcurc>
WITH KEY waers = <fs_gt_upload>-waers.
IF sy-subrc IS NOT INITIAL.
<fs_gt_upload>-icon = icon_cancel.
IF <fs_gt_upload>-waers IS NOT INITIAL.
<fs_gt_upload>-message = 'Invalid Currency'.
ELSE.
<fs_gt_upload>-message = 'Currency is not Filled'.
ENDIF.
ENDIF.
READ TABLE lt_marm ASSIGNING <fs_lt_marm>
WITH KEY matnr = <fs_gt_upload>-matnr
meinh = <fs_gt_upload>-kmein.
IF sy-subrc IS NOT INITIAL.
<fs_gt_upload>-icon = icon_cancel.
IF <fs_gt_upload>-kmein IS NOT INITIAL.
<fs_gt_upload>-message = 'Invalid UOM'.
ELSE.
<fs_gt_upload>-message = 'UOM is not Filled'.
ENDIF.
ENDIF.
READ TABLE lt_mara ASSIGNING <fs_lt_mara>
WITH KEY matnr = <fs_gt_upload>-matnr.
IF sy-subrc IS NOT INITIAL.
<fs_gt_upload>-icon = icon_cancel.
IF <fs_gt_upload>-matnr IS NOT INITIAL.
<fs_gt_upload>-message = 'Invalid Material'.
ELSE.
<fs_gt_upload>-message = 'Material is not Filled'.
ENDIF.
ENDIF.
READ TABLE lt_kna1 ASSIGNING <fs_lt_kna1>
WITH KEY kunnr = <fs_gt_upload>-kunnr.
IF sy-subrc IS NOT INITIAL.
<fs_gt_upload>-icon = icon_cancel.
IF <fs_gt_upload>-kunnr IS NOT INITIAL.
<fs_gt_upload>-message = 'Invalid Customer'.
ELSE.
<fs_gt_upload>-message = 'Customer is not Filled'.
ENDIF.
ENDIF.
READ TABLE lt_history ASSIGNING <fs_lt_history>
WITH KEY kschl = <fs_gt_upload>-kschl
vkorg = <fs_gt_upload>-vkorg
vtweg = <fs_gt_upload>-vtweg
kunnr = <fs_gt_upload>-kunnr
matnr = <fs_gt_upload>-matnr
effective_date = <fs_gt_upload>-effective_date
effective_time = <fs_gt_upload>-effective_time.
IF sy-subrc IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Record already exists in table ZSD_VK11_REASON.'.
ENDIF.
IF <fs_gt_upload>-kbetr IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Amount is not filled.'.
CONTINUE.
ENDIF.
IF <fs_gt_upload>-effective_date IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Effective Date is not filled.'.
CONTINUE.
ENDIF.
IF <fs_gt_upload>-datab IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Valid from is not filled.'.
CONTINUE.
ENDIF.
IF <fs_gt_upload>-datbi IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Valid to is not filled.'.
CONTINUE.
ENDIF.
IF <fs_gt_upload>-kschl IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Condition Type is not filled.'.
CONTINUE.
ENDIF.
IF <fs_gt_upload>-vkorg IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Sales Org is not filled.'.
CONTINUE.
ENDIF.
IF <fs_gt_upload>-vtweg IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Distribution Channel is not filled.'.
CONTINUE.
ENDIF.
IF <fs_gt_upload>-kunnr IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Customer is not filled.'.
CONTINUE.
ENDIF.
IF <fs_gt_upload>-matnr IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Material is not filled.'.
CONTINUE.
ENDIF.
IF lv_amount = <fs_gt_upload>-kbetr.
ELSE.
<fs_gt_upload>-icon = icon_cancel.
<fs_gt_upload>-message = 'Amount does not match Old Price + Price Change Components.'.
CONTINUE.
ENDIF.
CHECK <fs_gt_upload>-icon <> icon_cancel.
*1 Get all records before and into the current From/To
REFRESH: lt_a305[].
SELECT a305~kappl
a305~kschl
a305~vkorg
a305~vtweg
a305~kunnr
a305~matnr
a305~kfrst
a305~datbi
a305~datab
a305~kbstat
a305~knumh
konp~konwa
konp~kbetr
konp~kmein
konp~kpein
FROM a305
INNER JOIN konp ON konp~knumh = a305~knumh
APPENDING CORRESPONDING FIELDS OF TABLE lt_a305
WHERE a305~kappl = lcon_applicatio_v AND
a305~kschl = <fs_gt_upload>-kschl AND
a305~vkorg = <fs_gt_upload>-vkorg AND
a305~vtweg = <fs_gt_upload>-vtweg AND
a305~kunnr = <fs_gt_upload>-kunnr AND
a305~matnr = <fs_gt_upload>-matnr AND
a305~kfrst = lcon_kfrst_a AND
a305~datbi GE <fs_gt_upload>-datab AND
a305~datbi LE <fs_gt_upload>-datbi AND
a305~datab LT <fs_gt_upload>-datab.
LOOP AT lt_a305 ASSIGNING <fs_lt_a305>.
IF <fs_gt_upload>-icon <> icon_cancel.
ELSE.
EXIT.
ENDIF.
IF <fs_lt_a305>-kfrst = lcon_kfrst_a.
*1a Get all records before and into the current From/To:
* Delete the record
REFRESH: lt_bapicondct[],
lt_bapicondhd[],
lt_bapicondit[],
lt_bapicondqs[],
lt_bapicondvs[],
lte_bapiret2[],
lte_bapiknumhs[],
lte_mem_initial[].
CLEAR: ls_bapicondct,
ls_bapicondhd,
ls_bapicondit,
ls_bapicondqs,
ls_bapicondvs,
lse_bapiret2,
lse_bapiknumhs,
lse_mem_initial,
ls_varkey_a305_header,
ls_varkey_header,
ls_vardat_a305_header,
ls_vardat_header,
ls_varkey_item.
ls_bapicondct-operation = lcon_operation_003.
ls_bapicondct-cond_usage = lcon_cond_usage_a .
ls_bapicondct-table_no = lcon_table_no_305.
ls_varkey_a305_header-vkorg = <fs_lt_a305>-vkorg.
ls_varkey_a305_header-vtweg = <fs_lt_a305>-vtweg.
ls_varkey_a305_header-kunnr = <fs_lt_a305>-kunnr.
ls_varkey_a305_header-matnr = <fs_lt_a305>-matnr.
ls_varkey_a305_header-KFRST = <fs_lt_a305>-KFRST.
ls_varkey_header = ls_varkey_a305_header.
ls_vardat_a305_header-kbstat = <fs_lt_a305>-kbstat.
ls_vardat_header = ls_vardat_a305_header.
ls_bapicondct-cond_no = <fs_lt_a305>-knumh.
CLEAR: lv_knumh.
lv_knumh = ls_bapicondct-cond_no .
ls_bapicondct-applicatio = lcon_applicatio_v .
ls_bapicondct-cond_type = <fs_lt_a305>-kschl.
IF ls_bapicondct-cond_type IS INITIAL.
ls_bapicondct-cond_type = lcon_cond_type_pr00.
ENDIF.
ls_bapicondct-varkey = ls_varkey_header.
ls_bapicondct-vadat = ls_vardat_header.
ls_bapicondct-valid_to = <fs_lt_a305>-datbi. " lcon_valid_to.
ls_bapicondct-valid_from = <fs_lt_a305>-datab.
APPEND ls_bapicondct TO lt_bapicondct.
ls_bapicondhd-operation = ls_bapicondct-operation. "lcon_operation_009.
ls_bapicondhd-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
ls_bapicondhd-created_by = sy-uname.
ls_bapicondhd-creat_date = sy-datum.
ls_bapicondhd-cond_usage = lcon_cond_usage_a .
ls_bapicondhd-table_no = ls_bapicondct-table_no.
ls_bapicondhd-applicatio = lcon_applicatio_v .
ls_bapicondhd-cond_type = ls_bapicondct-cond_type.
ls_bapicondhd-varkey = ls_varkey_header.
ls_bapicondhd-vardate = ls_vardat_header.
ls_bapicondhd-valid_from = <fs_lt_a305>-datab.
ls_bapicondhd-valid_to = <fs_lt_a305>-datbi. " lcon_valid_to.
APPEND ls_bapicondhd TO lt_bapicondhd.
ls_bapicondit-operation = ls_bapicondct-operation. "lcon_operation_009.
ls_bapicondit-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
ls_bapicondit-cond_count = lcon_cond_count_i .
ls_bapicondit-applicatio = lcon_applicatio_v .
ls_bapicondit-cond_type = ls_bapicondct-cond_type.
* text_no
ls_bapicondit-scaletype = lcon_scale_type_c.
* scalebasin
* scale_qty
* unitmeasur
* measur_iso
* scale_val
* currenckey
* curren_iso
ls_bapicondit-calctypcon = lcon_calc_type_c.
ls_bapicondit-cond_value = <fs_lt_a305>-kbetr.
ls_bapicondit-condcurr = <fs_lt_a305>-konwa.
* ls_bapicondit-cond_iso
ls_bapicondit-cond_p_unt = <fs_lt_a305>-kpein.
ls_bapicondit-cond_unit = <fs_lt_a305>-kmein.
* conunitiso
* pricelevel
* numconvert
* denominato
* base_uom
* baseqtyiso
* lowerlimit
* upperlimit
* plcondval
* currency
* curr_iso
* condcurren
* isocurrenc
* plan_basis
* rate_unit
* exclusion
* customer
* vendor_no
* tax_code
* indidelete
* conditidx
* matlsettl
* accruals
* reb_retroa
* statofagre
* promot_no
* sales_deal
* salesquote
* add_val_dy
* fix_val_dy
* pmnttrms
* numborders
* minconbava
* maxconbava
* maxconval
* incr_scale
* pricscale
* relprcg
* promotion
* rebagreemt
* withtaxcod
* contract
* contractno
* flow_type
* indimatmai
ls_bapicondit-status = <fs_lt_a305>-KFRST.
* umsabst
* matlsettl_external
* matlsettl_guid
* matlsettl_version
APPEND ls_bapicondit TO lt_bapicondit.
refresh: db_xkondat[],
db_ykondat[],
db_xkonh[],
db_ykonh[],
db_xkonp[],
db_ykonp[],
db_xkonm[],
db_xkonw[],
db_ykonm[],
db_ykonw[].
select * from konh APPENDING CORRESPONDING FIELDS OF TABLE
db_ykonh where knumh = <fs_lt_a305>-knumh.
loop at db_ykonh ASSIGNING <fs_db_ykonh>.
<fs_db_ykonh>-updkz = 'U'.
ENDLOOP.
select * from konp APPENDING CORRESPONDING FIELDS OF TABLE
db_ykonp where knumh = <fs_lt_a305>-knumh.
loop at db_ykonp ASSIGNING <fs_db_ykonp>.
<fs_db_ykonp>-updkz = 'U'.
ENDLOOP.
CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
EXPORTING
* PI_INITIALMODE = ' '
* PI_BLOCKNUMBER =
pi_physical_deletion = lv_del
TABLES
ti_bapicondct = lt_bapicondct
ti_bapicondhd = lt_bapicondhd
ti_bapicondit = lt_bapicondit
ti_bapicondqs = lt_bapicondqs
ti_bapicondvs = lt_bapicondvs
to_bapiret2 = lte_bapiret2
to_bapiknumhs = lte_bapiknumhs
to_mem_initial = lte_mem_initial
EXCEPTIONS
update_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
select * from konh APPENDING CORRESPONDING FIELDS OF TABLE
db_xkonh where knumh = <fs_lt_a305>-knumh.
loop at db_xkonh ASSIGNING <fs_db_xkonh>.
<fs_db_xkonh>-updkz = 'U'.
ENDLOOP.
select * from konp APPENDING CORRESPONDING FIELDS OF TABLE
db_xkonp where knumh = <fs_lt_a305>-knumh.
loop at db_xkonp ASSIGNING <fs_db_xkonp>.
<fs_db_xkonp>-updkz = 'U'.
ENDLOOP.
if db_xkondat[] is INITIAL.
loop at db_xkonh.
db_xkondat-knumh = db_xkonh-knumh.
db_xkondat-DATAN = ls_bapicondhd-valid_from.
read TABLE db_ykonh with key knumh = db_xkonh-knumh.
if sy-subrc is INITIAL.
db_xkondat-datab = db_ykonh-DATAB.
db_xkondat-datbi = db_ykonh-DATBI.
db_xkondat-kz = db_ykonh-updkz.
append db_xkondat.
else.
db_xkondat-datab = db_xkonh-DATAB.
db_xkondat-datbi = db_xkonh-DATBI.
db_xkondat-kz = db_xkonh-updkz.
append db_xkondat.
endif.
ENDLOOP.
endif.
if db_ykondat[] is INITIAL.
loop at db_ykonh.
db_ykondat-knumh = db_ykonh-knumh.
db_ykondat-DATAN = db_ykonh-DATAB.
db_ykondat-datab = db_ykonh-DATAB.
db_ykondat-datbi = db_ykonh-DATBI.
db_ykondat-kz = db_ykonh-updkz.
append db_ykondat.
ENDLOOP.
endif.
* write change documents
CALL FUNCTION 'SD_CONDITION_CHANGE_DOCS_WRITE'
TABLES
p_xkondat = db_xkondat
p_ykondat = db_ykondat
p_xkonh = db_xkonh
p_ykonh = db_ykonh
p_xkonp = db_xkonp
p_ykonp = db_ykonp
p_xkonm = db_xkonm
p_xkonw = db_xkonw
p_ykonm = db_ykonm
p_ykonw = db_ykonw.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'E'.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ELSE.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'S' OR type = 'W'.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
ELSE.
<fs_gt_upload>-icon = icon_cancel.
ENDIF.
ENDIF.
ENDIF.
IF <fs_gt_upload>-icon <> icon_cancel.
ELSE.
EXIT.
ENDIF.
*1b Get all records before and into the current From/To:
* Change the record to = current From - 1.
IF <fs_lt_a305>-kfrst = lcon_kfrst_a.
REFRESH: lt_bapicondct[],
lt_bapicondhd[],
lt_bapicondit[],
lt_bapicondqs[],
lt_bapicondvs[],
lte_bapiret2[],
lte_bapiknumhs[],
lte_mem_initial[].
CLEAR: ls_bapicondct,
ls_bapicondhd,
ls_bapicondit,
ls_bapicondqs,
ls_bapicondvs,
lse_bapiret2,
lse_bapiknumhs,
lse_mem_initial,
ls_varkey_a305_header,
ls_varkey_header,
ls_vardat_a305_header,
ls_vardat_header,
ls_varkey_item.
ls_bapicondct-operation = lcon_operation_004. "lcon_operation_009.
ls_bapicondct-cond_usage = lcon_cond_usage_a .
ls_bapicondct-table_no = lcon_table_no_305.
ls_varkey_a305_header-vkorg = <fs_lt_a305>-vkorg.
ls_varkey_a305_header-vtweg = <fs_lt_a305>-vtweg.
ls_varkey_a305_header-kunnr = <fs_lt_a305>-kunnr.
ls_varkey_a305_header-matnr = <fs_lt_a305>-matnr.
ls_varkey_a305_header-kfrst = <fs_lt_a305>-kfrst.
ls_varkey_header = ls_varkey_a305_header.
ls_vardat_a305_header-kbstat = <fs_lt_a305>-kbstat.
ls_vardat_header = ls_vardat_a305_header.
ls_bapicondct-cond_no = <fs_lt_a305>-knumh.
CLEAR: lv_knumh.
lv_knumh = ls_bapicondct-cond_no .
ls_bapicondct-applicatio = lcon_applicatio_v .
ls_bapicondct-cond_type = <fs_lt_a305>-kschl.
IF ls_bapicondct-cond_type IS INITIAL.
ls_bapicondct-cond_type = lcon_cond_type_pr00.
ENDIF.
ls_bapicondct-varkey = ls_varkey_header.
ls_bapicondct-vadat = ls_vardat_header.
ls_bapicondct-valid_to = <fs_gt_upload>-datab - 1.
ls_bapicondct-valid_from = <fs_lt_a305>-datab.
APPEND ls_bapicondct TO lt_bapicondct.
ls_bapicondhd-operation = ls_bapicondct-operation. "lcon_operation_009.
ls_bapicondhd-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
ls_bapicondhd-created_by = sy-uname.
ls_bapicondhd-creat_date = sy-datum.
ls_bapicondhd-cond_usage = lcon_cond_usage_a .
ls_bapicondhd-table_no = ls_bapicondct-table_no.
ls_bapicondhd-applicatio = lcon_applicatio_v .
ls_bapicondhd-cond_type = ls_bapicondct-cond_type.
ls_bapicondhd-varkey = ls_varkey_header.
ls_bapicondhd-vardate = ls_vardat_header.
ls_bapicondhd-valid_from = <fs_gt_upload>-datab - 1.
ls_bapicondhd-valid_to = <fs_lt_a305>-datbi. " lcon_valid_to.
APPEND ls_bapicondhd TO lt_bapicondhd.
ls_bapicondit-operation = ls_bapicondct-operation. "lcon_operation_009.
ls_bapicondit-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
ls_bapicondit-cond_count = lcon_cond_count_i .
ls_bapicondit-applicatio = lcon_applicatio_v .
ls_bapicondit-cond_type = ls_bapicondct-cond_type.
* text_no
ls_bapicondit-scaletype = lcon_scale_type_c.
* scalebasin
* scale_qty
* unitmeasur
* measur_iso
* scale_val
* currenckey
* curren_iso
ls_bapicondit-calctypcon = lcon_calc_type_c.
ls_bapicondit-cond_value = <fs_lt_a305>-kbetr.
ls_bapicondit-condcurr = <fs_lt_a305>-konwa.
* ls_bapicondit-cond_iso
ls_bapicondit-cond_p_unt = <fs_lt_a305>-kpein.
ls_bapicondit-cond_unit = <fs_lt_a305>-kmein.
* conunitiso
* pricelevel
* numconvert
* denominato
* base_uom
* baseqtyiso
* lowerlimit
* upperlimit
* plcondval
* currency
* curr_iso
* condcurren
* isocurrenc
* plan_basis
* rate_unit
* exclusion
* customer
* vendor_no
* tax_code
* indidelete
* conditidx
* matlsettl
* accruals
* reb_retroa
* statofagre
* promot_no
* sales_deal
* salesquote
* add_val_dy
* fix_val_dy
* pmnttrms
* numborders
* minconbava
* maxconbava
* maxconval
* incr_scale
* pricscale
* relprcg
* promotion
* rebagreemt
* withtaxcod
* contract
* contractno
* flow_type
* indimatmai
ls_bapicondit-status = <fs_lt_a305>-kfrst.
* umsabst
* matlsettl_external
* matlsettl_guid
* matlsettl_version
APPEND ls_bapicondit TO lt_bapicondit.
refresh: db_xkondat[],
db_ykondat[],
db_xkonh[],
db_ykonh[],
db_xkonp[],
db_ykonp[],
db_xkonm[],
db_xkonw[],
db_ykonm[],
db_ykonw[].
select * from konh APPENDING CORRESPONDING FIELDS OF TABLE
db_ykonh where knumh = <fs_lt_a305>-knumh.
loop at db_ykonh ASSIGNING <fs_db_ykonh>.
<fs_db_ykonh>-updkz = 'U'.
ENDLOOP.
select * from konp APPENDING CORRESPONDING FIELDS OF TABLE
db_ykonp where knumh = <fs_lt_a305>-knumh.
loop at db_ykonp ASSIGNING <fs_db_ykonp>.
<fs_db_ykonp>-updkz = 'U'.
ENDLOOP.
CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
EXPORTING
* PI_INITIALMODE = ' '
* PI_BLOCKNUMBER =
pi_physical_deletion = lv_del
TABLES
ti_bapicondct = lt_bapicondct
ti_bapicondhd = lt_bapicondhd
ti_bapicondit = lt_bapicondit
ti_bapicondqs = lt_bapicondqs
ti_bapicondvs = lt_bapicondvs
to_bapiret2 = lte_bapiret2
to_bapiknumhs = lte_bapiknumhs
to_mem_initial = lte_mem_initial
EXCEPTIONS
update_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
select * from konh APPENDING CORRESPONDING FIELDS OF TABLE
db_xkonh where knumh = <fs_lt_a305>-knumh.
loop at db_xkonh ASSIGNING <fs_db_xkonh>.
<fs_db_xkonh>-updkz = 'U'.
ENDLOOP.
select * from konp APPENDING CORRESPONDING FIELDS OF TABLE
db_xkonp where knumh = <fs_lt_a305>-knumh.
loop at db_xkonp ASSIGNING <fs_db_xkonp>.
<fs_db_xkonp>-updkz = 'U'.
ENDLOOP.
if db_xkondat[] is INITIAL.
loop at db_xkonh.
db_xkondat-knumh = db_xkonh-knumh.
db_xkondat-DATAN = ls_bapicondhd-valid_from.
read TABLE db_ykonh with key knumh = db_xkonh-knumh.
if sy-subrc is INITIAL.
db_xkondat-datab = db_ykonh-DATAB.
db_xkondat-datbi = db_ykonh-DATBI.
db_xkondat-kz = db_ykonh-updkz.
append db_xkondat.
else.
db_xkondat-datab = db_xkonh-DATAB.
db_xkondat-datbi = db_xkonh-DATBI.
db_xkondat-kz = db_xkonh-updkz.
append db_xkondat.
endif.
ENDLOOP.
endif.
if db_ykondat[] is INITIAL.
loop at db_ykonh.
db_ykondat-knumh = db_ykonh-knumh.
db_ykondat-DATAN = db_ykonh-DATAB.
db_ykondat-datab = db_ykonh-DATAB.
db_ykondat-datbi = db_ykonh-DATBI.
db_ykondat-kz = db_ykonh-updkz.
append db_ykondat.
ENDLOOP.
endif.
* write change documents
CALL FUNCTION 'SD_CONDITION_CHANGE_DOCS_WRITE'
TABLES
p_xkondat = db_xkondat
p_ykondat = db_ykondat
p_xkonh = db_xkonh
p_ykonh = db_ykonh
p_xkonp = db_xkonp
p_ykonp = db_ykonp
p_xkonm = db_xkonm
p_xkonw = db_xkonw
p_ykonm = db_ykonm
p_ykonw = db_ykonw.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'E'.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ELSE.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'S' OR type = 'W'.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
ELSE.
<fs_gt_upload>-icon = icon_cancel.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
CHECK <fs_gt_upload>-icon <> icon_cancel.
*2 Get all records into the current From/To
REFRESH: lt_a305[].
SELECT a305~kappl
a305~kschl
a305~vkorg
a305~vtweg
a305~kunnr
a305~matnr
a305~kfrst
a305~datbi
a305~datab
a305~kbstat
a305~knumh
konp~konwa
konp~kbetr
konp~kmein
konp~kpein
FROM a305
INNER JOIN konp ON konp~knumh = a305~knumh
APPENDING CORRESPONDING FIELDS OF TABLE lt_a305
WHERE a305~kappl = lcon_applicatio_v AND
a305~kschl = <fs_gt_upload>-kschl AND
a305~vkorg = <fs_gt_upload>-vkorg AND
a305~vtweg = <fs_gt_upload>-vtweg AND
a305~kunnr = <fs_gt_upload>-kunnr AND
a305~matnr = <fs_gt_upload>-matnr AND
a305~kfrst = lcon_kfrst_a AND
a305~datbi LE <fs_gt_upload>-datbi AND
a305~datab GE <fs_gt_upload>-datab.
LOOP AT lt_a305 ASSIGNING <fs_lt_a305>.
IF <fs_gt_upload>-icon <> icon_cancel.
ELSE.
EXIT.
ENDIF.
IF <fs_lt_a305>-kfrst = lcon_kfrst_a.
*2a Get all records into the current From/To
* Delete the record
REFRESH: lt_bapicondct[],
lt_bapicondhd[],
lt_bapicondit[],
lt_bapicondqs[],
lt_bapicondvs[],
lte_bapiret2[],
lte_bapiknumhs[],
lte_mem_initial[].
CLEAR: ls_bapicondct,
ls_bapicondhd,
ls_bapicondit,
ls_bapicondqs,
ls_bapicondvs,
lse_bapiret2,
lse_bapiknumhs,
lse_mem_initial,
ls_varkey_a305_header,
ls_varkey_header,
ls_vardat_a305_header,
ls_vardat_header,
ls_varkey_item.
ls_bapicondct-operation = lcon_operation_003.
ls_bapicondct-cond_usage = lcon_cond_usage_a .
ls_bapicondct-table_no = lcon_table_no_305.
ls_varkey_a305_header-vkorg = <fs_lt_a305>-vkorg.
ls_varkey_a305_header-vtweg = <fs_lt_a305>-vtweg.
ls_varkey_a305_header-kunnr = <fs_lt_a305>-kunnr.
ls_varkey_a305_header-matnr = <fs_lt_a305>-matnr.
ls_varkey_a305_header-kfrst = <fs_lt_a305>-kfrst.
ls_varkey_header = ls_varkey_a305_header.
ls_vardat_a305_header-kbstat = <fs_lt_a305>-kbstat.
ls_vardat_header = ls_vardat_a305_header.
ls_bapicondct-cond_no = <fs_lt_a305>-knumh.
CLEAR: lv_knumh.
lv_knumh = ls_bapicondct-cond_no .
ls_bapicondct-applicatio = lcon_applicatio_v .
ls_bapicondct-cond_type = <fs_lt_a305>-kschl.
IF ls_bapicondct-cond_type IS INITIAL.
ls_bapicondct-cond_type = lcon_cond_type_pr00.
ENDIF.
ls_bapicondct-varkey = ls_varkey_header.
ls_bapicondct-vadat = ls_vardat_header.
ls_bapicondct-valid_to = <fs_lt_a305>-datbi. " lcon_valid_to.
ls_bapicondct-valid_from = <fs_lt_a305>-datab.
APPEND ls_bapicondct TO lt_bapicondct.
ls_bapicondhd-operation = ls_bapicondct-operation. "lcon_operation_009.
ls_bapicondhd-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
ls_bapicondhd-created_by = sy-uname.
ls_bapicondhd-creat_date = sy-datum.
ls_bapicondhd-cond_usage = lcon_cond_usage_a .
ls_bapicondhd-table_no = ls_bapicondct-table_no.
ls_bapicondhd-applicatio = lcon_applicatio_v .
ls_bapicondhd-cond_type = ls_bapicondct-cond_type.
ls_bapicondhd-varkey = ls_varkey_header.
ls_bapicondhd-vardate = ls_vardat_header.
ls_bapicondhd-valid_from = <fs_lt_a305>-datab.
ls_bapicondhd-valid_to = <fs_lt_a305>-datbi. " lcon_valid_to.
APPEND ls_bapicondhd TO lt_bapicondhd.
ls_bapicondit-operation = ls_bapicondct-operation. "lcon_operation_009.
ls_bapicondit-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
ls_bapicondit-cond_count = lcon_cond_count_i .
ls_bapicondit-applicatio = lcon_applicatio_v .
ls_bapicondit-cond_type = ls_bapicondct-cond_type.
* text_no
ls_bapicondit-scaletype = lcon_scale_type_c.
* scalebasin
* scale_qty
* unitmeasur
* measur_iso
* scale_val
* currenckey
* curren_iso
ls_bapicondit-calctypcon = lcon_calc_type_c.
ls_bapicondit-cond_value = <fs_lt_a305>-kbetr.
ls_bapicondit-condcurr = <fs_lt_a305>-konwa.
* ls_bapicondit-cond_iso
ls_bapicondit-cond_p_unt = <fs_lt_a305>-kpein.
ls_bapicondit-cond_unit = <fs_lt_a305>-kmein.
* conunitiso
* pricelevel
* numconvert
* denominato
* base_uom
* baseqtyiso
* lowerlimit
* upperlimit
* plcondval
* currency
* curr_iso
* condcurren
* isocurrenc
* plan_basis
* rate_unit
* exclusion
* customer
* vendor_no
* tax_code
* indidelete
* conditidx
* matlsettl
* accruals
* reb_retroa
* statofagre
* promot_no
* sales_deal
* salesquote
* add_val_dy
* fix_val_dy
* pmnttrms
* numborders
* minconbava
* maxconbava
* maxconval
* incr_scale
* pricscale
* relprcg
* promotion
* rebagreemt
* withtaxcod
* contract
* contractno
* flow_type
* indimatmai
ls_bapicondit-status = <fs_lt_a305>-kfrst.
* umsabst
* matlsettl_external
* matlsettl_guid
* matlsettl_version
APPEND ls_bapicondit TO lt_bapicondit.
refresh: db_xkondat[],
db_ykondat[],
db_xkonh[],
db_ykonh[],
db_xkonp[],
db_ykonp[],
db_xkonm[],
db_xkonw[],
db_ykonm[],
db_ykonw[].
select * from konh APPENDING CORRESPONDING FIELDS OF TABLE
db_ykonh where knumh = <fs_lt_a305>-knumh.
loop at db_ykonh ASSIGNING <fs_db_ykonh>.
<fs_db_ykonh>-updkz = 'U'.
ENDLOOP.
select * from konp APPENDING CORRESPONDING FIELDS OF TABLE
db_ykonp where knumh = <fs_lt_a305>-knumh.
loop at db_ykonp ASSIGNING <fs_db_ykonp>.
<fs_db_ykonp>-updkz = 'U'.
ENDLOOP.
CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
EXPORTING
* PI_INITIALMODE = ' '
* PI_BLOCKNUMBER =
pi_physical_deletion = lv_del
TABLES
ti_bapicondct = lt_bapicondct
ti_bapicondhd = lt_bapicondhd
ti_bapicondit = lt_bapicondit
ti_bapicondqs = lt_bapicondqs
ti_bapicondvs = lt_bapicondvs
to_bapiret2 = lte_bapiret2
to_bapiknumhs = lte_bapiknumhs
to_mem_initial = lte_mem_initial
EXCEPTIONS
update_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
select * from konh APPENDING CORRESPONDING FIELDS OF TABLE
db_xkonh where knumh = <fs_lt_a305>-knumh.
loop at db_xkonh ASSIGNING <fs_db_xkonh>.
<fs_db_xkonh>-updkz = 'U'.
ENDLOOP.
select * from konp APPENDING CORRESPONDING FIELDS OF TABLE
db_xkonp where knumh = <fs_lt_a305>-knumh.
loop at db_xkonp ASSIGNING <fs_db_xkonp>.
<fs_db_xkonp>-updkz = 'U'.
ENDLOOP.
if db_xkondat[] is INITIAL.
loop at db_xkonh.
db_xkondat-knumh = db_xkonh-knumh.
db_xkondat-DATAN = ls_bapicondhd-valid_from.
read TABLE db_ykonh with key knumh = db_xkonh-knumh.
if sy-subrc is INITIAL.
db_xkondat-datab = db_ykonh-DATAB.
db_xkondat-datbi = db_ykonh-DATBI.
db_xkondat-kz = db_ykonh-updkz.
append db_xkondat.
else.
db_xkondat-datab = db_xkonh-DATAB.
db_xkondat-datbi = db_xkonh-DATBI.
db_xkondat-kz = db_xkonh-updkz.
append db_xkondat.
endif.
ENDLOOP.
endif.
if db_ykondat[] is INITIAL.
loop at db_ykonh.
db_ykondat-knumh = db_ykonh-knumh.
db_ykondat-DATAN = db_ykonh-DATAB.
db_ykondat-datab = db_ykonh-DATAB.
db_ykondat-datbi = db_ykonh-DATBI.
db_ykondat-kz = db_ykonh-updkz.
append db_ykondat.
ENDLOOP.
endif.
* write change documents
CALL FUNCTION 'SD_CONDITION_CHANGE_DOCS_WRITE'
TABLES
p_xkondat = db_xkondat
p_ykondat = db_ykondat
p_xkonh = db_xkonh
p_ykonh = db_ykonh
p_xkonp = db_xkonp
p_ykonp = db_ykonp
p_xkonm = db_xkonm
p_xkonw = db_xkonw
p_ykonm = db_ykonm
p_ykonw = db_ykonw.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'E'.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ELSE.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'S' OR type = 'W'.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
ELSE.
<fs_gt_upload>-icon = icon_cancel.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
CHECK <fs_gt_upload>-icon <> icon_cancel.
*3 Get all records where from in the current From/To
* Delete the record
REFRESH: lt_a305[].
SELECT a305~kappl
a305~kschl
a305~vkorg
a305~vtweg
a305~kunnr
a305~matnr
a305~kfrst
a305~datbi
a305~datab
a305~kbstat
a305~knumh
konp~konwa
konp~kbetr
konp~kmein
konp~kpein
FROM a305
INNER JOIN konp ON konp~knumh = a305~knumh
APPENDING CORRESPONDING FIELDS OF TABLE lt_a305
WHERE a305~kappl = lcon_applicatio_v AND
a305~kschl = <fs_gt_upload>-kschl AND
a305~vkorg = <fs_gt_upload>-vkorg AND
a305~vtweg = <fs_gt_upload>-vtweg AND
a305~kunnr = <fs_gt_upload>-kunnr AND
a305~matnr = <fs_gt_upload>-matnr AND
a305~kfrst = lcon_kfrst_a AND
a305~datbi GT <fs_gt_upload>-datab AND
a305~datab GE <fs_gt_upload>-datab AND
a305~datab LE <fs_gt_upload>-datbi .
LOOP AT lt_a305 ASSIGNING <fs_lt_a305>.
IF <fs_gt_upload>-icon <> icon_cancel.
ELSE.
EXIT.
ENDIF.
IF <fs_lt_a305>-kfrst = lcon_kfrst_a.
*3 Get all records where from in the current From/To
* Delete
* REFRESH: lt_bapicondct[],
* lt_bapicondhd[],
* lt_bapicondit[],
* lt_bapicondqs[],
* lt_bapicondvs[],
* lte_bapiret2[],
* lte_bapiknumhs[],
* lte_mem_initial[].
*
* CLEAR: ls_bapicondct,
* ls_bapicondhd,
* ls_bapicondit,
* ls_bapicondqs,
* ls_bapicondvs,
* lse_bapiret2,
* lse_bapiknumhs,
* lse_mem_initial,
* ls_varkey_a305_header,
* ls_varkey_header,
* ls_vardat_a305_header,
* ls_vardat_header,
* ls_varkey_item.
* ls_bapicondct-operation = lcon_operation_003.
* ls_bapicondct-cond_usage = lcon_cond_usage_a .
* ls_bapicondct-table_no = lcon_table_no_305.
* ls_varkey_a305_header-vkorg = <fs_lt_a305>-vkorg.
* ls_varkey_a305_header-vtweg = <fs_lt_a305>-vtweg.
* ls_varkey_a305_header-kunnr = <fs_lt_a305>-kunnr.
* ls_varkey_a305_header-matnr = <fs_lt_a305>-matnr.
* ls_varkey_a305_header-KFRST = <fs_lt_a305>-KFRST.
* ls_varkey_header = ls_varkey_a305_header.
* ls_vardat_a305_header-kbstat = <fs_lt_a305>-kbstat.
* ls_vardat_header = ls_vardat_a305_header.
* ls_bapicondct-cond_no = <fs_lt_a305>-knumh.
*
*
* CLEAR: lv_knumh.
* lv_knumh = ls_bapicondct-cond_no .
*
* ls_bapicondct-applicatio = lcon_applicatio_v .
* ls_bapicondct-cond_type = <fs_lt_a305>-kschl.
* IF ls_bapicondct-cond_type IS INITIAL.
* ls_bapicondct-cond_type = lcon_cond_type_pr00.
* ENDIF.
*
* ls_bapicondct-varkey = ls_varkey_header.
* ls_bapicondct-vadat = ls_vardat_header.
* ls_bapicondct-valid_to = <fs_lt_a305>-datbi. " lcon_valid_to.
* ls_bapicondct-valid_from = <fs_lt_a305>-datab.
* APPEND ls_bapicondct TO lt_bapicondct.
*
* ls_bapicondhd-operation = ls_bapicondct-operation. "lcon_operation_009.
* ls_bapicondhd-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
* ls_bapicondhd-created_by = sy-uname.
* ls_bapicondhd-creat_date = sy-datum.
* ls_bapicondhd-cond_usage = lcon_cond_usage_a .
* ls_bapicondhd-table_no = ls_bapicondct-table_no.
* ls_bapicondhd-applicatio = lcon_applicatio_v .
* ls_bapicondhd-cond_type = ls_bapicondct-cond_type.
* ls_bapicondhd-varkey = ls_varkey_header.
* ls_bapicondhd-vardate = ls_vardat_header.
* ls_bapicondhd-valid_from = <fs_lt_a305>-datab.
* ls_bapicondhd-valid_to = <fs_lt_a305>-datbi. " lcon_valid_to.
* APPEND ls_bapicondhd TO lt_bapicondhd.
*
* ls_bapicondit-operation = ls_bapicondct-operation. "lcon_operation_009.
* ls_bapicondit-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
* ls_bapicondit-cond_count = lcon_cond_count_i .
* ls_bapicondit-applicatio = lcon_applicatio_v .
* ls_bapicondit-cond_type = ls_bapicondct-cond_type.
** text_no
* ls_bapicondit-scaletype = lcon_scale_type_c.
** scalebasin
** scale_qty
** unitmeasur
** measur_iso
** scale_val
** currenckey
** curren_iso
* ls_bapicondit-calctypcon = lcon_calc_type_c.
* ls_bapicondit-cond_value = <fs_lt_a305>-kbetr.
* ls_bapicondit-condcurr = <fs_lt_a305>-konwa.
** ls_bapicondit-cond_iso
* ls_bapicondit-cond_p_unt = <fs_lt_a305>-kpein.
* ls_bapicondit-cond_unit = <fs_lt_a305>-kmein.
** conunitiso
** pricelevel
** numconvert
** denominato
** base_uom
** baseqtyiso
** lowerlimit
** upperlimit
** plcondval
** currency
** curr_iso
** condcurren
** isocurrenc
** plan_basis
** rate_unit
** exclusion
** customer
** vendor_no
** tax_code
** indidelete
** conditidx
** matlsettl
** accruals
** reb_retroa
** statofagre
** promot_no
** sales_deal
** salesquote
** add_val_dy
** fix_val_dy
** pmnttrms
** numborders
** minconbava
** maxconbava
** maxconval
** incr_scale
** pricscale
** relprcg
** promotion
** rebagreemt
** withtaxcod
** contract
** contractno
** flow_type
** indimatmai
* ls_bapicondit-status = <fs_lt_a305>-KFRST.
** umsabst
** matlsettl_external
** matlsettl_guid
** matlsettl_version
*
* APPEND ls_bapicondit TO lt_bapicondit.
*
* CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
* EXPORTING
** PI_INITIALMODE = ' '
** PI_BLOCKNUMBER =
* pi_physical_deletion = lv_del
* TABLES
* ti_bapicondct = lt_bapicondct
* ti_bapicondhd = lt_bapicondhd
* ti_bapicondit = lt_bapicondit
* ti_bapicondqs = lt_bapicondqs
* ti_bapicondvs = lt_bapicondvs
* to_bapiret2 = lte_bapiret2
* to_bapiknumhs = lte_bapiknumhs
* to_mem_initial = lte_mem_initial
* EXCEPTIONS
* update_error = 1
* OTHERS = 2.
* IF sy-subrc <> 0.
** Implement suitable error handling here
* ENDIF.
* LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
* WHERE type = 'E'.
* EXIT.
* ENDLOOP.
* IF sy-subrc IS INITIAL.
* <fs_gt_upload>-icon = icon_cancel.
* CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
** IMPORTING
** RETURN =
* .
* ELSE.
*
* LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
* WHERE type = 'S' OR type = 'W'.
* EXIT.
* ENDLOOP.
* IF sy-subrc IS INITIAL.
** CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
** EXPORTING
** wait = 'X'.
* ELSE.
* <fs_gt_upload>-icon = icon_cancel.
* ENDIF.
* ENDIF.
ENDIF.
IF <fs_gt_upload>-icon <> icon_cancel.
ELSE.
EXIT.
ENDIF.
IF <fs_lt_a305>-kfrst = lcon_kfrst_a.
*3 Get all records where from in the current From/To
* From = current To + 1.
REFRESH: lt_bapicondct[],
lt_bapicondhd[],
lt_bapicondit[],
lt_bapicondqs[],
lt_bapicondvs[],
lte_bapiret2[],
lte_bapiknumhs[],
lte_mem_initial[].
CLEAR: ls_bapicondct,
ls_bapicondhd,
ls_bapicondit,
ls_bapicondqs,
ls_bapicondvs,
lse_bapiret2,
lse_bapiknumhs,
lse_mem_initial,
ls_varkey_a305_header,
ls_varkey_header,
ls_vardat_a305_header,
ls_vardat_header,
ls_varkey_item.
ls_bapicondct-operation = lcon_operation_004. "lcon_operation_009.
ls_bapicondct-cond_usage = lcon_cond_usage_a .
ls_bapicondct-table_no = lcon_table_no_305.
ls_varkey_a305_header-vkorg = <fs_lt_a305>-vkorg.
ls_varkey_a305_header-vtweg = <fs_lt_a305>-vtweg.
ls_varkey_a305_header-kunnr = <fs_lt_a305>-kunnr.
ls_varkey_a305_header-matnr = <fs_lt_a305>-matnr.
ls_varkey_a305_header-kfrst = <fs_lt_a305>-kfrst.
ls_varkey_header = ls_varkey_a305_header.
ls_vardat_a305_header-kbstat = <fs_lt_a305>-kbstat.
ls_vardat_header = ls_vardat_a305_header.
ls_bapicondct-cond_no = <fs_lt_a305>-knumh.
CLEAR: lv_knumh.
lv_knumh = ls_bapicondct-cond_no .
ls_bapicondct-applicatio = lcon_applicatio_v .
ls_bapicondct-cond_type = <fs_lt_a305>-kschl.
IF ls_bapicondct-cond_type IS INITIAL.
ls_bapicondct-cond_type = lcon_cond_type_pr00.
ENDIF.
ls_bapicondct-varkey = ls_varkey_header.
ls_bapicondct-vadat = ls_vardat_header.
ls_bapicondct-valid_to = <fs_lt_a305>-datbi.
ls_bapicondct-valid_from = <fs_gt_upload>-datbi + 1.
APPEND ls_bapicondct TO lt_bapicondct.
ls_bapicondhd-operation = ls_bapicondct-operation. "lcon_operation_009.
ls_bapicondhd-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
ls_bapicondhd-created_by = sy-uname.
ls_bapicondhd-creat_date = sy-datum.
ls_bapicondhd-cond_usage = lcon_cond_usage_a .
ls_bapicondhd-table_no = ls_bapicondct-table_no.
ls_bapicondhd-applicatio = lcon_applicatio_v .
ls_bapicondhd-cond_type = ls_bapicondct-cond_type.
ls_bapicondhd-varkey = ls_varkey_header.
ls_bapicondhd-vardate = ls_vardat_header.
ls_bapicondhd-valid_from = <fs_lt_a305>-datbi.
ls_bapicondhd-valid_to = <fs_gt_upload>-datbi + 1.
APPEND ls_bapicondhd TO lt_bapicondhd.
ls_bapicondit-operation = ls_bapicondct-operation. "lcon_operation_009.
ls_bapicondit-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
ls_bapicondit-cond_count = lcon_cond_count_i .
ls_bapicondit-applicatio = lcon_applicatio_v .
ls_bapicondit-cond_type = ls_bapicondct-cond_type.
* text_no
ls_bapicondit-scaletype = lcon_scale_type_c.
* scalebasin
* scale_qty
* unitmeasur
* measur_iso
* scale_val
* currenckey
* curren_iso
ls_bapicondit-calctypcon = lcon_calc_type_c.
ls_bapicondit-cond_value = <fs_lt_a305>-kbetr.
ls_bapicondit-condcurr = <fs_lt_a305>-konwa.
* ls_bapicondit-cond_iso
ls_bapicondit-cond_p_unt = <fs_lt_a305>-kpein.
ls_bapicondit-cond_unit = <fs_lt_a305>-kmein.
* conunitiso
* pricelevel
* numconvert
* denominato
* base_uom
* baseqtyiso
* lowerlimit
* upperlimit
* plcondval
* currency
* curr_iso
* condcurren
* isocurrenc
* plan_basis
* rate_unit
* exclusion
* customer
* vendor_no
* tax_code
* indidelete
* conditidx
* matlsettl
* accruals
* reb_retroa
* statofagre
* promot_no
* sales_deal
* salesquote
* add_val_dy
* fix_val_dy
* pmnttrms
* numborders
* minconbava
* maxconbava
* maxconval
* incr_scale
* pricscale
* relprcg
* promotion
* rebagreemt
* withtaxcod
* contract
* contractno
* flow_type
* indimatmai
ls_bapicondit-status = <fs_lt_a305>-kfrst.
* umsabst
* matlsettl_external
* matlsettl_guid
* matlsettl_version
APPEND ls_bapicondit TO lt_bapicondit.
refresh: db_xkondat[],
db_ykondat[],
db_xkonh[],
db_ykonh[],
db_xkonp[],
db_ykonp[],
db_xkonm[],
db_xkonw[],
db_ykonm[],
db_ykonw[].
select * from konh APPENDING CORRESPONDING FIELDS OF TABLE
db_ykonh where knumh = <fs_lt_a305>-knumh.
loop at db_ykonh ASSIGNING <fs_db_ykonh>.
<fs_db_ykonh>-updkz = 'U'.
ENDLOOP.
select * from konp APPENDING CORRESPONDING FIELDS OF TABLE
db_ykonp where knumh = <fs_lt_a305>-knumh.
loop at db_ykonp ASSIGNING <fs_db_ykonp>.
<fs_db_ykonp>-updkz = 'U'.
ENDLOOP.
CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
EXPORTING
* PI_INITIALMODE = ' '
* PI_BLOCKNUMBER =
pi_physical_deletion = lv_del
TABLES
ti_bapicondct = lt_bapicondct
ti_bapicondhd = lt_bapicondhd
ti_bapicondit = lt_bapicondit
ti_bapicondqs = lt_bapicondqs
ti_bapicondvs = lt_bapicondvs
to_bapiret2 = lte_bapiret2
to_bapiknumhs = lte_bapiknumhs
to_mem_initial = lte_mem_initial
EXCEPTIONS
update_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
select * from konh APPENDING CORRESPONDING FIELDS OF TABLE
db_xkonh where knumh = <fs_lt_a305>-knumh.
loop at db_xkonh ASSIGNING <fs_db_xkonh>.
<fs_db_xkonh>-updkz = 'U'.
ENDLOOP.
select * from konp APPENDING CORRESPONDING FIELDS OF TABLE
db_xkonp where knumh = <fs_lt_a305>-knumh.
loop at db_xkonp ASSIGNING <fs_db_xkonp>.
<fs_db_xkonp>-updkz = 'U'.
ENDLOOP.
if db_xkondat[] is INITIAL.
loop at db_xkonh.
db_xkondat-knumh = db_xkonh-knumh.
db_xkondat-DATAN = ls_bapicondhd-valid_from.
read TABLE db_ykonh with key knumh = db_xkonh-knumh.
if sy-subrc is INITIAL.
db_xkondat-datab = db_ykonh-DATAB.
db_xkondat-datbi = db_ykonh-DATBI.
db_xkondat-kz = db_ykonh-updkz.
append db_xkondat.
else.
db_xkondat-datab = db_xkonh-DATAB.
db_xkondat-datbi = db_xkonh-DATBI.
db_xkondat-kz = db_xkonh-updkz.
append db_xkondat.
endif.
ENDLOOP.
endif.
if db_ykondat[] is INITIAL.
loop at db_ykonh.
db_ykondat-knumh = db_ykonh-knumh.
db_ykondat-DATAN = db_ykonh-DATAB.
db_ykondat-datab = db_ykonh-DATAB.
db_ykondat-datbi = db_ykonh-DATBI.
db_ykondat-kz = db_ykonh-updkz.
append db_ykondat.
ENDLOOP.
endif.
* write change documents
CALL FUNCTION 'SD_CONDITION_CHANGE_DOCS_WRITE'
TABLES
p_xkondat = db_xkondat
p_ykondat = db_ykondat
p_xkonh = db_xkonh
p_ykonh = db_ykonh
p_xkonp = db_xkonp
p_ykonp = db_ykonp
p_xkonm = db_xkonm
p_xkonw = db_xkonw
p_ykonm = db_ykonm
p_ykonw = db_ykonw.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'E'.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ELSE.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'S' OR type = 'W'.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
ELSE.
<fs_gt_upload>-icon = icon_cancel.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
CHECK <fs_gt_upload>-icon <> icon_cancel.
*Finally create current condition
REFRESH: lt_bapicondct[],
lt_bapicondhd[],
lt_bapicondit[],
lt_bapicondqs[],
lt_bapicondvs[],
lte_bapiret2[],
lte_bapiknumhs[],
lte_mem_initial[].
CLEAR: ls_bapicondct,
ls_bapicondhd,
ls_bapicondit,
ls_bapicondqs,
ls_bapicondvs,
lse_bapiret2,
lse_bapiknumhs,
lse_mem_initial,
ls_varkey_a305_header,
ls_varkey_header,
ls_vardat_a305_header,
ls_vardat_header,
ls_varkey_item.
ls_bapicondct-operation = lcon_operation_009.
ls_bapicondct-cond_usage = lcon_cond_usage_a .
ls_bapicondct-table_no = lcon_table_no_305.
ls_varkey_a305_header-vkorg = <fs_gt_upload>-vkorg.
ls_varkey_a305_header-vtweg = <fs_gt_upload>-vtweg.
ls_varkey_a305_header-kunnr = <fs_gt_upload>-kunnr.
ls_varkey_a305_header-matnr = <fs_gt_upload>-matnr.
ls_varkey_a305_header-kfrst = lcon_kfrst_a .
ls_varkey_header = ls_varkey_a305_header.
ls_vardat_a305_header-kbstat = lcon_kbstat_1.
ls_vardat_header = ls_vardat_a305_header.
ls_bapicondct-cond_no = lcon_knumh_i .
IF p_test IS NOT INITIAL.
ls_bapicondct-cond_no = lcon_knumh_test .
ENDIF.
CLEAR: lv_knumh.
lv_knumh = ls_bapicondct-cond_no .
ls_bapicondct-applicatio = lcon_applicatio_v .
ls_bapicondct-cond_type = <fs_gt_upload>-kschl.
IF ls_bapicondct-cond_type IS INITIAL.
ls_bapicondct-cond_type = lcon_cond_type_pr00.
ENDIF.
ls_bapicondct-varkey = ls_varkey_header.
ls_bapicondct-vadat = ls_vardat_header.
ls_bapicondct-valid_to = <fs_gt_upload>-datbi. " lcon_valid_to.
ls_bapicondct-valid_from = <fs_gt_upload>-datab.
APPEND ls_bapicondct TO lt_bapicondct.
ls_bapicondhd-operation = ls_bapicondct-operation. "lcon_operation_009.
ls_bapicondhd-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
ls_bapicondhd-created_by = sy-uname.
ls_bapicondhd-creat_date = sy-datum.
ls_bapicondhd-cond_usage = lcon_cond_usage_a .
ls_bapicondhd-table_no = ls_bapicondct-table_no.
ls_bapicondhd-applicatio = lcon_applicatio_v .
ls_bapicondhd-cond_type = ls_bapicondct-cond_type.
ls_bapicondhd-varkey = ls_varkey_header.
ls_bapicondhd-vardate = ls_vardat_header.
ls_bapicondhd-valid_from = <fs_gt_upload>-datab.
ls_bapicondhd-valid_to = <fs_gt_upload>-datbi. " lcon_valid_to.
APPEND ls_bapicondhd TO lt_bapicondhd.
ls_bapicondit-operation = ls_bapicondct-operation. "lcon_operation_009.
ls_bapicondit-cond_no = ls_bapicondct-cond_no. "lcon_knumh_i .
ls_bapicondit-cond_count = lcon_cond_count_i .
ls_bapicondit-applicatio = lcon_applicatio_v .
ls_bapicondit-cond_type = ls_bapicondct-cond_type.
* text_no
ls_bapicondit-scaletype = lcon_scale_type_c.
* scalebasin
* scale_qty
* unitmeasur
* measur_iso
* scale_val
* currenckey
* curren_iso
ls_bapicondit-calctypcon = lcon_calc_type_c.
ls_bapicondit-cond_value = <fs_gt_upload>-kbetr.
ls_bapicondit-condcurr = <fs_gt_upload>-waers.
* ls_bapicondit-cond_iso
ls_bapicondit-cond_p_unt = <fs_gt_upload>-kpein.
ls_bapicondit-cond_unit = <fs_gt_upload>-kmein.
* conunitiso
* pricelevel
* numconvert
* denominato
* base_uom
* baseqtyiso
* lowerlimit
* upperlimit
* plcondval
* currency
* curr_iso
* condcurren
* isocurrenc
* plan_basis
* rate_unit
* exclusion
* customer
* vendor_no
* tax_code
* indidelete
* conditidx
* matlsettl
* accruals
* reb_retroa
* statofagre
* promot_no
* sales_deal
* salesquote
* add_val_dy
* fix_val_dy
* pmnttrms
* numborders
* minconbava
* maxconbava
* maxconval
* incr_scale
* pricscale
* relprcg
* promotion
* rebagreemt
* withtaxcod
* contract
* contractno
* flow_type
* indimatmai
ls_bapicondit-status = lcon_kfrst_a .
* umsabst
* matlsettl_external
* matlsettl_guid
* matlsettl_version
APPEND ls_bapicondit TO lt_bapicondit.
refresh: db_xkondat[],
db_ykondat[],
db_xkonh[],
db_ykonh[],
db_xkonp[],
db_ykonp[],
db_xkonm[],
db_xkonw[],
db_ykonm[],
db_ykonw[].
* select * from konh APPENDING CORRESPONDING FIELDS OF TABLE
* db_ykonh where knumh = <fs_lt_a305>-knumh.
* loop at db_ykonh ASSIGNING <fs_db_ykonh>.
* <fs_db_ykonh>-updkz = 'I'.
* ENDLOOP.
*
* select * from konp APPENDING CORRESPONDING FIELDS OF TABLE
* db_ykonp where knumh = <fs_lt_a305>-knumh.
CALL FUNCTION 'BAPI_PRICES_CONDITIONS'
EXPORTING
* PI_INITIALMODE = ' '
* PI_BLOCKNUMBER =
pi_physical_deletion = lv_del
TABLES
ti_bapicondct = lt_bapicondct
ti_bapicondhd = lt_bapicondhd
ti_bapicondit = lt_bapicondit
ti_bapicondqs = lt_bapicondqs
ti_bapicondvs = lt_bapicondvs
to_bapiret2 = lte_bapiret2
to_bapiknumhs = lte_bapiknumhs
to_mem_initial = lte_mem_initial
EXCEPTIONS
update_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
clear lv_knumh_saved.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'S'.
lv_knumh_saved = <fs_lte_bapiret2>-message_v1.
exit.
ENDLOOP.
clear db_ykonp.
append db_ykonp.
loop at db_ykonp ASSIGNING <fs_db_ykonp>.
<fs_db_ykonp>-knumh = lv_knumh_saved.
ENDLOOP.
select * from konh APPENDING CORRESPONDING FIELDS OF TABLE
db_xkonh where knumh = lv_knumh_saved.
loop at db_xkonh ASSIGNING <fs_db_xkonh>.
<fs_db_xkonh>-updkz = 'I'.
ENDLOOP.
select * from konp APPENDING CORRESPONDING FIELDS OF TABLE
db_xkonp where knumh = lv_knumh_saved.
loop at db_xkonp ASSIGNING <fs_db_xkonp>.
<fs_db_xkonp>-updkz = 'I'.
ENDLOOP.
loop at db_ykonp ASSIGNING <fs_db_ykonp>.
READ TABLE db_xkonp ASSIGNING <fs_db_xkonp>
with key knumh = <fs_db_ykonp>-knumh.
if sy-subrc is INITIAL.
<fs_db_ykonp>-MANDT = <fs_db_xkonp>-mandt.
<fs_db_ykonp>-KNUMH = <fs_db_xkonp>-KNUMH.
<fs_db_ykonp>-KOPOS = <fs_db_xkonp>-kopos.
<fs_db_ykonp>-KAPPL = <fs_db_xkonp>-kappl.
<fs_db_ykonp>-KSCHL = <fs_db_xkonp>-kschl.
<fs_db_ykonp>-STFKZ = <fs_db_xkonp>-stfkz.
<fs_db_ykonp>-KRECH = <fs_db_xkonp>-krech.
<fs_db_ykonp>-KWAEH = <fs_db_xkonp>-kwaeh.
<fs_db_ykonp>-ZAEHK_IND = <fs_db_xkonp>-ZAEHK_IND.
<fs_db_ykonp>-RV13ABKONW = <fs_db_xkonp>-RV13ABKONW.
<fs_db_ykonp>-RV13AKONWA = <fs_db_xkonp>-RV13AKONWA .
<fs_db_ykonp>-UPDKZ = <fs_db_xkonp>-UPDKZ.
endif.
ENDLOOP.
if db_xkondat[] is INITIAL.
loop at db_xkonh.
db_xkondat-knumh = db_xkonh-knumh.
db_xkondat-DATAN = ls_bapicondhd-valid_from.
read TABLE db_ykonh with key knumh = db_xkonh-knumh.
if sy-subrc is INITIAL.
db_xkondat-datab = db_ykonh-DATAB.
db_xkondat-datbi = db_ykonh-DATBI.
db_xkondat-kz = 'U' ."db_ykonh-updkz.
append db_xkondat.
else.
db_xkondat-datab = db_xkonh-DATAB.
db_xkondat-datbi = db_xkonh-DATBI.
db_xkondat-kz = 'U'. "db_xkonh-updkz.
append db_xkondat.
endif.
ENDLOOP.
endif.
if db_ykondat[] is INITIAL.
* loop at db_ykonh.
* db_ykondat-knumh = db_ykonh-knumh.
* db_ykondat-DATAN = db_ykonh-DATAB.
* db_ykondat-datab = db_ykonh-DATAB.
* db_ykondat-datbi = db_ykonh-DATBI.
* db_ykondat-kz = db_ykonh-updkz.
* append db_ykondat.
* ENDLOOP.
db_ykondat[] = db_xkondat[].
loop at db_ykondat ASSIGNING <fs_db_ykondat>.
clear: <fs_db_ykondat>-datab,
<fs_db_ykondat>-datbi.
endloop.
endif.
* write change documents
CALL FUNCTION 'SD_CONDITION_CHANGE_DOCS_WRITE'
TABLES
p_xkondat = db_xkondat
p_ykondat = db_ykondat
p_xkonh = db_xkonh
p_ykonh = db_ykonh
p_xkonp = db_xkonp
p_ykonp = db_ykonp
p_xkonm = db_xkonm
p_xkonw = db_xkonw
p_ykonm = db_ykonm
p_ykonw = db_ykonw.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'E'.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
<fs_gt_upload>-icon = icon_cancel.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
ELSE.
LOOP AT lte_bapiret2 ASSIGNING <fs_lte_bapiret2>
WHERE type = 'S' OR type = 'W'.
<fs_gt_upload>-message = <fs_lte_bapiret2>-message.
<fs_gt_upload>-knumh = <fs_lte_bapiret2>-message_v1.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
* CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
* wait = 'X'.
<fs_gt_upload>-icon = icon_okay.
ELSE.
<fs_gt_upload>-icon = icon_cancel.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT gt_upload ASSIGNING <fs_gt_upload> WHERE icon = icon_cancel.
EXIT.
ENDLOOP.
IF sy-subrc IS NOT INITIAL AND p_test IS INITIAL AND gt_upload[] IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
7 | |
5 | |
3 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |