‎2007 May 29 3:49 PM
Hello,
I'm trying to use
cl_alv_table_create=>create_dynamic_tablebut i receive a dump saying <i>Program " " not found </i>.
Here follows the code:
*&---------------------------------------------------------------------*
*& Include Z3DDR002TOP *
*& *
*&---------------------------------------------------------------------*
PROGRAM z3ddr002 NO STANDARD PAGE HEADING.
TYPE-POOLS: slis.
.
.
.
* ALV
DATA: new_table TYPE REF TO data,
new_line TYPE REF TO data.
DATA: it_fldcat TYPE lvc_t_fcat,
wa_it_fldcat TYPE lvc_s_fcat.
*&---------------------------------------------------------------------*
*& Form constroi_fieldcatalog
*&---------------------------------------------------------------------*
FORM constroi_fieldcatalog.
DATA: flds_count TYPE i,
cnt TYPE i,
x_datec(8) TYPE c,
x_date LIKE sy-datum.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'BUKRS'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 4.
wa_it_fldcat-outputlen = 4.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'BUKRS' '<dyn_table>' text-h00
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'SWENR'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'SWENR' '<dyn_table>' text-h01
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'SMIVE'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 13.
wa_it_fldcat-outputlen = 13.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'SMIVE' '<dyn_table>' text-h02
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'SMENR'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'SMENR' '<dyn_table>' text-h03
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'ZZNMFAN'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 40.
wa_it_fldcat-outputlen = 40.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'ZZNMFAN' '<dyn_table>' text-h04
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'ALT'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 3.
wa_it_fldcat-outputlen = 3.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'ALT' '<dyn_table>' text-h05
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'DMIBEG'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'DATS'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'DMIBEG' '<dyn_table>' text-h06
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'DMIEND'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'DATS'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'DMIEND' '<dyn_table>' text-h07
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'DMIEND'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'DATS'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'LAST_ACT' '<dyn_table>' text-h08
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'DMIEND'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'DATS'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'P_DATE' '<dyn_table>' text-h09
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'BKOND'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-currency = 'BRL'.
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-outputlen = 20.
wa_it_fldcat-intlen = 15.
APPEND wa_it_fldcat TO it_fldcat .
PERFORM append_fieldcatalog USING 'BKOND' '<dyn_table>' text-h10
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'MONAT'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 16.
wa_it_fldcat-outputlen = 16.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'MONAT' '<dyn_table>' text-h11
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'LINEAR'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-currency = 'BRL'.
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-outputlen = 20.
wa_it_fldcat-intlen = 15.
APPEND wa_it_fldcat TO it_fldcat .
PERFORM append_fieldcatalog USING 'LINEAR' '<dyn_table>' text-h12
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'DELTA'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-currency = 'BRL'.
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-outputlen = 20.
wa_it_fldcat-intlen = 15.
APPEND wa_it_fldcat TO it_fldcat .
PERFORM append_fieldcatalog USING 'DELTA' '<dyn_table>' text-h13
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'CONTROL'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-currency = 'BRL'.
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-outputlen = 20.
wa_it_fldcat-intlen = 15.
APPEND wa_it_fldcat TO it_fldcat .
PERFORM append_fieldcatalog USING 'CONTROL' '<dyn_table>' text-h14
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
MOVE '01' TO p_date+6(2).
*** Dado de teste
MOVE 2 TO max_months.
*** Dado de teste
DO max_months TIMES.
CLEAR wa_it_fldcat.
CALL FUNCTION 'RE_ADD_MONTH_TO_DATE'
EXPORTING
months = cnt
olddate = p_date
IMPORTING
newdate = x_date.
CONCATENATE x_date+4(2) '-' x_date(4) INTO x_mes_ano.
WRITE x_mes_ano TO wa_it_fldcat-fieldname.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-currency = 'BRL'.
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-outputlen = 20.
wa_it_fldcat-intlen = 15.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING wa_it_fldcat-fieldname
'<dyn_table>' text-h14 flds_count
'' '' '' '' '' '' ''
'' '' ''.
ADD 1 TO flds_count.
ADD 1 TO cnt.
ENDDO.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fldcat
IMPORTING
ep_table = new_table.
ASSIGN new_table->* TO <dyn_table>.
ENDFORM. " constroi_fieldcatalog
*&---------------------------------------------------------------------*
*& Form append_fieldcatalog
*&---------------------------------------------------------------------*
FORM append_fieldcatalog USING i_fieldname TYPE any
i_tabname TYPE any
i_seltext_m TYPE any
i_col_pos TYPE any
i_ref_fieldname TYPE any
i_ref_tabname TYPE any
i_key TYPE any
i_text TYPE any
i_checkbox TYPE any
i_edit TYPE any
i_no_out TYPE any
i_hotspot TYPE any
i_sum TYPE any
i_inttype TYPE any.
CLEAR fieldcatalog.
fieldcatalog-fieldname = i_fieldname.
fieldcatalog-tabname = i_tabname.
fieldcatalog-col_pos = i_col_pos.
fieldcatalog-seltext_m = i_seltext_m.
fieldcatalog-ref_fieldname = i_ref_fieldname.
fieldcatalog-ref_tabname = i_ref_tabname.
fieldcatalog-key = i_key.
fieldcatalog-reptext_ddic = i_text.
fieldcatalog-checkbox = i_checkbox.
fieldcatalog-edit = i_edit.
fieldcatalog-no_out = i_no_out.
fieldcatalog-hotspot = i_hotspot.
fieldcatalog-do_sum = i_sum.
fieldcatalog-inttype = i_inttype.
APPEND fieldcatalog.
CLEAR fieldcatalog.
ENDFORM. " append_fieldcatalog
What can be wrong?
Best Regards,
Pedro Gaspar
‎2007 May 29 4:37 PM
Hi,
I am not sure whether you have pasted the entire code bcz it doesnt seem to be complete code.
I dont see any Start-of-Selection/End-of-selection event, nor any call to any of the forms using PERFORM statement.
Simply defining a class & its method wont serve the purpose.
Best regards,
Prashant
‎2007 May 29 4:52 PM
Hello Prashant,
Here it goes the complete code:
*&---------------------------------------------------------------------*
*& Programa Z3DDR002 *
*& Mapa de Linearização de Contratos *
*&---------------------------------------------------------------------*
*& Sonae Sierra *
*& Pedro Gaspar - 24.05.2007 *
*&---------------------------------------------------------------------*
INCLUDE z3ddr002top.
INCLUDE z3ddr001c01. " Definições e Implementações de Classes
INCLUDE z3ddr002f01.
AT SELECTION-SCREEN.
* toDo Implementar impossibilidade de pedir datas futuras?
IF p_date GT sy-datum.
MESSAGE e995(z3) WITH text-m00.
ENDIF.
* Bloco de Selecção de Dados
*----------------------------------------------------------------------*
START-OF-SELECTION.
* Adiciona Condições de Aluguer ao Range de Condições de Aluguer
CALL METHOD crange=>add:
EXPORTING low = '0010' CHANGING range = r_skoart,
EXPORTING low = '0020' CHANGING range = r_skoart,
EXPORTING low = '0040' CHANGING range = r_skoart,
EXPORTING low = '0170' CHANGING range = r_skoart,
EXPORTING low = '0300' CHANGING range = r_skoart,
EXPORTING low = '0320' CHANGING range = r_skoart,
EXPORTING low = '0915' CHANGING range = r_skoart.
PERFORM selecciona_dados.
* Bloco Após Selecção de Dados
*----------------------------------------------------------------------*
END-OF-SELECTION.
* Calcula facturacao do processamento antigo
PERFORM calcula_facturacao USING t_zcondsnapshots_old.
LOOP AT t_cond_monthly_value INTO w_cond_monthly_value.
MOVE-CORRESPONDING w_cond_monthly_value TO w_total_old.
COLLECT w_total_old INTO t_total_old.
ENDLOOP.
* Calcula facturacao do processamento novo
PERFORM calcula_facturacao USING t_zcondsnapshots.
* Preenche tabelas com dados para apresentação
PERFORM prepara_dados.
* Cria fieldcatalog Dinâmico
PERFORM constroi_fieldcatalog.
* Alimenta a Tabela Dinâmica com Dados
PERFORM alimenta_tabela_dyn.
* Apresenta ALV
PERFORM apresenta_alv.
*----------------------------------------------------------------------*
* Fim de Programa
*&---------------------------------------------------------------------*
*& Include Z3DDR002TOP *
*& *
*&---------------------------------------------------------------------*
PROGRAM z3ddr002.
TYPE-POOLS: slis.
DATA: w_zcondsnapshots TYPE zcondsnapshots,
w_vimimv TYPE vimimv,
w_vzzkopo TYPE vzzkopo,
w_vikoko TYPE vikoko.
DATA: BEGIN OF w_conds,
intreno LIKE vimimv-intreno,
skoart LIKE vzzkopo-skoart,
dguel_kp LIKE vzzkopo-dguel_kp,
bkond LIKE vzzkopo-bkond,
END OF w_conds.
DATA: BEGIN OF w_cond_monthly_value,
intreno LIKE vimimv-intreno,
monat(2) TYPE n,
gjahr(4) TYPE n,
skoart LIKE vzzkopo-skoart,
max_days(2) TYPE n,
bkond LIKE vzzkopo-bkond,
szbmeth LIKE vikoko-szbmeth,
END OF w_cond_monthly_value.
DATA: BEGIN OF w_total_old,
intreno LIKE vimimv-intreno,
bkond LIKE vzzkopo-bkond,
END OF w_total_old.
DATA: BEGIN OF w_total,
intreno LIKE vimimv-intreno,
bukrs LIKE vimimv-bukrs,
swenr LIKE vimimv-swenr,
smive LIKE vimimv-smive,
smenr LIKE vimimv-smenr,
zznmfan LIKE vimimv-zznmfan,
alt TYPE c,
dmibeg LIKE vimimv-dmibeg,
dmiend LIKE vimimv-dmiend,
last_act LIKE sy-datum,
p_date LIKE sy-datum,
bkond LIKE vzzkopo-bkond,
monat LIKE komp-anz_monate,
linear LIKE vzzkopo-bkond,
delta LIKE vzzkopo-bkond,
control LIKE vzzkopo-bkond,
color(4) TYPE c,
END OF w_total.
DATA: t_zcondsnapshots LIKE TABLE OF w_zcondsnapshots,
t_zcondsnapshots_old LIKE TABLE OF w_zcondsnapshots,
t_vimimv LIKE TABLE OF w_vimimv,
t_conds LIKE TABLE OF w_conds,
t_conds_aux LIKE TABLE OF w_conds,
t_conds_to_charge LIKE TABLE OF w_conds,
t_cond_monthly_value LIKE TABLE OF w_cond_monthly_value,
t_total_old LIKE TABLE OF w_total_old,
t_total LIKE TABLE OF w_total.
* Ranges
DATA: r_skoart TYPE RANGE OF skoart.
* ALV
DATA: new_table TYPE REF TO data,
new_line TYPE REF TO data.
DATA: it_fldcat TYPE lvc_t_fcat,
wa_it_fldcat TYPE lvc_s_fcat.
DATA: fieldcatalog TYPE slis_t_fieldcat_alv WITH HEADER LINE,
gd_tab_group TYPE slis_t_sp_group_alv,
gd_layout TYPE slis_layout_alv,
gd_event TYPE slis_t_event,
gd_repid LIKE sy-repid.
DATA: x_date TYPE sy-datum,
x_days(2) TYPE n,
x_months LIKE komp-anz_monate,
x_monat(2) TYPE n,
x_gjahr(4) TYPE n,
x_mes_ano(7) TYPE c,
my_subrc LIKE sy-subrc,
last_intreno LIKE vimimv-intreno,
last_skoart LIKE vzzkopo-skoart,
last_dguel_kp LIKE vzzkopo-dguel_kp,
max_months LIKE komp-anz_monate.
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_wa>.
FIELD-SYMBOLS: <fs1>.
* Écran de Selecção
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-s01.
PARAMETERS: p_date LIKE sy-datum.
SELECTION-SCREEN END OF BLOCK b1.
*----------------------------------------------------------------------*
* INCLUDE Z3DDR001C01 *
*----------------------------------------------------------------------*
*INCLUDE: <icon>.
*
**---------------------------------------------------------------------*
** CLASS cdata DEFINITION
**---------------------------------------------------------------------*
** ........ *
**---------------------------------------------------------------------*
*CLASS cdata DEFINITION.
* PUBLIC SECTION.
* DATA: info TYPE REF TO data.
*
* METHODS constructor
* IMPORTING
* data TYPE any OPTIONAL
* table TYPE table OPTIONAL.
*
* METHODS add_data
* CHANGING
* data TYPE any OPTIONAL
* table TYPE table OPTIONAL.
*
* METHODS field
* IMPORTING
* fieldname TYPE any
* RETURNING
* value(field_value) TYPE REF TO data.
*
* METHODS get_field
* IMPORTING
* fieldname TYPE any
* EXPORTING
* field_value TYPE any.
*
* METHODS row
* IMPORTING
* index TYPE i
* RETURNING
* value(row) TYPE REF TO data.
*ENDCLASS. "cdata DEFINITION
*
**---------------------------------------------------------------------*
** CLASS cdata IMPLEMENTATION
**---------------------------------------------------------------------*
** ........ *
**---------------------------------------------------------------------*
*CLASS cdata IMPLEMENTATION.
* METHOD constructor.
* IF NOT data IS INITIAL.
* GET REFERENCE OF data INTO info.
* ENDIF.
*
* IF NOT table IS INITIAL.
* GET REFERENCE OF table INTO info.
* ENDIF.
* ENDMETHOD. "constructor
*
* METHOD add_data.
* IF NOT data IS INITIAL.
* GET REFERENCE OF data INTO info.
* ENDIF.
*
* IF NOT table IS INITIAL.
* GET REFERENCE OF table INTO info.
* ENDIF.
* ENDMETHOD. "add_data
*
* METHOD get_field.
* FIELD-SYMBOLS: <info> TYPE ANY,
* <field_value> TYPE ANY.
*
* ASSIGN info->* TO <info>.
* ASSIGN COMPONENT fieldname OF STRUCTURE <info> TO <field_value>.
*
* IF sy-subrc = 0.
* field_value = <field_value>.
* ELSE.
* CLEAR field_value.
* ENDIF.
* ENDMETHOD. "get_field
*
* METHOD field.
* FIELD-SYMBOLS: <info> TYPE ANY,
* <field_value> TYPE ANY.
*
* ASSIGN info->* TO <info>.
* ASSIGN COMPONENT fieldname OF STRUCTURE <info> TO <field_value>.
*
* IF sy-subrc = 0.
* GET REFERENCE OF <field_value> INTO field_value.
* ELSE.
* CLEAR field_value.
* ENDIF.
* ENDMETHOD. "field
*
* METHOD row.
* FIELD-SYMBOLS: <table> TYPE table,
* <row> TYPE ANY.
*
* ASSIGN info->* TO <table>.
*
* READ TABLE <table>
* ASSIGNING <row>
* INDEX index.
*
* IF sy-subrc = 0.
* GET REFERENCE OF <row> INTO row.
* ELSE.
* CLEAR row.
* ENDIF.
* ENDMETHOD. "row
*ENDCLASS. "cdata IMPLEMENTATION
*
**---------------------------------------------------------------------*
** CLASS cdate DEFINITION
**---------------------------------------------------------------------*
**
**---------------------------------------------------------------------*
*CLASS cdate DEFINITION.
* PUBLIC SECTION.
* CLASS-METHODS get_age
* IMPORTING begda TYPE datum
* endda TYPE datum DEFAULT sy-datum
* RETURNING value(age) TYPE i.
*
* CLASS-METHODS add_months
* IMPORTING months TYPE i
* date TYPE datum
* RETURNING value(date_after) TYPE datum.
*
* CLASS-METHODS subtract_months
* IMPORTING months TYPE any
* date TYPE datum
* RETURNING value(date_after) TYPE datum.
*
* CLASS-METHODS add_days30
* IMPORTING days TYPE i
* date TYPE datum
* RETURNING value(date_after) TYPE datum.
*
* CLASS-METHODS add_days_30_split
* IMPORTING total_days TYPE i
* CHANGING years TYPE i
* months TYPE i
* days TYPE i.
*
* CLASS-METHODS month_last_day
* IMPORTING
* year TYPE numc04
* month TYPE numc2
* RETURNING
* value(date) TYPE datum.
*
* CLASS-METHODS add_period
* IMPORTING
* VALUE type i default 1
* CHANGING
* year TYPE numc04
* month TYPE numc2.
*
* CLASS-METHODS set_period_text
* IMPORTING
* date TYPE datum OPTIONAL
* year TYPE any OPTIONAL
* month TYPE any OPTIONAL
* separator TYPE char1 DEFAULT '-'
* RETURNING
* value(period_text) TYPE text20.
*ENDCLASS. "cdate DEFINITION
*
**---------------------------------------------------------------------*
** CLASS CDATE IMPLEMENTATION
**---------------------------------------------------------------------*
**
**---------------------------------------------------------------------*
*CLASS cdate IMPLEMENTATION.
* METHOD get_age.
* age = endda(4) - begda(4).
*
* IF endda+4(2) < begda+4(2).
* age = age - 1.
* ELSEIF endda+4(2) = begda+4(2).
* IF endda+6(2) < begda+6(2).
* age = age - 1.
* ENDIF.
* ENDIF.
* ENDMETHOD. "get_age
*
* METHOD add_months.
* date_after = date.
*
* DO months TIMES.
* ADD 1 TO date_after(6).
*
* IF date_after+4(2) > 12.
* ADD 1 TO date_after(4).
* date_after+4(2) = '01'.
* ENDIF.
* ENDDO.
* ENDMETHOD. "add_months
*
* METHOD subtract_months.
* date_after = date.
*
* DO months TIMES.
* SUBTRACT 1 FROM date_after(6).
*
* IF date_after+4(2) = 0.
* SUBTRACT 1 FROM date_after(4).
* date_after+4(2) = '12'.
* ENDIF.
* ENDDO.
* ENDMETHOD. "subtract_months
*
* METHOD add_days30.
* DATA: lv_months TYPE i,
* lv_days TYPE i,
* lv_days_to_month TYPE i,
* lv_period TYPE iperi.
*
* date_after = date.
*
* lv_months = days DIV 30.
* lv_days = days MOD 30.
*
* date_after = add_months( months = lv_months date = date_after ).
*
* lv_days_to_month = 30 - date_after+6(2).
*
* IF lv_days > lv_days_to_month.
* date_after = add_months( months = 1 date = date_after ).
* date_after+6(2) = lv_days - lv_days_to_month.
* ELSE.
* lv_period = date_after(6).
* ADD lv_days TO date_after.
*
* IF date_after(6) > lv_period.
* date_after+6(2) = '01'.
* SUBTRACT 1 FROM date_after.
* ENDIF.
* ENDIF.
* ENDMETHOD. "add_days30
*
* METHOD add_days_30_split.
* DATA: lv_years TYPE i,
* lv_months TYPE i,
* lv_days TYPE i.
*
* CLEAR: lv_years,
* lv_months,
* lv_days.
*
* lv_years = total_days DIV 365.
* lv_days = total_days MOD 365.
*
* IF lv_days > 30.
* lv_months = lv_days DIV 30.
* lv_days = lv_days MOD 30.
* ENDIF.
*
* ADD lv_years TO years.
* ADD lv_months TO months.
* ADD lv_days TO days.
* ENDMETHOD. "add_days_30_split
*
* METHOD month_last_day.
* date = year.
*
* IF month = '12'.
* date+4(4) = '1231'.
* ELSE.
* date+4(2) = month + 1.
* date+6(2) = '01'.
*
* SUBTRACT 1 FROM date.
* ENDIF.
* ENDMETHOD. "month_last_day
*
* METHOD add_period.
* DATA: lv_date TYPE datum,
* lv_value TYPE i.
*
* lv_value = abs( value ).
*
* lv_date(4) = year.
* lv_date+4(2) = month.
* lv_date+6(2) = '01'.
*
* IF value > 0.
* lv_date = add_months( date = lv_date months = lv_value ).
* ELSE.
* lv_date = subtract_months( date = lv_date months = lv_value ).
* ENDIF.
*
* year = lv_date(4).
* month = lv_date+4(2).
* ENDMETHOD. "add_period
*
* METHOD set_period_text.
* DATA: lt_months TYPE TABLE OF t247,
* ls_months TYPE t247,
* lv_year TYPE gjahr,
* lv_month TYPE monat.
*
* IF NOT date IS INITIAL.
* lv_year = date(4).
* lv_month = date+4(2).
* ELSE.
* lv_year = year.
* lv_month = month.
* ENDIF.
*
* CALL FUNCTION 'MONTH_NAMES_GET'
* TABLES
* month_names = lt_months[]
* EXCEPTIONS
* month_names_not_found = 1
* OTHERS = 2.
*
* READ TABLE lt_months
* INTO ls_months
* WITH KEY mnr = lv_month.
*
* IF sy-subrc IS INITIAL.
* CONCATENATE ls_months-ltx(3) separator lv_year+2(2)
* INTO period_text.
*
* CONDENSE period_text.
* ENDIF.
* ENDMETHOD. "set_period_text
*ENDCLASS. "CDATE IMPLEMENTATION
*
*---------------------------------------------------------------------*
* CLASS cstring DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS cstring DEFINITION.
PUBLIC SECTION.
CLASS-METHODS conc
IMPORTING
text1 TYPE any
text2 TYPE any
text3 TYPE any OPTIONAL
text4 TYPE any OPTIONAL
RETURNING
value(text) TYPE text132.
ENDCLASS. "cstring DEFINITION
*---------------------------------------------------------------------*
* CLASS cstring IMPLEMENTATION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
CLASS cstring IMPLEMENTATION.
METHOD conc.
DATA: lv_text1 TYPE text132,
lv_text2 TYPE text132,
lv_text3 TYPE text132,
lv_text4 TYPE text132.
WRITE: text1 TO lv_text1,
text2 TO lv_text2.
CONDENSE: lv_text1,
lv_text2.
IF NOT text3 IS INITIAL.
WRITE text3 TO lv_text3.
CONDENSE lv_text3.
ENDIF.
IF NOT text4 IS INITIAL.
WRITE text4 TO lv_text4.
CONDENSE lv_text4.
ENDIF.
CONCATENATE lv_text1 lv_text2 lv_text3 lv_text4
INTO text SEPARATED BY space.
ENDMETHOD. "conc
ENDCLASS. "cstring IMPLEMENTATION
**---------------------------------------------------------------------*
** CLASS cdic DEFINITION
**---------------------------------------------------------------------*
**
**---------------------------------------------------------------------*
*CLASS cdic DEFINITION.
* PUBLIC SECTION.
* CLASS-METHODS domain_text
* IMPORTING domain TYPE any
* VALUE type any
* RETURNING value(text) TYPE val_text.
*
* CLASS-METHODS data_element_text
* IMPORTING rollname TYPE any
* RETURNING value(text) TYPE scrtext_l.
*
* CLASS-METHODS field_attributes
* IMPORTING
* table TYPE any
* field TYPE any
* CHANGING
* info TYPE dd03l OPTIONAL
* text TYPE scrtext_l OPTIONAL.
*
* CLASS-METHODS split_name
* IMPORTING
* name TYPE any
* CHANGING
* fieldname TYPE fieldname OPTIONAL
* tabname TYPE tabname OPTIONAL
* subrc TYPE subrc OPTIONAL.
*
* CLASS-METHODS field_part
* IMPORTING
* name TYPE any
* RETURNING
* value(field) TYPE fieldname.
*
* CLASS-METHODS tab_part
* IMPORTING
* name TYPE any
* RETURNING
* value(tab) TYPE tabname.
*ENDCLASS. "cdic DEFINITION
*
**---------------------------------------------------------------------*
** CLASS cdic IMPLEMENTATION
**---------------------------------------------------------------------*
**
**---------------------------------------------------------------------*
*CLASS cdic IMPLEMENTATION.
* METHOD domain_text.
* DATA: lv_value TYPE domvalue_l,
* lv_domain_info TYPE dd07v.
*
* CLEAR text.
*
* lv_value = value.
*
* CALL FUNCTION 'DDUT_DOMVALUE_TEXT_GET'
* EXPORTING
* name = domain
* value = lv_value
* IMPORTING
* dd07v_wa = lv_domain_info
* EXCEPTIONS
* not_found = 1
* illegal_input = 2
* OTHERS = 3.
*
* IF sy-subrc = 0.
* text = lv_domain_info-ddtext.
* ENDIF.
* ENDMETHOD. "domain_text
*
* METHOD data_element_text.
* CLEAR text.
* SELECT SINGLE scrtext_l
* INTO text
* FROM dd04t
* WHERE rollname = rollname
* AND ddlanguage = sy-langu
* AND as4local = 'A'
* AND as4vers = '0000'.
* ENDMETHOD. "data_element_text
*
* METHOD field_attributes.
* CLEAR: info,
* text.
*
* SELECT *
* INTO info
* FROM dd03l UP TO 1 ROWS
* WHERE tabname = table
* AND fieldname = field
* AND as4local = 'A'
* AND as4vers = '0000'.
* text = data_element_text( info-rollname ).
* ENDSELECT.
* ENDMETHOD. "field_attributes
*
* METHOD split_name.
* CLEAR: tabname,
* fieldname.
*
* SPLIT name AT '-' INTO tabname fieldname.
*
* subrc = sy-subrc.
* ENDMETHOD. "split_name
*
* METHOD field_part.
* CALL METHOD split_name
* EXPORTING
* name = name
* CHANGING
* fieldname = field.
* ENDMETHOD. "field_part
*
* METHOD tab_part.
* CALL METHOD split_name
* EXPORTING
* name = name
* CHANGING
* tabname = tab.
* ENDMETHOD. "tab_part
*ENDCLASS. "cdic IMPLEMENTATION
**---------------------------------------------------------------------*
** CLASS cpopup DEFINITION
**---------------------------------------------------------------------*
**
**---------------------------------------------------------------------*
*CLASS cpopup DEFINITION.
* PUBLIC SECTION.
* DATA: fields TYPE TABLE OF sval.
*
* METHODS constructor.
*
* METHODS add_field
* IMPORTING
* field TYPE any
* comp_field TYPE any OPTIONAL
* text TYPE any OPTIONAL
* VALUE type any optional
* mode TYPE any DEFAULT space
* obligatory TYPE any DEFAULT space
* no_value_help TYPE any DEFAULT space.
*
* METHODS get_value
* IMPORTING
* field TYPE any
* RETURNING
* value(field_value) TYPE spo_value.
*
* METHODS display
* IMPORTING
* title TYPE any
* column TYPE i DEFAULT 30
* row TYPE i DEFAULT 5
* CHANGING
* answer TYPE char1 OPTIONAL.
*
* CLASS-METHODS table_select
* IMPORTING
* title TYPE any DEFAULT 'Escolher Opção'
* list TYPE table
* field TYPE fieldname
* current TYPE i DEFAULT 1
* column TYPE i DEFAULT 20
* row TYPE i DEFAULT 5
* display_only TYPE c DEFAULT space
* CHANGING
* option TYPE i
* answer TYPE c OPTIONAL
* subrc TYPE subrc OPTIONAL.
*
* CLASS-METHODS ask
* IMPORTING
* title TYPE any
* question TYPE any
* yes TYPE any DEFAULT 'Sim'
* no TYPE any DEFAULT 'Não'
* cancel_display TYPE c DEFAULT 'X'
* popup_type TYPE iconname OPTIONAL
* CHANGING
* answer TYPE c OPTIONAL
* subrc TYPE subrc OPTIONAL.
*
* CLASS-METHODS confirm
* IMPORTING
* title TYPE c
* text1 TYPE c
* text2 TYPE c OPTIONAL
* text3 TYPE c OPTIONAL
* line1 TYPE c
* line2 TYPE c OPTIONAL
* default TYPE c DEFAULT 'Y'
* start_column TYPE i DEFAULT 25
* start_row TYPE i DEFAULT 6
* cancel_display TYPE c DEFAULT 'X'
* CHANGING
* answer TYPE c OPTIONAL
* subrc TYPE subrc OPTIONAL.
*ENDCLASS. "cpopup DEFINITION
*
**---------------------------------------------------------------------*
** CLASS cpopup IMPLEMENTATION
**---------------------------------------------------------------------*
**
**---------------------------------------------------------------------*
*CLASS cpopup IMPLEMENTATION.
* METHOD constructor.
* CLEAR: me->fields.
* ENDMETHOD. "constructor
*
* METHOD add_field.
* DATA: ls_field TYPE sval,
* lv_field TYPE fieldname,
* lv_table TYPE tabname,
* lv_comp_field TYPE fieldname,
* lv_comp_table TYPE fieldname.
*
* CLEAR: lv_table,
* lv_field,
* lv_comp_table,
* lv_comp_field.
*
* CALL METHOD cdic=>split_name
* EXPORTING
* name = field
* CHANGING
* tabname = lv_table
* fieldname = lv_field.
*
*
* IF NOT comp_field IS INITIAL.
* CALL METHOD cdic=>split_name
* EXPORTING
* name = comp_field
* CHANGING
* tabname = lv_comp_table
* fieldname = lv_comp_field.
* ENDIF.
*
* CLEAR ls_field.
* ls_field-tabname = lv_table.
* ls_field-fieldname = lv_field.
* ls_field-value = value.
* ls_field-field_attr = mode.
* ls_field-field_obl = obligatory.
* ls_field-fieldtext = text.
* ls_field-novaluehlp = no_value_help.
* ls_field-comp_tab = lv_comp_table.
* ls_field-comp_field = lv_comp_field.
* APPEND ls_field TO fields.
* ENDMETHOD. "add_field
*
* METHOD get_value.
* DATA: ls_field TYPE sval,
* lv_field TYPE fieldname,
* lv_table TYPE tabname.
*
* CALL METHOD cdic=>split_name
* EXPORTING
* name = field
* CHANGING
* tabname = lv_table
* fieldname = lv_field.
*
* CLEAR field_value.
*
* LOOP AT fields
* INTO ls_field
* WHERE tabname = lv_table
* AND fieldname = lv_field.
* field_value = ls_field-value.
* ENDLOOP.
* ENDMETHOD. "get_value
*
* METHOD display.
* CALL FUNCTION 'POPUP_GET_VALUES'
* EXPORTING
* popup_title = title
* start_column = column
* start_row = row
* IMPORTING
* returncode = answer
* TABLES
* fields = fields
* EXCEPTIONS
* error_in_fields = 1
* OTHERS = 2.
* ENDMETHOD. "display
*
* METHOD table_select.
******** Obsoleto substituido pela classe CPOPUP_SELECT
******************
*
* FIELD-SYMBOLS: <list> TYPE ANY,
* <value> TYPE ANY.
*
* DATA: lt_spopli TYPE STANDARD TABLE OF spopli,
* ls_spopli TYPE spopli.
*
* FREE lt_spopli.
*
* CLEAR: option,
* answer,
* subrc.
*
* LOOP AT list ASSIGNING <list>.
* ASSIGN COMPONENT field OF STRUCTURE <list> TO <value>.
*
* IF sy-subrc = 0.
* CLEAR ls_spopli.
* ls_spopli-varoption = <value>.
* APPEND ls_spopli TO lt_spopli.
* ENDIF.
* ENDLOOP.
*
* CALL FUNCTION 'POPUP_TO_DECIDE_LIST'
* EXPORTING
* cursorline = current
* start_col = column
* start_row = row
* textline1 = space
* titel = title
* display_only = display_only
* IMPORTING
* answer = answer
* TABLES
* t_spopli = lt_spopli
* EXCEPTIONS
* not_enough_answers = 1
* too_much_answers = 2
* too_much_marks = 3
* OTHERS = 4.
*
* subrc = sy-subrc.
*
* IF subrc IS INITIAL.
* READ TABLE lt_spopli
* INTO ls_spopli
* WITH KEY selflag = 'X'.
*
* IF sy-subrc = 0.
* option = sy-tabix.
* ENDIF.
* ENDIF.
* ENDMETHOD. "table_select
*
* METHOD ask.
* CLEAR: answer,
* subrc.
*
* CALL FUNCTION 'POPUP_TO_CONFIRM'
* EXPORTING
* titlebar = title
* text_question = question
* text_button_1 = yes
* text_button_2 = no
* display_cancel_button = cancel_display
* popup_type = popup_type
* IMPORTING
* answer = answer
* EXCEPTIONS
* text_not_found = 1
* OTHERS = 2.
*
* subrc = sy-subrc.
* ENDMETHOD. "ask
*
* METHOD confirm.
* CLEAR: answer,
* subrc.
*
* CALL FUNCTION 'POPUP_TO_CONFIRM_WITH_MESSAGE'
* EXPORTING
* defaultoption = default
* diagnosetext1 = text1
* diagnosetext2 = text2
* diagnosetext3 = text3
* textline1 = line1
* textline2 = line2
* titel = title
* start_column = start_column
* start_row = start_row
* cancel_display = cancel_display
* IMPORTING
* answer = answer.
*
* subrc = sy-subrc.
* ENDMETHOD. "confirm
*ENDCLASS. "cpopup IMPLEMENTATION
*---------------------------------------------------------------------*
* CLASS crange DEFINITION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS crange DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF tps_range,
table TYPE tabname,
field TYPE fieldname,
range TYPE RANGE OF char30,
END OF tps_range.
TYPES: tpt_range TYPE TABLE OF tps_range.
DATA: info TYPE tpt_range.
METHODS constructor.
METHODS add_field
IMPORTING
table TYPE tabname
field TYPE fieldname
VALUE type char30.
CLASS-METHODS add
IMPORTING
SIGN type sign_range default 'I'
option TYPE opt_range DEFAULT 'EQ'
low TYPE any
high TYPE any OPTIONAL
clear TYPE char1 DEFAULT space
CHANGING
range TYPE table.
CLASS-METHODS select_options
IMPORTING
title TYPE sytitle DEFAULT 'Possible Values'
text TYPE rsseltext OPTIONAL
no_interval_check TYPE char1 DEFAULT space
just_display TYPE char1 DEFAULT space
excluded_options TYPE rsoptions OPTIONAL
help_field TYPE rsscr_dbfi OPTIONAL
search_help TYPE shlpname OPTIONAL
tabname TYPE tabname OPTIONAL
fieldname TYPE fieldname OPTIONAL
clear TYPE char1 DEFAULT space
CHANGING
range TYPE table
subrc TYPE subrc OPTIONAL.
ENDCLASS. "crange DEFINITION
*---------------------------------------------------------------------*
* CLASS crange IMPLEMENTATION
*---------------------------------------------------------------------*
*
*---------------------------------------------------------------------*
CLASS crange IMPLEMENTATION.
METHOD constructor.
CLEAR info.
ENDMETHOD. "constructor
METHOD add_field.
DATA: ls_info TYPE tps_range.
IF NOT value IS INITIAL.
LOOP AT info
INTO ls_info
WHERE table = table
AND field = field.
CALL METHOD crange=>add
EXPORTING
low = value
CHANGING
range = ls_info-range.
MODIFY info FROM ls_info.
ENDLOOP.
IF sy-subrc <> 0.
CLEAR ls_info.
ls_info-table = table.
ls_info-field = field.
CALL METHOD crange=>add
EXPORTING
low = value
CHANGING
range = ls_info-range.
APPEND ls_info TO info.
ENDIF.
ENDIF.
ENDMETHOD. "add_field
METHOD add.
FIELD-SYMBOLS: <ls_range> TYPE ANY,
<sign> TYPE ANY,
<option> TYPE ANY,
<low> TYPE ANY,
<high> TYPE ANY.
DATA: ref_range TYPE REF TO data.
IF NOT clear IS INITIAL.
CLEAR range.
ENDIF.
CREATE DATA ref_range LIKE LINE OF range.
ASSIGN ref_range->* TO <ls_range>.
CLEAR <ls_range>.
ASSIGN COMPONENT 'SIGN' OF STRUCTURE <ls_range> TO <sign>.
IF sy-subrc = 0.
<sign> = sign.
ENDIF.
ASSIGN COMPONENT 'OPTION' OF STRUCTURE <ls_range> TO <option>.
IF sy-subrc = 0.
IF option = 'BT' AND high IS INITIAL.
<option> = 'EQ'.
ELSE.
<option> = option.
ENDIF.
ENDIF.
ASSIGN COMPONENT 'LOW' OF STRUCTURE <ls_range> TO <low>.
IF sy-subrc = 0.
<low> = low.
ENDIF.
ASSIGN COMPONENT 'HIGH' OF STRUCTURE <ls_range> TO <high>.
IF sy-subrc = 0.
<high> = high.
ENDIF.
APPEND <ls_range> TO range.
ENDMETHOD. "add
METHOD select_options.
DATA: ls_tab_and_field TYPE rstabfield.
ls_tab_and_field-tablename = tabname.
ls_tab_and_field-fieldname = fieldname.
IF NOT clear IS INITIAL.
CLEAR range.
ENDIF.
CALL FUNCTION 'COMPLEX_SELECTIONS_DIALOG'
EXPORTING
title = title
text = text
no_interval_check = no_interval_check
just_display = just_display
excluded_options = excluded_options
help_field = help_field
search_help = search_help
tab_and_field = ls_tab_and_field
TABLES
range = range
EXCEPTIONS
no_range_tab = 1
cancelled = 2
internal_error = 3
invalid_fieldname = 4
OTHERS = 5.
subrc = sy-subrc.
ENDMETHOD. "select_options
ENDCLASS. "crange IMPLEMENTATION
**---------------------------------------------------------------------*
** Class (Definition) creport_alv
**---------------------------------------------------------------------*
**
**---------------------------------------------------------------------*
*CLASS creport_alv DEFINITION.
* PUBLIC SECTION.
* TYPE-POOLS: slis,
* kkblo.
*
* DATA: pubt_events TYPE slis_t_event,
* table TYPE REF TO cdata,
* changed TYPE char1.
*
* CLASS-DATA: pubt_header TYPE slis_t_listheader,
* pubv_pf_status TYPE gui_status.
*
* METHODS constructor
* IMPORTING
* value(repid) TYPE repid.
*
* METHODS set_changed.
*
* METHODS clear_changed.
*
* METHODS check_changes
* IMPORTING
* title TYPE any DEFAULT 'Exit'
* text TYPE any DEFAULT 'Modifications not saved'
* question TYPE any DEFAULT 'Save?'
* RETURNING
* value(answer) TYPE char1.
*
* METHODS add_field
* IMPORTING
* field TYPE fieldname
* length TYPE outputlen OPTIONAL
* text TYPE any OPTIONAL
* rollname TYPE rollname OPTIONAL
* datatype TYPE datatype_d OPTIONAL
* inttype TYPE inttype OPTIONAL
* icon TYPE char1 DEFAULT space
* checkbox TYPE char1 DEFAULT space
* just TYPE char1 DEFAULT 'L'
* no_out TYPE char1 DEFAULT space
* edit TYPE char1 DEFAULT space
* input TYPE char1 DEFAULT space.
*
* METHODS add_event
* IMPORTING
* event TYPE any
* form TYPE any.
*
* METHODS display_list
* IMPORTING
* title TYPE lvc_title OPTIONAL
* zebra TYPE char1 DEFAULT 'X'
* get_selinfos TYPE char1 DEFAULT 'X'
* detail_popup TYPE char1 DEFAULT 'X'
* colwidth_optimize TYPE char1 DEFAULT 'X'
* coll_top_p TYPE char1 DEFAULT ' '
* pf_status TYPE slis_formname DEFAULT space
* user_command TYPE slis_formname DEFAULT space
* confirm_prompt TYPE char1 DEFAULT space
* top_of_page TYPE slis_formname DEFAULT space
* save TYPE char1 DEFAULT space
* edit TYPE char1 DEFAULT space
* edit_mode TYPE char1 DEFAULT space
* edit_callback TYPE char1 DEFAULT space
* variant TYPE disvariant OPTIONAL
* variant_name TYPE disvariant-variant OPTIONAL
* box_fieldname TYPE fieldname DEFAULT space
* start_column TYPE i DEFAULT 0
* end_column TYPE i DEFAULT 0
* start_line TYPE i DEFAULT 0
* end_line TYPE i DEFAULT 0
* CHANGING
* data_table TYPE table.
*
* METHODS select_list
* IMPORTING
* title TYPE any
* selection TYPE char1 DEFAULT 'X'
* zebra TYPE char1 DEFAULT 'X'
* user_command TYPE slis_formname DEFAULT space
* box_fieldname TYPE fieldname DEFAULT space
* tabname TYPE c DEFAULT space
* start_column TYPE i DEFAULT 0
* end_column TYPE i DEFAULT 0
* start_line TYPE i DEFAULT 0
* end_line TYPE i DEFAULT 0
* CHANGING
* data_table TYPE table
* cancel TYPE char1 OPTIONAL.
*
* CLASS-METHODS select_variant
* IMPORTING
* repid TYPE syrepid DEFAULT sy-repid
* uname TYPE syuname DEFAULT sy-uname
* save TYPE char1 DEFAULT 'A'
* CHANGING
* variant TYPE disvariant
* param TYPE slis_vari OPTIONAL.
*
* CLASS-METHODS add_header_line
* IMPORTING
* type TYPE char1 DEFAULT 'S'
* margin TYPE i OPTIONAL
* just TYPE char1 DEFAULT 'L'
* label TYPE any OPTIONAL
* key TYPE any OPTIONAL
* text1 TYPE any OPTIONAL
* text2 TYPE any OPTIONAL
* text3 TYPE any OPTIONAL
* text4 TYPE any OPTIONAL
* text5 TYPE any OPTIONAL
* text6 TYPE any OPTIONAL.
*
* CLASS-METHODS add_so_parameter
* IMPORTING
* margin TYPE i DEFAULT '31'
* label TYPE any
* param_low TYPE any
* param_high TYPE any OPTIONAL.
*
* PRIVATE SECTION.
* DATA: prvt_fieldcat TYPE slis_t_fieldcat_alv,
* prvs_fieldcat TYPE slis_fieldcat_alv,
* prvs_layout TYPE slis_layout_alv,
* prvs_grid TYPE lvc_s_glay,
* prvs_variant TYPE disvariant,
* prvv_repid TYPE repid.
*ENDCLASS. "creport_alv DEFINITION
*
**&---------------------------------------------------------------------
**
**& Class (Implementation) creport_alv
**&---------------------------------------------------------------------
**
** Text
**----------------------------------------------------------------------
**
*CLASS creport_alv IMPLEMENTATION.
* METHOD constructor.
* FREE: prvt_fieldcat,
* pubt_header,
* pubt_events.
*
* CLEAR: changed.
*
* prvv_repid = repid.
*
* CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
* IMPORTING
* et_events = pubt_events
* EXCEPTIONS
* list_type_wrong = 1
* OTHERS = 2.
* ENDMETHOD. "constructor
*
* METHOD set_changed.
* changed = 'X'.
* ENDMETHOD. "set_changed
*
* METHOD clear_changed.
* CLEAR changed.
* ENDMETHOD. "clear_changed
*
* METHOD check_changes.
** ANSWER: 'A' - Cancel
** 'J' - Yes
** 'N' - No
* IF NOT changed IS INITIAL.
* CALL METHOD cpopup=>confirm
* EXPORTING
* title = title
* text1 = text
* line1 = question
* CHANGING
* answer = answer.
*
* IF answer <> 'A'.
* CLEAR changed.
* ENDIF.
* ENDIF.
* ENDMETHOD. "check_changes
*
* METHOD select_variant.
* DATA: lv_exit,
* ls_variant TYPE disvariant.
*
* CLEAR variant.
*
* ls_variant-report = repid.
* ls_variant-username = uname.
*
* CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
* EXPORTING
* is_variant = ls_variant
* i_save = save
* IMPORTING
* e_exit = lv_exit
* es_variant = variant
* EXCEPTIONS
* not_found = 1
* program_error = 2
* OTHERS = 3.
*
* IF sy-subrc IS INITIAL AND lv_exit IS INITIAL.
* param = variant-variant.
* ELSE.
* MESSAGE ID sy-msgid TYPE 'S'
* NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
* ENDMETHOD. "select_variant
*
* METHOD add_header_line.
* DATA: is_header TYPE slis_listheader,
* is_line(60),
* lv_text1(60),
* lv_text2(60),
* lv_text3(60),
* lv_text4(60),
* lv_text5(60),
* lv_text6(60).
*
* CLEAR: is_header,
* is_line.
*
* WRITE: text1 TO lv_text1,
* text2 TO lv_text2,
* text3 TO lv_text3,
* text4 TO lv_text4,
* text5 TO lv_text5,
* text6 TO lv_text6.
*
* CONCATENATE lv_text1 lv_text2 lv_text3 lv_text4 lv_text5 lv_text6
* INTO is_line SEPARATED BY space.
*
* CONDENSE is_line.
*
* is_header-typ = type.
* is_header-key = key.
* is_header-info = label.
*
* CASE just.
* WHEN 'R'.
* WRITE is_line TO is_header-info RIGHT-JUSTIFIED.
* WHEN 'C'.
* WRITE is_line TO is_header-info CENTERED.
* WHEN OTHERS.
* is_header-info+margin = is_line.
* ENDCASE.
*
* APPEND is_header TO pubt_header.
* ENDMETHOD. "add_header_line
*
* METHOD add_so_parameter.
* DATA: lv_param_low(60),
* lv_param_high(60).
*
* WRITE param_low TO lv_param_low.
* WRITE param_high TO lv_param_high.
*
* IF NOT param_low IS INITIAL.
* IF param_high IS INITIAL.
* CALL METHOD creport_alv=>add_header_line
* EXPORTING
* type = 'S'
* margin = margin
* label = label
* text1 = lv_param_low.
* ELSE.
* CALL METHOD creport_alv=>add_header_line
* EXPORTING
* type = 'S'
* margin = margin
* label = label
* text1 = 'de'
* text2 = lv_param_low
* text3 = 'até'
* text4 = lv_param_high.
* ENDIF.
* ENDIF.
* ENDMETHOD. "add_so_parameter
*
* METHOD add_field.
* CLEAR prvs_fieldcat.
* prvs_fieldcat-fieldname = field.
* prvs_fieldcat-outputlen = length.
* prvs_fieldcat-seltext_l = text.
* prvs_fieldcat-seltext_m = text.
* prvs_fieldcat-seltext_s = text.
* prvs_fieldcat-rollname = rollname.
* prvs_fieldcat-datatype = datatype.
* prvs_fieldcat-inttype = inttype.
* prvs_fieldcat-icon = icon.
* prvs_fieldcat-checkbox = checkbox.
* prvs_fieldcat-just = just.
* prvs_fieldcat-no_out = no_out.
* prvs_fieldcat-edit = edit.
* prvs_fieldcat-input = input.
* APPEND prvs_fieldcat TO prvt_fieldcat.
* ENDMETHOD. "add_field
*
* METHOD add_event.
* DATA: ls_event TYPE slis_alv_event.
*
* READ TABLE pubt_events
* WITH KEY name = event
* INTO ls_event.
*
* IF sy-subrc IS INITIAL.
* MOVE form TO ls_event-form.
* MODIFY pubt_events FROM ls_event INDEX sy-tabix.
* ENDIF.
* ENDMETHOD. "add_event
*
* METHOD display_list.
* IF NOT pf_status IS INITIAL.
* pubv_pf_status = pf_status.
*
* CALL METHOD me->add_event
* EXPORTING
* event = slis_ev_pf_status_set
* form = 'SET_PF_STATUS'.
* ENDIF.
*
* CLEAR prvs_layout.
* prvs_layout-zebra = zebra.
* prvs_layout-get_selinfos = get_selinfos.
* prvs_layout-detail_popup = detail_popup.
* prvs_layout-colwidth_optimize = colwidth_optimize.
* prvs_layout-edit = edit.
* prvs_layout-edit_mode = edit_mode.
* prvs_layout-box_fieldname = box_fieldname.
* prvs_layout-confirmation_prompt = confirm_prompt.
*
* CLEAR prvs_grid.
* prvs_grid-coll_top_p = coll_top_p.
* prvs_grid-edt_cll_cb = edit_callback.
*
* CLEAR prvs_variant.
*
* IF NOT variant_name IS INITIAL.
* prvs_variant-variant = variant_name.
* ELSE.
* prvs_variant = variant.
* ENDIF.
*
* CREATE OBJECT table.
*
* CALL METHOD table->add_data
* CHANGING
* table = data_table[].
*
* CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
* EXPORTING
* i_grid_title = title
* is_layout = prvs_layout
* it_fieldcat = prvt_fieldcat[]
* it_events = pubt_events[]
* i_callback_program = prvv_repid
** i_callback_pf_status = 'SET_PF_STATUS'
* i_callback_user_command = user_command
* i_callback_top_of_page = top_of_page
* i_grid_settings = prvs_grid
* i_save = save
* is_variant = prvs_variant
* i_screen_start_column = start_column
* i_screen_end_column = end_column
* i_screen_start_line = start_line
* i_screen_end_line = end_line
* TABLES
* t_outtab = data_table[]
* EXCEPTIONS
* program_error = 1
* OTHERS = 2.
* ENDMETHOD. "display_list
*
* METHOD select_list.
* CALL FUNCTION 'REUSE_ALV_POPUP_TO_SELECT'
* EXPORTING
* i_title = title
* i_selection = selection
* i_zebra = zebra
* i_screen_start_column = start_column
* i_screen_end_column = end_column
* i_screen_start_line = start_line
* i_screen_end_line = end_line
* i_checkbox_fieldname = box_fieldname
* i_tabname = tabname
* it_fieldcat = prvt_fieldcat[]
* i_callback_program = prvv_repid
* i_callback_user_command = user_command
* IMPORTING
* e_exit = cancel
* TABLES
* t_outtab = data_table[]
* EXCEPTIONS
* program_error = 1
* OTHERS = 2.
* ENDMETHOD. "select_list
*ENDCLASS. "creport_alv
*
**---------------------------------------------------------------------*
** FORM TOP_OF_PAGE *
**---------------------------------------------------------------------*
*FORM top_of_page.
* CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
* EXPORTING
* it_list_commentary = creport_alv=>pubt_header.
*ENDFORM. "top_of_page
**&---------------------------------------------------------------------
**
**& Form set_pf_status
**&---------------------------------------------------------------------
**
*FORM set_pf_status USING pt_exctab TYPE slis_t_extab.
* SET PF-STATUS creport_alv=>pubv_pf_status.
*ENDFORM. " set_pf_status
*
*
**---------------------------------------------------------------------*
** CLASS cpopup_select DEFINITION
**---------------------------------------------------------------------*
** ........ *
**---------------------------------------------------------------------*
*CLASS cpopup_select DEFINITION.
* PUBLIC SECTION.
* TYPES: tps_option TYPE spopli,
* tpt_options TYPE TABLE OF tps_option.
*
* DATA: options TYPE tpt_options,
* options_count TYPE i.
*
* METHODS constructor.
*
* METHODS add_option
* IMPORTING
* VALUE type any
* option TYPE i OPTIONAL
* inact TYPE flag DEFAULT space.
*
* METHODS add_options
* IMPORTING
* values TYPE table
* field TYPE any.
*
* METHODS display
* IMPORTING
* title TYPE any DEFAULT 'Escolher Opção'
* text1 TYPE any DEFAULT space
* text2 TYPE any DEFAULT space
* text3 TYPE any DEFAULT space
* current TYPE i DEFAULT 1
* column TYPE i DEFAULT 20
* row TYPE i DEFAULT 5
* display_only TYPE c DEFAULT space
* CHANGING
* option TYPE i OPTIONAL
* answer TYPE c OPTIONAL
* subrc TYPE subrc OPTIONAL.
*ENDCLASS. "cpopup_select DEFINITION
*
**---------------------------------------------------------------------*
** CLASS cpopup_select IMPLEMENTATION
**---------------------------------------------------------------------*
** ........ *
**---------------------------------------------------------------------*
*CLASS cpopup_select IMPLEMENTATION.
* METHOD constructor.
* CLEAR: options,
* options_count.
* ENDMETHOD. "constructor
*
* METHOD add_option.
* DATA: ls_option TYPE tps_option,
* lv_position TYPE i.
*
* CLEAR ls_option.
* ls_option-varoption = value.
* ls_option-inactive = inact.
*
* IF option IS INITIAL.
* APPEND ls_option TO options.
* ELSE.
* IF option > options_count.
* lv_position = options_count + 1.
* ELSE.
* lv_position = option.
* ENDIF.
*
* INSERT ls_option INTO options INDEX lv_position.
* ENDIF.
*
* ADD 1 TO options_count.
* ENDMETHOD. "add_option
*
* METHOD add_options.
* FIELD-SYMBOLS: <option> TYPE ANY,
* <value> TYPE ANY.
*
* LOOP AT values ASSIGNING <option>.
* ASSIGN COMPONENT field OF STRUCTURE <option> TO <value>.
*
* IF sy-subrc = 0.
* CALL METHOD add_option
* EXPORTING
* value = <value>
* option = sy-tabix.
* ENDIF.
* ENDLOOP.
* ENDMETHOD. "add_options
*
* METHOD display.
* DATA: ls_option TYPE tps_option,
* lv_function(30) TYPE c,
* lv_text1(70) TYPE c,
* lv_text2(70) TYPE c,
* lv_text3(70) TYPE c.
*
* WRITE: text1 TO lv_text1,
* text2 TO lv_text2,
* text3 TO lv_text3.
*
* IF options_count < 25.
* lv_function = 'POPUP_TO_DECIDE_LIST'.
* ELSE.
* lv_function = 'SELECT_FROM_LIST'.
* ENDIF.
*
* CALL FUNCTION lv_function
* EXPORTING
* cursorline = current
* start_col = column
* start_row = row
* textline1 = lv_text1
* textline2 = lv_text2
* textline3 = lv_text3
* titel = title
* display_only = display_only
* IMPORTING
* answer = answer
* TABLES
* t_spopli = options
* EXCEPTIONS
* not_enough_answers = 1
* too_much_answers = 2
* too_much_marks = 3
* OTHERS = 4.
*
* subrc = sy-subrc.
*
* IF subrc IS INITIAL.
* READ TABLE options
* INTO ls_option
* WITH KEY selflag = 'X'.
*
* IF sy-subrc = 0.
* option = sy-tabix.
* ENDIF.
* ENDIF.
* ENDMETHOD. "display
*ENDCLASS. "cpopup_select IMPLEMENTATION
*
**---------------------------------------------------------------------*
** CLASS cexcel DEFINITION
**---------------------------------------------------------------------*
** ........ *
**---------------------------------------------------------------------*
*CLASS cexcel DEFINITION.
* PUBLIC SECTION.
* TYPE-POOLS kkblo.
*
* DATA: tabname TYPE fieldname,
* layout TYPE kkblo_layout,
* catalog TYPE kkblo_t_fieldcat.
*
* METHODS constructor
* IMPORTING
* tabname TYPE any DEFAULT 'ITAB'.
*
* METHODS add_field
* IMPORTING
* fieldname TYPE any
* just TYPE char1 DEFAULT 'L'
* header TYPE any OPTIONAL
* length TYPE any OPTIONAL
* no_sum TYPE any DEFAULT space
* datatype TYPE any DEFAULT 'CHAR'
* currency TYPE any OPTIONAL
* unit TYPE any OPTIONAL.
*
* METHODS call
* CHANGING
* table TYPE table.
*ENDCLASS. "cexcel DEFINITION
*
**---------------------------------------------------------------------*
** CLASS cexcel IMPLEMENTATION
**---------------------------------------------------------------------*
** ........ *
**---------------------------------------------------------------------*
*CLASS cexcel IMPLEMENTATION.
* METHOD constructor.
* CLEAR: layout,
* catalog.
*
* me->tabname = tabname.
* ENDMETHOD. "constructor
*
* METHOD add_field.
* DATA: ls_catalog TYPE kkblo_fieldcat.
*
* CLEAR ls_catalog.
* ls_catalog-fieldname = fieldname.
* ls_catalog-reptext = header.
* ls_catalog-row_pos = 1.
* ls_catalog-tabname = tabname.
* ls_catalog-outputlen = length.
* ls_catalog-ddic_outputlen = length.
* ls_catalog-no_sum = space.
* ls_catalog-datatype = datatype.
* ls_catalog-currency = currency.
* ls_catalog-quantity = unit.
* APPEND ls_catalog TO catalog.
* ENDMETHOD. "add_field
*
* METHOD call.
* CLEAR layout.
* layout-window_titlebar = sy-title.
*
* CALL FUNCTION 'ALV_XXL_CALL'
* EXPORTING
* i_tabname = tabname
* is_layout = layout
* it_fieldcat = catalog
* i_title = sy-title
* TABLES
* it_outtab = table[]
* EXCEPTIONS
* fatal_error = 1
* no_display_possible = 2
* OTHERS = 3.
* ENDMETHOD. "call
*ENDCLASS. "cexcel IMPLEMENTATION
*
**---------------------------------------------------------------------*
** CLASS cuser DEFINITION
**---------------------------------------------------------------------*
** ........ *
**---------------------------------------------------------------------*
*CLASS cuser DEFINITION.
* PUBLIC SECTION.
* DATA: usr01 TYPE usr01,
* usr03 TYPE usr03,
* adrc TYPE adrc,
* adrp TYPE adrp,
* adcp TYPE adcp,
* adr6 TYPE adr6.
*
* METHODS constructor
* IMPORTING
* user TYPE any
* date TYPE datum DEFAULT sy-datum.
*
* CLASS-METHODS name
* IMPORTING user TYPE any
* date TYPE datum DEFAULT sy-datum
* RETURNING value(name) TYPE ad_namtext.
*
* CLASS-METHODS validate
* IMPORTING user TYPE any
* RETURNING value(subrc) TYPE subrc.
*
* CLASS-METHODS address_data
* IMPORTING
* user TYPE uname
* CHANGING
* data TYPE usr03.
*ENDCLASS. "cuser DEFINITION
*
**---------------------------------------------------------------------*
** CLASS cuser IMPLEMENTATION
**---------------------------------------------------------------------*
** ........ *
**---------------------------------------------------------------------*
*CLASS cuser IMPLEMENTATION.
* METHOD constructor.
* DATA: ls_usr21 TYPE usr21.
*
* CLEAR: usr01,
* usr03,
* adrc,
* adrp,
* adcp,
* adr6.
*
* SELECT SINGLE *
* INTO usr01
* FROM usr01
* WHERE bname = user.
*
* CALL METHOD address_data
* EXPORTING
* user = user
* CHANGING
* data = usr03.
*
* SELECT *
* INTO CORRESPONDING FIELDS OF adrp
* FROM usr21
* JOIN adrp
* ON adrp~persnumber = usr21~persnumber
* WHERE bname = user
* AND date_from <= date
* AND date_to >= date.
* ENDSELECT.
*
* SELECT *
* INTO CORRESPONDING FIELDS OF adrc
* FROM usr21
* JOIN adrc
* ON adrc~addrnumber = usr21~addrnumber
* WHERE bname = user
* AND date_from <= date
* AND date_to >= date.
* ENDSELECT.
*
* SELECT *
* INTO CORRESPONDING FIELDS OF adcp
* FROM usr21
* JOIN adcp
* ON adcp~addrnumber = usr21~addrnumber
* AND adcp~persnumber = usr21~persnumber
* WHERE bname = user
* AND date_from <= date
* AND date_to >= date.
* ENDSELECT.
*
* SELECT *
* INTO CORRESPONDING FIELDS OF adr6
* FROM usr21
* JOIN adr6
* ON adr6~addrnumber = usr21~addrnumber
* AND adr6~persnumber = usr21~persnumber
* WHERE bname = user
* AND date_from <= date
* AND flgdefault = 'X'.
* ENDSELECT.
* ENDMETHOD. "constructor
*
* METHOD name.
* CLEAR name.
* SELECT name_text
* INTO name
* FROM usr21
* JOIN adrp
* ON adrp~persnumber = usr21~persnumber
* WHERE bname = user
* AND date_from <= date
* AND date_to >= date.
*
* ENDSELECT.
* ENDMETHOD. "name
*
* METHOD validate.
* DATA: lv_bname TYPE xubname.
*
* CLEAR subrc.
* SELECT SINGLE bname
* INTO lv_bname
* FROM usr01
* WHERE bname = user.
*
* subrc = sy-subrc.
* ENDMETHOD. "validate
*
* METHOD address_data.
* CLEAR data.
* SELECT SINGLE *
* INTO data
* FROM usr03
* WHERE bname = user.
* ENDMETHOD. "address_data
*ENDCLASS. "cuser IMPLEMENTATION
*
**&---------------------------------------------------------------------
**
**& Include ZREPORT_OBJECTS_DRILL
**
**&---------------------------------------------------------------------
**
**---------------------------------------------------------------------*
** CLASS cdrill_down DEFINITION
**---------------------------------------------------------------------*
** ........ *
**---------------------------------------------------------------------*
*CLASS cdrill_down DEFINITION.
* PUBLIC SECTION.
* TYPES: BEGIN OF tps_value_type,
* curr TYPE rfwrt,
* quan TYPE menge_pos,
* END OF tps_value_type.
*
* TYPES: BEGIN OF tps_values,
* n01 TYPE tps_value_type,
* n02 TYPE tps_value_type,
* n03 TYPE tps_value_type,
* n04 TYPE tps_value_type,
* n05 TYPE tps_value_type,
* n06 TYPE tps_value_type,
* n07 TYPE tps_value_type,
* n08 TYPE tps_value_type,
* n09 TYPE tps_value_type,
* n10 TYPE tps_value_type,
* n11 TYPE tps_value_type,
* n12 TYPE tps_value_type,
* n13 TYPE tps_value_type,
* n14 TYPE tps_value_type,
* n15 TYPE tps_value_type,
* n16 TYPE tps_value_type,
* n17 TYPE tps_value_type,
* n18 TYPE tps_value_type,
* n19 TYPE tps_value_type,
* n20 TYPE tps_value_type,
* n21 TYPE tps_value_type,
* n22 TYPE tps_value_type,
* n23 TYPE tps_value_type,
* n24 TYPE tps_value_type,
* n25 TYPE tps_value_type,
* n26 TYPE tps_value_type,
* n27 TYPE tps_value_type,
* n28 TYPE tps_value_type,
* n29 TYPE tps_value_type,
* n30 TYPE tps_value_type,
* END OF tps_values.
*
* TYPES: BEGIN OF tps_colors,
* main TYPE i,
* last_level TYPE i,
* values TYPE i,
* END OF tps_colors.
*
* TYPES: BEGIN OF tps_dynamic_values,
* table TYPE fieldname,
* level TYPE i,
* level_index TYPE i,
* index TYPE i,
* field TYPE fieldname,
* page TYPE sy-cpage,
* line TYPE sy-lilli,
* column TYPE sy-colno,
* start_line TYPE sy-staro,
* start_column TYPE sy-staco,
* END OF tps_dynamic_values.
*
* TYPES: BEGIN OF tps_fields,
* group(30) TYPE c,
* fieldname TYPE fieldname,
* unit_field TYPE fieldname,
* header(100) TYPE c,
* icon TYPE char1,
* symbol TYPE char1,
* type(4) TYPE c,
* waers TYPE waers,
* unit TYPE unit,
* length TYPE i,
* centered(1) TYPE c,
* hotspot(1) TYPE c,
* input TYPE char1,
* input_variable TYPE fieldname,
* form_input_check TYPE formname,
* intensified TYPE char1,
* inten_variable TYPE fieldname,
* color TYPE i,
* color_variable TYPE fieldname,
* output_type(1) TYPE c,
* excel_include TYPE char1,
* END OF tps_fields.
*
* TYPES: tpv_key(50) TYPE c.
*
* TYPES: BEGIN OF tps_level_info,
* level TYPE char2,
* level_index TYPE i,
* table TYPE fieldname,
* field TYPE fieldname,
* name(50) TYPE c,
* include_header TYPE char1,
* color TYPE i,
* program TYPE cprog,
* form_selection TYPE formname,
* form_display TYPE formname,
* form_execution TYPE formname,
* field_checkbox TYPE fieldname,
* field_icon TYPE fieldname,
* icon_length TYPE i,
* no_symbol(1) TYPE c, "Sem indicação de folder
* no_scroll(1) TYPE c, "Sem SCROLL horizontal
* header(255) TYPE c, "Cabeçalho de nÃvel
* length TYPE i, "Comprimento do nÃvel
* fields TYPE TABLE OF tps_fields
* WITH NON-UNIQUE DEFAULT KEY,
* END OF tps_level_info.
*
* TYPES: BEGIN OF tps_table_field,
* table TYPE fieldname,
* value(500) TYPE c,
* END OF tps_table_field.
*
* TYPES: BEGIN OF tps_list_info,
* key TYPE tps_table_field,
* parent TYPE tps_table_field,
* node_number TYPE i,
* child_selected TYPE char1,
* child_number TYPE i,
* child_last_table TYPE fieldname,
* explode TYPE char1,
* level TYPE i,
* level_index TYPE i,
* linno TYPE i,
* info TYPE REF TO cdata,
* values TYPE tps_values,
* END OF tps_list_info.
*
* TYPES: BEGIN OF tps_cascade_table,
* key TYPE tpv_key,
* parent TYPE tpv_key,
* connection TYPE tpv_key,
* imported TYPE char1,
* info TYPE REF TO cdata,
* END OF tps_cascade_table.
*
* TYPES: tpt_fields TYPE TABLE OF tps_fields,
* tpt_cascade_table TYPE TABLE OF tps_cascade_table
* WITH NON-UNIQUE DEFAULT KEY.
*
* TYPES: BEGIN OF tps_table,
* type TYPE char1,
* name TYPE fieldname,
* text TYPE text70,
* field_key TYPE fieldname,
* field_parent TYPE fieldname,
* field_connection TYPE fieldname,
* connection_field TYPE fieldname,
* connection_table TYPE fieldname,
* level_index TYPE i,
* export TYPE char1,
* data TYPE REF TO cdata,
* info TYPE tpt_cascade_table,
* END OF tps_table.
*
* DATA: list_tables TYPE TABLE OF tps_table,
* data TYPE TABLE OF tps_list_info,
* levels TYPE TABLE OF tps_level_info,
* value_fields TYPE TABLE OF tps_fields,
* table_number TYPE i,
* form_values TYPE formname,
* values_position TYPE i,
* top_node TYPE tpv_key,
* type TYPE char1, " Cascade; Normal
* header(100) TYPE c,
* user_info TYPE char1,
* color TYPE tps_colors,
* step_margin TYPE i,
* with_lines TYPE char1," ' ' Normal 'X' com linhas
* selected TYPE tps_dynamic_values.
*
* METHODS constructor
* IMPORTING
* type TYPE char1 DEFAULT 'N'
* top_node TYPE any DEFAULT space
* with_lines TYPE char1 DEFAULT 'X'
* color_main TYPE i DEFAULT 4
* color_last_level TYPE i DEFAULT 3
* color_values TYPE i DEFAULT 2
* step_margin TYPE i DEFAULT 6
* header TYPE c OPTIONAL
* user_info TYPE char1 OPTIONAL
* form_values TYPE any OPTIONAL
* values_position TYPE i DEFAULT 80.
*
* METHODS set_internal_table.
*
* METHODS child_selection
* IMPORTING
* table TYPE any
* parent_table TYPE any
* parent_value TYPE any.
*
* METHODS write_list_header.
*
* METHODS write_list
* IMPORTING
* update TYPE char1 OPTIONAL.
*
* METHODS add_table
* IMPORTING
* type TYPE char1 DEFAULT 'C'
* table_name TYPE any
* text TYPE any OPTIONAL
* level_index TYPE i OPTIONAL
* field_key TYPE any OPTIONAL
* field_connection TYPE any OPTIONAL
* field_parent TYPE any OPTIONAL
* connection_field TYPE any OPTIONAL
* connection_table TYPE any OPTIONAL
* export TYPE char1 DEFAULT 'X'
* CHANGING
* table TYPE table.
*
* METHODS add_level
* IMPORTING
* level TYPE i
* table TYPE fieldname OPTIONAL
* field TYPE fieldname OPTIONAL
* name TYPE c OPTIONAL
* include_header TYPE char1 OPTIONAL
* color TYPE i OPTIONAL
* program TYPE cprog OPTIONAL
* form_selection TYPE formname OPTIONAL
* form_display TYPE formname OPTIONAL
* form_execution TYPE formname OPTIONAL
* field_checkbox TYPE fieldname OPTIONAL
* field_icon TYPE fieldname OPTIONAL
* icon_length TYPE i DEFAULT 3
* no_symbol TYPE char1 OPTIONAL
* no_scroll TYPE char1 OPTIONAL.
*
* METHODS add_field_to_level
* IMPORTING
* level TYPE i
* field TYPE fieldname OPTIONAL
* header TYPE c OPTIONAL
* length TYPE i DEFAULT 10
* centered TYPE c OPTIONAL
* hotspot TYPE c OPTIONAL
* input TYPE char1 DEFAULT space
* input_variable TYPE fieldname OPTIONAL
* form_input_check TYPE formname OPTIONAL
* intensified TYPE c OPTIONAL
* inten_variable TYPE fieldname OPTIONAL
* color TYPE i OPTIONAL
* color_variable TYPE fieldname OPTIONAL
* icon TYPE c OPTIONAL
* symbol TYPE c OPTIONAL
* unit_field TYPE fieldname OPTIONAL
* excel_include TYPE char1 DEFAULT 'X'.
*
* METHODS add_value_field
* IMPORTING
* field TYPE fieldname
* header TYPE c DEFAULT 'Montante'
* type TYPE char4 DEFAULT 'CURR'
* waers TYPE waers DEFAULT 'EUR'
* unit TYPE unit OPTIONAL
* length TYPE i DEFAULT 21
* centered TYPE c OPTIONAL
* hotspot TYPE c OPTIONAL
* color_variable TYPE char30 OPTIONAL.
*
* METHODS set_control_data
* IMPORTING
* selection_comm TYPE syucomm DEFAULT 'PICK'.
*
* METHODS set_level
* IMPORTING
* level TYPE i.
*
* METHODS mark
* IMPORTING
* table TYPE any
* level TYPE i
* VALUE type char1 default 'X'.
*
* METHODS delete
* IMPORTING
* table TYPE any
* level TYPE i.
*
* METHODS excel_export
* IMPORTING
* title TYPE any.
*
* PROTECTED SECTION.
* TYPES: BEGIN OF tps_sort_table,
* sort1 TYPE tpv_key,
* sort2 TYPE tpv_key,
* sort3 TYPE tpv_key,
* sort4 TYPE tpv_key,
* sort5 TYPE tpv_key,
* sort6 TYPE tpv_key,
* sort7 TYPE tpv_key,
* sort8 TYPE tpv_key,
* sort9 TYPE tpv_key,
* values TYPE tps_values,
* info TYPE REF TO cdata,
* END OF tps_sort_table.
*
* TYPES: tpt_sort_table TYPE TABLE OF tps_sort_table.
*
* DATA: current_list_line TYPE i,
* indent_lines TYPE char10,
* indent_margin TYPE i,
* data_backup TYPE TABLE OF tps_list_info.
*
* METHODS convert_table_list_to_sort
* CHANGING
* list_table TYPE REF TO data
* sort_table TYPE tpt_sort_table.
*
* METHODS import_sort_table
* IMPORTING
* table_name TYPE any
* sort_table TYPE tpt_sort_table.
*
* METHODS import_cascade_table
* IMPORTING
* field_key TYPE any
* field_parent TYPE any
* field_connection TYPE any
* CHANGING
* table TYPE table
* info TYPE tpt_cascade_table.
*
* METHODS add_table_line
* IMPORTING
* level_index TYPE i
* table_key TYPE fieldname
* field_key TYPE fieldname OPTIONAL
* key TYPE any OPTIONAL
* table_parent TYPE fieldname OPTIONAL
* field_parent TYPE fieldname OPTIONAL
* parent TYPE any OPTIONAL
* field_connection TYPE fieldname OPTIONAL
* connection_field TYPE fieldname OPTIONAL
* connection_table TYPE fieldname OPTIONAL
* values TYPE tps_values OPTIONAL
* CHANGING
* line_info TYPE any.
*
* METHODS add_connection_table_line
* IMPORTING
* connection_table TYPE any
* connection_field TYPE any
* connection_value TYPE any
* parent_value TYPE any.
*
* METHODS get_level_info
* IMPORTING
* level TYPE i
* RETURNING
* value(level_info) TYPE tps_level_info.
*
* METHODS write_next_level
* IMPORTING
* value(level) TYPE i
* value(child_number) TYPE i
* value(child_last_table) TYPE fieldname
* value(parent_last_node) TYPE char1 DEFAULT 'X'
* value(table) TYPE fieldname
* value(parent_table) TYPE fieldname
* value(parent_key) TYPE any.
*
* METHODS write_level_header
* IMPORTING
* level TYPE i
* level_info TYPE tps_level_info
* child_number TYPE i.
*
* METHODS write_level
* IMPORTING
* value(level) TYPE i
* value(index) TYPE i
* list_info TYPE tps_list_info
* level_info TYPE tps_level_info.
*
* METHODS write_checkbox
* IMPORTING
* type TYPE char1 OPTIONAL
* list_info TYPE tps_list_info
* field_checkbox TYPE fieldname.
*
* METHODS write_symbol
* IMPORTING
* type TYPE char1 OPTIONAL
* list_info TYPE tps_list_info.
*
* METHODS new_line
* IMPORTING
* line_type TYPE char1
* level TYPE i
* checkbox TYPE fieldname OPTIONAL
* no_scroll TYPE char1 OPTIONAL.
*
* METHODS get_symbol
* IMPORTING
* child_number TYPE i
* explode TYPE char1
* RETURNING
* value(symbol) TYPE char2.
*
* METHODS write_default_level
* IMPORTING
* level_info TYPE tps_level_info
* list_line TYPE REF TO cdata
* color TYPE i.
*
* METHODS write_default_values
* IMPORTING
* list_info TYPE tps_list_info
* color TYPE i.
*
* METHODS get_selected_values
* IMPORTING
* index TYPE i
* CHANGING
* selected TYPE tps_dynamic_values.
*
* METHODS set_selected_field.
*
* METHODS drill_down.
*
* METHODS execute_level_function.
*
* METHODS get_input
* IMPORTING
* key TYPE any
* explode TYPE char1.
*
* METHODS get_field_input
* IMPORTING
* list_info TYPE tps_list_info
* CHANGING
* fields TYPE tpt_fields.
*
* METHODS set_child_checkbox
* IMPORTING
* field_checkbox TYPE fieldname
* select TYPE any
* key TYPE any.
*
* METHODS read_list_line
* IMPORTING
* line TYPE i
* level TYPE i
* RETURNING
* value(select) TYPE char1.
*
* METHODS read_line_field
* IMPORTING
* line TYPE i
* level TYPE i
* position TYPE i
* length TYPE i
* CHANGING
* VALUE type any.
*
* METHODS set_next_level
* IMPORTING
* level TYPE i
* stop_level TYPE i
* key TYPE any.
*
* METHODS set_level_indent
* IMPORTING
* level TYPE i
* last_node TYPE char1.
*
* METHODS get_level_indent
* IMPORTING
* level TYPE i
* RETURNING
* value(info) TYPE char1.
*ENDCLASS. "cdrill_down DEFINITION
*
**---------------------------------------------------------------------*
** CLASS cdrill_down IMPLEMENTATION
**---------------------------------------------------------------------*
** ........ *
**---------------------------------------------------------------------*
*CLASS cdrill_down IMPLEMENTATION.
* METHOD constructor.
* CLEAR: me->data,
* me->levels,
* me->table_number.
*
* me->type = type.
* me->top_node = top_node.
* me->with_lines = with_lines.
* me->color-main = color_main.
* me->color-last_level = color_last_level.
* me->color-values = color_values.
* me->step_margin = step_margin.
* me->header = header.
* me->user_info = user_info.
* me->form_values = form_values.
* me->values_position = values_position.
* ENDMETHOD. "constructor
**---------------------------------------------------------------------*
* METHOD child_selection.
* FIELD-SYMBOLS: <list_table> TYPE table,
* <new_data> TYPE table,
* <row> TYPE ANY.
*
* DATA: ls_table TYPE tps_table,
* ls_table1 TYPE tps_table,
* ls_data TYPE tps_list_info,
* ls_temp TYPE tps_list_info,
* ls_level TYPE tps_level_info,
* lref_new_data TYPE REF TO data,
* lv_lines TYPE i,
* lv_counter TYPE i.
*
* CLEAR lv_counter.
*
* LOOP AT list_tables
* INTO ls_table1.
* LOOP AT data
* INTO ls_data
* WHERE key-table = ls_table1-name
* AND parent-table = parent_table
* AND parent-value = parent_value.
*
* IF ls_data-child_selected IS INITIAL.
* ls_data-child_selected = 'X'.
*
* ADD 1 TO lv_counter.
* ls_data-node_number = lv_counter.
*
* ls_level = get_level_info( ls_data-level_index ).
*
* IF NOT ls_level-form_selection IS INITIAL AND type = 'C'.
* ASSIGN ls_table1-data->info->* TO <list_table>.
*
* DESCRIBE TABLE <list_table> LINES lv_lines.
* ADD 1 TO lv_lines.
*
* CREATE DATA lref_new_data LIKE <list_table>.
* ASSIGN lref_new_data->* TO <new_data>.
*
* PERFORM (ls_level-form_selection)
* IN PROGRAM (ls_level-program)
* USING ls_data-key-value
* CHANGING <new_data>.
*
* LOOP AT <new_data> ASSIGNING <row>.
* APPEND <row> TO <list_table>.
* ENDLOOP.
*
* LOOP AT <list_table> ASSIGNING <row> FROM lv_lines.
* CALL METHOD add_table_line
* EXPORTING
* level_index = ls_data-level_index
* table_key = ls_data-key-table
* field_key = ls_table1-field_key
* field_parent = ls_table1-field_parent
* CHANGING
* line_info = <row>.
* ENDLOOP.
*
** DESCRIBE TABLE <new_data> LINES ls_data-child_number.
* ENDIF.
*
* CLEAR ls_data-child_number.
*
* LOOP AT list_tables
* INTO ls_table.
*
* LOOP AT data
* INTO ls_temp
* WHERE key-table = ls_table-name
* AND parent-table = ls_data-key-table
* AND parent-value = ls_data-key-value.
* ADD 1 TO ls_data-child_number.
* ls_data-child_last_table = ls_table-name.
* ENDLOOP.
* ENDLOOP.
*
* MODIFY data FROM ls_data.
* ENDIF.
* ENDLOOP.
* ENDLOOP.
* ENDMETHOD. "child_selection
**---------------------------------------------------------------------*
* METHOD write_list_header.
* DATA: ls_level TYPE tps_level_info,
* ls_field TYPE tps_fields,
* lv_title_margin TYPE i,
* lv_title_line(70) TYPE c,
* lv_date(10) TYPE c.
*
* ls_level = get_level_info( 1 ).
*
* lv_title_margin = ls_level-length.
*
* IF lv_title_margin > sy-linsz.
* lv_title_margin = sy-linsz.
* ENDIF.
*
* IF NOT user_info IS INITIAL.
* WRITE sy-datum TO lv_date.
* CONCATENATE 'Usuário:' sy-uname 'Data:' lv_date
* INTO lv_title_line
* SEPARATED BY space.
*
* CALL METHOD new_line
* EXPORTING
* line_type = 'H'
* level = 1
* checkbox = ls_level-field_checkbox
* no_scroll = ls_level-no_scroll.
*
* WRITE AT (lv_title_margin) lv_title_line NO-GAP.
* ENDIF.
*
* IF NOT header IS INITIAL.
* CALL METHOD new_line
* EXPORTING
* line_type = 'H'
* level = 1
* checkbox = ls_level-field_checkbox
* no_scroll = ls_level-no_scroll.
*
* WRITE AT: (lv_title_margin) header NO-GAP CENTERED.
*
** IF NOT igroup[] IS INITIAL.
** NEW-LINE.
**
** WRITE: AT (ititle_margin) header NO-GAP CENTERED.
**
** WRITE AT level_length space NO-GAP COLOR = color_main
** INTENSIFIED ON.
**
** SORT ivalues_fields BY group.
**
** LOOP AT ivalues_fields INTO wa.
** ADD 1 TO group_fields.
**
** AT END OF group.
** SUM.
** LOOP AT igroup INTO wa2 WHERE group = wa-group.
** SUBTRACT 1 FROM group_fields.
** ADD group_fields TO wa-length.
** WRITE: AT (wa-length) wa2-text NO-GAP
** INTENSIFIED OFF CENTERED,
** space NO-GAP COLOR = color_main
** INTENSIFIED ON.
** ENDLOOP.
**
** CLEAR group_fields.
** ENDAT.
** ENDLOOP.
**
** ADD 1 TO me->current_list_line.
** NEW-LINE.
** WRITE: AT (level_length) space NO-GAP CENTERED.
** ELSE.
** WRITE: AT (ititle_margin) header NO-GAP CENTERED.
** ENDIF.
*
* IF NOT value_fields IS INITIAL.
* WRITE AT values_position space NO-GAP COLOR = color-main
* INTENSIFIED ON.
* ENDIF.
*
* LOOP AT value_fields
* INTO ls_field.
* WRITE: AT (ls_field-length) ls_field-header NO-GAP INTENSIFIED
*OFF
*
*CENTERED,
* space NO-GAP INTENSIFIED
*ON
* COLOR =
*color-main.
* ENDLOOP.
* ENDIF.
*
* IF type = 'C'.
* CALL METHOD write_level_header
* EXPORTING
* level = 1
* level_info = ls_level
* child_number = 1.
* ENDIF.
* ENDMETHOD. "write_list_header
**---------------------------------------------------------------------*
* METHOD write_list.
* DATA: lv_index TYPE i,
* ls_table TYPE tps_table,
* lv_table_number TYPE i.
*
* IF me->data IS INITIAL OR NOT update IS INITIAL.
* CALL METHOD set_internal_table.
* ENDIF.
*
* CLEAR current_list_line.
*
* LOOP AT list_tables
* INTO ls_table
* WHERE connection_table = space.
* CALL METHOD write_next_level
* EXPORTING
* level = 0
* table = ls_table-name
* child_last_table = ls_table-name
* parent_table = ls_table-name
* parent_key = top_node
* child_number = 0.
* ENDLOOP.
*
* lv_index = sy-lsind + 1.
*
* SCROLL LIST INDEX lv_index TO PAGE selected-page
* LINE selected-start_line.
*
* SCROLL LIST INDEX lv_index TO COLUMN selected-start_column.
* ENDMETHOD. "write_list
**---------------------------------------------------------------------*
* METHOD add_table.
* DATA: ls_table TYPE tps_table.
*
* IF NOT table IS INITIAL.
* CLEAR ls_table.
* ls_table-type = type.
* ls_table-name = table_name.
* ls_table-text = text.
* ls_table-field_key = field_key.
* ls_table-field_parent = field_parent.
* ls_table-field_connection = field_connection.
* ls_table-connection_field = connection_field.
* ls_table-connection_table = connection_table.
* ls_table-level_index = level_index.
* ls_table-export = export.
*
* CREATE OBJECT ls_table-data.
*
* CALL METHOD ls_table-data->add_data
* CHANGING
* table = table.
*
* APPEND ls_table TO list_tables.
*
* ADD 1 TO table_number.
*
* SORT list_tables BY level_index.
* ENDIF.
* ENDMETHOD. "add_table
**---------------------------------------------------------------------*
* METHOD add_level.
* DATA: ls_level TYPE tps_level_info,
* lv_first_level TYPE i.
*
* IF levels IS INITIAL AND NOT
* field_checkbox IS INITIAL.
* indent_margin = 2.
* ENDIF.
*
* ls_level-level = level.
* ls_level-level_index = level.
* ls_level-table = table.
* ls_level-field = field.
* ls_level-name = name.
* ls_level-include_header = include_header.
* ls_level-color = color.
* ls_level-program = program.
* ls_level-form_selection = form_selection.
* ls_level-form_display = form_display.
* ls_level-form_execution = form_execution.
* ls_level-field_checkbox = field_checkbox.
* ls_level-field_icon = field_icon.
* ls_level-icon_length = icon_length.
* ls_level-no_symbol = no_symbol.
* ls_level-no_scroll = no_scroll.
* ls_level-length = 3.
*
* IF ls_level-program IS INITIAL.
* ls_level-program = sy-cprog.
* ENDIF.
*
* APPEND ls_level TO levels.
*
** SORT levels BY level_index.
**
** LOOP AT levels
** INTO ls_level.
** IF NOT ls_level-field IS INITIAL.
** IF sy-tabix = 1.
** IF ls_level-level > 1 OR ls_level-level < 0.
** lv_first_level = 1.
** ELSE.
** lv_first_level = ls_level-level.
** ENDIF.
** ELSE.
** ADD 1 TO lv_first_level.
** ENDIF.
**
** ls_level-level_index = lv_first_level.
** MODIFY levels FROM ls_level.
** ENDIF.
** ENDLOOP.
*
* IF type = 'N' AND NOT
* ls_level-field IS INITIAL.
* IF me->header IS INITIAL.
* me->header = ls_level-name.
* ELSE.
* CONCATENATE me->header '/' ls_level-name
* INTO me->header SEPARATED BY space.
* ENDIF.
* ENDIF.
* ENDMETHOD. "add_level
**---------------------------------------------------------------------*
* METHOD add_field_to_level.
* DATA: ls_level TYPE tps_level_info,
* ls_field TYPE tps_fields.
*
* LOOP AT levels
* INTO ls_level
* WHERE level = level.
* CLEAR ls_field.
* ls_field-fieldname = field.
* ls_field-unit_field = unit_field.
* ls_field-header = header.
* ls_field-length = length.
* ls_field-centered = centered.
* ls_field-hotspot = hotspot.
* ls_field-input = input.
* ls_field-input_variable = input_variable.
* ls_field-form_input_check = form_input_check.
* ls_field-intensified = intensified.
* ls_field-inten_variable = inten_variable.
* ls_field-color = color.
* ls_field-color_variable = color_variable.
* ls_field-icon = icon.
* ls_field-symbol = symbol.
* ls_field-excel_include = excel_include.
* COLLECT ls_field INTO ls_level-fields.
*
* ADD length TO ls_level-length.
*
* MODIFY levels FROM ls_level.
* ENDLOOP.
* ENDMETHOD. "add_field_to_level
**---------------------------------------------------------------------*
* METHOD add_value_field.
* DATA: ls_field TYPE tps_fields.
*
* CLEAR ls_field.
* ls_field-fieldname = field.
* ls_field-header = header.
* ls_field-type = type.
* ls_field-unit = unit.
* ls_field-waers = waers.
* ls_field-color_variable = color_variable.
* ls_field-length = length.
* ls_field-centered = centered.
* ls_field-hotspot = hotspot.
* APPEND ls_field TO value_fields.
* ENDMETHOD. "add_value_field
**---------------------------------------------------------------------*
* METHOD set_control_data .
* DATA: ls_level TYPE tps_level_info.
*
* SUBTRACT 1 FROM sy-lsind.
*
* IF NOT sy-tabix IS INITIAL.
* CALL METHOD get_selected_values
* EXPORTING
* index = sy-tabix
* CHANGING
* selected = selected.
*
* CALL METHOD get_input( key = top_node explode = 'X' ).
*
* IF sy-ucomm = selection_comm.
* CALL METHOD set_selected_field.
*
* IF selected-field = 'DRILL'.
* CALL METHOD drill_down.
* ELSE.
* CALL METHOD execute_level_function.
* ENDIF.
* ENDIF.
* ENDIF.
*
* CLEAR sy-tabix.
* ENDMETHOD. "set_control_data
**---------------------------------------------------------------------*
* METHOD set_level.
* CALL METHOD set_next_level
* EXPORTING
* level = 1
* stop_level = level
* key = top_node.
* ENDMETHOD. "set_level
**---------------------------------------------------------------------*
* METHOD mark.
* FIELD-SYMBOLS: <table> TYPE table,
* <row> TYPE ANY,
* <select> TYPE ANY.
*
* DATA: ls_level TYPE tps_level_info,
* ls_data TYPE tps_list_info,
* lref_select TYPE REF TO data.
*
* LOOP AT levels
* INTO ls_level
* WHERE level = level.
* IF NOT ls_level-field_checkbox IS INITIAL.
* LOOP AT data
* INTO ls_data
* WHERE key-table = table
* AND level_index = ls_level-level_index.
* lref_select = ls_data-info->field( ls_level-field_checkbox ).
* ASSIGN lref_select->* TO <select>.
*
* <select> = value.
* ENDLOOP.
* ENDIF.
* ENDLOOP.
* ENDMETHOD. "mark
**---------------------------------------------------------------------*
* METHOD delete.
* FIELD-SYMBOLS: <table> TYPE table,
* <row> TYPE ANY,
* <select> TYPE ANY.
*
* DATA: ls_level TYPE tps_level_info,
* ls_table TYPE tps_table.
*
* LOOP AT levels
* INTO ls_level
* WHERE level = level.
* IF NOT ls_level-field_checkbox IS INITIAL.
* LOOP AT list_tables
* INTO ls_table
* WHERE name = table.
* ASSIGN ls_table-data->info->* TO <table>.
*
* LOOP AT <table> ASSIGNING <row>.
* ASSIGN COMPONENT ls_level-field_checkbox
* OF STRUCTURE <row>
* TO <select>.
*
* IF NOT <select> IS INITIAL.
* DELETE <table>.
* ENDIF.
* ENDLOOP.
* ENDLOOP.
* ENDIF.
* ENDLOOP.
*
* CALL METHOD set_internal_table.
* ENDMETHOD. "delete
**---------------------------------------------------------------------*
* METHOD excel_export.
* FIELD-SYMBOLS: <table> TYPE table.
*
* DATA: lo_actions TYPE REF TO cpopup_select,
* lo_excel TYPE REF TO cexcel,
* ls_table TYPE tps_table,
* ls_fields TYPE tps_fields,
* ls_level TYPE tps_level_info,
* lv_text TYPE char70,
* lv_option TYPE i VALUE 1,
* lv_tables_count TYPE i.
*
* CREATE OBJECT lo_actions.
*
* DESCRIBE TABLE list_tables LINES lv_tables_count.
*
* IF lv_tables_count > 1.
* LOOP AT list_tables
* INTO ls_table.
* IF NOT ls_table-export IS INITIAL.
* IF NOT ls_table-text IS INITIAL.
* lv_text = ls_table-text.
* ELSE.
* lv_text = ls_table-name.
* ENDIF.
*
* CALL METHOD lo_actions->add_option
* EXPORTING
* value = lv_text
* option = sy-tabix.
* ENDIF.
* ENDLOOP.
*
* CALL METHOD lo_actions->display
* EXPORTING
* title = title
* CHANGING
* option = lv_option.
* ENDIF.
*
* IF lv_option <> 0.
* READ TABLE list_tables INTO ls_table INDEX lv_option.
*
* IF sy-subrc = 0.
* CREATE OBJECT lo_excel.
*
* LOOP AT levels
* INTO ls_level
* WHERE table = ls_table-name.
*
* LOOP AT ls_level-fields
* INTO ls_fields
* WHERE excel_include = 'X'.
* CALL METHOD lo_excel->add_field
* EXPORTING
* fieldname = ls_fields-fieldname
* header = ls_fields-header
* length = ls_fields-length.
* ENDLOOP.
* ENDLOOP.
*
* ASSIGN ls_table-data->info->* TO <table>.
*
* CALL METHOD lo_excel->call
* CHANGING
* table = <table>.
* ENDIF.
* ENDIF.
* ENDMETHOD. "excel_export
**---------------------------------------------------------------------*
* METHOD set_internal_table.
* FIELD-SYMBOLS: <table> TYPE table,
* <line_info> TYPE ANY.
*
* DATA: lt_sort_table TYPE TABLE OF tps_sort_table,
* ls_table TYPE tps_table,
* ls_data TYPE tps_list_info,
* ls_cascade_data TYPE tps_cascade_table.
*
* data_backup = me->data.
* CLEAR me->data.
*
* LOOP AT list_tables
* INTO ls_table
* WHERE type = 'C'.
* ASSIGN ls_table-data->info->* TO <table>.
*
* CALL METHOD import_cascade_table
* EXPORTING
* field_key = ls_table-field_key
* field_parent = ls_table-field_parent
* field_connection = ls_table-field_connection
* CHANGING
* table = <table>
* info = ls_table-info.
*
* MODIFY list_tables FROM ls_table.
* ENDLOOP.
*
* READ TABLE list_tables
* INTO ls_table
* WITH KEY type = 'N'.
*
* IF sy-subrc = 0.
* CALL METHOD convert_table_list_to_sort
* CHANGING
* list_table = ls_table-data->info
* sort_table = lt_sort_table.
*
* CALL METHOD import_sort_table
* EXPORTING
* table_name = ls_table-name
* sort_table = lt_sort_table.
* ENDIF.
*
* LOOP AT list_tables
* INTO ls_table.
* IF ls_table-type = 'C'.
* LOOP AT ls_table-info
* INTO ls_cascade_data
* WHERE imported = space.
* ASSIGN ls_cascade_data-info->info->* TO <line_info>.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = ls_table-level_index
* table_key = ls_table-name
* field_key = ls_table-field_key
* field_parent = ls_table-field_parent
* field_connection = ls_table-field_connection
* connection_table = ls_table-connection_table
* connection_field = ls_table-connection_field
* CHANGING
* line_info = <line_info>.
* ENDLOOP.
* ENDIF.
* ENDLOOP.
*
* CLEAR data_backup.
* ENDMETHOD. "set_internal_table
**---------------------------------------------------------------------*
* METHOD convert_table_list_to_sort.
* FIELD-SYMBOLS: <table> TYPE table,
* <list_info> TYPE ANY,
* <value> TYPE ANY.
*
* DATA: ls_sort_table TYPE tps_sort_table,
* ls_level TYPE tps_level_info,
* ls_field TYPE tps_fields,
* ls_value TYPE tps_value_type,
* lv_sort TYPE tpv_key,
* lref_value TYPE REF TO data.
*
* CLEAR sort_table.
*
* ASSIGN list_table->* TO <table>.
*
* LOOP AT <table> ASSIGNING <list_info>.
* CLEAR ls_sort_table.
*
* CREATE OBJECT ls_sort_table-info.
*
* CALL METHOD ls_sort_table-info->add_data
* CHANGING
* data = <list_info>.
*
* DO 9 TIMES VARYING lv_sort FROM ls_sort_table-sort1
* NEXT ls_sort_table-sort2.
* ls_level = get_level_info( sy-index ).
*
* IF ls_level IS INITIAL.
* EXIT.
* ELSE.
* CALL METHOD ls_sort_table-info->get_field
* EXPORTING
* fieldname = ls_level-field
* IMPORTING
* field_value = lv_sort.
* ENDIF.
* ENDDO.
*
* DO 30 TIMES VARYING ls_value FROM ls_sort_table-values-n01
* NEXT ls_sort_table-values-n02.
* READ TABLE value_fields
* INTO ls_field
* INDEX sy-index.
*
* IF sy-subrc <> 0.
* EXIT.
* ELSE.
* lref_value = ls_sort_table-info->field( ls_field-fieldname ).
* ASSIGN lref_value->* TO <value>.
*
* CASE ls_field-type.
* WHEN 'CURR'. ls_value-curr = <value>.
* WHEN 'QUAN'. ls_value-quan = <value>.
* ENDCASE.
* ENDIF.
* ENDDO.
*
* APPEND ls_sort_table TO sort_table.
* ENDLOOP.
*
* SORT sort_table BY sort1 sort2 sort3 sort4 sort5 sort6 sort7
* sort8 sort9.
* ENDMETHOD. "convert_table_list_to_sort
**---------------------------------------------------------------------*
* METHOD import_sort_table.
* FIELD-SYMBOLS: <line_info> TYPE ANY.
*
* TYPES: BEGIN OF tps_sort_fields,
* name01 TYPE fieldname,
* name02 TYPE fieldname,
* name03 TYPE fieldname,
* name04 TYPE fieldname,
* name05 TYPE fieldname,
* name06 TYPE fieldname,
* name07 TYPE fieldname,
* name08 TYPE fieldname,
* name09 TYPE fieldname,
* END OF tps_sort_fields.
*
* DATA: ls_sort_table TYPE tps_sort_table,
* ls_level TYPE tps_level_info,
* ls_sort_field TYPE tps_sort_fields,
* lv_sort_field TYPE fieldname,
* lv_sort TYPE tpv_key,
* lv_sort_key(500) TYPE c,
* lv_sort_parent(500) TYPE c.
*
* DO 9 TIMES VARYING lv_sort_field FROM ls_sort_field-name01
* NEXT ls_sort_field-name02.
* ls_level = get_level_info( sy-index ).
*
* IF NOT ls_level IS INITIAL.
* lv_sort_field = ls_level-field.
* ENDIF.
* ENDDO.
*
* LOOP AT sort_table
* INTO ls_sort_table.
* ASSIGN ls_sort_table-info->info->* TO <line_info>.
*
* AT NEW sort1.
* SUM.
* lv_sort_parent = space.
* lv_sort_key = ls_sort_table-sort1.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = 1
* table_key = table_name
* key = lv_sort_key
* parent = lv_sort_parent
* values = ls_sort_table-values
* CHANGING
* line_info = <line_info>.
*
* CALL METHOD add_connection_table_line
* EXPORTING
* connection_table = table_name
* connection_field = ls_sort_field-name01
* connection_value = ls_sort_table-sort1
* parent_value = lv_sort_key.
* ENDAT.
*
* AT NEW sort2.
* SUM.
* lv_sort_parent = ls_sort_table-sort1.
*
* CONCATENATE lv_sort_parent ls_sort_table-sort2
* INTO lv_sort_key.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = 2
* table_key = table_name
* key = lv_sort_key
* parent = lv_sort_parent
* values = ls_sort_table-values
* CHANGING
* line_info = <line_info>.
*
* CALL METHOD add_connection_table_line
* EXPORTING
* connection_table = table_name
* connection_field = ls_sort_field-name02
* connection_value = ls_sort_table-sort2
* parent_value = lv_sort_key.
* ENDAT.
*
* AT NEW sort3.
* SUM.
* CLEAR lv_sort_parent.
*
* DO 2 TIMES VARYING lv_sort FROM ls_sort_table-sort1
* NEXT ls_sort_table-sort2.
* CONCATENATE lv_sort_parent lv_sort
* INTO lv_sort_parent.
* ENDDO.
*
* CONCATENATE lv_sort_parent ls_sort_table-sort3
* INTO lv_sort_key.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = 3
* table_key = table_name
* key = lv_sort_key
* parent = lv_sort_parent
* values = ls_sort_table-values
* CHANGING
* line_info = <line_info>.
*
* CALL METHOD add_connection_table_line
* EXPORTING
* connection_table = table_name
* connection_field = ls_sort_field-name03
* connection_value = ls_sort_table-sort3
* parent_value = lv_sort_key.
* ENDAT.
*
* AT NEW sort4.
* SUM.
* CLEAR lv_sort_parent.
*
* DO 3 TIMES VARYING lv_sort FROM ls_sort_table-sort1
* NEXT ls_sort_table-sort2.
* CONCATENATE lv_sort_parent lv_sort
* INTO lv_sort_parent.
* ENDDO.
*
* CONCATENATE lv_sort_parent ls_sort_table-sort4
* INTO lv_sort_key.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = 4
* table_key = table_name
* key = lv_sort_key
* parent = lv_sort_parent
* values = ls_sort_table-values
* CHANGING
* line_info = <line_info>.
*
* CALL METHOD add_connection_table_line
* EXPORTING
* connection_table = table_name
* connection_field = ls_sort_field-name04
* connection_value = ls_sort_table-sort4
* parent_value = lv_sort_key.
* ENDAT.
*
* AT NEW sort5.
* SUM.
* CLEAR lv_sort_parent.
*
* DO 4 TIMES VARYING lv_sort FROM ls_sort_table-sort1
* NEXT ls_sort_table-sort2.
* CONCATENATE lv_sort_parent lv_sort
* INTO lv_sort_parent.
* ENDDO.
*
* CONCATENATE lv_sort_parent ls_sort_table-sort5
* INTO lv_sort_key.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = 5
* table_key = table_name
* key = lv_sort_key
* parent = lv_sort_parent
* values = ls_sort_table-values
* CHANGING
* line_info = <line_info>.
*
* CALL METHOD add_connection_table_line
* EXPORTING
* connection_table = table_name
* connection_field = ls_sort_field-name05
* connection_value = ls_sort_table-sort5
* parent_value = lv_sort_key.
* ENDAT.
*
* AT NEW sort6.
* SUM.
* CLEAR lv_sort_parent.
*
* DO 5 TIMES VARYING lv_sort FROM ls_sort_table-sort1
* NEXT ls_sort_table-sort2.
* CONCATENATE lv_sort_parent lv_sort
* INTO lv_sort_parent.
* ENDDO.
*
* CONCATENATE lv_sort_parent ls_sort_table-sort6
* INTO lv_sort_key.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = 6
* table_key = table_name
* key = lv_sort_key
* parent = lv_sort_parent
* values = ls_sort_table-values
* CHANGING
* line_info = <line_info>.
*
* CALL METHOD add_connection_table_line
* EXPORTING
* connection_table = table_name
* connection_field = ls_sort_field-name06
* connection_value = ls_sort_table-sort6
* parent_value = lv_sort_key.
* ENDAT.
*
* AT NEW sort7.
* SUM.
* CLEAR lv_sort_parent.
*
* DO 6 TIMES VARYING lv_sort FROM ls_sort_table-sort1
* NEXT ls_sort_table-sort2.
* CONCATENATE lv_sort_parent lv_sort
* INTO lv_sort_parent.
* ENDDO.
*
* CONCATENATE lv_sort_parent ls_sort_table-sort7
* INTO lv_sort_key.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = 7
* table_key = table_name
* key = lv_sort_key
* parent = lv_sort_parent
* values = ls_sort_table-values
* CHANGING
* line_info = <line_info>.
*
* CALL METHOD add_connection_table_line
* EXPORTING
* connection_table = table_name
* connection_field = ls_sort_field-name07
* connection_value = ls_sort_table-sort7
* parent_value = lv_sort_key.
* ENDAT.
*
* AT NEW sort8.
* SUM.
* CLEAR lv_sort_parent.
*
* DO 7 TIMES VARYING lv_sort FROM ls_sort_table-sort1
* NEXT ls_sort_table-sort2.
* CONCATENATE lv_sort_parent lv_sort
* INTO lv_sort_parent.
* ENDDO.
*
* CONCATENATE lv_sort_parent ls_sort_table-sort8
* INTO lv_sort_key.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = 8
* table_key = table_name
* key = lv_sort_key
* parent = lv_sort_parent
* values = ls_sort_table-values
* CHANGING
* line_info = <line_info>.
*
* CALL METHOD add_connection_table_line
* EXPORTING
* connection_table = table_name
* connection_field = ls_sort_field-name08
* connection_value = ls_sort_table-sort8
* parent_value = lv_sort_key.
* ENDAT.
*
* AT NEW sort9.
* SUM.
* CLEAR lv_sort_parent.
*
* DO 8 TIMES VARYING lv_sort FROM ls_sort_table-sort1
* NEXT ls_sort_table-sort2.
* CONCATENATE lv_sort_parent lv_sort
* INTO lv_sort_parent.
* ENDDO.
*
* CONCATENATE lv_sort_parent ls_sort_table-sort9
* INTO lv_sort_key.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = 9
* table_key = table_name
* key = lv_sort_key
* parent = lv_sort_parent
* values = ls_sort_table-values
* CHANGING
* line_info = <line_info>.
*
* CALL METHOD add_connection_table_line
* EXPORTING
* connection_table = table_name
* connection_field = ls_sort_field-name09
* connection_value = ls_sort_table-sort9
* parent_value = lv_sort_key.
* ENDAT.
* ENDLOOP.
* ENDMETHOD. "import_sort_table
**---------------------------------------------------------------------*
* METHOD import_cascade_table.
* FIELD-SYMBOLS: <line_info> TYPE ANY.
*
* DATA: ls_cascade_data TYPE tps_cascade_table.
*
* CLEAR info.
*
* LOOP AT table ASSIGNING <line_info>.
* CLEAR ls_cascade_data.
*
* CREATE OBJECT ls_cascade_data-info.
*
* CALL METHOD ls_cascade_data-info->add_data
* CHANGING
* data = <line_info>.
*
* IF NOT field_key IS INITIAL.
* CALL METHOD ls_cascade_data-info->get_field
* EXPORTING
* fieldname = field_key
* IMPORTING
* field_value = ls_cascade_data-key.
* ENDIF.
*
* IF NOT field_parent IS INITIAL.
* CALL METHOD ls_cascade_data-info->get_field
* EXPORTING
* fieldname = field_parent
* IMPORTING
* field_value = ls_cascade_data-parent.
* ENDIF.
*
* IF NOT field_connection IS INITIAL.
* CALL METHOD ls_cascade_data-info->get_field
* EXPORTING
* fieldname = field_connection
* IMPORTING
* field_value = ls_cascade_data-connection.
* ENDIF.
*
* APPEND ls_cascade_data TO info.
* ENDLOOP.
* ENDMETHOD. "import_cascade_table
**---------------------------------------------------------------------*
* METHOD add_table_line.
* DATA: ls_data TYPE tps_list_info,
* ls_level TYPE tps_level_info.
*
* IF NOT key IS INITIAL OR NOT field_key IS INITIAL.
* ls_level = get_level_info( level_index ).
*
* CLEAR ls_data.
*
* LOOP AT data_backup
* INTO ls_data
* WHERE key-table = table_key
* AND key-value = key
* AND parent-value = parent.
* CLEAR: ls_data-child_selected,
* ls_data-child_number,
* ls_data-node_number.
* ENDLOOP.
*
* ls_data-level_index = level_index.
* ls_data-values = values.
*
* CREATE OBJECT ls_data-info.
*
* CALL METHOD ls_data-info->add_data
* CHANGING
* data = line_info.
*
* ls_data-key-table = table_key.
*
* IF NOT field_key IS INITIAL.
* CALL METHOD ls_data-info->get_field
* EXPORTING
* fieldname = field_key
* IMPORTING
* field_value = ls_data-key-value.
* ELSE.
* ls_data-key-value = key.
* ENDIF.
*
* IF table_parent IS INITIAL.
* ls_data-parent-table = table_key.
* ELSE.
* ls_data-parent-table = table_parent.
* ENDIF.
*
* IF NOT field_parent IS INITIAL.
* CALL METHOD ls_data-info->get_field
* EXPORTING
* fieldname = field_parent
* IMPORTING
* field_value = ls_data-parent-value.
* ELSE.
* ls_data-parent-value = parent.
* ENDIF.
*
* IF ls_data-parent-value IS INITIAL AND NOT
* connection_table IS INITIAL.
* ls_data-parent-table = connection_table.
*
* CALL METHOD ls_data-info->get_field
* EXPORTING
* fieldname = connection_field
* IMPORTING
* field_value = ls_data-parent-value.
* ENDIF.
*
* IF ls_data-key-value <> ls_data-parent-value.
* APPEND ls_data TO me->data.
* ENDIF.
* ENDIF.
* ENDMETHOD. "add_table_line
**---------------------------------------------------------------------*
* METHOD add_connection_table_line.
* FIELD-SYMBOLS: <row> TYPE ANY.
*
* DATA: ls_table TYPE tps_table,
* ls_data TYPE tps_cascade_table.
*
* LOOP AT list_tables
* INTO ls_table
* WHERE connection_table = connection_table
* AND connection_field = connection_field.
*
* LOOP AT ls_table-info
* INTO ls_data
* WHERE connection = connection_value.
* ASSIGN ls_data-info->info->* TO <row>.
*
* CALL METHOD add_table_line
* EXPORTING
* level_index = ls_table-level_index
* table_key = ls_table-name
* key = ls_data-key
* table_parent = connection_table
* parent = parent_value
* CHANGING
* line_info = <row>.
*
* ls_data-imported = 'X'.
* MODIFY ls_table-info FROM ls_data.
* ENDLOOP.
* ENDLOOP.
* ENDMETHOD. "add_connection_table_line
**---------------------------------------------------------------------*
* METHOD get_level_info.
* CLEAR level_info.
*
* READ TABLE levels
* INTO level_info
* WITH KEY level_index = level.
* ENDMETHOD. "get_level_info
**---------------------------------------------------------------------*
* METHOD write_next_level.
* DATA: ls_level TYPE tps_level_info,
* ls_data TYPE tps_list_info,
* ls_table TYPE tps_table,
* lv_last_node TYPE char1,
* lv_index TYPE i,
* lv_first_line TYPE char1.
*
* ADD 1 TO level.
*
* CALL METHOD set_level_indent
* EXPORTING
* level = level
* last_node = parent_last_node.
*
* CALL METHOD child_selection
* EXPORTING
* table = table
* parent_table = parent_table
* parent_value = parent_key.
*
* lv_first_line = 'X'.
*
* LOOP AT data
* INTO ls_data
* WHERE key-table = table
* AND parent-table = parent_table
* AND parent-value = parent_key.
* lv_index = sy-tabix.
*
* ls_level = get_level_info( ls_data-level_index ).
*
* IF NOT lv_first_line IS INITIAL.
* CLEAR lv_first_line.
*
* IF level <> 1.
* CALL METHOD new_line
* EXPORTING
* line_type = 'B'
* level = level
* checkbox = ls_level-field_checkbox
* no_scroll = ls_level-no_scroll.
* ENDIF.
*
* IF type = 'N'.
* CALL METHOD write_level_header
* EXPORTING
* level = level
* level_info = ls_level
* child_number = ls_data-child_number.
* ENDIF.
* ENDIF.
*
* CALL METHOD new_line
* EXPORTING
* line_type = 'N'
* level = level
* checkbox = ls_level-field_checkbox
* no_scroll = ls_level-no_scroll.
*
* CALL METHOD write_level
* EXPORTING
* level = level
* index = lv_index
* list_info = ls_data
* level_info = ls_level.
*
* ls_data-level = level.
* ls_data-linno = current_list_line.
* MODIFY data FROM ls_data.
*
* IF NOT ls_data-explode IS INITIAL.
* LOOP AT list_tables
* INTO ls_table.
* IF ls_data-node_number = child_number.
* lv_last_node = 'X'.
* ELSE.
* CLEAR lv_last_node.
* ENDIF.
*
* CALL METHOD write_next_level
* EXPORTING
* level = level
* child_number = ls_data-child_number
* child_last_table = ls_data-child_last_table
* parent_last_node = lv_last_node
* table = ls_table-name
* parent_table = ls_data-key-table
* parent_key = ls_data-key-value.
* ENDLOOP.
* ENDIF.
* ENDLOOP.
*
* IF parent_last_node IS INITIAL AND
* sy-subrc IS INITIAL AND
* child_last_table = table.
* CALL METHOD new_line
* EXPORTING
* line_type = 'A'
* level = level.
* ENDIF.
* ENDMETHOD. "write_next_level
**---------------------------------------------------------------------*
* METHOD write_level_header.
* DATA: ls_field TYPE tps_fields,
* lv_color TYPE i.
*
* IF NOT level_info-include_header IS INITIAL.
* CALL METHOD new_line
* EXPORTING
* line_type = 'L'
* level = level
* checkbox = level_info-field_checkbox
* no_scroll = level_info-no_scroll.
*
* IF NOT level_info-color IS INITIAL.
* lv_color = level_info-color.
* ELSEIF child_number IS INITIAL.
* lv_color = color-last_level.
* ELSE.
* lv_color = color-main.
* ENDIF.
*
* FORMAT INTENSIFIED ON.
*
* WRITE AT: (3) space COLOR = lv_color NO-GAP.
*
* LOOP AT level_info-fields INTO ls_field.
* WRITE AT: (ls_field-length) ls_field-header COLOR = lv_color
* CENTERED NO-GAP.
* ENDLOOP.
* ENDIF.
* ENDMETHOD. "write_level_header
**---------------------------------------------------------------------*
* METHOD write_level.
* FIELD-SYMBOLS: <info> TYPE ANY.
*
* DATA: lv_color TYPE i.
*
* IF NOT level_info-color IS INITIAL.
* lv_color = level_info-color.
* ELSEIF list_info-child_number IS INITIAL.
* lv_color = me->color-last_level.
* ELSE.
* lv_color = me->color-main.
* ENDIF.
*
* FORMAT COLOR = lv_color INTENSIFIED ON.
*
* IF NOT level_info-field_checkbox IS INITIAL.
* CALL METHOD write_checkbox
* EXPORTING
* list_info = list_info
* field_checkbox = level_info-field_checkbox.
* ENDIF.
*
* IF level_info-no_symbol IS INITIAL.
* CALL METHOD write_symbol
* EXPORTING
* list_info = list_info.
* ENDIF.
*
* IF level_info-form_display IS INITIAL.
* CALL METHOD write_default_level
* EXPORTING
* level_info = level_info
* list_line = list_info-info
* color = lv_color.
* ELSE.
* ASSIGN list_info-info->info->* TO <info>.
* PERFORM (level_info-form_display) IN PROGRAM (sy-cprog)
* USING <info>.
* ENDIF.
*
* IF NOT value_fields IS INITIAL.
* IF form_values IS INITIAL.
* CALL METHOD write_default_values
* EXPORTING
* list_info = list_info
* color = color-values.
* ELSE.
* ASSIGN list_info-info->info->* TO <info>.
* PERFORM (form_values) IN PROGRAM (sy-cprog)
* USING <info>.
* ENDIF.
* ENDIF.
*
* sy-tabix = index.
* HIDE sy-tabix.
* ENDMETHOD. "write_level
**---------------------------------------------------------------------*
* METHOD write_checkbox.
* FIELD-SYMBOLS: <select> TYPE ANY.
*
* DATA: lref_select TYPE REF TO data.
*
* lref_select = list_info-info->field( field_checkbox ).
* ASSIGN lref_select->* TO <select>.
*
* IF type IS INITIAL.
* CASE field_checkbox.
* WHEN 'O'.
* WRITE: <select> AS CHECKBOX NO-GAP INPUT OFF,
* space COLOR = 0 INTENSIFIED OFF NO-GAP.
* WHEN OTHERS.
* CASE <select>.
* WHEN 'O'.
* WRITE: <select> AS CHECKBOX NO-GAP INPUT OFF,
* space COLOR = 0 INTENSIFIED OFF NO-GAP.
* WHEN OTHERS.
* WRITE: <select> AS CHECKBOX NO-GAP,
* space COLOR = 0 INTENSIFIED OFF NO-GAP.
* ENDCASE.
* ENDCASE.
* ELSE.
* WRITE AT (2) space COLOR = 0 INTENSIFIED OFF NO-GAP.
* ENDIF.
* ENDMETHOD. "write_checkbox
**---------------------------------------------------------------------*
* METHOD write_symbol.
* DATA: lv_symbol TYPE char2.
*
* IF type IS INITIAL.
* lv_symbol = get_symbol( child_number = list_info-child_number
* explode = list_info-explode ).
*
* WRITE AT (3) lv_symbol AS SYMBOL NO-GAP HOTSPOT.
* ELSE.
* WRITE AT (3) space NO-GAP.
* ENDIF.
* ENDMETHOD. "write_symbol
**---------------------------------------------------------------------*
* METHOD new_line.
** line_type = 'H' - Header
** line_type = 'L' - Level Header
** line_type = 'B' - Before;
** line_type = 'N' - Normal line;
** line_type = 'A' - After
*
* DATA: lv_indent TYPE i,
* lv_indent1 TYPE i,
* lv_indent2 TYPE i,
* lv_indentations TYPE i,
* lv_line TYPE char1.
*
* lv_indentations = level - 1.
*
* FORMAT COLOR = 0 INTENSIFIED OFF HOTSPOT OFF.
*
* lv_indent = ( level - 1 ) * step_margin.
* lv_indent1 = 1.
* lv_indent2 = step_margin - lv_indent1 - 1.
*
* IF no_scroll IS INITIAL OR NOT with_lines IS INITIAL.
* NEW-LINE SCROLLING.
* ELSE.
* NEW-LINE NO-SCROLLING.
* ENDIF.
*
* CASE line_type.
* WHEN 'H'.
* ADD 1 TO current_list_line.
*
* WRITE AT (indent_margin) space NO-GAP COLOR = 0.
*
* CLEAR sy-tabix.
* HIDE sy-tabix.
*
* FORMAT COLOR = color-main INTENSIFIED ON.
* WHEN 'B' OR 'L'.
* IF NOT with_lines IS INITIAL OR line_type = 'L'.
* ADD 1 TO current_list_line.
*
* IF NOT indent_margin IS INITIAL.
* WRITE AT: (indent_margin) space NO-GAP.
* ENDIF.
*
* CLEAR sy-tabix.
* HIDE sy-tabix.
*
* IF with_lines IS INITIAL.
* WRITE AT: (lv_indent) space NO-GAP.
* ELSE.
* DO lv_indentations TIMES.
* IF sy-index = lv_indentations.
* WRITE AT: (lv_indent1) space NO-GAP,
* (1) sy-vline NO-GAP,
* (lv_indent2) space NO-GAP.
* ELSE.
* lv_line = get_level_indent( sy-index ).
*
* WRITE AT: (lv_indent1) space NO-GAP,
* (1) lv_line NO-GAP,
* (lv_indent2) space NO-GAP.
* ENDIF.
* ENDDO.
* ENDIF.
* ENDIF.
* WHEN 'N'.
* ADD 1 TO current_list_line.
*
* IF NOT indent_margin IS INITIAL AND level <> 1.
* WRITE AT: (indent_margin) space NO-GAP.
* ENDIF.
*
* IF with_lines IS INITIAL.
* IF NOT checkbox IS INITIAL.
* SUBTRACT 2 FROM lv_indent.
* ENDIF.
*
* WRITE AT: (lv_indent) space NO-GAP.
* ELSE.
* DO lv_indentations TIMES.
* IF sy-index = lv_indentations.
* IF NOT checkbox IS INITIAL.
* SUBTRACT 2 FROM lv_indent2.
* ENDIF.
*
* WRITE AT: (lv_indent1) space NO-GAP,
* (1) sy-vline NO-GAP,
* (lv_indent2) sy-uline NO-GAP.
* ELSE.
* lv_line = get_level_indent( sy-index ).
*
* WRITE AT: (lv_indent1) space NO-GAP,
* (1) lv_line NO-GAP,
* (lv_indent2) space NO-GAP.
* ENDIF.
* ENDDO.
* ENDIF.
* WHEN 'A'.
* IF NOT with_lines IS INITIAL.
* ADD 1 TO current_list_line.
*
* IF level = 2.
* SKIP.
* ENDIF.
*
* CLEAR sy-tabix.
* HIDE sy-tabix.
*
* lv_indentations = level - 2.
*
* IF lv_indentations > 0.
* IF NOT indent_margin IS INITIAL.
* WRITE AT: (indent_margin) space NO-GAP.
* ENDIF.
* ENDIF.
*
* DO lv_indentations TIMES.
* lv_line = get_level_indent( sy-index ).
*
* WRITE AT: (lv_indent1) space NO-GAP,
* (1) lv_line NO-GAP,
* (lv_indent2) space NO-GAP.
* ENDDO.
* ENDIF.
* ENDCASE.
* ENDMETHOD. "new_line
**---------------------------------------------------------------------*
* METHOD get_symbol.
* CONSTANTS: con_documents(2) VALUE '2 ',
* con_plus_folder(2) VALUE '4 ',
* con_minus_folder(2) VALUE '5 '.
*
* IF child_number IS INITIAL.
* symbol = con_documents.
* ELSE.
* IF NOT explode IS INITIAL.
* symbol = con_minus_folder.
* ELSE.
* symbol = con_plus_folder.
* ENDIF.
* ENDIF.
* ENDMETHOD. "get_symbol
**---------------------------------------------------------------------*
* METHOD write_default_level.
* DATA: ls_field TYPE tps_fields,
* lv_dummy(100) TYPE c,
* lv_color TYPE i,
* lv_unit TYPE meins.
*
* DATA: ref_field TYPE REF TO data.
*
* FIELD-SYMBOLS: <field> TYPE ANY.
*
* LOOP AT level_info-fields INTO ls_field.
* IF ls_field-fieldname IS INITIAL.
* GET REFERENCE OF lv_dummy INTO ref_field.
* ASSIGN ref_field->* TO <field>.
* ELSE.
* ref_field = list_line->field( ls_field-fieldname ).
* ASSIGN ref_field->* TO <field>.
* ENDIF.
*
* IF NOT ls_field-color_variable IS INITIAL.
* CALL METHOD list_line->get_field
* EXPORTING
* fieldname = ls_field-color_variable
* IMPORTING
* field_value = ls_field-color.
* ENDIF.
*
* IF ls_field-color IS INITIAL.
* lv_color = color.
* ELSE.
* lv_color = ls_field-color.
* ENDIF.
*
* IF NOT ls_field-inten_variable IS INITIAL.
* CALL METHOD list_line->get_field
* EXPORTING
* fieldname = ls_field-inten_variable
* IMPORTING
* field_value = ls_field-intensified.
* ENDIF.
*
* IF ls_field-intensified IS INITIAL.
* FORMAT INTENSIFIED OFF.
* ELSE.
* FORMAT INTENSIFIED ON.
* ENDIF.
*
* IF ls_field-hotspot IS INITIAL.
* FORMAT HOTSPOT OFF.
* ELSE.
* FORMAT HOTSPOT ON.
* ENDIF.
*
* IF NOT ls_field-input_variable IS INITIAL.
* CALL METHOD list_line->get_field
* EXPORTING
* fieldname = ls_field-input_variable
* IMPORTING
* field_value = ls_field-input.
* ENDIF.
*
* IF ls_field-input IS INITIAL.
* FORMAT INPUT OFF.
* ELSE.
* FORMAT INPUT ON.
* ENDIF.
*
* IF NOT ls_field-icon IS INITIAL AND NOT <field> IS INITIAL.
* WRITE AT (ls_field-length) <field> AS ICON
* COLOR = lv_color NO-GAP.
* ELSEIF NOT ls_field-symbol IS INITIAL AND NOT <field> IS INITIAL.
* WRITE AT (ls_field-length) <field> AS SYMBOL
* COLOR = lv_color NO-GAP.
* ELSE.
* CALL METHOD list_line->get_field
* EXPORTING
* fieldname = ls_field-unit_field
* IMPORTING
* field_value = lv_unit.
*
* IF NOT lv_unit IS INITIAL.
* WRITE: AT (ls_field-length) <field> COLOR = lv_color NO-GAP
* UNIT lv_unit.
* ELSEIF ls_field-centered IS INITIAL.
* WRITE AT (ls_field-length) <field> COLOR = lv_color NO-GAP.
* ELSE.
* WRITE AT (ls_field-length) <field> COLOR = lv_color NO-GAP
* CENTERED
* .
* ENDIF.
* ENDIF.
* ENDLOOP.
* ENDMETHOD. "write_default_level
**---------------------------------------------------------------------*
* METHOD write_default_values.
* FIELD-SYMBOLS: <field> TYPE tps_value_type,
* <color> TYPE i.
*
* DATA: ls_field TYPE tps_fields,
* lv_color TYPE i.
*
* WRITE AT values_position space NO-GAP COLOR = me->color-main
* INTENSIFIED.
*
* LOOP AT value_fields
* INTO ls_field.
* ASSIGN COMPONENT sy-tabix OF STRUCTURE list_info-values
* TO <field>.
*
* IF NOT ls_field-color_variable IS INITIAL.
* CALL METHOD list_info-info->get_field
* EXPORTING
* fieldname = ls_field-color_variable
* IMPORTING
* field_value = ls_field-color.
* ENDIF.
*
* IF ls_field-color IS INITIAL.
* lv_color = color.
* ELSE.
* lv_color = ls_field-color.
* ENDIF.
*
* IF ls_field-hotspot IS INITIAL.
* FORMAT HOTSPOT OFF.
* ELSE.
* FORMAT HOTSPOT ON.
* ENDIF.
*
* CASE ls_field-type.
* WHEN 'CURR'.
* IF ls_field-centered IS INITIAL.
* WRITE AT (ls_field-length) <field>-curr
* NO-GAP CURRENCY ls_field-waers COLOR = lv_color.
* ELSE.
* WRITE: AT (ls_field-length) <field>-curr
* NO-GAP CURRENCY ls_field-waers COLOR = lv_color CENTERED.
* ENDIF.
* WHEN 'QUAN'.
* IF ls_field-centered IS INITIAL.
* WRITE: AT (ls_field-length) <field>-quan
* NO-GAP UNIT ls_field-unit COLOR = lv_color.
* ELSE.
* WRITE: AT (ls_field-length) <field>-quan
* NO-GAP UNIT ls_field-unit COLOR = lv_color CENTERED.
* ENDIF.
* ENDCASE.
*
* WRITE space NO-GAP COLOR = me->color-main INTENSIFIED OFF.
* ENDLOOP.
* ENDMETHOD. "write_default_values
**---------------------------------------------------------------------*
* METHOD get_selected_values.
* DATA: ls_data TYPE tps_list_info.
*
* CLEAR selected.
* selected-page = sy-cpage.
* selected-line = sy-lilli.
* selected-column = sy-cucol.
* selected-start_line = sy-staro.
* selected-start_column = sy-staco.
* selected-index = index.
*
* READ TABLE data
* INTO ls_data
* INDEX index.
*
* IF sy-subrc = 0.
* selected-table = ls_data-key-table.
* selected-level = ls_data-level.
* selected-level_index = ls_data-level_index.
* ENDIF.
* ENDMETHOD. "get_selected_values
**---------------------------------------------------------------------*
* METHOD set_selected_field.
* DATA: ls_level TYPE tps_level_info,
* ls_field TYPE tps_fields,
* lv_cursor_drill_begin TYPE i,
* lv_cursor_drill_end TYPE i,
* lv_field_position TYPE i.
*
* ls_level = get_level_info( selected-level_index ).
*
* IF with_lines = space AND NOT ls_level-no_scroll IS INITIAL.
* lv_cursor_drill_begin = ( selected-level - 1 ) * step_margin
* - 1 + indent_margin + 3.
* ELSE.
* lv_cursor_drill_begin = ( selected-level - 1 ) * step_margin
* - selected-start_column + indent_margin + 3.
* ENDIF.
*
* lv_cursor_drill_end = lv_cursor_drill_begin + 2.
*
* CLEAR selected-field.
*
* IF selected-column >= lv_cursor_drill_begin
* AND selected-column <= lv_cursor_drill_end.
* selected-field = 'DRILL'.
* ENDIF.
*
* IF selected-column > lv_cursor_drill_end.
* lv_field_position = lv_cursor_drill_end + 1.
*
* LOOP AT ls_level-fields INTO ls_field.
* ADD ls_field-length TO lv_field_position.
*
* IF selected-column < lv_field_position.
* selected-field = ls_field-fieldname.
* EXIT.
* ENDIF.
* ENDLOOP.
* ENDIF.
* ENDMETHOD. "set_selected_field
**---------------------------------------------------------------------*
* METHOD drill_down.
* DATA: ls_data TYPE tps_list_info.
*
* READ TABLE data
* INTO ls_data
* INDEX selected-index.
*
* IF sy-subrc = 0 AND ls_data-child_number <> 0.
* IF ls_data-explode IS INITIAL.
* ls_data-explode = 'X'.
* ELSE.
* CLEAR ls_data-explode.
* ENDIF.
*
* MODIFY data
* FROM ls_data
* INDEX selected-index.
* ENDIF.
* ENDMETHOD. "drill_down
**---------------------------------------------------------------------*
* METHOD execute_level_function.
* FIELD-SYMBOLS: <info> TYPE ANY.
*
* DATA: ls_level TYPE tps_level_info,
* ls_data TYPE tps_list_info.
*
* READ TABLE data
* INTO ls_data
* INDEX selected-index.
*
* IF sy-subrc = 0.
* ls_level = get_level_info( ls_data-level_index ).
*
* IF NOT ls_level-form_execution IS INITIAL.
* ASSIGN ls_data-info->info->* TO <info>.
*
* PERFORM (ls_level-form_execution) IN PROGRAM (ls_level-program)
* USING <info>.
* ENDIF.
* ENDIF.
* ENDMETHOD. "execute_level_function
**---------------------------------------------------------------------*
* METHOD get_input.
* FIELD-SYMBOLS: <select> TYPE ANY.
*
* DATA: ls_data TYPE tps_list_info,
* ls_level TYPE tps_level_info,
* lv_select TYPE char1,
* lref_select TYPE REF TO data.
*
* IF NOT explode IS INITIAL.
* LOOP AT data
* INTO ls_data
* WHERE parent-value = key.
* ls_level = get_level_info( ls_data-level_index ).
*
* IF NOT ls_level-field_checkbox IS INITIAL.
* lref_select = ls_data-info->field( ls_level-field_checkbox ).
* ASSIGN lref_select->* TO <select>.
*
* <select> = read_list_line( line = ls_data-linno
* level = ls_data-level ).
*
* IF type = 'N'.
* CALL METHOD set_child_checkbox
* EXPORTING
* field_checkbox = ls_level-field_checkbox
* select = <select>
* key = ls_data-key-value.
* ENDIF.
* ENDIF.
*
* CALL METHOD get_field_input
* EXPORTING
* list_info = ls_data
* CHANGING
* fields = ls_level-fields.
*
* CALL METHOD get_input( key = ls_data-key-value
* explode = ls_data-explode ).
* ENDLOOP.
* ENDIF.
* ENDMETHOD. "get_input
**---------------------------------------------------------------------*
* METHOD get_field_input.
* FIELD-SYMBOLS: <info> TYPE ANY,
* <field> TYPE ANY.
*
* DATA: ls_field TYPE tps_fields,
* lv_position TYPE i,
* lref_field TYPE REF TO data.
*
* CLEAR lv_position.
* LOOP AT fields
* INTO ls_field.
* IF NOT ls_field-input_variable IS INITIAL.
* CALL METHOD list_info-info->get_field
* EXPORTING
* fieldname = ls_field-input_variable
* IMPORTING
* field_value = ls_field-input.
* ENDIF.
*
* IF ls_field-input = 'X'.
* lref_field = list_info-info->field( ls_field-fieldname ).
* ASSIGN lref_field->* TO <field>.
*
* CALL METHOD read_line_field
* EXPORTING
* line = list_info-linno
* level = list_info-level
* position = lv_position
* length = ls_field-length
* CHANGING
* value = <field>.
*
* IF NOT ls_field-form_input_check IS INITIAL.
* ASSIGN list_info-info->info->* TO <info>.
* PERFORM (ls_field-form_input_check) IN PROGRAM (sy-cprog)
* USING <info>
* CHANGING <field>.
* ENDIF.
* ENDIF.
*
* ADD ls_field-length TO lv_position.
* ENDLOOP.
* ENDMETHOD. "get_field_input
**---------------------------------------------------------------------*
* METHOD set_child_checkbox.
* FIELD-SYMBOLS: <select> TYPE ANY.
*
* DATA: ls_data TYPE tps_list_info,
* lref_select TYPE REF TO data.
*
* LOOP AT data
* INTO ls_data
* WHERE parent = key.
* lref_select = ls_data-info->field( field_checkbox ).
* ASSIGN lref_select->* TO <select>.
*
* CALL METHOD set_child_checkbox
* EXPORTING
* field_checkbox = field_checkbox
* select = select
* key = ls_data-key-value.
* ENDLOOP.
* ENDMETHOD. "set_child_checkbox
**---------------------------------------------------------------------*
* METHOD read_list_line.
* DATA: lv_position TYPE i.
*
* READ LINE line.
*
* IF sy-subrc = 0.
* CLEAR lv_position.
*
* IF level > 1.
* lv_position = step_margin * ( level - 1 ) - 2 + indent_margin.
* ENDIF.
*
* select = sy-lisel+lv_position(1).
* ENDIF.
* ENDMETHOD. "read_list_line
**---------------------------------------------------------------------*
* METHOD read_line_field.
* DATA: lv_position TYPE i.
*
* READ LINE line.
*
* IF sy-subrc = 0.
* CLEAR lv_position.
*
* IF level > 1.
* lv_position = step_margin * ( level - 1 ) + 3 + indent_margin.
* ENDIF.
*
* ADD position TO lv_position.
*
* value = sy-lisel+lv_position(length).
* ENDIF.
* ENDMETHOD. "read_line_field
**---------------------------------------------------------------------*
* METHOD set_next_level.
* DATA: ls_data TYPE tps_list_info,
* lv_level TYPE i.
*
* LOOP AT data
* INTO ls_data
* WHERE parent-value = key.
* IF level < stop_level AND NOT
* ls_data-child_number IS INITIAL.
* ls_data-explode = 'X'.
* ELSE.
* CLEAR ls_data-explode.
* ENDIF.
*
* MODIFY data FROM ls_data.
*
* lv_level = level + 1.
*
* CALL METHOD set_next_level
* EXPORTING
* level = lv_level
* stop_level = stop_level
* key = ls_data-key-value.
* ENDLOOP.
* ENDMETHOD. "set_next_level
**---------------------------------------------------------------------*
* METHOD set_level_indent.
* DATA: lv_position TYPE i.
*
* lv_position = level - 1.
* indent_lines+lv_position(1) = last_node.
* ENDMETHOD. "set_level_indent
**---------------------------------------------------------------------*
* METHOD get_level_indent.
* DATA: lv_position TYPE i.
*
* lv_position = level + 1.
* info = indent_lines+lv_position(1).
*
* IF info IS INITIAL.
* info = sy-vline.
* ELSE.
* info = space.
* ENDIF.
* ENDMETHOD. "get_level_indent
*ENDCLASS. "cdrill_down IMPLEMENTATION
*
**----------------------------------------------------------------------
**
** CLASS cicp DEFINITION
**----------------------------------------------------------------------
**
**
**----------------------------------------------------------------------
**
*CLASS cicp DEFINITION.
* PUBLIC SECTION.
* TYPES: tps_index TYPE t094p,
* tpt_index TYPE TABLE OF tps_index.
*
* DATA: wbind TYPE wbind,
* basjhr TYPE basjhr,
* indjhr TYPE indjhr,
* indexes TYPE tpt_index,
* lines TYPE i.
*
* METHODS constructor
* IMPORTING
* wbind TYPE wbind
* basjhr TYPE basjhr
* indjhr TYPE indjhr
* table TYPE table.
*
* METHODS month
* IMPORTING
* month TYPE indmon
* RETURNING
* value(index) TYPE indprz.
*ENDCLASS. "cicp DEFINITION
*
**----------------------------------------------------------------------
**
** CLASS cicp IMPLEMENTATION
**----------------------------------------------------------------------
**
**
**----------------------------------------------------------------------
**
*CLASS cicp IMPLEMENTATION.
* METHOD constructor.
* FIELD-SYMBOLS: <data> TYPE ANY.
*
* DATA: lref_data TYPE REF TO data,
* ls_index TYPE tps_index.
*
* CREATE DATA lref_data LIKE LINE OF table.
* ASSIGN lref_data->* TO <data>.
*
* me->wbind = wbind.
* me->basjhr = basjhr.
* me->indjhr = indjhr.
*
* CLEAR indexes.
*
* LOOP AT table ASSIGNING <data>.
* MOVE-CORRESPONDING <data> TO ls_index.
*
* IF ls_index-wbind = wbind AND
* ls_index-basjhr = basjhr AND
* ls_index-indjhr = indjhr.
* APPEND ls_index TO indexes.
* ENDIF.
* ENDLOOP.
*
* DESCRIBE TABLE indexes LINES lines.
* ENDMETHOD. "constructor
*
* METHOD month.
* DATA: ls_index TYPE tps_index.
*
* CLEAR index.
*
* LOOP AT indexes
* INTO ls_index
* WHERE indmon = month.
* index = ls_index-indproz.
* ENDLOOP.
* ENDMETHOD. "month
*ENDCLASS. "cicp IMPLEMENTATION
*
**----------------------------------------------------------------------
**
** CLASS ccons_clauses DEFINITION
**----------------------------------------------------------------------
**
**
**----------------------------------------------------------------------
**
*CLASS ccons_clauses DEFINITION.
* PUBLIC SECTION.
* TYPES: tps_user TYPE vzsort.
*
* DATA: contract TYPE vimimv,
* clause TYPE z3acons,
* discount TYPE z3dsc,
* ipc TYPE vimi16,
* old_value TYPE balt,
* year TYPE gjahr,
* month TYPE monat,
* date TYPE datum,
* last_day TYPE datum,
* first_day TYPE datum,
* sales TYPE z3sales_t,
* first_sales_period TYPE text6,
* last_sales_period TYPE text6,
* total_sales TYPE bneu.
*
* CLASS-METHODS get_contract_user_values
* IMPORTING
* intreno TYPE vvintreno
* CHANGING
* user TYPE vzsort.
*
* METHODS constructor
* IMPORTING
* intreno TYPE vvintreno
* year TYPE numc04
* month TYPE numc2.
*
* METHODS get_cons_value
* RETURNING
* value(value) TYPE bneu.
*
* METHODS get_sales_values
* IMPORTING
* periods TYPE i DEFAULT 12
* type TYPE i DEFAULT 0
* displacement TYPE i DEFAULT 0
* CHANGING
* VALUE type bneu.
*
* CLASS-METHODS select_sales_values
* IMPORTING
* intreno TYPE vvintreno
* year TYPE gjahr
* month TYPE monat
* CHANGING
* valor_fact TYPE bneu OPTIONAL
* renda_var TYPE bneu OPTIONAL
* renumer TYPE bneu OPTIONAL.
*
* PROTECTED SECTION.
* METHODS get_multi_sales_values
* IMPORTING
* first TYPE i
* last TYPE i
* CHANGING
* VALUE type bneu optional
* period_value TYPE bneu OPTIONAL.
*
* METHODS get_cond
* IMPORTING
* skoart TYPE skoart
* date_from TYPE datum
* date_to TYPE datum
* SIGN type char1
* CHANGING
* VALUE type bneu.
*
* METHODS set_discount
* IMPORTING
* VALUE type bneu
* TYPE type char1 default '+'
* RETURNING
* value(discount) TYPE bneu.
*
* METHODS process01
* RETURNING value(value_cons) TYPE bneu.
*
* METHODS process02
* RETURNING value(value_cons) TYPE bneu.
*
* METHODS process03
* RETURNING value(value_cons) TYPE bneu.
*
* METHODS process04
* RETURNING value(value_cons) TYPE bneu.
*
* METHODS process05
* RETURNING value(value_cons) TYPE bneu.
*
* METHODS process06
* RETURNING value(value_cons) TYPE bneu.
*
* METHODS process07
* RETURNING value(value_cons) TYPE bneu.
*
* METHODS process08
* RETURNING value(value_cons) TYPE bneu.
*
* METHODS process09
* RETURNING value(value_cons) TYPE bneu.
*ENDCLASS. "ccons_clauses DEFINITION
*
**----------------------------------------------------------------------
**
** CLASS ccons_clauses IMPLEMENTATION
**----------------------------------------------------------------------
**
**
**----------------------------------------------------------------------
**
*CLASS ccons_clauses IMPLEMENTATION.
* METHOD get_contract_user_values.
* CLEAR user.
* SELECT SINGLE *
* INTO user
* FROM vzsort
* WHERE snumobj = 'VI'
* AND sobjekt = intreno.
* ENDMETHOD. "get_contract_user_values
*
* METHOD constructor.
* DATA: ls_user TYPE tps_user.
*
* CLEAR: me->contract,
* me->clause,
* me->discount,
* me->ipc,
* me->old_value,
* me->year,
* me->month,
* me->date,
* me->last_day,
* me->first_day.
*
* SELECT SINGLE *
* INTO contract
* FROM vimimv
* WHERE intreno = intreno.
*
* IF sy-subrc IS INITIAL.
* me->year = year.
* me->month = month.
* last_day = cdate=>month_last_day( year = year month = month
*).
* first_day = last_day.
* first_day+6(2) = '01'.
*
* SELECT *
* INTO clause
* FROM z3acons UP TO 1 ROWS
* WHERE intreno = intreno
* AND data BETWEEN first_day AND last_day
* ORDER BY data DESCENDING.
*
* SELECT SINGLE *
* INTO discount
* FROM z3dsc
* WHERE bukrs = contract-bukrs
* AND intreno = contract-intreno
* AND dguel = clause-data.
*
* CALL METHOD get_contract_user_values
* EXPORTING
* intreno = contract-intreno
* CHANGING
* user = ls_user.
*
* date = ls_user-usr08.
*
* IF NOT date IS INITIAL AND date+6(2) > 14.
* date = cdate=>add_months( date = date months = 1 ).
* ENDIF.
* ENDSELECT.
*
* SELECT *
* INTO ipc
* FROM vimi16 UP TO 1 ROWS
* WHERE bukrs = contract-bukrs
* AND smive = contract-smive
* AND swenr = contract-swenr
* AND smenr = contract-smenr
* AND dguelab = first_day
* AND skoart = '0010'
* AND sanpnr = '008'
* AND dstorno = '00000000'
* AND sfutanp <> '2'
* ORDER BY danpass.
* old_value = set_discount( value = ipc-bkondalt type = '-' ).
* ENDSELECT.
* ENDIF.
* ENDMETHOD. "constructor
*
* METHOD get_cons_value.
* CLEAR value.
*
* CASE clause-zzccaso.
* WHEN '01'. value = process01( ).
* WHEN '02'. value = process02( ).
* WHEN '03'. value = process03( ).
* WHEN '04'. value = process04( ).
* WHEN '05'. value = process05( ). "Inactivo: Deve ser revisto
* WHEN '06'. value = process06( ).
* WHEN '07'. value = process07( ). "Inactivo: Não utilizado
* WHEN '08'. value = process08( ). "Inactivo: Não utilizado
* WHEN '09'. value = process09( ).
* WHEN '99'.
* ENDCASE.
* ENDMETHOD. "get_cons_value
*
* METHOD get_sales_values.
* DATA: ls_sales TYPE z3sales_s,
* lv_month TYPE monat,
* lv_year TYPE gjahr,
* lv_displ TYPE i,
* lv_date_to TYPE datum,
* lv_date_from TYPE datum,
* lv_months TYPE p,
* lv_renda_var TYPE bneu.
*
* CLEAR value.
*
* lv_year = year.
* lv_month = month.
*
* lv_displ = displacement * -1.
*
* CALL METHOD cdate=>add_period
* EXPORTING
* value = lv_displ
* CHANGING
* year = lv_year
* month = lv_month.
*
* CLEAR: sales,
* first_sales_period,
* last_sales_period,
* total_sales.
*
* DO periods TIMES.
* CALL METHOD cdate=>add_period
* EXPORTING
* value = -1
* CHANGING
* year = lv_year
* month = lv_month.
*
* CALL METHOD select_sales_values
* EXPORTING
* intreno = contract-intreno
* year = lv_year
* month = lv_month
* CHANGING
* renda_var = lv_renda_var.
*
* ADD lv_renda_var TO value.
*
* CLEAR ls_sales.
* ls_sales-period = cdate=>set_period_text( year = lv_year month =
*lv_month ).
* ls_sales-value = lv_renda_var.
* INSERT ls_sales INTO sales INDEX 1.
*
* IF last_sales_period IS INITIAL.
* last_sales_period = ls_sales-period.
* ENDIF.
*
* first_sales_period = ls_sales-period.
* total_sales = value.
* ENDDO.
*
* IF type = 1.
* lv_year = year.
* lv_month = month.
*
* CALL METHOD cdate=>add_period
* EXPORTING
* value = lv_displ
* CHANGING
* year = lv_year
* month = lv_month.
*
* CONCATENATE year month '01' INTO lv_date_to.
* CONCATENATE lv_year lv_month '01' INTO lv_date_from.
*
* CALL METHOD get_cond
* EXPORTING
* skoart = '0010'
* date_from = lv_date_from
* date_to = lv_date_to
* sign = '+'
* CHANGING
* value = value.
* ENDIF.
* ENDMETHOD. "get_sales_values
*
* METHOD select_sales_values.
* DATA: lv_valor_fact TYPE z3valor_fact,
* lv_renda_var TYPE z3renda_var,
* lv_renumer TYPE z3remuner.
*
* CLEAR: valor_fact,
* renda_var,
* renumer.
*
* SELECT valor_fact
* renda_var
* renumer
* INTO (lv_valor_fact,
* lv_renda_var,
* lv_renumer)
* FROM z3vvm
* WHERE anovv = year
* AND mesvv = month
* AND intreno = intreno
* AND ( status = space OR status = '33' ).
* ADD lv_valor_fact TO valor_fact.
* ADD lv_renda_var TO renda_var.
* ADD lv_renumer TO renumer.
* ENDSELECT.
* ENDMETHOD. "select_sales_values
*
* METHOD get_multi_sales_values.
* DATA: lv_yocul TYPE char1,
* lv_mult TYPE char1,
* lv_date_from TYPE datum,
* lv_date_to TYPE datum,
* lv_value TYPE zvolvem_re.
*
* CLEAR: lv_yocul,
* lv_mult.
*
* SELECT SINGLE yocul
* INTO lv_yocul
* FROM z3cmconfig
* WHERE zzccaso EQ '06'.
*
* IF sy-subrc IS INITIAL.
* IF lv_yocul IS INITIAL.
* lv_mult = 'X'.
* ELSE.
* CLEAR lv_mult.
* ENDIF.
* ENDIF.
*
* lv_date_from =
* cdate=>subtract_months( date = first_day months = first ).
* lv_date_to =
* cdate=>subtract_months( date = first_day months = last ).
*
* CLEAR: value.
*
* SELECT volvem_re
* INTO lv_value
* FROM z3vvm_mv
* WHERE ( ( anovv = lv_date_from(4) AND
* mesvv >= lv_date_from+4(2) ) OR
* ( anovv > lv_date_from(4) AND
* anovv < lv_date_from(4) ) OR
* ( anovv = lv_date_to(4) AND
* mesvv <= lv_date_to+4(2) ) )
* AND intreno = contract-intreno.
* ADD lv_value TO value.
*
* IF lv_mult = 'X'.
* IF NOT clause-zzccy IS INITIAL.
* lv_value = lv_value * clause-zzccy / 100.
* ENDIF.
*
* ADD lv_value TO period_value.
* ENDIF.
* ENDSELECT.
*
* period_value = ( period_value / 12 ) * ( clause-zzccx / 100 ).
* ENDMETHOD. "get_multi_sales_values
*
* METHOD get_cond.
* DATA: lv_bcwhr TYPE bcwhr,
* lv_bmwst TYPE bmwst.
*
* SELECT bcwhr bmwst
* INTO (lv_bcwhr, lv_bmwst)
* FROM vibepp
* WHERE bukrs = contract-bukrs
* AND smive = contract-smive
* AND swenr = contract-swenr
* AND smenr = contract-smenr
* AND skoart = skoart
* AND dbervon >= date_from
* AND dberbis <= date_to.
*
* DIVIDE lv_bcwhr BY 12.
* DIVIDE lv_bmwst BY 12.
*
* IF sign = '-'.
* SUBTRACT lv_bcwhr FROM value.
* ADD lv_bmwst TO value.
* ELSE.
* ADD lv_bcwhr TO value.
* SUBTRACT lv_bmwst FROM value.
* ENDIF.
* ENDSELECT.
* ENDMETHOD. "get_cond
*
* METHOD set_discount.
* IF type = '+'.
* discount = value *
* ( 1 - ( me->discount-zzdesc / 100 ) ) *
* ( 1 - ( me->discount-zzdescex / 100 ) ).
* ELSE.
* discount = value /
* ( 1 - ( me->discount-zzdesc / 100 ) ) *
* ( 1 - ( me->discount-zzdescex / 100 ) ).
* ENDIF.
* ENDMETHOD. "set_discount
*
* METHOD process01.
* CLEAR value_cons.
*
* CALL METHOD get_sales_values
* CHANGING
* value = value_cons.
*
* value_cons = old_value + ( value_cons * clause-zzccx / 1200 ).
* value_cons = set_discount( value_cons ).
* ENDMETHOD. "process01
*
* METHOD process02.
* CLEAR value_cons.
*
* IF date(6) = last_day(6).
* CALL METHOD get_sales_values
* EXPORTING
* periods = 9
* displacement = 3
* CHANGING
* value = value_cons.
*
* value_cons = old_value + ( value_cons * clause-zzccx / 900 ).
* ELSE.
* CALL METHOD get_sales_values
* EXPORTING
* periods = 12
* displacement = 3
* CHANGING
* value = value_cons.
*
* value_cons = old_value + ( value_cons * clause-zzccx / 1200 ).
* ENDIF.
*
* value_cons = set_discount( value_cons ).
* ENDMETHOD. "process02
*
* METHOD process03.
* DATA: lv_bneu TYPE bneu.
*
* CLEAR value_cons.
*
* CALL METHOD get_sales_values
* CHANGING
* value = value_cons.
*
* value_cons = ( value_cons * clause-zzccx / 1200 ).
* value_cons = set_discount( value_cons ).
*
* lv_bneu = ipc-banpass * ( 1 + ( clause-zzccz / 100 ) ).
*
* IF lv_bneu > value_cons.
* value_cons = lv_bneu.
* ENDIF.
* ENDMETHOD. "process03
*
* METHOD process04.
* CLEAR value_cons.
*
* CALL METHOD get_sales_values
* EXPORTING
* type = 1
* CHANGING
* value = value_cons.
*
* value_cons = ( value_cons * clause-zzccx / 100 ).
* value_cons = set_discount( value_cons ).
* ENDMETHOD. "process04
*
* METHOD process05.
** DATA: lv_value1 TYPE bneu,
** lv_value2 TYPE bneu,
** lv_coef TYPE bneu,
** lv_sales_value TYPE bneu,
** lv_data TYPE datum.
**
** CLEAR value_cons.
**
** CALL METHOD get_multi_sales_values
** EXPORTING
** first = 12
** last = 1
** CHANGING
** value = lv_value1.
**
** CALL METHOD get_multi_sales_values
** EXPORTING
** first = 24
** last = 13
** CHANGING
** value = lv_value2.
**
** IF lv_value1 > lv_value2.
** value_cons = process02( ).
** ELSE.
** SELECT SINGLE data
** INTO lv_data
** FROM z3acons
** WHERE data < clause-data
** AND tpact = 'C'
** AND evt1 = 'X'.
**
** IF sy-subrc IS INITIAL.
** ELSE.
** ENDIF.
** ENDIF.
* ENDMETHOD. "process05
*
* METHOD process06.
* CLEAR value_cons.
*
* CALL METHOD get_multi_sales_values
* EXPORTING
* first = 12
* last = 1
* CHANGING
* period_value = value_cons.
* ENDMETHOD. "process06
*
* METHOD process07.
** DATA: lv_bkondalt TYPE bkondalt.
**
** CLEAR value_cons.
**
** CALL METHOD get_multi_sales_values
** EXPORTING
** first = 12
** last = 1
** CHANGING
** period_value = value_cons.
**
** IF ipc-sfutanp <> '2'.
** lv_bkondalt = ipc-bkondalt /
** ( ( 1 - ( discount-zzdesc / 100 ) ) *
** ( 1 - ( discount-zzdescex / 100 ) ) ).
**
** ADD lv_bkondalt TO value_cons.
** ELSE.
** CLEAR value_cons.
** ENDIF.
* ENDMETHOD. "process07
*
* METHOD process08.
* ENDMETHOD. "process08
*
* METHOD process09.
* DATA lv_bneu TYPE bneu.
*
* CLEAR value_cons.
*
* IF date(6) = last_day(6).
* CALL METHOD get_sales_values
* EXPORTING
* periods = 9
* displacement = 3
* CHANGING
* value = value_cons.
*
* value_cons = old_value + ( value_cons * clause-zzccx / 900 ).
* ELSE.
* CALL METHOD get_sales_values
* EXPORTING
* periods = 12
* displacement = 3
* CHANGING
* value = value_cons.
*
* value_cons = old_value + ( value_cons * clause-zzccx / 1200 ).
* ENDIF.
*
* value_cons = set_discount( value_cons ).
*
* lv_bneu = ipc-banpass * ( 1 + ( clause-zzccz / 100 ) ).
*
* IF lv_bneu > value_cons.
* value_cons = lv_bneu.
* ENDIF.
* ENDMETHOD. "process09
*ENDCLASS. "ccons_clauses IMPLEMENTATION
*
**----------------------------------------------------------------------
**
** CLASS cre_contract DEFINITION
**----------------------------------------------------------------------
**
**
**----------------------------------------------------------------------
**
*CLASS cre_contract DEFINITION.
* PUBLIC SECTION.
* DATA: vimimv TYPE vimimv,
* vimi55 TYPE TABLE OF vimi55,
* vzzkopo TYPE TABLE OF vzzkopo.
*
* METHODS constructor
* IMPORTING
* intreno TYPE vvintreno.
*
* METHODS definitive_index
* IMPORTING
* skoart TYPE skoart
* index_date TYPE datum OPTIONAL
* dguelab TYPE datum OPTIONAL
* CHANGING
* ipc TYPE indprz.
*
* METHODS print
* IMPORTING
* no_open TYPE char1 DEFAULT space
* no_close TYPE char1 DEFAULT space
* r_date TYPE table
* r_skoart TYPE table
* r_sanpnr TYPE table
* new_spool TYPE char1 DEFAULT 'X'
* no_dialog TYPE char1 DEFAULT ' '
* printer TYPE rspopname OPTIONAL
* z3act_s TYPE z3act_s
* option TYPE numc2
* user TYPE uname.
*
* METHODS print_label
* IMPORTING
* type TYPE char10
* position TYPE numc2 OPTIONAL
* CHANGING
* etiq_count TYPE i OPTIONAL
* proc_label_pos TYPE char1 OPTIONAL.
*
* METHODS get_other_data
* CHANGING
* bp000 TYPE bp000 OPTIONAL
* bp030 TYPE bp030 OPTIONAL
* adrc TYPE adrc OPTIONAL
* sans1 TYPE sans1 OPTIONAL
* vimi01 TYPE vimi01 OPTIONAL
* tiv0a TYPE tiv0a OPTIONAL
* viob01 TYPE viob01 OPTIONAL.
*
* METHODS get_index_data
* IMPORTING
* vimi16 TYPE vimi16
* CHANGING
* index TYPE z3indice_prov
* vimi55 TYPE vimi55.
*
* CLASS-METHODS check_first_vimi16
* IMPORTING
* bukrs TYPE bukrs
* smive TYPE smive
* swenr TYPE swenr
* smenr TYPE smenr
* skoart TYPE skoart
* dguelab TYPE dguelab
* danpass TYPE danpass
* sanpnr TYPE sanpnr
* xident TYPE xident1
* sfutanp TYPE vvsfutanp
* CHANGING
* value(valid) TYPE char1.
*
* CLASS-METHODS get_vimi16_data
* IMPORTING
* bukrs TYPE bukrs
* smive TYPE smive
* swenr TYPE swenr
* smenr TYPE smenr
* dguelab TYPE dguelab OPTIONAL
* skoart TYPE skoart OPTIONAL
* sanpnr TYPE sanpnr OPTIONAL
* r_date TYPE table OPTIONAL
* r_skoart TYPE table OPTIONAL
* r_sanpnr TYPE table OPTIONAL
* CHANGING
* vimi16 TYPE vimi16.
*
* CLASS-METHODS get_skopo_text
* IMPORTING
* skopo TYPE vvskopo
* rantyp TYPE rantyp DEFAULT '3'
* skoart TYPE skoart DEFAULT '0010'
* RETURNING
* value(text) TYPE xkbez.
*
* CLASS-METHODS get_definitive_index
* IMPORTING
* wbind TYPE wbind
* basjhr TYPE basjhr
* indjhr TYPE indjhr
* indmon TYPE indmon
* CHANGING
* ipc TYPE indprz.
*
* CLASS-METHODS get_index
* IMPORTING
* wbind TYPE wbind
* basjhr TYPE basjhr
* indjhr TYPE indjhr
* indmon TYPE indmon
* CHANGING
* ipc TYPE indprz.
*ENDCLASS. "cre_contract DEFINITION
*
**----------------------------------------------------------------------
**
** CLASS cre_contract IMPLEMENTATION
**----------------------------------------------------------------------
**
**
**----------------------------------------------------------------------
**
*CLASS cre_contract IMPLEMENTATION.
* METHOD constructor.
* SELECT SINGLE *
* INTO me->vimimv
* FROM vimimv
* WHERE intreno = intreno.
*
* IF sy-subrc IS INITIAL.
* SELECT *
* INTO TABLE me->vimi55
* FROM vimi55
* WHERE intreno = intreno
* ORDER BY dgabanrt DESCENDING.
*
* SELECT *
* INTO TABLE me->vzzkopo
* FROM vzzkopo
* WHERE bukrs = me->vimimv-bukrs
* AND sanlf = '410'
* AND rkey1 = me->vimimv-smive
* AND rkey2 = me->vimimv-swenr
* AND rkey3 = me->vimimv-smenr
* AND dguel_kk <= sy-datum
* ORDER BY dguel_kk DESCENDING.
* ENDIF.
* ENDMETHOD. "constructor
*
* METHOD definitive_index.
* DATA: ls_vimi55 TYPE vimi55,
* lv_index_date TYPE datum,
* lv_daktiv TYPE datum.
*
* CLEAR ipc.
*
* IF index_date IS INITIAL.
* SELECT dguelbi daktiv
* INTO (lv_index_date, lv_daktiv)
* FROM vimi16 UP TO 1 ROWS
* WHERE bukrs = vimimv-bukrs
* AND smive = vimimv-smive
* AND swenr = vimimv-swenr
* AND smenr = vimimv-smenr
* AND skoart = skoart
* AND sanpnr = '008'
* AND dguelab = dguelab
* AND dstorno = '00000000'
* ORDER BY daktiv DESCENDING.
* ENDSELECT.
* ELSE.
* lv_index_date = index_date.
* ENDIF.
*
* IF NOT lv_index_date IS INITIAL.
* LOOP AT vimi55
* INTO ls_vimi55
* WHERE dgabanrt <= lv_index_date
* AND skoart = skoart.
* CALL METHOD get_definitive_index
* EXPORTING
* wbind = ls_vimi55-sindart
* basjhr = ls_vimi55-ybasisj
* indjhr = lv_index_date(4)
* indmon = lv_index_date+4(2)
* CHANGING
* ipc = ipc.
*
* EXIT.
* ENDLOOP.
* ENDIF.
* ENDMETHOD. "definitive_index
*
* METHOD print.
* DATA: ls_out_options TYPE ssfcompop,
* lv_function_name TYPE rs38l_fnam,
* lv_ctrl_parm TYPE ssfctrlop,
* lv_count TYPE i,
* lv_ipc_def TYPE indprz,
* lv_email TYPE ad_smtpadr,
* lv_current_value TYPE bneu,
* lv_no_open1 TYPE char1,
* lv_no_open2 TYPE char1,
* lv_no_close1 TYPE char1,
* lv_no_close2 TYPE char1,
* lv_last_dguelab TYPE dguelab,
* lv_last_value TYPE z3remb,
* lv_percent TYPE z3perc,
** AR01 <<<
** lv_last_year TYPE char1,
** lv_this_year TYPE char1,
* lv_last_year TYPE char2,
* lv_this_year TYPE char2,
** AR01 >>>
* lv_data TYPE datum,
* lv_ipc_value TYPE bneu,
* lv_ipc_index TYPE indprz.
*
* DATA: ls_viob01 TYPE viob01,
* ls_vimi01 TYPE vimi01,
* ls_vimi16 TYPE vimi16,
* ls_vimi16_last TYPE vimi16,
* ls_vimi55 TYPE vimi55,
* ls_adrc TYPE adrc,
* ls_sans1 TYPE sans1,
* ls_tiv0a TYPE tiv0a,
* ls_bp000 TYPE bp000,
* ls_bp030 TYPE bp030,
* ls_z3indice_prov TYPE z3indice_prov,
* lo_user TYPE REF TO cuser,
* lo_cc TYPE REF TO ccons_clauses.
*
* CALL METHOD get_other_data
* CHANGING
* bp000 = ls_bp000
* bp030 = ls_bp030
* adrc = ls_adrc
* sans1 = ls_sans1
* vimi01 = ls_vimi01
* tiv0a = ls_tiv0a
* viob01 = ls_viob01.
*
* CALL METHOD get_vimi16_data
* EXPORTING
* bukrs = vimimv-bukrs
* smive = vimimv-smive
* swenr = vimimv-swenr
* smenr = vimimv-smenr
* r_skoart = r_skoart
* r_date = r_date
* r_sanpnr = r_sanpnr
* CHANGING
* vimi16 = ls_vimi16.
*
* CALL METHOD get_index_data
* EXPORTING
* vimi16 = ls_vimi16
* CHANGING
* index = ls_z3indice_prov
* vimi55 = ls_vimi55.
*
* CREATE OBJECT lo_user
* EXPORTING
* user = user.
*
* lv_email = lo_user->adr6-smtp_addr.
*
* CALL METHOD definitive_index
* EXPORTING
* skoart = ls_vimi16-skoart
* index_date = ls_vimi16-dguelbi
* dguelab = ls_vimi16-dguelab
* CHANGING
* ipc = lv_ipc_def.
*
* IF ( ls_vimi16-skopo = '30' AND ls_vimi16-skoart = '0010' ) OR
*ls_vimi16-sanpnr = '010'.
* IF no_open IS INITIAL.
* lv_no_open1 = space.
* lv_no_open2 = 'X'.
* ELSE.
* lv_no_open1 = lv_no_open2 = 'X'.
* ENDIF.
*
* IF no_close IS INITIAL.
* lv_no_close1 = 'X'.
* lv_no_close2 = space.
* ELSE.
* lv_no_close1 = lv_no_close2 = 'X'.
* ENDIF.
* ELSE.
* lv_no_open1 = no_open.
* lv_no_close1 = no_close.
* ENDIF.
*
* ls_out_options-tdnewid = new_spool.
* ls_out_options-tddelete = 'X'.
* ls_out_options-tdtitle = 'Cartas de actualização'.
* ls_out_options-tddest = printer.
*
* lv_ctrl_parm-no_dialog = no_dialog.
* lv_ctrl_parm-no_open = lv_no_open1.
* lv_ctrl_parm-no_close = lv_no_close1.
*
* CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
* EXPORTING
* formname = 'Z3_ACT_MOD'
* IMPORTING
* fm_name = lv_function_name
* EXCEPTIONS
* no_form = 1
* no_function_module = 2
* OTHERS = 3.
*
* CALL FUNCTION lv_function_name
* EXPORTING
* control_parameters = lv_ctrl_parm
* output_options = ls_out_options
* user_settings = space
* vimimv = vimimv
* viob01 = ls_viob01
* vimi01 = ls_vimi01
* vimi16 = ls_vimi16
* vimi55 = ls_vimi55
* contact_email = lv_email
* contact_adcp = lo_user->adcp
* contact_adrp = lo_user->adrp
* adrc = ls_adrc
* sans1 = ls_sans1
* z3act_s = z3act_s
* tiv0a = ls_tiv0a
* bp000 = ls_bp000
* bp030 = ls_bp030
* z3indice_prov = ls_z3indice_prov
* option = option
* indice_final = lv_ipc_def
* EXCEPTIONS
* formatting_error = 1
* internal_error = 2
* send_error = 3
* user_canceled = 4
* OTHERS = 5.
*
* IF ( ls_vimi16-skopo = '30' AND ls_vimi16-skoart = '0010' ) OR
*ls_vimi16-sanpnr = '010'.
* SELECT dguel zzvalue
* INTO (lv_last_dguelab, lv_last_value)
* FROM z3dsc UP TO 1 ROWS
* WHERE bukrs = vimimv-bukrs
* AND intreno = vimimv-intreno
* AND dguel < ls_vimi16-dguelab
* ORDER BY dguel DESCENDING.
* ENDSELECT.
*
* CALL METHOD get_vimi16_data
* EXPORTING
* bukrs = vimimv-bukrs
* smive = vimimv-smive
* swenr = vimimv-swenr
* smenr = vimimv-smenr
* skoart = ls_vimi16-skoart
* sanpnr = '008'
* dguelab = ls_vimi16-dguelab
* CHANGING
* vimi16 = ls_vimi16_last.
*
* LOOP AT vimi55
* INTO ls_vimi55
* WHERE dgabanrt <= ls_vimi16_last-dguelbi
* AND skoart = ls_vimi16_last-skoart.
* CALL METHOD get_definitive_index
* EXPORTING
* wbind = ls_vimi55-sindart
* basjhr = ls_vimi55-ybasisj
* indjhr = ls_vimi16_last-dguelbi(4)
* indmon = ls_vimi16_last-dguelbi+4(2)
* CHANGING
* ipc = lv_ipc_index.
*
* lv_ipc_value = ls_vimi16_last-bkondalt * ( ( lv_ipc_index / 100
*) + 1 ).
* EXIT.
* ENDLOOP.
*
* SELECT perc data
* INTO (lv_percent, lv_data)
* FROM z3peq UP TO 1 ROWS
* WHERE intreno = vimimv-intreno
* AND data <= ls_vimi16-dguelab
* AND tpven = '01'
* ORDER BY data DESCENDING.
* ENDSELECT.
*
* IF ls_vimi16-dguelab(4) <> vimimv-dmibeg(4).
* lv_this_year = ls_vimi16-dguelab(4) - vimimv-dmibeg(4) + 1.
* lv_last_year = lv_this_year - 1.
* ENDIF.
*
* CREATE OBJECT lo_cc
* EXPORTING
* intreno = vimimv-intreno
* year = ls_vimi16-dguelab(4)
* month = ls_vimi16-dguelab+4(2).
*
* lv_current_value = lo_cc->get_cons_value( ).
*
* CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
* EXPORTING
* formname = 'Z3_ACT_MOD_DETAILS'
* IMPORTING
* fm_name = lv_function_name
* EXCEPTIONS
* no_form = 1
* no_function_module = 2
* OTHERS = 3.
*
* lv_ctrl_parm-no_open = lv_no_open2.
* lv_ctrl_parm-no_close = lv_no_close2.
*
* CALL FUNCTION lv_function_name
* EXPORTING
* control_parameters = lv_ctrl_parm
* output_options = ls_out_options
* user_settings = space
* values = lo_cc->sales
* dguelab = ls_vimi16-dguelab
* dmibeg = vimimv-dmibeg
* percent = lv_percent
* last_dguelab = lv_last_dguelab
* last_value = lv_last_value
* this_year = lv_this_year
* last_year = lv_last_year
* first_period = lo_cc->first_sales_period
* last_period = lo_cc->last_sales_period
* total_values = lo_cc->total_sales
* current_value = ls_vimi16-banpass
* name1 = ls_bp000-name1
* name2 = ls_bp000-name2
* ipc_value = lv_ipc_value
* ipc_index = lv_ipc_index
* EXCEPTIONS
* formatting_error = 1
* internal_error = 2
* send_error = 3
* user_canceled = 4
* OTHERS = 5.
* ENDIF.
* ENDMETHOD. "print
*
* METHOD print_label.
* DATA: ls_itcpo TYPE itcpo.
*
* CASE type.
* WHEN 'START'.
* CLEAR ls_itcpo.
* ls_itcpo-tdnewid = 'X'.
*
* CALL FUNCTION 'OPEN_FORM'
* EXPORTING
* device = 'PRINTER'
* form = 'Z3_ACT_MODLABEL'
* language = 'P'
* options = ls_itcpo
* EXCEPTIONS
* canceled = 1
* device = 2
* form = 3
* options = 4
* unclosed = 5
* mail_options = 6
* OTHERS = 7.
*
* IF sy-subrc EQ 4.
* MESSAGE i018(z3) WITH 'Z3_ACT_MODLABEL'.
* ENDIF.
*
* CALL FUNCTION 'START_FORM'
* EXPORTING
* form = 'Z3_ACT_MODLABEL'
* startpage = 'FIRST'
* EXCEPTIONS
* form = 1
* format = 2
* unended = 3
* unopened = 4
* unused = 5.
* WHEN 'BODY'.
*
* IF etiq_count EQ 51.
* etiq_count = 0.
* CALL FUNCTION 'END_FORM'.
* CALL FUNCTION 'START_FORM'
* EXPORTING
* form = 'Z3_ACT_MODLABEL'
* startpage = 'FIRST'
* EXCEPTIONS
* form = 1
* format = 2
* unended = 3
* unopened = 4
* unused = 5.
* ENDIF.
*
* IF proc_label_pos IS INITIAL.
* proc_label_pos = 'X'.
* IF position GT 0.
* DO position TIMES.
* ADD 1 TO etiq_count.
* CALL FUNCTION 'WRITE_FORM'
* EXPORTING
* window = 'MAIN'
* element = 'NEWWINDOW'
* EXCEPTIONS
* window = 1.
* ENDDO.
* ENDIF.
* ENDIF.
* CALL FUNCTION 'WRITE_FORM'
* EXPORTING
* window = 'MAIN'
* element = 'LABEL'
* EXCEPTIONS
* window = 1.
* CALL FUNCTION 'WRITE_FORM'
* EXPORTING
* window = 'MAIN'
* element = 'NEWWINDOW'
* EXCEPTIONS
* window = 1.
*
* ADD 1 TO etiq_count.
*
* IF etiq_count EQ 51.
* etiq_count = 0.
* CALL FUNCTION 'END_FORM'.
* CALL FUNCTION 'START_FORM'
* EXPORTING
* form = 'Z3_ACT_MODLABEL'
* startpage = 'FIRST'
* EXCEPTIONS
* form = 1
* format = 2
* unended = 3
* unopened = 4
* unused = 5.
* ENDIF.
*
* CALL FUNCTION 'WRITE_FORM'
* EXPORTING
* window = 'MAIN'
* element = 'LABEL'
* EXCEPTIONS
* window = 1.
* CALL FUNCTION 'WRITE_FORM'
* EXPORTING
* window = 'MAIN'
* element = 'NEWWINDOW'
* EXCEPTIONS
* window = 1.
*
* ADD 1 TO etiq_count.
* WHEN 'END'.
* CALL FUNCTION 'END_FORM'.
* CALL FUNCTION 'CLOSE_FORM'
* EXCEPTIONS
* unopened = 1.
* ENDCASE.
* ENDMETHOD. "print_label
*
* METHOD get_other_data.
* DATA: t001 TYPE t001.
*
* CLEAR t001.
* SELECT SINGLE *
* INTO t001
* FROM t001
* WHERE bukrs = vimimv-bukrs.
*
** Nome e Morada do Parceiro
* CLEAR bp000.
* SELECT SINGLE *
* INTO bp000
* FROM bp000
* WHERE customer = vimimv-kunnr.
*
* CLEAR bp030.
* SELECT SINGLE *
* INTO bp030
* FROM bp030
* WHERE partnr = bp000-partnr
* AND adr_ref_k = bp000-adr_ref.
*
* CLEAR sans1.
* SELECT SINGLE *
* INTO sans1
* FROM sans1
* WHERE adrnr = bp030-adrnr.
*
** Nome e Morada da Empresa
* CLEAR adrc.
* SELECT SINGLE *
* INTO adrc
* FROM adrc
* WHERE addrnumber = t001-adrnr
* AND date_from <= sy-datum
* AND date_to > sy-datum.
*
** Nome da Unidade Economica
* CLEAR viob01.
* SELECT SINGLE *
* INTO viob01
* FROM viob01
* WHERE bukrs = vimimv-bukrs
* AND swenr = vimimv-swenr.
*
** Tipo de Loja
* CLEAR vimi01.
* SELECT SINGLE *
* INTO vimi01
* FROM vimi01
* WHERE bukrs = vimimv-bukrs
* AND swenr = vimimv-swenr
* AND smenr = vimimv-smenr.
*
* CLEAR tiv0a.
* SELECT SINGLE *
* INTO tiv0a
* FROM tiv0a
* WHERE spras = sy-langu
* AND snunr = vimi01-snunr.
* ENDMETHOD. "get_other_data
*
* METHOD get_index_data.
* DATA: lv_date TYPE datum.
*
* SELECT *
* INTO vimi55
* FROM vimi55 UP TO 1 ROWS
* WHERE intreno = vimimv-intreno
* AND skoart = vimi16-skoart
* AND dgabanrt <= vimi16-dguelab
* ORDER BY dgabanrt DESCENDING.
*
* lv_date = cdate=>subtract_months( date = vimi16-dguelab months =
*vimi55-manpverz ).
*
* SELECT SINGLE *
* INTO index
* FROM z3indice_prov
* WHERE wbind = vimi55-sindart
* AND basjhr = vimi55-ybasisj
* AND indjhr = lv_date(4)
* AND indmon = lv_date+4(2).
* ENDSELECT.
* ENDMETHOD. "get_index_data
*
* METHOD check_first_vimi16.
* DATA: ls_vimi16 TYPE vimi16.
*
* CLEAR valid.
*
* IF sfutanp = '2'.
* CLEAR ls_vimi16.
* SELECT SINGLE * FROM vimi16
* INTO ls_vimi16
* WHERE bukrs = bukrs
* AND smive = smive
* AND swenr = swenr
* AND smenr = smenr
* AND danpass = danpass
* AND sanpnr = sanpnr
* AND xident = xident
* AND dstorno = '00000000'
* AND sfutanp = '1'.
*
* IF ls_vimi16-skoart NE skoart.
* valid = 'X'.
* ENDIF.
* ELSE.
* valid = 'X'.
* ENDIF.
* ENDMETHOD. "check_first_vimi16
*
* METHOD get_vimi16_data.
* DATA: lr_skoart TYPE RANGE OF skoart,
* lr_sanpnr TYPE RANGE OF sanpnr,
* lr_dguelab TYPE RANGE OF dguelab.
*
* IF NOT skoart IS INITIAL.
* CALL METHOD crange=>add
* EXPORTING
* low = skoart
* clear = 'X'
* CHANGING
* range = lr_skoart.
* ELSE.
* lr_skoart = r_skoart.
* ENDIF.
*
* IF NOT sanpnr IS INITIAL.
* CALL METHOD crange=>add
* EXPORTING
* low = sanpnr
* clear = 'X'
* CHANGING
* range = lr_sanpnr.
* ELSE.
* lr_sanpnr = r_sanpnr.
* ENDIF.
*
* IF NOT dguelab IS INITIAL.
* CALL METHOD crange=>add
* EXPORTING
* low = dguelab
* clear = 'X'
* CHANGING
* range = lr_dguelab.
* ELSE.
* lr_dguelab = r_date.
* ENDIF.
*
* CLEAR vimi16.
* SELECT *
* INTO vimi16
* FROM vimi16 UP TO 1 ROWS
* WHERE bukrs = bukrs
* AND smive = smive
* AND swenr = swenr
* AND smenr = smenr
* AND skoart IN lr_skoart
* AND sanpnr IN lr_sanpnr
* AND dguelab IN lr_dguelab
* AND dstorno = '00000000'
* ORDER BY daktiv DESCENDING sanpnr DESCENDING.
* ENDSELECT.
* ENDMETHOD. "get_vimi16_data
*
* METHOD get_skopo_text.
* CLEAR text.
* SELECT SINGLE xkbez
* INTO text
* FROM tzk0g
* WHERE spras = sy-langu
* AND rantyp = rantyp
* AND skoart = skoart
* AND skopo = skopo.
* ENDMETHOD. "get_skopo_text
*
* METHOD get_definitive_index.
* DATA: lv_ipc TYPE indprz.
*
* CLEAR ipc.
*
* SELECT SINGLE indlast
* INTO lv_ipc
* FROM z3indice_prov
* WHERE wbind = wbind
* AND basjhr = basjhr
* AND indjhr = indjhr
* AND indmon = indmon.
*
* IF NOT lv_ipc IS INITIAL OR NOT sy-subrc IS INITIAL.
* CALL METHOD get_index
* EXPORTING
* wbind = wbind
* basjhr = basjhr
* indjhr = indjhr
* indmon = indmon
* CHANGING
* ipc = ipc.
* ENDIF.
* ENDMETHOD. "get_definitive_index
*
* METHOD get_index.
* DATA: lv_last_year TYPE indjhr,
* lv_ipc1 TYPE indprz,
* lv_ipc2 TYPE indprz.
*
* CLEAR ipc.
*
* lv_last_year = indjhr - 1.
*
* CLEAR lv_ipc2.
* SELECT indproz
* INTO lv_ipc2
* FROM t094p UP TO 1 ROWS
* WHERE wbind = wbind
* AND basjhr = basjhr
* AND indjhr = indjhr
* AND indmon = indmon.
* ENDSELECT.
*
* CLEAR lv_ipc1.
* SELECT indproz
* INTO lv_ipc1
* FROM t094p UP TO 1 ROWS
* WHERE wbind = wbind
* AND basjhr = basjhr
* AND indjhr = lv_last_year
* AND indmon = indmon.
* ipc = ( ( lv_ipc2 / lv_ipc1 ) - 1 ) * 100.
* ENDSELECT.
* ENDMETHOD. "get_index
*ENDCLASS. "cre_contract IMPLEMENTATION
*----------------------------------------------------------------------*
* INCLUDE Z3DDR002F01 *
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form selecciona_dados
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM selecciona_dados.
* Selecciona última data de processamento
SELECT MAX( pdate ) FROM zcondsnapshots
INTO x_date.
* toDo Caso a data de referência seja menor que ultima data de
* processamento é necessário recalcular o snapshot do contrato?
* Caso contrário processa a última data de processamento e a data de
* referência que tem que ser maior ou igual à ultima data de
* processamento
* 01 ***
* Se data de referência = última data de processamento => é directo
IF p_date EQ x_date.
* Selecciona snapshots da data de Referência
SELECT * FROM zcondsnapshots INTO TABLE t_zcondsnapshots
WHERE pdate EQ x_date.
* Selecciona última data anterior à data de referência
SELECT MAX( pdate ) FROM zcondsnapshots
INTO x_date
WHERE pdate LE x_date.
* Selecciona snapshots da última data anterior à data de
* referência
SELECT * FROM zcondsnapshots INTO TABLE t_zcondsnapshots_old
WHERE pdate EQ x_date.
* Se data de referência > última data de processamento =>
* guarda dados de último snapshot e guarda contratos activos à data de
* referência
* 02 ***
ELSEIF p_date GT x_date.
CLEAR w_zcondsnapshots.
* Selecciona snapshots da última data anterior à data de
* referência
SELECT * FROM zcondsnapshots INTO TABLE t_zcondsnapshots_old
WHERE pdate EQ x_date.
* Contractos Activos à Data
SELECT * FROM vimimv INTO TABLE t_vimimv
WHERE ( dkuezu EQ '00000000' OR
dkuezu GT p_date )
AND dmiend GT p_date
** toDo Verificar se as condições têm que ser superiores à data DERF
* AND derf GE x_date
AND derf LT p_date.
LOOP AT t_vimimv INTO w_vimimv.
* Condições de Aluguer de Contrato
SELECT * FROM vzzkopo INTO w_vzzkopo
WHERE bukrs EQ w_vimimv-bukrs
AND sanlf EQ '410'
AND rkey1 EQ w_vimimv-smive
AND skoart IN r_skoart
ORDER BY BUKRS rkey1 SKOART ascending
dguel_kp DESCENDING.
MOVE p_date TO w_zcondsnapshots-pdate.
MOVE w_vimimv-intreno TO w_zcondsnapshots-intreno.
MOVE-CORRESPONDING w_vzzkopo TO w_zcondsnapshots.
APPEND w_zcondsnapshots TO t_zcondsnapshots.
ENDSELECT.
* t_zcondsnapshots_old contém contratos do último processamento e
* t_zcondsanpshots contém contratos activos na data de referência
ENDLOOP.
* 03 ***
ELSEIF p_date LT x_date.
* Selecciona última data de processamento anterior à data de
* referência
SELECT MAX( pdate ) FROM zcondsnapshots
INTO x_date
WHERE pdate LE p_date.
IF p_date EQ x_date.
* Selecciona snapshots dessa data
SELECT * FROM zcondsnapshots INTO TABLE t_zcondsnapshots
WHERE pdate EQ x_date.
* Selecciona última data anterior à data de referência
SELECT MAX( pdate ) FROM zcondsnapshots
INTO x_date
WHERE pdate LE x_date.
* Selecciona snapshots dessa data
SELECT * FROM zcondsnapshots INTO TABLE t_zcondsnapshots_old
WHERE pdate EQ x_date.
ELSE.
* Selecciona snapshots da última data anterior à data de
* referência
SELECT * FROM zcondsnapshots INTO TABLE t_zcondsnapshots_old
WHERE pdate EQ x_date.
* Contractos Activos à Data
SELECT * FROM vimimv INTO TABLE t_vimimv
WHERE ( dkuezu EQ '00000000' OR
dkuezu GT p_date )
AND dmiend GT p_date
* toDo Verificar se as condições têm que ser superiores à data DERF
AND derf GE x_date
AND derf LT p_date.
LOOP AT t_vimimv INTO w_vimimv.
* Condições de Aluguer de Contrato
SELECT * FROM vzzkopo INTO w_vzzkopo
WHERE bukrs EQ w_vimimv-bukrs
AND sanlf EQ '410'
AND rkey1 EQ w_vimimv-smive
AND skoart IN r_skoart
ORDER BY BUKRS rkey1 SKOART ascending
dguel_kp DESCENDING.
MOVE p_date TO w_zcondsnapshots-pdate.
MOVE w_vimimv-intreno TO w_zcondsnapshots-intreno.
MOVE-CORRESPONDING w_vzzkopo TO w_zcondsnapshots.
APPEND w_zcondsnapshots TO t_zcondsnapshots.
ENDSELECT.
* toDo Rollback das condições do contrato?
* t_zcondsnapshots_old contém contratos do último processamento e
* t_zcondsnapshots contém contratos activos na data de referência
ENDLOOP.
ENDIF.
ENDIF.
ENDFORM. " selecciona_dados
*&---------------------------------------------------------------------*
*& Form calcula_facturacao
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_ZCONDSNAPSHOTS_OLD text
*----------------------------------------------------------------------*
FORM calcula_facturacao USING p_t_zcondsnapshots LIKE t_zcondsnapshots.
REFRESH: t_conds[],
t_conds_to_charge[],
t_cond_monthly_value[].
LOOP AT p_t_zcondsnapshots INTO w_zcondsnapshots.
AT NEW intreno.
* Para cada contrato cria tabela de condições e valores mensais
READ TABLE t_vimimv INTO w_vimimv
WITH KEY intreno = w_zcondsnapshots-intreno.
IF sy-subrc EQ 0.
CLEAR: x_monat,
x_gjahr.
MOVE w_vimimv-dmibeg+4(2) TO x_monat.
MOVE w_vimimv-dmibeg(4) TO x_gjahr.
SELECT SINGLE * FROM vikoko
INTO w_vikoko
WHERE bukrs EQ w_vimimv-bukrs
AND sanlf EQ '410'
AND rkey1 EQ w_vimimv-smive.
IF sy-subrc NE 0.
CLEAR w_vikoko.
ENDIF.
* Registos Mensais por Condição (Tantos quantos os meses em que estão
* activos os contratos).
DO.
IF x_monat EQ '13'.
MOVE '01' TO x_monat.
ADD 1 TO x_gjahr.
ENDIF.
CONCATENATE x_gjahr x_monat '01' INTO x_date.
CALL FUNCTION 'LAST_DAY_OF_MONTHS'
EXPORTING
day_in = x_date
IMPORTING
last_day_of_month = x_date
EXCEPTIONS
day_in_no_date = 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.
MOVE w_vimimv-intreno TO w_cond_monthly_value-intreno.
MOVE w_zcondsnapshots-skoart TO w_cond_monthly_value-skoart.
MOVE x_monat TO w_cond_monthly_value-monat.
MOVE x_gjahr TO w_cond_monthly_value-gjahr.
* Método de Cálculo
MOVE w_vikoko-szbmeth TO w_cond_monthly_value-szbmeth.
APPEND w_cond_monthly_value TO t_cond_monthly_value.
IF x_monat GT w_vimimv-dmiend+4(2) AND
x_gjahr GT w_vimimv-dmiend(4).
EXIT.
ELSE.
ADD 1 TO x_monat.
ENDIF.
ENDDO.
ELSE.
CLEAR w_vimimv.
CONTINUE.
ENDIF.
ENDAT.
IF w_zcondsnapshots-dguel_kp LT p_date.
* Passado
APPEND w_conds TO t_conds.
ELSE.
* Futuro
APPEND w_conds TO t_conds_to_charge.
ENDIF.
ENDLOOP.
* Cálculo de condições (Futuro)
LOOP AT t_conds_to_charge INTO w_conds.
IF sy-index EQ '1'.
MOVE w_conds-intreno TO last_intreno.
MOVE w_conds-skoart TO last_skoart.
MOVE w_conds-dguel_kp TO last_dguel_kp.
CONTINUE.
ENDIF.
* Calcula os valores das condições para cada mês (Futuro)
LOOP AT t_cond_monthly_value
INTO w_cond_monthly_value
WHERE skoart EQ w_conds-skoart
AND ( gjahr GE last_dguel_kp(4) AND
gjahr LE w_conds-dguel_kp(4) )
AND ( monat GE last_dguel_kp+4(2) AND
monat LE w_conds-dguel_kp+4(2) ).
* Condição de Inicio
AT FIRST.
IF w_conds-dguel_kp+6(2) NE '01'.
IF w_cond_monthly_value-szbmeth EQ '1'.
MOVE '30' TO w_cond_monthly_value-max_days.
ENDIF.
* PerÃodo Parcial
x_days = w_cond_monthly_value-max_days - w_conds-dguel_kp+6(2).
w_cond_monthly_value-bkond = w_cond_monthly_value-bkond +
( w_conds-bkond * x_days ) /
w_cond_monthly_value-max_days.
ELSE.
* PerÃodo Completo
w_cond_monthly_value-bkond = w_conds-bkond.
ENDIF.
ENDAT.
w_cond_monthly_value-bkond = w_conds-bkond.
* Condição de Fim
AT LAST.
IF w_conds-dguel_kp+6(2) NE w_cond_monthly_value-max_days.
IF w_cond_monthly_value-szbmeth EQ '1'.
MOVE '30' TO w_cond_monthly_value-max_days.
ENDIF.
* PerÃodo Parcial
w_cond_monthly_value-bkond = ( w_conds-bkond *
w_conds-dguel_kp+6(2) ) /
w_cond_monthly_value-max_days.
ELSE.
* PerÃodo Completo
w_cond_monthly_value-bkond = w_conds-bkond.
ENDIF.
ENDAT.
MODIFY t_cond_monthly_value FROM w_cond_monthly_value
INDEX sy-tabix.
*toDo Sobreposição de cálculo de condições no mesmo perÃodo
ENDLOOP.
MOVE w_conds-intreno TO last_intreno.
MOVE w_conds-skoart TO last_skoart.
MOVE w_conds-dguel_kp TO last_dguel_kp.
ENDLOOP.
ENDFORM. " calcula_facturacao
*&---------------------------------------------------------------------*
*& Form prepara_dados
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM prepara_dados.
LOOP AT t_cond_monthly_value INTO w_cond_monthly_value.
AT NEW intreno.
READ TABLE t_vimimv INTO w_vimimv
WITH KEY intreno = w_cond_monthly_value-intreno.
IF sy-subrc EQ 0.
MOVE-CORRESPONDING w_vimimv TO w_total.
ELSE.
CLEAR w_vimimv.
ENDIF.
ENDAT.
ADD w_cond_monthly_value-bkond TO w_total-bkond.
AT END OF intreno.
* SUM.
MOVE x_date TO w_total-last_act.
MOVE p_date TO w_total-p_date.
* Cálculo do nº de meses até ao fim do contrato
CALL FUNCTION 'MONTHS_BETWEEN_TWO_DATES_NEW'
EXPORTING
i_datum_bis = w_vimimv-dmiend
i_datum_von = p_date
i_kz_incl_bis = ' '
i_kz_volle_monate = 'X'
IMPORTING
e_monate = x_months.
SUBTRACT 1 FROM x_months.
IF x_months GT max_months.
MOVE x_months TO max_months.
ENDIF.
MOVE x_months TO w_total-monat.
w_total-linear = w_total-bkond / w_total-monat.
READ TABLE t_total_old INTO w_total_old
WITH KEY intreno = w_cond_monthly_value-intreno.
IF sy-subrc EQ 0.
MOVE w_total_old-bkond TO w_total-delta.
ELSE.
CLEAR w_total_old.
ENDIF.
w_total-control = w_total-bkond - w_total-delta.
IF w_total-control EQ '0.00'.
MOVE 'X' TO w_total-alt.
* Populate color variable with colour properties
* Char 1 = C (This is a color property)
* Char 2 = 3 (Color codes: 1 - 7)
* Char 3 = Intensified on/off ( 1 or 0 )
* Char 4 = Inverse display on/off ( 1 or 0 )
* i.e. wa_ekko-line_color = 'C410'
CONCATENATE 'C' '7' '10' INTO w_total-color.
ELSE.
CLEAR w_total-alt.
CLEAR w_total-color.
ENDIF.
COLLECT w_total INTO t_total.
ENDAT.
ENDLOOP.
ENDFORM. " prepara_dados
*&---------------------------------------------------------------------*
*& Form constroi_fieldcatalog
*&---------------------------------------------------------------------*
FORM constroi_fieldcatalog.
DATA: flds_count TYPE i,
cnt TYPE i,
x_datec(8) TYPE c,
x_date LIKE sy-datum.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'BUKRS'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 4.
wa_it_fldcat-outputlen = 4.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'BUKRS' '<dyn_table>' text-h00
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'SWENR'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'SWENR' '<dyn_table>' text-h01
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'SMIVE'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 13.
wa_it_fldcat-outputlen = 13.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'SMIVE' '<dyn_table>' text-h02
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'SMENR'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'SMENR' '<dyn_table>' text-h03
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'ZZNMFAN'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 40.
wa_it_fldcat-outputlen = 40.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'ZZNMFAN' '<dyn_table>' text-h04
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'ALT'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 3.
wa_it_fldcat-outputlen = 3.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'ALT' '<dyn_table>' text-h05
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'DMIBEG'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'DATS'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'DMIBEG' '<dyn_table>' text-h06
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'DMIEND'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'DATS'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'DMIEND' '<dyn_table>' text-h07
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'DMIEND'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'DATS'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'LAST_ACT' '<dyn_table>' text-h08
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'DMIEND'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'DATS'.
wa_it_fldcat-intlen = 8.
wa_it_fldcat-outputlen = 8.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'P_DATE' '<dyn_table>' text-h09
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'BKOND'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-currency = 'BRL'.
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-outputlen = 20.
wa_it_fldcat-intlen = 15.
APPEND wa_it_fldcat TO it_fldcat .
PERFORM append_fieldcatalog USING 'BKOND' '<dyn_table>' text-h10
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'MONAT'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-datatype = 'CHAR'.
wa_it_fldcat-intlen = 16.
wa_it_fldcat-outputlen = 16.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING 'MONAT' '<dyn_table>' text-h11
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'LINEAR'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-currency = 'BRL'.
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-outputlen = 20.
wa_it_fldcat-intlen = 15.
APPEND wa_it_fldcat TO it_fldcat .
PERFORM append_fieldcatalog USING 'LINEAR' '<dyn_table>' text-h12
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'DELTA'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-currency = 'BRL'.
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-outputlen = 20.
wa_it_fldcat-intlen = 15.
APPEND wa_it_fldcat TO it_fldcat .
PERFORM append_fieldcatalog USING 'DELTA' '<dyn_table>' text-h13
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
wa_it_fldcat-fieldname = 'CONTROL'.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-currency = 'BRL'.
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-outputlen = 20.
wa_it_fldcat-intlen = 15.
APPEND wa_it_fldcat TO it_fldcat .
PERFORM append_fieldcatalog USING 'CONTROL' '<dyn_table>' text-h14
flds_count '' '' '' '' '' '' '' ''
'' ''.
ADD 1 TO flds_count.
MOVE '01' TO p_date+6(2).
*** Dado de teste
MOVE 2 TO max_months.
*** Dado de teste
DO max_months TIMES.
CLEAR wa_it_fldcat.
CALL FUNCTION 'RE_ADD_MONTH_TO_DATE'
EXPORTING
months = cnt
olddate = p_date
IMPORTING
newdate = x_date.
CONCATENATE x_date+4(2) '-' x_date(4) INTO x_mes_ano.
WRITE x_mes_ano TO wa_it_fldcat-fieldname.
wa_it_fldcat-col_pos = flds_count.
wa_it_fldcat-currency = 'BRL'.
wa_it_fldcat-datatype = 'CURR'.
wa_it_fldcat-outputlen = 20.
wa_it_fldcat-intlen = 15.
APPEND wa_it_fldcat TO it_fldcat.
PERFORM append_fieldcatalog USING wa_it_fldcat-fieldname
'<dyn_table>' text-h14 flds_count
'' '' '' '' '' '' ''
'' '' ''.
ADD 1 TO flds_count.
ADD 1 TO cnt.
ENDDO.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = it_fldcat
IMPORTING
ep_table = new_table.
ASSIGN new_table->* TO <dyn_table>.
ENDFORM. " append_fieldcatalog
*&---------------------------------------------------------------------*
*& Form append_fieldcatalog
*&---------------------------------------------------------------------*
FORM append_fieldcatalog USING i_fieldname TYPE any
i_tabname TYPE any
i_seltext_m TYPE any
i_col_pos TYPE any
i_ref_fieldname TYPE any
i_ref_tabname TYPE any
i_key TYPE any
i_text TYPE any
i_checkbox TYPE any
i_edit TYPE any
i_no_out TYPE any
i_hotspot TYPE any
i_sum TYPE any
i_inttype TYPE any.
CLEAR fieldcatalog.
fieldcatalog-fieldname = i_fieldname.
fieldcatalog-tabname = i_tabname.
fieldcatalog-col_pos = i_col_pos.
fieldcatalog-seltext_m = i_seltext_m.
fieldcatalog-ref_fieldname = i_ref_fieldname.
fieldcatalog-ref_tabname = i_ref_tabname.
fieldcatalog-key = i_key.
fieldcatalog-reptext_ddic = i_text.
fieldcatalog-checkbox = i_checkbox.
fieldcatalog-edit = i_edit.
fieldcatalog-no_out = i_no_out.
fieldcatalog-hotspot = i_hotspot.
fieldcatalog-do_sum = i_sum.
fieldcatalog-inttype = i_inttype.
APPEND fieldcatalog.
CLEAR fieldcatalog.
ENDFORM. " append_fieldcatalog
*&---------------------------------------------------------------------*
*& Form alimenta_tabela_dyn
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM alimenta_tabela_dyn.
DATA: x_bkond LIKE vzzkopo-bkond.
LOOP AT t_total INTO w_total.
CREATE DATA new_line LIKE LINE OF <dyn_table>.
ASSIGN new_line->* TO <dyn_wa>.
ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-bukrs.
ASSIGN COMPONENT 'SWENR' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-swenr.
ASSIGN COMPONENT 'SMIVE' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-smive.
ASSIGN COMPONENT 'SMENR' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-smenr.
ASSIGN COMPONENT 'ZZNMFAN' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-zznmfan.
ASSIGN COMPONENT 'ALT' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-alt.
ASSIGN COMPONENT 'DMIBEG' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-dmibeg.
ASSIGN COMPONENT 'DMIEND' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-dmiend.
ASSIGN COMPONENT 'LAST_ACT' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-last_act.
ASSIGN COMPONENT 'P_DATE' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-p_date.
ASSIGN COMPONENT 'BKOND' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-bkond.
ASSIGN COMPONENT 'MONAT' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-monat.
ASSIGN COMPONENT 'LINEAR' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-linear.
ASSIGN COMPONENT 'DELTA' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-delta.
ASSIGN COMPONENT 'CONTROL' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-control.
ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dyn_wa> TO <fs1>.
<fs1> = w_total-color.
SORT t_cond_monthly_value BY intreno monat gjahr.
LOOP AT t_cond_monthly_value INTO w_cond_monthly_value
WHERE intreno EQ w_total-intreno
AND monat GE p_date+4(2)
AND gjahr GE p_date(4).
x_bkond = x_bkond + w_cond_monthly_value-bkond.
AT END OF intreno.
CLEAR x_bkond.
CONCATENATE w_cond_monthly_value-monat '/'
w_cond_monthly_value-gjahr INTO x_mes_ano.
ASSIGN COMPONENT x_mes_ano OF STRUCTURE <dyn_wa> TO <fs1>.
IF sy-subrc EQ 0.
ADD x_bkond TO <fs1>.
ENDIF.
ENDAT.
ENDLOOP.
APPEND <dyn_wa> TO <dyn_table>.
ENDLOOP.
ENDFORM. " alimenta_tabela_dyn
*&---------------------------------------------------------------------*
*& Form apresenta_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM apresenta_alv.
gd_layout-zebra = 'X'.
gd_layout-colwidth_optimize = 'X'.
* Set layout field for row attributes(i.e. color)
gd_layout-info_fieldname = 'COLOR'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
* i_callback_pf_status_set = 'SET_STATUS'
* i_callback_user_command = 'F_USER_COMMAND'
it_fieldcat = fieldcatalog[]
is_layout = gd_layout
* it_events = t_alv_event[]
* i_grid_title = w_titulo
* i_default = 'X'
i_save = 'X'
* is_variant = variante
* is_print = print
TABLES
t_outtab = <dyn_table>
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. " apresenta_alv
Regards,
Pedro Gaspar
‎2007 May 29 4:59 PM
Hi,
The reason of the error is bcz you havent written the REPORT statement.
Please add the Report statement in the main program.
Best regards,
Prashant
‎2007 May 29 5:12 PM
Hello Prashant,
I've written the REPORT statement in the Include ***TOP.
I need to write it in the main program?
Regards,
Pedro Gaspar
‎2007 May 29 5:57 PM
Hi,
I've already added the REPORT statement but the problem still persists.
Best Regards,
Pedro Gaspar
‎2007 Jun 06 12:51 PM
‎2007 Jul 05 10:42 AM
Hi,
How did you do this? Now I am facing the same problem..
Thanks,
Raj
‎2007 Jul 05 10:45 AM
Hi,
How did you do this? Now I am facing the same problem..
Thanks,
Raj