Você está na página 1de 3

Criando um ListBox Dinmico

Nesse exemplo ser criado um listbox para exibir os estados utilizando a


tabela T005U campos Estado e Sigla.
TABLES:

T005u.

TYPE-POOLS:
VRM.
DATA: NAME TYPE VRM_ID,
LIST TYPE VRM_VALUES,
VALUE LIKE LINE OF LIST.
Criar uma tabela interna para receber os values do listbox
BEGIN OF y_lista,
BLAND TYPE T005U-BLAND,
bezei TYPE T005U-bezei,
END OF y_lista.
DATA:
t_lista

TYPE TABLE OF y_lista WITH HEADER LINE,

*-----------------------------------------------------------------*
Telas
*-----------------------------------------------------------------SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
cria o listbox na tela
PARAMETERS p_lista(10) AS LISTBOX VISIBLE LENGTH 10.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN OUTPUT.
faz select na tabela t005U e jogando o resultado na tabela ti_lista
SELECT bland bezei
FROM T005U INTO TABLE t_lista.
faz um loop na tabela t_lista para pegar os valores
loop at ti_lista.
VALUE-KEY = t_lista-BLAND.
VALUE-TEXT = t_lista-bezei.
APPEND VALUE TO LIST.
endloop.

NAME = 'p_lista'.
chama a funo vrm_set_values para montar o listbox com os valores da
tabela LIST
CALL FUNCTION 'VRM_SET_VALUES'
EXPORTING
ID
= NAME
VALUES = LIST.

Criando um ListBox Dinmico Mltiplas Opes.


Mesma coisa do exemplo anterior, mas para popular o listbox voc vai
utilizar o seguinte loop:
faz um loop na tabela t_lista para pegar os valores simples
LOOP AT t_lista.
VALUE-KEY = t_lista-BLAND.
VALUE-TEXT = t_lista-bezei.
APPEND value TO list.
ENDLOOP.
DATA: sigla(5) TYPE C,
estado TYPE kna1-ort01.
LOOP AT t_lista.
sigla = t_lista-bland.
estado = t_lista-bezei.

ser armazenado as siglas ex SP.

pega a primeira sigla da tabela


pega o primeiro estado da tabela

neste loop ir pegar as outras siglas e estados diferentes da que j


esta na varivel sigla.
LOOP AT t_lista WHERE bland <> sigla.
concatena a nova sigla. Ex SP,MG
CONCATENATE sigla ',' t_lista-bland INTO VALUE-KEY.
concatena o novo estado e separa com espao. Ex So Paulo + Mato
Grosso
CONCATENATE estado '+' t_lista-bezei INTO VALUE-TEXT SEPARATED
BY SPACE.
APPEND value TO list.
ENDLOOP.
ENDLOOP.

Resultado:

Quebra a string selecionada no listbox em duas para utilizar no


select.
DATA: string1(2) TYPE c,
string2(2) TYPE c,
delimiter TYPE c VALUE ','.
SPLIT p_lista AT delimiter INTO string1 string2.
SELECT kna1~kunnr
kna1~land1
...
FROM kna1
INNER JOIN knvv
ON knvv~kunnr EQ kna1~kunnr
INNER JOIN knkk
ON knkk~kunnr EQ kna1~kunnr
INTO TABLE t_cliente
WHERE kna1~kunnr IN s_kunnr AND
kna1~regio IN (string1,string2). filtra os dados trazendo
somente os que tiverem nos
parmetros string1 e string2

Você também pode gostar