Skip to content

Instantly share code, notes, and snippets.

@antelio
Created September 27, 2018 16:00
Show Gist options
  • Save antelio/60bbc3c6c128b53a179b7a9d05f85785 to your computer and use it in GitHub Desktop.
Save antelio/60bbc3c6c128b53a179b7a9d05f85785 to your computer and use it in GitHub Desktop.
ZPRAA_POST_DIFER
*&---------------------------------------------------------------------*
*& Report ZPRAA_POST_DIFER
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zpraa_post_difer.
TABLES: anla, csks.
CONSTANTS:
c_controlling_area TYPE kokrs VALUE 'ACLW',
c_cost_center_group TYPE ksgru VALUE 'LW_COST'.
DATA: BEGIN OF t_ativo OCCURS 0,
anlkl LIKE anla-anlkl,
ktogr LIKE anla-ktogr,
bukrs LIKE anla-bukrs,
gjahr LIKE anlp-gjahr,
anln1 LIKE anla-anln1,
anln2 LIKE anla-anln2,
txt50 LIKE anla-txt50,
ord41 LIKE anla-ord41,
kostl LIKE anlp-kostl,
group LIKE tksr1-area,
source LIKE cskb-kstar,
dest LIKE cskb-kstar,
ktext LIKE csku-ktext,
lifnr LIKE anla-lifnr,
liefe LIKE anla-liefe,
nafap LIKE anlp-nafap,
nafag LIKE anlp-nafag,
nafaz LIKE anlp-nafaz,
END OF t_ativo.
DATA: w_ativo LIKE LINE OF t_ativo,
vg_ktopl TYPE ktopl,
t_acct_difer TYPE TABLE OF zco_acct_difer,
w_acct_difer LIKE LINE OF t_acct_difer.
DATA: BEGIN OF t_kostl OCCURS 0,
ksgru TYPE ksgru,
kostl TYPE kostl,
END OF t_kostl.
DATA: w_kostl LIKE LINE OF t_kostl.
"Dados para a criação da alv
TYPE-POOLS: slis, kkblo.
FIELD-SYMBOLS: <t_data> TYPE STANDARD TABLE,
<t_layout> TYPE slis_layout_alv,
<t_fcatalog> TYPE slis_t_fieldcat_alv.
DATA: t_layout TYPE slis_layout_alv,
t_sort TYPE slis_t_sortinfo_alv,
t_filter TYPE slis_t_filter_alv,
t_fieldcat TYPE slis_t_fieldcat_alv,
t_events TYPE slis_t_event,
t_list_comments TYPE slis_t_listheader,
w_list_comments LIKE LINE OF t_list_comments.
SELECTION-SCREEN BEGIN OF BLOCK bl0 WITH FRAME TITLE text-bl0.
PARAMETERS: p_bukrs TYPE anlp-bukrs OBLIGATORY MEMORY ID buk,
p_anlkl TYPE anla-anlkl OBLIGATORY DEFAULT 'DIFER',
p_gjahr TYPE anlp-gjahr OBLIGATORY MEMORY ID gjr,
p_peraf TYPE anlp-peraf OBLIGATORY MEMORY ID popr.
SELECTION-SCREEN SKIP 1.
PARAMETERS p_test DEFAULT 'X' AS CHECKBOX.
SELECT-OPTIONS s_anln1 FOR anla-anln1.
SELECTION-SCREEN END OF BLOCK bl0.
INITIALIZATION.
GET PARAMETER ID 'BUK' FIELD p_bukrs.
GET PARAMETER ID 'GJR' FIELD p_gjahr.
GET PARAMETER ID 'POPR' FIELD p_peraf.
PERFORM load_configuration.
START-OF-SELECTION.
PERFORM load_data.
PERFORM process_data.
END-OF-SELECTION.
PERFORM prepare_output.
PERFORM output_alv.
*&---------------------------------------------------------------------*
*& Form LOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM load_data .
*
* bukrs TYPE anla-bukrs,
* anlkl TYPE anla-anlkl,
* anln1 TYPE anla-anln1,
* anln2 TYPE anla-anln2,
* kostl TYPE anlp-kostl,
* nafap TYPE anlp-nafap,
* nafag TYPE anlp-nafag,
* nafaz TYPE anlp-nafaz,
SELECT SINGLE ktopl FROM t001 INTO vg_ktopl
WHERE bukrs = p_bukrs.
SELECT a~anlkl a~bukrs p~gjahr a~anln1 a~anln2 a~txt50 p~kostl
p~nafap p~nafag p~nafaz a~ord41 a~ktogr a~lifnr
INTO CORRESPONDING FIELDS OF TABLE t_ativo
FROM anla AS a INNER JOIN anlp AS p
ON a~mandt = p~mandt
AND a~bukrs = p~bukrs
AND a~anln1 = p~anln1
AND a~anln2 = p~anln2
WHERE a~bukrs = p_bukrs
AND a~anlkl = p_anlkl
AND p~gjahr = p_gjahr
AND p~peraf = p_peraf
AND p~afaber = '01'.
ENDFORM. " LOAD_DATA
*&---------------------------------------------------------------------*
*& Form PREPARE_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM prepare_output .
* so limpar o buffer em desenvolvimento
IF sy-sysid <> 'LWP'.
CALL FUNCTION 'SBUF_OBJ_RESET_OBJECT'
EXPORTING
buff_id = 0
inv_code = 'DEL_WORLD_GENERIC '
* Achtung: Das Literal muss 20 Character lang sein!
tabname = 'EUINFO'
key = '%F'
key_l = 2.
ENDIF.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-cprog
i_internal_tabname = 'T_ATIVO'
i_inclname = sy-cprog
i_bypassing_buffer = 'X' " i_internal_tabname = 'RESULTADO'
CHANGING
ct_fieldcat = t_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 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.
ENDIF.
ENDFORM. " PREPARE_OUTPUT
*&---------------------------------------------------------------------*
*& Form OUTPUT_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM output_alv .
PERFORM zf_f_set_layout.
PERFORM zf_f_events_get.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-cprog
i_callback_pf_status_set = 'ZF_F_SET_PFSTATUS'
i_callback_user_command = 'ZF_USER_COMMAND'
i_callback_top_of_page = 'ZF_TOP_OF_PAGE'
" i_structure_name = 'ZMMST_PGTO_SERVICOS'
is_layout = t_layout
it_fieldcat = t_fieldcat
it_sort = t_sort
it_filter = t_filter
i_save = 'A'
it_events = t_events
TABLES
* t_outtab = <t_data>
* t_outtab = resultado
t_outtab = t_ativo
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. " OUTPUT_ALV
*&---------------------------------------------------------------------*
*& Form zf_f_set_pfstatus
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->RT_EXTAB text
*----------------------------------------------------------------------*
FORM zf_f_set_pfstatus USING rt_extab TYPE slis_t_extab.
SET PF-STATUS 'STANDARD'.
ENDFORM. " zf_f_pf_status
*&---------------------------------------------------------------------*
*& Form ZF_USER_COMMAND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield.
ENDFORM. " ZF_USER_COMMAND
*&---------------------------------------------------------------------*
*& Form ZF_TOP_OF_PAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM zf_top_of_page .
DATA: i_list_comments TYPE slis_t_listheader,
w_list_comments LIKE LINE OF i_list_comments.
ENDFORM. " ZF_TOP_OF_PAGE
*&---------------------------------------------------------------------*
*& Form zf_f_events_get
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM zf_f_events_get .
DATA: l_events TYPE slis_alv_event.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = t_events
EXCEPTIONS
list_type_wrong = 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. " ZF_F_EVENTS_GET
*&---------------------------------------------------------------------*
*& Form zf_f_set_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM zf_f_set_layout .
t_layout-zebra = 'X'.
* t_layout-info_fieldname = 'COLOR'.
t_layout-colwidth_optimize = 'X'.
ENDFORM. " ZF_F_SET_LAYOUT
*&---------------------------------------------------------------------*
*& Form LOAD_CONFIGURATION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM load_configuration .
TYPE-POOLS: gsetc.
DATA: t_csks TYPE TABLE OF csks.
RANGES: r_kostl FOR csks-kostl.
SELECT * FROM zco_acct_difer INTO TABLE t_acct_difer.
DATA: t_hier TYPE TABLE OF bapiset_hier,
w_hier LIKE LINE OF t_hier,
t2_hier TYPE TABLE OF bapiset_hier,
t_values TYPE TABLE OF bapi1112_values,
r_values LIKE LINE OF t_values,
w_return TYPE bapiret2.
CALL FUNCTION 'BAPI_COSTCENTERGROUP_GETDETAIL'
EXPORTING
controllingarea = c_controlling_area
groupname = c_cost_center_group
* LANGUAGE =
IMPORTING
return = w_return
TABLES
hierarchynodes = t_hier
hierarchyvalues = t_values.
.
REFRESH t_kostl.
LOOP AT t_hier INTO w_hier WHERE hierlevel = '1'.
CALL FUNCTION 'BAPI_COSTCENTERGROUP_GETDETAIL'
EXPORTING
controllingarea = c_controlling_area
groupname = w_hier-groupname
* LANGUAGE =
IMPORTING
return = w_return
TABLES
hierarchynodes = t2_hier
hierarchyvalues = t_values.
.
LOOP AT t_values INTO r_values.
IF r_values-valfrom EQ r_values-valto.
MOVE 'I' TO r_kostl-sign.
MOVE 'EQ' TO r_kostl-option.
MOVE r_values-valfrom TO r_kostl-low.
APPEND r_kostl TO r_kostl.
ELSE.
MOVE 'I' TO r_kostl-sign.
MOVE 'BT' TO r_kostl-option.
MOVE r_values-valfrom TO r_kostl-low.
MOVE r_values-valto TO r_kostl-high.
APPEND r_kostl TO r_kostl.
ENDIF.
ENDLOOP.
SELECT * FROM csks INTO TABLE t_csks
WHERE kostl IN r_kostl
AND datbi GE sy-datum
AND datab LE sy-datum.
DATA: w_csks LIKE LINE OF t_csks.
LOOP AT t_csks INTO w_csks.
CLEAR w_kostl.
w_kostl-ksgru = w_hier-groupname.
w_kostl-kostl = w_csks-kostl.
APPEND w_kostl TO t_kostl.
ENDLOOP.
ENDLOOP.
ENDFORM. " LOAD_CONFIGURATION
*&---------------------------------------------------------------------*
*& Form PROCESS_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_data .
FIELD-SYMBOLS: <ativo> LIKE LINE OF t_ativo.
DATA: w_t095b TYPE t095b,
w_csku TYPE csku,
w_lfa1 TYPE lfa1,
w_acct_difer LIKE LINE OF t_acct_difer.
LOOP AT t_ativo ASSIGNING <ativo>.
SELECT SINGLE * FROM t095b INTO w_t095b
WHERE ktopl = vg_ktopl
AND ktogr = <ativo>-ktogr
AND afabe = '01'.
IF sy-subrc IS INITIAL.
<ativo>-source = w_t095b-ktnafg.
ENDIF.
SELECT SINGLE * FROM lfa1 INTO w_lfa1
WHERE lifnr = <ativo>-lifnr.
IF sy-subrc IS INITIAL.
<ativo>-liefe = w_lfa1-name1.
ENDIF.
READ TABLE t_kostl INTO w_kostl WITH KEY kostl = <ativo>-kostl.
IF sy-subrc IS INITIAL.
<ativo>-group = w_kostl-ksgru.
ENDIF.
READ TABLE t_acct_difer INTO w_acct_difer
WITH KEY ord41 = <ativo>-ord41.
IF sy-subrc IS INITIAL.
CASE <ativo>-group(2).
WHEN '41'.
<ativo>-dest = w_acct_difer-kstar_41.
WHEN '51'.
<ativo>-dest = w_acct_difer-kstar_51.
WHEN '52'.
<ativo>-dest = w_acct_difer-kstar_52.
WHEN OTHERS.
ENDCASE.
ENDIF.
SELECT SINGLE * FROM csku INTO w_csku
WHERE spras = sy-langu
AND ktopl = vg_ktopl
AND kstar = <ativo>-dest.
IF sy-subrc IS INITIAL.
<ativo>-ktext = w_csku-ktext.
ENDIF.
ENDLOOP.
ENDFORM. " PROCESS_DATA
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment