DATA ls_prte TYPE prteb.
DATA lv_index TYPE sy-tabix.
CALL FUNCTION 'CJDT_PRTE_GET'
EXPORTING
proj_imp = proj-pspnr
prps_imp = prps-pspnr
IMPORTING
prte_exp = ls_prte
index_exp = lv_index.
IF lv_index IS INITIAL.
CALL FUNCTION 'CJDT_TRTAB_CREATE'
EXPORTING
projwa = proj
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'CJDT_PRTE_GET'
EXPORTING
proj_imp = proj-pspnr
prps_imp = prps-pspnr
IMPORTING
prte_exp = ls_prte
index_exp = lv_index.
ENDIF.
CHECK lv_index IS NOT INITIAL.
CHECK ls_prte-pstrt NE proj-plfaz OR
ls_prte-pende NE proj-plsez OR
ls_prte-estrt NE proj-sprog OR
ls_prte-eende NE proj-eprog.
ls_prte-pstrt = proj-plfaz.
ls_prte-pende = proj-plsez.
ls_prte-estrt = proj-sprog.
ls_prte-eende = proj-eprog.
CALL FUNCTION 'CJDT_PRTE_MODIFY'
EXPORTING
index_imp = lv_index
prte_imp = ls_prte
EXCEPTIONS
OTHERS = 1.
* check and save dates
CALL FUNCTION 'CJTR_POST_DATES'
EXCEPTIONS
sched_wrong = 1
check_top_down = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
EXIT.
ENDIF.
wlgserg
среда, 13 января 2016 г.
понедельник, 2 июля 2012 г.
Easy report for update position in FI document
*&---------------------------------------------------------------------*
*& 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 TYPE zssit_vat_xref_update.
**********************************************************************
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-belnr
FROM bkpf
WHERE bukrs EQ-bukrs
AND belnr EQ-belnr
AND gjahr EQ-gjahr
AND stblg NE ''.
IF sy-subrc EQ 0.
DELETE gt_alv.
CONTINUE.
ENDIF.
* Current XREF1
SELECT SINGLE xref1
INTO-xref1
FROM bseg
WHERE bukrs EQ-bukrs
AND belnr EQ-belnr
AND gjahr EQ-gjahr
AND buzei EQ-buzei
AND koart EQ 'K'.
* Check XREF1
IF STRLEN(-xref1 ) NE 6 OR -xref1(6) CN '0123456789'.
DELETE gt_alv.
CONTINUE.
ELSE.
" Check date
CLEAR lv_datum.
CONCATENATE '20'-xref1(6)
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 INDEX selfield-tabindex.
CHECK sy-subrc EQ 0.
CASE selfield-fieldname.
WHEN 'BELNR'.
SET PARAMETER ID 'BLN' FIELD-belnr.
SET PARAMETER ID 'BUK' FIELD-bukrs.
SET PARAMETER ID 'GJR' FIELD-gjahr.
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 WHERE cbox IS NOT INITIAL.
CLEAR bdcdata. REFRESH bdcdata.
CLEAR lt_mess[].
PERFORM bdc_dynpro USING 'SAPMF05L' '100'.
PERFORM bdc_field USING 'RF05L-BELNR'-belnr.
PERFORM bdc_field USING 'RF05L-BUKRS'-bukrs.
PERFORM bdc_field USING 'RF05L-GJAHR'-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'-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'-xref1_new.
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.
-status = icon_led_green.
ELSE.
-status = icon_led_red.
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
*& 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
вторник, 26 июня 2012 г.
Easy report with reuse and posting
REPORT z_rep.
TABLES bkpf.
TABLES bseg.
TYPE-POOLS slis.
DATA gt_out TYPE TABLE OF zsrep_alv.
DATA gs_alv TYPE zs_alv.
DATA gv_budat TYPE zsrep_alv-budat.
FIELD-SYMBOLS
**********************************************************************
SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE text-bl1.
PARAMETERS p_bukrs TYPE bkpf-bukrs OBLIGATORY MEMORY ID buk.
PARAMETERS p_spmon TYPE spmon OBLIGATORY MEMORY ID spm.
PARAMETERS p_gl_k TYPE bseg-hkont OBLIGATORY MEMORY ID glk.
PARAMETERS p_gl_d TYPE bseg-hkont OBLIGATORY MEMORY ID gld.
PARAMETERS p_blart TYPE bkpf-blart OBLIGATORY MEMORY ID blr.
SELECT-OPTIONS s_matnr FOR bseg-matnr.
SELECT-OPTIONS s_werks FOR bseg-werks.
SELECTION-SCREEN END OF BLOCK bl1.
**********************************************************************
START-OF-SELECTION.
**********************************************************************
PERFORM select_data.
**********************************************************************
END-OF-SELECTION.
**********************************************************************
IF gt_out[] IS INITIAL.
MESSAGE 'No data for selection conditions' TYPE 'S'.
EXIT.
ENDIF.
PERFORM display_data.
**********************************************************************
*&---------------------------------------------------------------------*
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
* Select data
*----------------------------------------------------------------------*
FORM select_data .
RANGES lr_budat FOR bkpf-budat.
lr_budat-sign = 'I'.
lr_budat-option = 'BT'.
CALL FUNCTION 'OIUREP_MONTH_FIRST_LAST'
EXPORTING
i_month = p_spmon+4(2)
i_year = p_spmon(4)
IMPORTING
e_first_day = lr_budat-low
e_last_day = lr_budat-high
EXCEPTIONS
OTHERS = 1.
APPEND lr_budat.
gv_budat = lr_budat-high.
CLEAR gt_out[].
* Select open items
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_out
FROM bsis
WHERE bukrs EQ p_bukrs
AND hkont EQ p_gl_k
AND gjahr EQ p_spmon(4)
AND budat IN lr_budat
AND werks IN s_werks.
* Get add data from BSEG
LOOP AT gt_out ASSIGNING .
* Check Cancel docs
SELECT SINGLE belnr
INTO -belnr
FROM bkpf
WHERE bukrs EQ -bukrs
AND belnr EQ -belnr
AND gjahr EQ -gjahr
AND stblg NE ''.
IF sy-subrc EQ 0.
DELETE gt_out.
CONTINUE.
ENDIF.
* Check material
SELECT SINGLE matnr
INTO -matnr
FROM bseg
WHERE bukrs EQ -bukrs
AND belnr EQ -belnr
AND gjahr EQ -gjahr
AND buzei EQ -buzei.
IF NOT -matnr IN s_matnr.
DELETE gt_out.
CONTINUE.
ENDIF.
* Change sign by SHKZG
IF -shkzg EQ 'H'.
-dmbtr = - -dmbtr.
-wrbtr = - -wrbtr.
ENDIF.
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-cprog
i_callback_pf_status_set = 'CALLBACK_PF_STATUS_SET'
i_callback_user_command = 'CALLBACK_USER_COMMAND'
i_structure_name = 'ZSREP_ALV'
is_layout_lvc = ls_layout
i_save = 'A'
TABLES
t_outtab = gt_out
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_out ASSIGNING INDEX selfield-tabindex.
CHECK sy-subrc EQ 0.
CASE selfield-fieldname.
WHEN 'BELNR' OR 'BELNR_CLR'.
IF selfield-fieldname EQ 'BELNR'.
SET PARAMETER ID 'BLN' FIELD -belnr.
ELSE.
SET PARAMETER ID 'BLN' FIELD -belnr_clr.
ENDIF.
SET PARAMETER ID 'BUK' FIELD -bukrs.
SET PARAMETER ID 'GJR' FIELD -gjahr.
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDCASE.
**********************************************************************
WHEN '&POST'. " Post doc
PERFORM post.
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 POST
*&---------------------------------------------------------------------*
* Post
*----------------------------------------------------------------------*
FORM post .
DATA ls_hdr TYPE bapiache09.
DATA lt_acc TYPE TABLE OF bapiacgl09.
DATA ls_acc TYPE bapiacgl09.
DATA lt_amt TYPE TABLE OF bapiaccr09.
DATA ls_amt TYPE bapiaccr09.
DATA lt_ext TYPE TABLE OF bapiparex.
DATA ls_ext TYPE bapiparex.
DATA lt_ret TYPE TABLE OF bapiret2.
DATA lt_ret_all TYPE TABLE OF bapiret2.
DATA lv_obj_type TYPE bapiache09-obj_type.
DATA lv_obj_key TYPE bapiache09-obj_key.
DATA lv_test TYPE xfeld.
DATA lv_error TYPE xfeld.
DATA lt_coll TYPE TABLE OF zsrep_alv.
DATA ls_t001 TYPE t001.
FIELD-SYMBOLS TYPE zsrep_alv.
* Collect by MATNR/WERKS
LOOP AT gt_out ASSIGNING WHERE cbox IS NOT INITIAL.
CLEAR gs_alv.
gs_alv-bukrs = -bukrs.
gs_alv-hkont = -hkont.
gs_alv-waers = -waers.
gs_alv-dmbtr = -dmbtr.
gs_alv-wrbtr = -wrbtr.
gs_alv-matnr = -matnr.
gs_alv-werks = -werks.
COLLECT gs_alv INTO lt_coll.
ENDLOOP.
* Delete zero lines
DELETE lt_coll WHERE dmbtr EQ 0 OR wrbtr EQ 0.
* No lines was select
IF lt_coll[] IS INITIAL.
MESSAGE 'Select positions' TYPE 'I'.
RETURN.
ENDIF.
**********************************************************************
DO 2 TIMES.
IF sy-index EQ 1.
lv_test = 'X'.
ELSE.
CHECK lv_error IS INITIAL.
CLEAR lt_ret_all[].
lv_test = ''.
ENDIF.
LOOP AT lt_coll ASSIGNING .
*
IF ls_t001-bukrs NE -bukrs.
SELECT SINGLE *
INTO ls_t001
FROM t001
WHERE bukrs EQ -bukrs.
ENDIF.
CLEAR ls_hdr.
CLEAR lt_acc[].
CLEAR lt_amt[].
CLEAR lt_ret[].
CLEAR lt_ext[].
ls_hdr-username = sy-uname.
ls_hdr-comp_code = -bukrs.
ls_hdr-doc_date = gv_budat.
ls_hdr-pstng_date = gv_budat.
ls_hdr-doc_type = p_blart.
ls_hdr-header_txt = '16* to 90*'.
CLEAR ls_acc.
ls_acc-itemno_acc = 1.
ls_acc-acct_type = 'S'.
ls_acc-gl_account = p_gl_k.
ls_acc-material = -matnr.
ls_acc-plant = -werks.
INSERT ls_acc INTO TABLE lt_acc.
CLEAR ls_amt.
ls_amt-itemno_acc = ls_acc-itemno_acc.
ls_amt-curr_type = '00'.
ls_amt-currency = -waers.
ls_amt-amt_doccur = - -wrbtr.
INSERT ls_amt INTO TABLE lt_amt.
ls_amt-curr_type = '10'.
ls_amt-currency = ls_t001-waers.
ls_amt-amt_doccur = - -dmbtr.
INSERT ls_amt INTO TABLE lt_amt.
ADD 1 TO ls_acc-itemno_acc.
ls_acc-gl_account = p_gl_d.
INSERT ls_acc INTO TABLE lt_acc.
ls_amt-itemno_acc = ls_acc-itemno_acc.
ls_amt-curr_type = '00'.
ls_amt-currency = -waers.
ls_amt-amt_doccur = -wrbtr.
INSERT ls_amt INTO TABLE lt_amt.
ls_amt-curr_type = '10'.
ls_amt-currency = ls_t001-waers.
ls_amt-amt_doccur = -dmbtr.
INSERT ls_amt INTO TABLE lt_amt.
*
IF lv_test IS NOT INITIAL.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
documentheader = ls_hdr
TABLES
accountgl = lt_acc
currencyamount = lt_amt
extension2 = lt_ext
return = lt_ret.
ELSE.
CLEAR lv_obj_key.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_hdr
IMPORTING
obj_type = lv_obj_type
obj_key = lv_obj_key
TABLES
accountgl = lt_acc
currencyamount = lt_amt
extension2 = lt_ext
return = lt_ret.
ENDIF.
INSERT LINES OF lt_ret INTO TABLE lt_ret_all.
LOOP AT lt_ret TRANSPORTING NO FIELDS WHERE type EQ 'E' OR type EQ 'A'.
lv_error = 'X'.
EXIT.
ENDLOOP.
IF lv_error IS INITIAL AND lv_test IS INITIAL.
LOOP AT gt_out ASSIGNING WHERE cbox EQ 'X'
AND waers EQ -waers
AND matnr EQ -matnr
AND werks EQ -werks.
-belnr_clr = lv_obj_key+0(10).
-gjahr_clr = lv_obj_key+14(4).
ENDLOOP.
ENDIF.
ENDLOOP.
ENDDO.
*
IF lv_error IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
* Display log
IF lv_error IS NOT INITIAL.
CALL FUNCTION 'FINB_BAPIRET2_DISPLAY'
EXPORTING
it_message = lt_ret_all.
ELSE.
PERFORM select_data. " reselect data
ENDIF.
**********************************************************************
ENDFORM. " POST
*& Form SELECT_DATA
*&---------------------------------------------------------------------*
* Select data
*----------------------------------------------------------------------*
FORM select_data .
RANGES lr_budat FOR bkpf-budat.
lr_budat-sign = 'I'.
lr_budat-option = 'BT'.
CALL FUNCTION 'OIUREP_MONTH_FIRST_LAST'
EXPORTING
i_month = p_spmon+4(2)
i_year = p_spmon(4)
IMPORTING
e_first_day = lr_budat-low
e_last_day = lr_budat-high
EXCEPTIONS
OTHERS = 1.
APPEND lr_budat.
gv_budat = lr_budat-high.
CLEAR gt_out[].
* Select open items
SELECT *
INTO CORRESPONDING FIELDS OF TABLE gt_out
FROM bsis
WHERE bukrs EQ p_bukrs
AND hkont EQ p_gl_k
AND gjahr EQ p_spmon(4)
AND budat IN lr_budat
AND werks IN s_werks.
* Get add data from BSEG
LOOP AT gt_out 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_out.
CONTINUE.
ENDIF.
* Check material
SELECT SINGLE matnr
INTO
FROM bseg
WHERE bukrs EQ
AND belnr EQ
AND gjahr EQ
AND buzei EQ
IF NOT
DELETE gt_out.
CONTINUE.
ENDIF.
* Change sign by SHKZG
IF
ENDIF.
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-cprog
i_callback_pf_status_set = 'CALLBACK_PF_STATUS_SET'
i_callback_user_command = 'CALLBACK_USER_COMMAND'
i_structure_name = 'ZSREP_ALV'
is_layout_lvc = ls_layout
i_save = 'A'
TABLES
t_outtab = gt_out
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_out ASSIGNING
CHECK sy-subrc EQ 0.
CASE selfield-fieldname.
WHEN 'BELNR' OR 'BELNR_CLR'.
IF selfield-fieldname EQ 'BELNR'.
SET PARAMETER ID 'BLN' FIELD
ELSE.
SET PARAMETER ID 'BLN' FIELD
ENDIF.
SET PARAMETER ID 'BUK' FIELD
SET PARAMETER ID 'GJR' FIELD
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDCASE.
**********************************************************************
WHEN '&POST'. " Post doc
PERFORM post.
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 POST
*&---------------------------------------------------------------------*
* Post
*----------------------------------------------------------------------*
FORM post .
DATA ls_hdr TYPE bapiache09.
DATA lt_acc TYPE TABLE OF bapiacgl09.
DATA ls_acc TYPE bapiacgl09.
DATA lt_amt TYPE TABLE OF bapiaccr09.
DATA ls_amt TYPE bapiaccr09.
DATA lt_ext TYPE TABLE OF bapiparex.
DATA ls_ext TYPE bapiparex.
DATA lt_ret TYPE TABLE OF bapiret2.
DATA lt_ret_all TYPE TABLE OF bapiret2.
DATA lv_obj_type TYPE bapiache09-obj_type.
DATA lv_obj_key TYPE bapiache09-obj_key.
DATA lv_test TYPE xfeld.
DATA lv_error TYPE xfeld.
DATA lt_coll TYPE TABLE OF zsrep_alv.
DATA ls_t001 TYPE t001.
FIELD-SYMBOLS
* Collect by MATNR/WERKS
LOOP AT gt_out ASSIGNING
CLEAR gs_alv.
gs_alv-bukrs =
gs_alv-hkont =
gs_alv-waers =
gs_alv-dmbtr =
gs_alv-wrbtr =
gs_alv-matnr =
gs_alv-werks =
COLLECT gs_alv INTO lt_coll.
ENDLOOP.
* Delete zero lines
DELETE lt_coll WHERE dmbtr EQ 0 OR wrbtr EQ 0.
* No lines was select
IF lt_coll[] IS INITIAL.
MESSAGE 'Select positions' TYPE 'I'.
RETURN.
ENDIF.
**********************************************************************
DO 2 TIMES.
IF sy-index EQ 1.
lv_test = 'X'.
ELSE.
CHECK lv_error IS INITIAL.
CLEAR lt_ret_all[].
lv_test = ''.
ENDIF.
LOOP AT lt_coll ASSIGNING
*
IF ls_t001-bukrs NE
SELECT SINGLE *
INTO ls_t001
FROM t001
WHERE bukrs EQ
ENDIF.
CLEAR ls_hdr.
CLEAR lt_acc[].
CLEAR lt_amt[].
CLEAR lt_ret[].
CLEAR lt_ext[].
ls_hdr-username = sy-uname.
ls_hdr-comp_code =
ls_hdr-doc_date = gv_budat.
ls_hdr-pstng_date = gv_budat.
ls_hdr-doc_type = p_blart.
ls_hdr-header_txt = '16* to 90*'.
CLEAR ls_acc.
ls_acc-itemno_acc = 1.
ls_acc-acct_type = 'S'.
ls_acc-gl_account = p_gl_k.
ls_acc-material =
ls_acc-plant =
INSERT ls_acc INTO TABLE lt_acc.
CLEAR ls_amt.
ls_amt-itemno_acc = ls_acc-itemno_acc.
ls_amt-curr_type = '00'.
ls_amt-currency =
ls_amt-amt_doccur = -
INSERT ls_amt INTO TABLE lt_amt.
ls_amt-curr_type = '10'.
ls_amt-currency = ls_t001-waers.
ls_amt-amt_doccur = -
INSERT ls_amt INTO TABLE lt_amt.
ADD 1 TO ls_acc-itemno_acc.
ls_acc-gl_account = p_gl_d.
INSERT ls_acc INTO TABLE lt_acc.
ls_amt-itemno_acc = ls_acc-itemno_acc.
ls_amt-curr_type = '00'.
ls_amt-currency =
ls_amt-amt_doccur =
INSERT ls_amt INTO TABLE lt_amt.
ls_amt-curr_type = '10'.
ls_amt-currency = ls_t001-waers.
ls_amt-amt_doccur =
INSERT ls_amt INTO TABLE lt_amt.
*
IF lv_test IS NOT INITIAL.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_CHECK'
EXPORTING
documentheader = ls_hdr
TABLES
accountgl = lt_acc
currencyamount = lt_amt
extension2 = lt_ext
return = lt_ret.
ELSE.
CLEAR lv_obj_key.
CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
EXPORTING
documentheader = ls_hdr
IMPORTING
obj_type = lv_obj_type
obj_key = lv_obj_key
TABLES
accountgl = lt_acc
currencyamount = lt_amt
extension2 = lt_ext
return = lt_ret.
ENDIF.
INSERT LINES OF lt_ret INTO TABLE lt_ret_all.
LOOP AT lt_ret TRANSPORTING NO FIELDS WHERE type EQ 'E' OR type EQ 'A'.
lv_error = 'X'.
EXIT.
ENDLOOP.
IF lv_error IS INITIAL AND lv_test IS INITIAL.
LOOP AT gt_out ASSIGNING
AND waers EQ
AND matnr EQ
AND werks EQ
ENDLOOP.
ENDIF.
ENDLOOP.
ENDDO.
*
IF lv_error IS NOT INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
* Display log
IF lv_error IS NOT INITIAL.
CALL FUNCTION 'FINB_BAPIRET2_DISPLAY'
EXPORTING
it_message = lt_ret_all.
ELSE.
PERFORM select_data. " reselect data
ENDIF.
**********************************************************************
ENDFORM. " POST
Подписаться на:
Сообщения (Atom)