Вы находитесь на странице: 1из 6

*&---------------------------------------------------------------------*

*& Include ZSDXXXXX


*&---------------------------------------------------------------------*
************************************************************************
* Rejection codes from order to contract *
************************************************************************
PROGRAM ZSDXXXXX MESSAGE-ID zsd001.
*&---------------------------------------------------------------------*
*& Form MODIFY_CONTRACT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_XVBEP text
* -->P_VVBEP text
* -->P_VBAK text
*----------------------------------------------------------------------*
FORM modify_contract TABLES pxvbep STRUCTURE vbepvb
pvvbep STRUCTURE vbepvb
pxj_3avbfae STRUCTURE j_3avbfavb
USING pvbak TYPE vbak.

DATA: lv_subrc TYPE sy-subrc,


lt_vbep_contract_i TYPE TABLE OF vbepvb,
lt_vbep_contract_u TYPE TABLE OF vbepvb,
lt_vbap_contract TYPE TABLE OF vbapvb,
lt_xvbep TYPE TABLE OF vbepvb,
lt_vvbep TYPE TABLE OF vbepvb,
lt_xj_3avbfae TYPE TABLE OF j_3avbfavb.

CHECK pxvbep[] IS NOT INITIAL AND pxj_3avbfae[] IS NOT INITIAL


AND pvvbep[] IS NOT INITIAL.

lt_xvbep[] = pxvbep[].
lt_vvbep[] = pvvbep[].
lt_xj_3avbfae[] = pxj_3avbfae[].

PERFORM check_order_with_contract TABLES lt_xvbep


lt_vbep_contract_i
lt_vbep_contract_u
lt_vbap_contract
lt_vvbep
lt_xj_3avbfae
USING pvbak
CHANGING lv_subrc.

CHECK lv_subrc = 0.

PERFORM bapi_modify_contract TABLES lt_vbep_contract_i


lt_vbep_contract_u
lt_vbap_contract
USING pvbak.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form CHECK_ORDER_WITH_CONTRACT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_PXVBEP text
* -->P_PVBAK text
*----------------------------------------------------------------------*
FORM check_order_with_contract TABLES pxvbep STRUCTURE vbepvb
pvbep_cotract_i STRUCTURE vbepvb
pvbep_cotract_u STRUCTURE vbepvb
pvbap_cotract STRUCTURE vbapvb
pvvbep STRUCTURE vbepvb
pxj_3avbfae STRUCTURE j_3avbfavb
USING pvbak TYPE vbak
CHANGING p_subrc TYPE sy-subrc.

CONSTANTS: c_augru TYPE stfna VALUE 'J_3AABGRU',


c_auart TYPE stfna VALUE 'AUART',
c_contract TYPE vbtyp VALUE 'G',
c_order TYPE vbtyp VALUE 'C',
c_insert TYPE updkz_d VALUE 'I',
c_update TYPE updkz_d VALUE 'U'.

RANGES: r_j_3aabgru_aux FOR zbct_parameters-value,


r_auart_aux FOR zbct_parameters-value,
r_j_3aabgru FOR vbep-j_3aabgru,
r_auart FOR vbak-auart.

DATA: wa_xvbep TYPE vbepvb,


wa_vvbep TYPE vbepvb,
wa_vvbap TYPE vbapvb,
wa_xj_3avbfae TYPE j_3avbfavb.

p_subrc = 4.

CHECK: pvbak-vgtyp = c_contract AND pvbak-vgbel IS NOT INITIAL.

CALL FUNCTION 'Z_RANGE_CREATION'


EXPORTING
i_repid = sy-repid
i_fname = c_auart
TABLES
range = r_auart_aux.
r_auart[] = r_auart_aux[].

CHECK r_auart[] IS NOT INITIAL AND pvbak-auart IN r_auart[].

CALL FUNCTION 'Z_RANGE_CREATION'


EXPORTING
i_repid = sy-repid
i_fname = c_augru
TABLES
range = r_j_3aabgru_aux.
r_j_3aabgru[] = r_j_3aabgru_aux[].

CHECK r_j_3aabgru[] IS NOT INITIAL.

