Skip to content

Instantly share code, notes, and snippets.

@antelio
Last active March 19, 2018 18:26
Show Gist options
  • Save antelio/f3f395be48837cb5dc6cf57653859f6d to your computer and use it in GitHub Desktop.
Save antelio/f3f395be48837cb5dc6cf57653859f6d to your computer and use it in GitHub Desktop.
ZPRFI_BALANCETE_GROUP
*&---------------------------------------------------------------------*
*& Report ZPRFI_BALANCETE_GROUP
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zprfi_balancete_group MESSAGE-ID zlw.
TABLES: ska1, skb1, t011t, bkpf, rfpdo2.
TYPE-POOLS slis.
DATA: tlayout TYPE slis_layout_alv,
tfieldcat TYPE slis_t_fieldcat_alv,
tevents TYPE slis_t_event,
i_list_comments TYPE slis_t_listheader,
w_list_comments LIKE LINE OF i_list_comments.
DATA: BEGIN OF i011z OCCURS 0.
INCLUDE STRUCTURE rf011z.
DATA: END OF i011z.
DATA: BEGIN OF x011p OCCURS 0.
INCLUDE STRUCTURE rf011p.
DATA: END OF x011p.
DATA: BEGIN OF x011q OCCURS 0.
INCLUDE STRUCTURE rf011q.
DATA: END OF x011q.
DATA: BEGIN OF x011s OCCURS 0.
INCLUDE STRUCTURE rf011s.
DATA: END OF x011s.
DATA: BEGIN OF x011v OCCURS 0.
INCLUDE STRUCTURE rf011v.
DATA: END OF x011v.
DATA: BEGIN OF t_val OCCURS 0.
INCLUDE STRUCTURE bapi1028_4.
DATA: END OF t_val.
DATA: BEGIN OF t_return OCCURS 0.
INCLUDE STRUCTURE bapireturn.
DATA: END OF t_return.
DATA: BEGIN OF t_ska1 OCCURS 0,
ktopl LIKE ska1-ktopl,
saknr LIKE ska1-saknr,
txt50 LIKE skat-txt50,
END OF t_ska1.
DATA: BEGIN OF t_estrut OCCURS 0,
saknr LIKE ska1-saknr,
txt45 LIKE rf011q-txt45,
setnr LIKE rf011s-setnr,
setvs LIKE rf011s-setvs,
ergsl LIKE rf011p-ergsl,
stufe LIKE rf011p-stufe,
prkey LIKE rf011p-prkey,
END OF t_estrut.
RANGES: r_saknr FOR ska1-saknr.
DATA: w_sld_ant LIKE bapi1028_4-balance,
w_mes_ant LIKE rfpdo2-sbwapera,
w_cont TYPE i.
DATA: BEGIN OF t_bukrs OCCURS 0,
bukrs TYPE bukrs,
END OF t_bukrs.
DATA: n_bukrs TYPE i.
*----------------------------------------------------------------------*
* Tela de Seleção
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_ktopl FOR ska1-ktopl OBLIGATORY NO INTERVALS
NO-EXTENSION.
SELECT-OPTIONS: s_saknr FOR ska1-saknr.
SELECT-OPTIONS: s_bukrs FOR skb1-bukrs OBLIGATORY.
SELECT-OPTIONS: s_versn FOR t011t-versn OBLIGATORY NO INTERVALS
NO-EXTENSION.
SELECT-OPTIONS: s_gjahr FOR bkpf-gjahr OBLIGATORY NO INTERVALS
NO-EXTENSION.
SELECT-OPTIONS: s_sbwa FOR rfpdo2-sbwapera OBLIGATORY
NO INTERVALS
NO-EXTENSION.
SELECTION-SCREEN END OF BLOCK b1.
DATA: BEGIN OF t_dados OCCURS 0,
saknr LIKE ska1-saknr,
saknr_f(15),
txt45 LIKE skat-txt50, "rf011q-txt45,
setnr LIKE rf011s-setnr,
setvs LIKE rf011s-setvs,
ergsl LIKE rf011p-ergsl,
stufe LIKE rf011p-stufe,
prkey LIKE ddprof-value,
upkey LIKE ddprof-value,
origem,
color_line(4) TYPE c, " Line color
color_cell TYPE lvc_t_scol, " Cell color
balance_01 LIKE bapi1028_4-balance,
balance_02 LIKE bapi1028_4-balance,
balance_03 LIKE bapi1028_4-balance,
balance_04 LIKE bapi1028_4-balance,
balance_05 LIKE bapi1028_4-balance,
balance_06 LIKE bapi1028_4-balance,
balance_07 LIKE bapi1028_4-balance,
balance_08 LIKE bapi1028_4-balance,
balance_09 LIKE bapi1028_4-balance,
balance_10 LIKE bapi1028_4-balance,
balance_11 LIKE bapi1028_4-balance,
balance_12 LIKE bapi1028_4-balance,
balance_13 LIKE bapi1028_4-balance,
balance_14 LIKE bapi1028_4-balance,
balance_15 LIKE bapi1028_4-balance,
total LIKE bapi1028_4-balance,
END OF t_dados.
DATA: t_dados_aux LIKE t_dados OCCURS 0 WITH HEADER LINE.
START-OF-SELECTION.
PERFORM select_bukrs.
IF n_bukrs > 15 OR n_bukrs = 0.
MESSAGE e000.
* Erro não definido
ENDIF.
PERFORM select_structure.
PERFORM process_structure.
PERFORM load_accounts.
PERFORM format_balance.
DO n_bukrs TIMES.
PERFORM process_bukrs USING sy-index.
PERFORM process_sumup USING sy-index.
ENDDO.
PERFORM clear_items.
PERFORM sum_bukrs.
*----------------------------------------------------------------------*
* END-OF-SELECTION
*----------------------------------------------------------------------*
END-OF-SELECTION.
IF NOT t_dados[] IS INITIAL.
PERFORM output_alv.
ELSE.
MESSAGE e011.
ENDIF.
*&---------------------------------------------------------------------*
*& Form SELECT_STRUTCTURE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_structure .
*Estrutura do balancete
CALL FUNCTION 'FI_IMPORT_BALANCE_SHEET_POS'
EXPORTING
version = s_versn-low
TABLES
i011z = i011z
x011p = x011p
x011s = x011s
x011v = x011v
EXCEPTIONS
new_balance_sheet = 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.
CALL FUNCTION 'FI_IMPORT_BALANCE_SHEET_TEXT'
EXPORTING
version = s_versn-low
sprache = sy-langu
TABLES
x011q = x011q
EXCEPTIONS
text_not_found = 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.
* Seleciona contas
SELECT a~ktopl a~saknr b~txt50
INTO TABLE t_ska1
FROM ska1 AS a INNER JOIN
skat AS b ON a~ktopl EQ b~ktopl AND
a~saknr EQ b~saknr
WHERE a~ktopl IN s_ktopl AND
a~saknr IN s_saknr AND
b~spras EQ sy-langu.
ENDFORM. " SELECT_STRUTCTURE
*&---------------------------------------------------------------------*
*& Form PROCESS_STRUCTURE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM process_structure.
SORT x011s BY setvs setnr.
SORT x011q BY ergsl.
SORT x011p BY ergsl.
SORT i011z BY ergso.
LOOP AT x011s.
t_estrut-setnr = x011s-setnr.
t_estrut-setvs = x011s-setvs.
READ TABLE x011q WITH KEY ergsl = x011s-ergsl
BINARY SEARCH.
IF sy-subrc IS INITIAL.
READ TABLE x011p WITH KEY ergsl = x011s-ergsl BINARY SEARCH.
IF sy-subrc IS INITIAL.
t_estrut-ergsl = x011p-ergsl.
t_estrut-stufe = x011p-stufe.
t_estrut-prkey = x011p-prkey.
IF x011p-stufe EQ 1.
CONCATENATE '0' x011q-txt45(1)
INTO t_estrut-saknr.
t_estrut-txt45 = x011q-txt45+2(43).
ELSEIF x011p-stufe EQ 2.
CONCATENATE '0' x011q-txt45(1) x011q-txt45+2(1)
INTO t_estrut-saknr.
* t_estrut-saknr = x011q-txt45(3).
t_estrut-txt45 = x011q-txt45+4(41).
ELSEIF x011p-stufe EQ 3.
CONCATENATE '0' x011q-txt45(1) x011q-txt45+2(1)
x011q-txt45+4(2)
INTO t_estrut-saknr.
* t_estrut-saknr = x011q-txt45(6).
t_estrut-txt45 = x011q-txt45+7(38).
ELSEIF x011p-stufe EQ 4.
CONCATENATE '0' x011q-txt45(1) x011q-txt45+2(1)
x011q-txt45+4(2) x011q-txt45+7(2)
INTO t_estrut-saknr.
t_estrut-txt45 = x011q-txt45+10(35).
ENDIF.
APPEND t_estrut.
CLEAR: t_estrut.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. "process_structure
*&---------------------------------------------------------------------*
*& Form process_burks
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_LINE_BUKRS text
*----------------------------------------------------------------------*
FORM process_bukrs USING p_line_bukrs TYPE i.
DATA: v_bukrs TYPE bukrs,
v_saknr_len TYPE i,
v_stufe_len TYPE i,
n_bukrs(2) TYPE n,
field_name(20) TYPE c.
FIELD-SYMBOLS:
<dados> LIKE t_dados,
<bapicurr> TYPE bapisaldo.
READ TABLE t_bukrs INDEX p_line_bukrs INTO v_bukrs.
LOOP AT t_dados ASSIGNING <dados>.
<dados>-upkey = <dados>-prkey.
v_stufe_len = ( <dados>-stufe - 1 ) * 2.
* IF <dados>-stufe > 1.
IF <dados>-origem <> 'C'.
<dados>-upkey+v_stufe_len(2) = '00' .
ENDIF.
* ELSE.
* <dados>-upkey(2) = '00'.
* ENDIF.
v_saknr_len = STRLEN( <dados>-saknr ).
CHECK v_saknr_len = 10.
CALL FUNCTION 'BAPI_GL_GETGLACCPERIODBALANCES'
EXPORTING
companycode = v_bukrs
glacct = <dados>-saknr
fiscalyear = s_gjahr-low
currencytype = '10'
IMPORTING
balance_carried_forward = w_sld_ant
return = t_return
TABLES
account_balances = t_val.
READ TABLE t_val WITH KEY fis_period = s_sbwa-low.
IF sy-subrc IS INITIAL.
n_bukrs = p_line_bukrs.
CONCATENATE 'BALANCE_' n_bukrs INTO field_name.
ASSIGN COMPONENT field_name OF STRUCTURE <dados> TO <bapicurr>.
CHECK <bapicurr> IS ASSIGNED.
<bapicurr> = t_val-balance.
ENDIF.
ENDLOOP.
ENDFORM. " PROCESS_STRUCTURE
*&---------------------------------------------------------------------*
*& Form ZALV
*&---------------------------------------------------------------------*
FORM output_alv .
PERFORM f_field_catalog_merge.
PERFORM f_modify_field_catalog.
PERFORM f_set_layout.
PERFORM f_events_get.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = 'ZPRFI_BALANCETE_GROUP'
is_layout = tlayout
it_fieldcat = tfieldcat
* i_callback_top_of_page = 'XTOP_OF_PAGE'
it_events = tevents
TABLES
t_outtab = t_dados
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. " ZALV
*&---------------------------------------------------------------------*
*& Form f_field_catalog_merge
*&---------------------------------------------------------------------*
FORM f_field_catalog_merge .
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-cprog
i_internal_tabname = 'T_DADOS'
i_inclname = sy-cprog
i_bypassing_buffer = 'X'
CHANGING
ct_fieldcat = tfieldcat
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. " f_field_catalog_merge
*&---------------------------------------------------------------------*
*& Form f_modify_field_catalog
*&---------------------------------------------------------------------*
FORM f_modify_field_catalog .
PERFORM change_field_cat USING:
tfieldcat 'PRKEY' 'NO_OUT' 'X',
tfieldcat 'UPKEY' 'NO_OUT' 'X',
tfieldcat 'SETNR' 'NO_OUT' 'X',
* tfieldcat 'STUFE' 'NO_OUT' 'X',
tfieldcat 'TXT45' 'KEY' 'X',
tfieldcat 'TXT45' 'OUTPUTLEN' 25,
* tfieldcat 'ORIGEM' 'NO_OUT' 'X',
tfieldcat 'ERGSL' 'NO_OUT' 'X',
tfieldcat 'SETVS' 'NO_OUT' 'X',
tfieldcat 'TOTAL' 'SELTEXT_S' 'Total',
tfieldcat 'TOTAL' 'SELTEXT_M' 'Total',
tfieldcat 'TOTAL' 'SELTEXT_L' 'Total',
tfieldcat 'TOTAL' 'OUTPUTLEN' 25,
tfieldcat 'TOTAL' 'DECIMALS_OUT' 2,
tfieldcat 'TOTAL' 'REPTEXT_DDIC' 'Total',
tfieldcat 'SAKNR_F' 'NO_OUT' 'X'.
DATA:
hide_bukrs TYPE i,
field_name(20) TYPE c,
v_col(2) TYPE n,
w_bukrs LIKE LINE OF t_bukrs.
LOOP AT t_bukrs INTO w_bukrs.
v_col = sy-tabix.
CONCATENATE 'BALANCE_' v_col INTO field_name.
PERFORM change_field_cat USING:
tfieldcat field_name 'SELTEXT_S' w_bukrs-bukrs,
tfieldcat field_name 'SELTEXT_M' w_bukrs-bukrs,
tfieldcat field_name 'SELTEXT_L' w_bukrs-bukrs,
tfieldcat field_name 'OUTPUTLEN' 20,
tfieldcat field_name 'DECIMALS_OUT' 2,
tfieldcat field_name 'REPTEXT_DDIC' w_bukrs-bukrs.
ENDLOOP.
hide_bukrs = 15 - n_bukrs.
DO hide_bukrs TIMES.
v_col = n_bukrs + sy-index.
CONCATENATE 'BALANCE_' v_col INTO field_name.
PERFORM change_field_cat USING:
tfieldcat field_name 'NO_OUT' 'X'.
ENDDO.
ENDFORM. " f_modify_field_catalog
*&---------------------------------------------------------------------*
*& Form f_set_layout
*&---------------------------------------------------------------------*
FORM f_set_layout .
* tlayout-zebra = 'X'.
MOVE 'COLOR_LINE' TO tlayout-info_fieldname.
MOVE 'COLOR_CELL' TO tlayout-coltab_fieldname.
ENDFORM. " f_set_layout
*&---------------------------------------------------------------------*
*& Form f_events_get
*&---------------------------------------------------------------------*
FORM f_events_get .
DATA: revents TYPE slis_alv_event,
temp_events LIKE revents OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
i_list_type = 0
IMPORTING
et_events = tevents
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.
*
* temp_events[] = tevents[].
*
* READ TABLE tevents WITH KEY name = 'TOP_OF_PAGE'.
* IF sy-subrc = 0.
* MOVE 'XTOP_OF_PAGE' TO temp_events-form.
* MODIFY temp_events INDEX sy-tabix.
* ENDIF.
* tevents[] = temp_events[].
ENDFORM. " f_events_get
*&---------------------------------------------------------------------*
*& Form SELECT_BUKRS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_bukrs .
SELECT bukrs FROM t001
INTO TABLE t_bukrs
WHERE bukrs IN s_bukrs
AND ktopl IN s_ktopl.
DESCRIBE TABLE t_bukrs LINES n_bukrs.
SORT t_bukrs BY bukrs ASCENDING.
ENDFORM. " SELECT_BUKRS
*&---------------------------------------------------------------------*
*& Form LOAD_ACCOUNTS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM load_accounts .
LOOP AT t_estrut.
t_dados-saknr = t_estrut-saknr.
t_dados-txt45 = t_estrut-txt45.
t_dados-setnr = t_estrut-setnr.
t_dados-setvs = t_estrut-setvs.
t_dados-ergsl = t_estrut-ergsl.
t_dados-stufe = t_estrut-stufe.
t_dados-prkey = t_estrut-prkey.
t_dados-origem = ' '.
READ TABLE i011z WITH KEY ergso = t_estrut-ergsl
BINARY SEARCH.
IF sy-subrc IS INITIAL.
CLEAR: r_saknr. REFRESH: r_saknr.
APPEND t_dados.
LOOP AT i011z WHERE ergso EQ t_estrut-ergsl.
MOVE 'I' TO: r_saknr-sign.
MOVE 'BT' TO: r_saknr-option.
r_saknr-low = i011z-vonkt.
r_saknr-high = i011z-bilkt.
APPEND r_saknr.
CLEAR: r_saknr.
ENDLOOP.
LOOP AT t_ska1 WHERE saknr IN r_saknr.
t_dados-saknr = t_ska1-saknr.
t_dados-txt45 = t_ska1-txt50.
t_dados-setnr = t_estrut-setnr.
t_dados-setvs = t_estrut-setvs.
t_dados-ergsl = t_estrut-ergsl.
t_dados-stufe = t_estrut-stufe.
t_dados-origem = 'C'.
APPEND t_dados.
ENDLOOP.
ELSE.
APPEND t_dados.
ENDIF.
CLEAR: t_dados.
ENDLOOP.
ENDFORM. " LOAD_ACCOUNTS
*&---------------------------------------------------------------------*
*& Form FORMAT_BALANCE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM format_balance .
LOOP AT t_dados.
w_cont = STRLEN( t_dados-saknr ).
IF w_cont EQ 2.
t_dados-saknr_f = t_dados-saknr+1(1).
MOVE 'C111' TO t_dados-color_line.
MODIFY t_dados.
ELSEIF w_cont EQ 3.
CONCATENATE t_dados-saknr+1(1)
'.' t_dados-saknr+2(1) INTO t_dados-saknr_f.
* MOVE t_dados-saknr+1(1) TO t_dados-saknr_f.
MOVE 'C100' TO t_dados-color_line.
MODIFY t_dados.
ELSEIF w_cont EQ 5.
CONCATENATE t_dados-saknr+1(1)
'.' t_dados-saknr+2(1)
'.' t_dados-saknr+3(2) INTO t_dados-saknr_f.
* CONCATENATE t_dados-saknr+1(1)
* '.' t_dados-saknr+2(1) INTO t_dados-saknr_f.
MOVE 'C710' TO t_dados-color_line.
MODIFY t_dados.
ELSEIF w_cont EQ 7.
CONCATENATE t_dados-saknr+1(1)
'.' t_dados-saknr+2(1)
'.' t_dados-saknr+3(2)
'.' t_dados-saknr+5(2)
INTO t_dados-saknr_f.
* CONCATENATE t_dados-saknr+1(1)
* '.' t_dados-saknr+2(1)
* '.' t_dados-saknr+3(2) INTO t_dados-saknr_f.
MOVE 'C700' TO t_dados-color_line.
MODIFY t_dados.
ELSEIF w_cont EQ 10.
CONCATENATE t_dados-saknr+1(1)
'.' t_dados-saknr+2(1)
'.' t_dados-saknr+3(2)
'.' t_dados-saknr+5(2)
'.' t_dados-saknr+7(3) INTO t_dados-saknr_f.
MODIFY t_dados.
ENDIF.
ENDLOOP.
ENDFORM. " FORMAT_BALANCE
*&---------------------------------------------------------------------*
*& Form change_field_cat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->$TFCAT text
* -->VALUE($FIELD) text
* -->VALUE($COLUMN) text
* -->VALUE($VALUE) text
*----------------------------------------------------------------------*
FORM change_field_cat USING $tfcat TYPE slis_t_fieldcat_alv
value($field)
value($column)
value($value).
FIELD-SYMBOLS: <fcat> LIKE LINE OF $tfcat,
<field> TYPE ANY.
READ TABLE $tfcat ASSIGNING <fcat> WITH KEY fieldname = $field.
CHECK sy-subrc IS INITIAL.
CHECK <fcat> IS ASSIGNED.
ASSIGN COMPONENT $column OF STRUCTURE <fcat> TO <field>.
CHECK <field> IS ASSIGNED.
<field> = $value.
ENDFORM. " CHANGE_FIELD_CAT
*&---------------------------------------------------------------------*
*& Form PROCESS_SUMUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_SY_INDEX text
*----------------------------------------------------------------------*
FORM process_sumup USING p_sy_index.
DATA: n_bukrs(2) TYPE n,
field_name(20) TYPE c,
total TYPE bapisaldo.
FIELD-SYMBOLS:
<dados> LIKE t_dados,
<bapicurr> TYPE bapisaldo.
LOOP AT t_dados ASSIGNING <dados>.
CHECK <dados>-origem <> 'C'.
n_bukrs = p_sy_index.
CONCATENATE 'BALANCE_' n_bukrs INTO field_name.
ASSIGN COMPONENT field_name OF STRUCTURE <dados> TO <bapicurr>.
CHECK <bapicurr> IS ASSIGNED.
PERFORM calc_sum USING <dados>-prkey p_sy_index total.
<bapicurr> = total.
ENDLOOP.
ENDFORM. "process_sumup
*&---------------------------------------------------------------------*
*& Form CALC_SUM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_<DADOS>_PRKEY text
* -->P_P_SY_INDEX text
* -->P_TOTAL text
*----------------------------------------------------------------------*
FORM calc_sum USING p_prkey TYPE char20
p_sy_index TYPE i
p_total TYPE bapisaldo.
DATA: n_bukrs(2) TYPE n,
field_name(20) TYPE c,
sub_total TYPE bapisaldo.
FIELD-SYMBOLS: <dados> LIKE t_dados,
<bapicurr> TYPE bapisaldo.
n_bukrs = p_sy_index.
CLEAR p_total.
LOOP AT t_dados ASSIGNING <dados> WHERE upkey = p_prkey .
* if <dados>-upkey = p_prkey.
* PERFORM calc_sum USING <dados>-prkey p_sy_index sub_total.
* p_total = p_total + sub_total.
* endif.
* CHECK <dados>-upkey = p_prkey.
IF <dados>-origem <> 'C'.
PERFORM calc_sum USING <dados>-prkey p_sy_index sub_total.
p_total = p_total + sub_total.
ENDIF.
CONCATENATE 'BALANCE_' n_bukrs INTO field_name.
ASSIGN COMPONENT field_name OF STRUCTURE <dados> TO <bapicurr>.
CHECK <bapicurr> IS ASSIGNED.
p_total = p_total + <bapicurr>.
ENDLOOP.
ENDFORM. " CALC_SUM
*&---------------------------------------------------------------------*
*& Form SUM_BUKRS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM sum_bukrs .
DATA: field_name(20) TYPE c,
sub_total TYPE bapisaldo.
FIELD-SYMBOLS:
<dados> LIKE t_dados,
<bapicurr> TYPE bapisaldo.
LOOP AT t_dados ASSIGNING <dados>.
ADD <dados>-balance_01 FROM 1 TO n_bukrs GIVING <dados>-total.
ENDLOOP.
ENDFORM. " SUM_BUKRS
*&---------------------------------------------------------------------*
*& Form CLEAR_ITEMS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM clear_items .
DATA: dados LIKE t_dados,
max_stufe TYPE i VALUE 4,
v_stufe TYPE i.
DO max_stufe TIMES.
v_stufe = max_stufe + 1 - sy-index.
LOOP AT t_dados INTO dados WHERE origem <> 'C' AND stufe = v_stufe.
READ TABLE t_dados WITH KEY upkey = dados-prkey
TRANSPORTING NO FIELDS.
IF sy-subrc IS NOT INITIAL.
DELETE t_dados WHERE prkey = dados-prkey.
ENDIF.
ENDLOOP.
ENDDO.
ENDFORM. " CLEAR_ITEMS
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment