Você está na página 1de 5

Exemplo ALV hierrquico simples | Abapando

1 de 5

http://abapando.wordpress.com/2011/12/13/exemplo-alv-hierarquico-...

Exemplo ALV hierrquico simples


13/12/2011 Edgar Oliveira Deixe um comentrio Go to comments
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

REPORT zac2003_g01_alvhierarq .
TYPE-POOLS slis.
***Tabelas Transparentes***
TABLES: ekko, ekpo.
***************************
*****Tabelas Internas******
" configuracao geral da saida do relatorio
DATA: s_layout
TYPE slis_layout_alv,
s_print
TYPE slis_print_alv, "impressora
s_sort
TYPE slis_t_sortinfo_alv WITH HEADER LINE, "ordenacao
" formatacao dos campos e a saida deles no
" relatorio
s_keyinfo
TYPE slis_keyinfo_alv,
s_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
DATA: BEGIN OF it_ekpo OCCURS 0,
ebeln LIKE ekpo-ebeln,
ebelp LIKE ekpo-ebelp,
txz01 LIKE ekpo-txz01,
matnr LIKE ekpo-matnr,
menge LIKE ekpo-menge,
netpr LIKE ekpo-netpr,
netwr LIKE ekpo-netwr,
box
LIKE ptrv_approval-box,
END OF it_ekpo,
BEGIN OF it_ekko OCCURS 0,
ebeln LIKE ekko-ebeln,
lifnr LIKE ekko-lifnr,
box
LIKE ptrv_approval-box,
END OF it_ekko.
********Variaveis*********
DATA: v_repid
LIKE sy-repid,
v_variant
LIKE disvariant,
v_def_variant
LIKE disvariant, "valor default
v_variant_exit(1) TYPE c,
v_variant_def(1)
TYPE c,
"valor default
v_variant_save(1) TYPE c,
"valor q foi salvo
"string de 30 vindo da slis
s_box_name
TYPE slis_fieldname VALUE 'BOX'.
**************************
*----------------------------------------------------------------------*
* Tela de seleo
*----------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK lot WITH FRAME TITLE text-001.
SELECT-OPTIONS:
s_ebeln FOR ekko-ebeln OBLIGATORY. " Pedido de compra
SELECTION-SCREEN ULINE.
PARAMETERS p_vari LIKE disvariant-variant.
SELECTION-SCREEN END OF BLOCK lot.
************************************************************************
INITIALIZATION.
***************************INICIALIZATION*******************************
PERFORM zf_inicializar.
***********search help para variant***********
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
PERFORM zf_f4_para_variant.
**********************************************
***********tratar variante informada***************
PERFORM zf_tratar_variant.
***************************************************

02/06/2014 20:17

Exemplo ALV hierrquico simples | Abapando

2 de 5

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99

http://abapando.wordpress.com/2011/12/13/exemplo-alv-hierarquico-...

***********tratar variante informada***************


PERFORM zf_tratar_variant.
***************************************************
START-OF-SELECTION.
*************selecao dos dados*********************
PERFORM zf_selecao.
***************************************************
END-OF-SELECTION.
****configuracao geral de saida do relatorio*********
PERFORM zf_definir_layout.
PERFORM zf_definir_sortinfo.
PERFORM zf_definir_relacionamento.
PERFORM zf_definir_fieldcat.
PERFORM zf_mostrar.
*&---------------------------------------------------------------------*
*&
Form zf_inicializar
*&---------------------------------------------------------------------*
*
Se nao informar nenhuma variante na tela de selecao busca a *
**
default
*----------------------------------------------------------------------*
FORM zf_inicializar.
CLEAR v_variant.
MOVE: sy-repid TO v_repid,
'A'
TO v_variant_save,
v_repid TO v_variant-report.
s_print-no_print_listinfos = 'X'.
* - Buscar variante DEFAULT, ou seja, se no for informado nenhuma
* variante, o programa executar com esta
v_def_variant = v_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_DEFAULT_GET'
EXPORTING
i_save
= v_variant_save
CHANGING
cs_variant = v_def_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 0.
p_vari = v_def_variant-variant.
ENDIF.
ENDFORM.
" zf_inicializar
*&---------------------------------------------------------------------*
*&
Form zf_f4_para_variant
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM zf_f4_para_variant.
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = v_variant
i_save
= v_variant_save
IMPORTING
e_exit
= v_variant_exit
es_variant = v_def_variant
EXCEPTIONS
not_found = 2.
IF sy-subrc = 2.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
IF v_variant_exit = space.
p_vari = v_def_variant-variant.
ENDIF.
ENDIF.

02/06/2014 20:17

Exemplo ALV hierrquico simples | Abapando

3 de 5

96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172

http://abapando.wordpress.com/2011/12/13/exemplo-alv-hierarquico-...

p_vari = v_def_variant-variant.
ENDIF.
ENDIF.
ENDFORM.
" zf_f4_para_variant
*&---------------------------------------------------------------------*
*&
Form zf_tratar_variant
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM zf_tratar_variant.
IF NOT
MOVE
MOVE
CALL

p_vari IS INITIAL.
v_variant TO v_def_variant.
p_vari TO v_def_variant-variant.
FUNCTION 'REUSE_ALV_VARIANT_EXISTENCE'
EXPORTING
i_save
= v_variant_save
CHANGING
cs_variant = v_def_variant.
v_variant = v_def_variant.
*
P_TXTVAR = VARIANTE-TEXT.
ELSE.
CLEAR v_variant.
v_variant-report = v_repid.
ENDIF.
ENDFORM.
" zf_tratar_variant
*&---------------------------------------------------------------------*
*&
Form zf_selecao
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM zf_selecao.
SELECT ebeln lifnr
FROM ekko
INTO TABLE it_ekko
WHERE ebeln IN s_ebeln.
IF sy-subrc = 0.
SELECT ebeln ebelp txz01 matnr menge netpr netwr
FROM ekpo
INTO TABLE it_ekpo
FOR ALL ENTRIES IN it_ekko
WHERE ebeln = it_ekko-ebeln.
ENDIF.
ENDFORM.
" zf_selecao
*&---------------------------------------------------------------------*
*&
Form zf_definir_layout
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
FORM zf_definir_layout.
s_layout-colwidth_optimize = 'X'.
s_layout-zebra = 'X'.
s_layout-box_fieldname = s_box_name.
s_layout-box_tabname
= 'IT_EKPO'.
s_layout-box_tabname
= 'IT_EKKO'.
s_layout-window_titlebar = 'EXERCICIO ALV HIERARQUICO'." Mud na barra
ENDFORM.
" zf_definir_layout
*&---------------------------------------------------------------------*
*&
Form zf_definir_sortinfo
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
FORM zf_definir_sortinfo.
REFRESH s_sort.
s_sort-spos
s_sort-fieldname
s_sort-up
s_sort-tabname

=
=
=
=

'01'.
" Sequncia de ordenao
'EBELN'.
'X'.
'IT_EKKO'.

02/06/2014 20:17

Exemplo ALV hierrquico simples | Abapando

4 de 5

169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245

s_sort-fieldname
s_sort-up
s_sort-tabname

http://abapando.wordpress.com/2011/12/13/exemplo-alv-hierarquico-...
= 'EBELN'.
= 'X'.
= 'IT_EKKO'.

APPEND s_sort.
ENDFORM.
" zf_definir_sortinfo
*&---------------------------------------------------------------------*
*&
Form zf_definir_fieldcat
*&---------------------------------------------------------------------*
FORM zf_definir_fieldcat.
REFRESH s_fieldcat.
clear s_fieldcat.
s_fieldcat-fieldname
s_fieldcat-tabname
s_fieldcat-ref_tabname
*
s_fieldcat-checkbox
*
s_fieldcat-input
s_fieldcat-key
s_fieldcat-col_pos
append s_fieldcat .

= 'EBELN'.
= 'IT_EKKO'.
= 'EKKO'.
= 'X'.
= 'X'.
= 'X'.
= '1'.

clear s_fieldcat.
s_fieldcat-fieldname
s_fieldcat-tabname
s_fieldcat-ref_tabname
s_fieldcat-key
s_fieldcat-col_pos
append s_fieldcat .

= 'LIFNR'.
= 'IT_EKKO'.
= 'EKKO'.
= 'X'.
= '1'.