LOOP AT pxvbep INTO wa_xvbep WHERE j_3aabgru IN r_j_3aabgru


AND ( updkz = c_insert
OR updkz = c_update ).
READ TABLE pxj_3avbfae INTO wa_xj_3avbfae
WITH KEY vbeln = wa_xvbep-vbeln posnn = wa_xvbep-posnr
etenn = wa_xvbep-etenr vbtyp_n = c_order
vbtyp_v = c_contract.
"Contract number retrieved
IF sy-subrc = 0.
READ TABLE pvvbep INTO wa_vvbep WITH KEY vbeln = wa_xj_3avbfae-vbelv
posnr = wa_xj_3avbfae-posnv
etenr = wa_xj_3avbfae-etenv.
IF sy-subrc = 0.
"If the contract is not already refused
IF wa_vvbep-j_3aabgru IS INITIAL.
wa_vvbep-j_3aabgru = wa_xvbep-j_3aabgru.
wa_vvbep-wmeng = wa_xvbep-wmeng.
IF wa_xvbep-updkz = c_insert.
APPEND wa_vvbep TO pvbep_cotract_i.

ELSEIF wa_xvbep-updkz = c_update.


APPEND wa_vvbep TO pvbep_cotract_u.

ENDIF.
wa_vvbap-posnr = wa_vvbep-posnr.
APPEND wa_vvbap TO pvbap_cotract.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.

IF pvbep_cotract_i[] IS NOT INITIAL OR


pvbep_cotract_u[] IS NOT INITIAL.
p_subrc = 0.
SORT pvbap_cotract BY vbeln.
DELETE ADJACENT DUPLICATES FROM pvbap_cotract
COMPARING vbeln.
ENDIF.

LOOP AT pvbep_cotract_i INTO wa_vvbep.


LOOP AT pxj_3avbfae INTO wa_xj_3avbfae WHERE vbelv = wa_vvbep-vbeln
AND posnv = wa_vvbep-posnr
AND etenv = wa_vvbep-etenr
AND vbtyp_n = c_order
AND vbtyp_v = c_contract.

READ TABLE pxvbep INTO wa_xvbep WITH KEY vbeln = wa_xj_3avbfae-vbeln


posnr = wa_xj_3avbfae-posnn
etenr = wa_xj_3avbfae-etenn
updkz = c_update.
IF sy-subrc = 0.
IF wa_vvbep-wmeng <> wa_xvbep-wmeng.
wa_vvbep-wmeng = wa_xvbep-wmeng.
wa_vvbep-j_3aabgru = wa_xvbep-j_3aabgru.
APPEND wa_vvbep TO pvbep_cotract_u.
ENDIF.
ENDIF.
ENDLOOP.
ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form BAPI_MODIFY_CONTRACT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LT_VBEP_CONTRACT text
* -->P_PVBAK text
*----------------------------------------------------------------------*
FORM bapi_modify_contract TABLES pvbep_contract_i STRUCTURE vbepvb
pvbep_contract_u STRUCTURE vbepvb
pvbap_contract STRUCTURE vbapvb
USING pvbak TYPE vbak.

CONSTANTS: c_update TYPE updkz_d VALUE 'U',


c_insert TYPE updkz_d VALUE 'I',
c_ok TYPE c VALUE 'X'.

DATA: lv_subrc TYPE sy-subrc,


lv_salesdocument TYPE bapivbeln-vbeln,
wa_vbep_contract TYPE vbepvb,
wa_vbap_contract TYPE vbapvb,
wa_contract_schedule_in TYPE /afs/bapisdschd,
wa_contract_schedule_inx TYPE /afs/bapisdschdx,
wa_contract_item_in TYPE /afs/bapisditm,
wa_contract_item_inx TYPE /afs/bapisditmx,
lv_contract_header_in TYPE /afs/bapisdhd,
lv_contract_header_inx TYPE /afs/bapisdhdx.

DATA: lt_contract_item_in TYPE TABLE OF /afs/bapisditm,


lt_contract_item_inx TYPE TABLE OF /afs/bapisditmx,
lt_contract_schedule_in TYPE TABLE OF /afs/bapisdschd,
lt_contract_schedule_inx TYPE TABLE OF /afs/bapisdschdx,
lt_contract_return TYPE TABLE OF bapiret2.

