*& Report ZSIT_VAT_XREF_UPDATE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zsit_vat_xref_update.
TABLES bkpf.
TABLES bseg.
TYPE-POOLS slis.
TYPE-POOLS icon.
DATA gt_alv TYPE TABLE OF zssit_vat_xref_update.
DATA gs_alv TYPE zssit_vat_xref_update.
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
FIELD-SYMBOLS
**********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.
PARAMETERS p_bukrs TYPE bkpf-bukrs OBLIGATORY MEMORY ID buk.
SELECT-OPTIONS s_gjahr FOR bseg-gjahr OBLIGATORY MEMORY ID gjr.
SELECT-OPTIONS s_hkont FOR bseg-hkont.
SELECT-OPTIONS s_belnr FOR bseg-belnr.
SELECTION-SCREEN END OF BLOCK bl1.
**********************************************************************
START-OF-SELECTION.
**********************************************************************
PERFORM select_data.
**********************************************************************
END-OF-SELECTION.
**********************************************************************
IF gt_alv[] IS INITIAL.
MESSAGE 'No data for selection conditions' TYPE 'S'.
EXIT.
ENDIF.
PERFORM display_data.
**********************************************************************
*&---------------------------------------------------------------------*
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
* Select data
*----------------------------------------------------------------------*
FORM select_data .
DATA lv_datum TYPE bkpf-budat.
CLEAR gt_alv[].
* Select open items
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_alv
FROM bsis
WHERE bukrs EQ p_bukrs
AND hkont IN s_hkont
AND gjahr IN s_gjahr
AND belnr IN s_belnr
AND mwskz NE ''
AND mwskz NE '**'.
* Get add data from BSEG
LOOP AT gt_alv ASSIGNING
* Check Cancel docs
SELECT SINGLE belnr
INTO
FROM bkpf
WHERE bukrs EQ
AND belnr EQ
AND gjahr EQ
AND stblg NE ''.
IF sy-subrc EQ 0.
DELETE gt_alv.
CONTINUE.
ENDIF.
* Current XREF1
SELECT SINGLE xref1
INTO
FROM bseg
WHERE bukrs EQ
AND belnr EQ
AND gjahr EQ
AND buzei EQ
AND koart EQ 'K'.
* Check XREF1
IF STRLEN(
DELETE gt_alv.
CONTINUE.
ELSE.
" Check date
CLEAR lv_datum.
CONCATENATE '20'
INTO lv_datum.
ADD 1 TO lv_datum.
SUBTRACT 1 FROM lv_datum.
IF lv_datum IS INITIAL.
DELETE gt_alv.
CONTINUE.
ENDIF.
ENDIF.
* Correct new XREF1
PERFORM get_new_xref1 USING
ENDLOOP.
*
ENDFORM. " SELECT_DATA
*&---------------------------------------------------------------------*
*& Form DISPLAY_DATA
*&---------------------------------------------------------------------*
* Output
*----------------------------------------------------------------------*
FORM display_data .
DATA ls_layout TYPE lvc_s_layo.
ls_layout-cwidth_opt = 'X'.
ls_layout-box_fname = 'CBOX'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
i_callback_program = sy-repid
i_callback_pf_status_set = 'CALLBACK_PF_STATUS_SET'
i_callback_user_command = 'CALLBACK_USER_COMMAND'
i_structure_name = 'ZSSIT_VAT_XREF_UPDATE'
is_layout_lvc = ls_layout
i_save = 'A'
TABLES
t_outtab = gt_alv
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " DISPLAY_DATA
*&---------------------------------------------------------------------*
*& Form CALLBACK_USER_COMMAND
*&---------------------------------------------------------------------*
* User command
*----------------------------------------------------------------------*
FORM callback_user_command USING command LIKE sy-ucomm
selfield TYPE slis_selfield.
CASE command.
**********************************************************************
WHEN '&IC1'. " Double click
**********************************************************************
READ TABLE gt_alv ASSIGNING
CHECK sy-subrc EQ 0.
CASE selfield-fieldname.
WHEN 'BELNR'.
SET PARAMETER ID 'BLN' FIELD
SET PARAMETER ID 'BUK' FIELD
SET PARAMETER ID 'GJR' FIELD
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDCASE.
**********************************************************************
WHEN '&XREF'. " Change XREF1
PERFORM change_xref1.
selfield-refresh = 'X'.
ENDCASE.
ENDFORM. "CALLBACK_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form CALLBACK_PF_STATUS_SET
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM callback_pf_status_set USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM. "CALLBACK_PF_STATUS_SET
*&---------------------------------------------------------------------*
*& Form change_xref1
*&---------------------------------------------------------------------*
* change_xref1
*----------------------------------------------------------------------*
FORM change_xref1 .
DATA ls_bseg TYPE bseg.
DATA lt_mess TYPE TABLE OF bdcmsgcoll.
DATA ls_mess TYPE bdcmsgcoll.
* Change
LOOP AT gt_alv ASSIGNING
CLEAR bdcdata. REFRESH bdcdata.
CLEAR lt_mess[].
PERFORM bdc_dynpro USING 'SAPMF05L' '100'.
PERFORM bdc_field USING 'RF05L-BELNR'
PERFORM bdc_field USING 'RF05L-BUKRS'
PERFORM bdc_field USING 'RF05L-GJAHR'
PERFORM bdc_field USING 'BDC_OKCODE' '/00'.
PERFORM bdc_dynpro USING 'SAPMF05L' '700'.
PERFORM bdc_field USING 'BDC_OKCODE' 'ABZL'.
PERFORM bdc_dynpro USING 'SAPMF05L' '1130'.
PERFORM bdc_field USING 'RF05L-BUZEI'
PERFORM bdc_dynpro USING 'SAPMF05L' '700'.
PERFORM bdc_field USING 'BDC_CURSOR' 'RF05L-ANZDT(01)'.
PERFORM bdc_field USING 'BDC_OKCODE' 'PK'.
PERFORM bdc_dynpro USING 'SAPMF05L' '302'.
PERFORM bdc_field USING 'BDC_OKCODE' '=ZK'.
PERFORM bdc_dynpro USING 'SAPMF05L' '1302'.
PERFORM bdc_field USING 'BSEG-XREF1'
PERFORM bdc_field USING 'BDC_OKCODE' '=ENTR'.
PERFORM bdc_dynpro USING 'SAPMF05L' '302'.
PERFORM bdc_field USING 'BDC_OKCODE' 'AB'.
PERFORM bdc_dynpro USING 'SAPMF05L' '700'.
PERFORM bdc_field USING 'BDC_OKCODE' '/11'.
PERFORM bdc_transaction TABLES lt_mess
USING 'FB02' 'X' 'N' 'S'.
READ TABLE lt_mess INTO ls_mess WITH KEY msgid = 'F5' msgnr = '300'.
IF sy-subrc EQ 0.
ELSE.
ENDIF.
ENDLOOP.
IF sy-subrc NE 0.
MESSAGE 'Select positions' TYPE 'I'.
RETURN.
ENDIF.
**********************************************************************
ENDFORM. " change_xref1
*&---------------------------------------------------------------------*
*& Form GET_NEW_XREF1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_new_xref1 USING ps_alv TYPE zssit_vat_xref_update.
ENDFORM. " GET_NEW_XREF1
*----------------------------------------------------------------------*
* Start new screen *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM. "BDC_DYNPRO
*----------------------------------------------------------------------*
* Insert field *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDFORM. "BDC_FIELD
*----------------------------------------------------------------------*
* Start new transaction according to parameters *
*----------------------------------------------------------------------*
FORM bdc_transaction TABLES p_messtab
USING p_tcode
p_ctu
p_mode
p_update.
DATA: l_subrc LIKE sy-subrc.
IF p_ctu <> 'X'.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = p_tcode
TABLES
dynprotab = bdcdata
EXCEPTIONS
OTHERS = 1.
ELSE.
CALL TRANSACTION p_tcode USING bdcdata
MODE p_mode
UPDATE p_update
MESSAGES INTO p_messtab.
ENDIF.
l_subrc = sy-subrc.
REFRESH bdcdata.
sy-subrc = l_subrc.
ENDFORM. "BDC_TRANSACTION
Комментариев нет:
Отправить комментарий