.
*Definindo est box,no podemos passa key = X p/prximo campo
clear s_fieldcat.
s_fieldcat-fieldname
= 'BOX'.
s_fieldcat-tabname
= 'IT_EKPO'.
s_fieldcat-ref_tabname
= 'PTRV_APPROVAL'.
s_fieldcat-checkbox
= 'X'.
s_fieldcat-input
= 'X'.
s_fieldcat-col_pos
= '1'.
append s_fieldcat.
clear s_fieldcat.
s_fieldcat-fieldname
s_fieldcat-tabname
s_fieldcat-ref_tabname
s_fieldcat-col_pos
s_fieldcat-row_pos
* fieldcat-key
append s_fieldcat .
Campos Chaves
clear s_fieldcat.
s_fieldcat-fieldname
s_fieldcat-tabname
s_fieldcat-ref_tabname
s_fieldcat-col_pos
* fieldcat-row_pos
append s_fieldcat.

=
=
=
=
=
=

'EBELP'.
'IT_EKPO'.
'EKPO'.
'2'.
'1'.
'X'.

Campos Chaves
clear s_fieldcat.
s_fieldcat-fieldname
s_fieldcat-tabname
s_fieldcat-ref_tabname
s_fieldcat-col_pos
* fieldcat-do_sum
append s_fieldcat .

= 'MATNR'.
= 'IT_EKPO'.
= 'EKPO'.
= '3'.
= '1'.

clear s_fieldcat.
s_fieldcat-fieldname
s_fieldcat-tabname
s_fieldcat-ref_tabname
s_fieldcat-no_out
append s_fieldcat .
clear s_fieldcat.

= 'MENGE'.
= 'IT_EKPO'.
= 'EKPO'.
= '4'.
= 'X'.

=
=
=
=

'NETWR'.
'IT_EKPO'.
'EKPO'.
'X'.

02/06/2014 20:17

Exemplo ALV hierrquico simples | Abapando

5 de 5

242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304

s_fieldcat-no_out
append s_fieldcat .

http://abapando.wordpress.com/2011/12/13/exemplo-alv-hierarquico-...
= 'X'.

clear s_fieldcat.
s_fieldcat-fieldname
s_fieldcat-tabname
s_fieldcat-ref_tabname
s_fieldcat-no_out
append s_fieldcat .

=
=
=
=

'NETPR'.
'IT_EKPO'.
'EKPO'.
'X'.

clear s_fieldcat.
s_fieldcat-fieldname
s_fieldcat-tabname
s_fieldcat-ref_tabname
s_fieldcat-no_out
append s_fieldcat .

=
=
=
=

'TXZ01'.
'IT_EKPO'.
'EKPO'.
'X'.

ENDFORM.
" zf_definir_fieldcat
*&---------------------------------------------------------------------*
*&
Form zf_mostrar
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
* --> p1
text
* <-- p2
text
*----------------------------------------------------------------------*
FORM zf_mostrar.
DATA: l_repid LIKE sy-repid.

*
*
*
*
*
*
*

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'


EXPORTING
i_callback_program
= l_repid
Perform para definir PF-STATUS dentro do seu programa
i_callback_pf_status_set = 'SET_PF_STATUS'
Perform para tratar aes do usurio
i_callback_user_command = 'USER_COMMAND'
is_layout
= s_layout
it_fieldcat
= s_fieldcat[]
Parmetro p/executar sempre com a variante default
i_default
= 'X'
Se possvel salvar as variantes
i_save
= 'A'
Nome da variante selecionada
is_variant
= v_variant
i_tabname_header
= 'IT_EKKO'
i_tabname_item
= 'IT_EKPO'
is_keyinfo
= s_keyinfo
is_print
= s_print
TABLES
t_outtab_header
= it_ekko
t_outtab_item
= it_ekpo.

ENDFORM.
" zf_mostrar
*&---------------------------------------------------------------------*
*&
Form zf_definir_relacionamento
*&---------------------------------------------------------------------*
FORM zf_definir_relacionamento.
s_keyinfo-header01 = 'EBELN'.
s_keyinfo-item01
= 'EBELN'.
ENDFORM.

" zf_definir_relacionamento

02/06/2014 20:17

Você também pode gostar