lv_salesdocument = pvbak-vgbel.
lv_contract_header_in-refobjtype = 'BUS2034'.
"lv_contract_header_inx-vbeln = pvbak-vgbel.
lv_contract_header_inx-updateflag = c_update.
*
* LOOP AT pvbap_contract INTO wa_vbap_contract.
*
* CLEAR: lt_contract_item_in,
* lt_contract_item_inx.
*
* wa_contract_item_in-itm_number = wa_vbap_contract-posnr.
*
* wa_contract_item_inx-updateflag = c_update.
* wa_contract_item_inx-itm_number = wa_vbap_contract-posnr.
*
* APPEND wa_contract_item_in TO lt_contract_item_in.
* APPEND wa_contract_item_inx TO lt_contract_item_inx.
*
* ENDLOOP.
"schedule lines to be modified
LOOP AT pvbep_contract_u INTO wa_vbep_contract.

CLEAR: wa_contract_schedule_in,
wa_contract_schedule_inx.

wa_contract_schedule_in-itm_number = wa_vbep_contract-posnr.
wa_contract_schedule_in-sched_line = wa_vbep_contract-etenr.
wa_contract_schedule_in-reason_rej = wa_vbep_contract-j_3aabgru.

wa_contract_schedule_inx-updateflag = c_update.
wa_contract_schedule_inx-itm_number = wa_vbep_contract-posnr.
wa_contract_schedule_inx-sched_line = wa_vbep_contract-etenr.
wa_contract_schedule_inx-reason_rej = c_ok.

APPEND wa_contract_schedule_in TO lt_contract_schedule_in.


APPEND wa_contract_schedule_inx TO lt_contract_schedule_inx.
ENDLOOP.

"schedule lines to be added


LOOP AT pvbep_contract_i INTO wa_vbep_contract.

CLEAR: wa_contract_schedule_in,
wa_contract_schedule_inx.

wa_contract_schedule_in-itm_number = wa_vbep_contract-posnr.
"wa_contract_schedule_in-sched_line = wa_vbep_contract-etenr.
wa_contract_schedule_in-reason_rej = wa_vbep_contract-j_3aabgru.
wa_contract_schedule_in-req_qty = wa_vbep_contract-wmeng.
wa_contract_schedule_in-grid_value = wa_vbep_contract-j_3asize.

wa_contract_schedule_inx-updateflag = c_insert.
wa_contract_schedule_inx-itm_number = wa_vbep_contract-posnr.
"wa_contract_schedule_inx-sched_line = wa_vbep_contract-etenr.
wa_contract_schedule_inx-reason_rej = c_ok.
wa_contract_schedule_inx-req_qty = c_ok.
wa_contract_schedule_inx-grid_value = c_ok.

APPEND wa_contract_schedule_in TO lt_contract_schedule_in.


APPEND wa_contract_schedule_inx TO lt_contract_schedule_inx.
ENDLOOP.

* PERFORM dequeue_contract USING lv_salesdocument


* CHANGING lv_subrc.

CALL FUNCTION 'ZZBAPI_CONTRACT_CHANGE' IN UPDATE TASK


EXPORTING
salesdocument = lv_salesdocument
contract_header_in = lv_contract_header_in
contract_header_inx = lv_contract_header_inx
TABLES
return = lt_contract_return
contract_item_in = lt_contract_item_in
contract_item_inx = lt_contract_item_inx
contract_schedule_in = lt_contract_schedule_in
contract_schedule_inx = lt_contract_schedule_inx.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form DEQUEUE_CONTRACT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LV_SALESDOCUMENT text
* <--P_LV_SUBRC text
*----------------------------------------------------------------------*
FORM dequeue_contract USING p_salesdocument TYPE bapivbeln-vbeln
CHANGING p_subrc TYPE sy-subrc.
DATA: lv_vbeln TYPE vbak-vbeln.

lv_vbeln = p_salesdocument.

CALL FUNCTION 'DEQUEUE_EVVBAKE'


EXPORTING
vbeln = lv_vbeln.

p_subrc = sy-subrc.

ENDFORM.

Вам также может понравиться