METHOD tamplates_1 .
* String template
* x = |...literal...{expression}\...control characters...|
WRITE:/ '*** FILTER'.
WRITE:/ '*** Permite filtrar o conteúdo de '.
WRITE:/ '*** uma tabela interna'.
WRITE:/ '.'.
WRITE:/ '.'.
WRITE:/ ' T2 = FILTER#(T1 WHERE...)'.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
*** Exemplo Simples
***
METHOD tamplates_2 .
WRITE:/ '*** tamplates_2 - Forma Básica' .
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* sort t_kna1 by kunnr.
data(t_20e30) = FILTER #(
t_kna1
WHERE kunnr <> '0000000010'
).
LOOP AT t_20e30 INTO DATA(ls_20e30).
write:/ |KUNNR: { ls_20e30-kunnr } NAME1: { ls_20e30-name1 }| .
ENDLOOP.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
*** Literal + expression
***
METHOD tamplates_3 .
WRITE:/ '*** tamplates_3 - Com Filter table' .
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* Tabeela de Filtro
DATA t_filter TYPE SORTED TABLE OF y_kna1-kunnr
WITH UNIQUE KEY table_line.
* preenchendo a tabela de filtro
t_filter = VALUE #(
( '0000000010' )
( '0000000020' )
).
* Gerando a nova tabela com a utilização da tabela de filtro
data(t_20e30) = FILTER #(
t_kna1 in t_filter
WHERE kunnr = table_line
).
LOOP AT t_20e30 INTO DATA(ls_20e30).
write:/ |KUNNR: { ls_20e30-kunnr } NAME1: { ls_20e30-name1 }| .
ENDLOOP.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
***
***
METHOD tamplates_4 .
WRITE:/ '*** tamplates_4 - Cláusula EXCEPT' .
WRITE:/ '*** PIOR performance' .
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* Tabeela de Filtro
DATA t_filter TYPE SORTED TABLE OF y_kna1-kunnr
WITH UNIQUE KEY table_line.
* preenchendo a tabela de filtro
t_filter = VALUE #(
( '0000000020' )
).
* Gerando a nova tabela com a utilização da tabela de filtro
data(t_20e30) = FILTER #(
t_kna1 EXCEPT IN t_filter
WHERE kunnr = table_line
).
LOOP AT t_20e30 INTO DATA(ls_20e30).
write:/ |KUNNR: { ls_20e30-kunnr } NAME1: { ls_20e30-name1 }| .
ENDLOOP.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
***
***
METHOD tamplates_5 .
WRITE:/ '*** tamplates_5 - Com Filter (2/2)'.
WRITE:/ '*** PRECISA DE UM ÍNDICE'.
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* Tabeela de Filtro
DATA t_filter2 TYPE SORTED TABLE OF y_kna1-kunnr
WITH UNIQUE KEY table_line.
* preenchendo a tabela de filtro
t_filter2 = VALUE #(
( '0000000020' )
( '0000000030' )
).
* Gerando a nova tabela COM a utilização do FILTER
data(t_20e30) = FILTER #(
t_kna1 in t_filter2
WHERE kunnr = table_line
).
* Lista os regisros filrados
LOOP AT t_20e30 INTO DATA(ls_20e30).
write:/ |KUNNR: { ls_20e30-kunnr } NAME1: { ls_20e30-name1 }| .
ENDLOOP.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
***
***
METHOD tamplates_6 .
WRITE:/ '*** tamplates_6 - NÃO COMPILA, POIS NÃO TEM ÍNDICE PARA O CAMPO NAME1'.
WRITE:/ '.'.
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* Gerando a nova tabela COM a utilização do FILTER
* data(t_20e30) = FILTER #(
* t_kna1
* WHERE name1 <> CONV #( 'Cliente Dez' )
* ).
* Lista os regisros filrados
WRITE:/ | data(t_20e30) = FILTER #( |.
WRITE:/ | t_kna1 |.
WRITE:/ | WHERE name1 <> CONV #( 'Cliente Dez' )|.
WRITE:/ | ). |.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
***
***
METHOD tamplates_7 .
WRITE:/ '*** tamplates_7 - Criado MAIS UM ÍNDICE (NAME1)'.
WRITE:/ '.'.
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr
WITH NON-UNIQUE SORTED KEY name1 COMPONENTS name1.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* Gerando a nova tabela COM a utilização do FILTER
data(t_20e30) = FILTER #(
t_kna1 USING KEY name1
WHERE name1 <> CONV #( 'Cliente Trinta' )
).
* Lista os regisros filrados
LOOP AT t_20e30 INTO DATA(ls_20e30).
write:/ |KUNNR: { ls_20e30-kunnr } NAME1: { ls_20e30-name1 }| .
ENDLOOP.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
* String template
* x = |...literal...{expression}\...control characters...|
WRITE:/ '*** FILTER'.
WRITE:/ '*** Permite filtrar o conteúdo de '.
WRITE:/ '*** uma tabela interna'.
WRITE:/ '.'.
WRITE:/ '.'.
WRITE:/ ' T2 = FILTER#(T1 WHERE...)'.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
*** Exemplo Simples
***
METHOD tamplates_2 .
WRITE:/ '*** tamplates_2 - Forma Básica' .
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* sort t_kna1 by kunnr.
data(t_20e30) = FILTER #(
t_kna1
WHERE kunnr <> '0000000010'
).
LOOP AT t_20e30 INTO DATA(ls_20e30).
write:/ |KUNNR: { ls_20e30-kunnr } NAME1: { ls_20e30-name1 }| .
ENDLOOP.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
*** Literal + expression
***
METHOD tamplates_3 .
WRITE:/ '*** tamplates_3 - Com Filter table' .
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* Tabeela de Filtro
DATA t_filter TYPE SORTED TABLE OF y_kna1-kunnr
WITH UNIQUE KEY table_line.
* preenchendo a tabela de filtro
t_filter = VALUE #(
( '0000000010' )
( '0000000020' )
).
* Gerando a nova tabela com a utilização da tabela de filtro
data(t_20e30) = FILTER #(
t_kna1 in t_filter
WHERE kunnr = table_line
).
LOOP AT t_20e30 INTO DATA(ls_20e30).
write:/ |KUNNR: { ls_20e30-kunnr } NAME1: { ls_20e30-name1 }| .
ENDLOOP.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
***
***
METHOD tamplates_4 .
WRITE:/ '*** tamplates_4 - Cláusula EXCEPT' .
WRITE:/ '*** PIOR performance' .
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* Tabeela de Filtro
DATA t_filter TYPE SORTED TABLE OF y_kna1-kunnr
WITH UNIQUE KEY table_line.
* preenchendo a tabela de filtro
t_filter = VALUE #(
( '0000000020' )
).
* Gerando a nova tabela com a utilização da tabela de filtro
data(t_20e30) = FILTER #(
t_kna1 EXCEPT IN t_filter
WHERE kunnr = table_line
).
LOOP AT t_20e30 INTO DATA(ls_20e30).
write:/ |KUNNR: { ls_20e30-kunnr } NAME1: { ls_20e30-name1 }| .
ENDLOOP.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
***
***
METHOD tamplates_5 .
WRITE:/ '*** tamplates_5 - Com Filter (2/2)'.
WRITE:/ '*** PRECISA DE UM ÍNDICE'.
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* Tabeela de Filtro
DATA t_filter2 TYPE SORTED TABLE OF y_kna1-kunnr
WITH UNIQUE KEY table_line.
* preenchendo a tabela de filtro
t_filter2 = VALUE #(
( '0000000020' )
( '0000000030' )
).
* Gerando a nova tabela COM a utilização do FILTER
data(t_20e30) = FILTER #(
t_kna1 in t_filter2
WHERE kunnr = table_line
).
* Lista os regisros filrados
LOOP AT t_20e30 INTO DATA(ls_20e30).
write:/ |KUNNR: { ls_20e30-kunnr } NAME1: { ls_20e30-name1 }| .
ENDLOOP.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
***
***
METHOD tamplates_6 .
WRITE:/ '*** tamplates_6 - NÃO COMPILA, POIS NÃO TEM ÍNDICE PARA O CAMPO NAME1'.
WRITE:/ '.'.
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* Gerando a nova tabela COM a utilização do FILTER
* data(t_20e30) = FILTER #(
* t_kna1
* WHERE name1 <> CONV #( 'Cliente Dez' )
* ).
* Lista os regisros filrados
WRITE:/ | data(t_20e30) = FILTER #( |.
WRITE:/ | t_kna1 |.
WRITE:/ | WHERE name1 <> CONV #( 'Cliente Dez' )|.
WRITE:/ | ). |.
WRITE:/ |.|.
ULINE.
ENDMETHOD.
***
***
***
METHOD tamplates_7 .
WRITE:/ '*** tamplates_7 - Criado MAIS UM ÍNDICE (NAME1)'.
WRITE:/ '.'.
** Definições
types: begin of y_kna1,
kunnr type kunnr,
name1 type name1,
end of y_kna1,
y_t_kna1 type SORTED TABLE OF y_kna1
WITH NON-UNIQUE KEY kunnr
WITH NON-UNIQUE SORTED KEY name1 COMPONENTS name1.
** Preenchendo a tabela interna
data(t_kna1) = VALUE y_t_kna1(
( kunnr = '0000000010' name1 = 'Cliente Dez' )
( kunnr = '0000000020' name1 = 'Cliente Vinte' )
( kunnr = '0000000030' name1 = 'Cliente Trinta' )
).
* Gerando a nova tabela COM a utilização do FILTER
data(t_20e30) = FILTER #(
t_kna1 USING KEY name1
WHERE name1 <> CONV #( 'Cliente Trinta' )
).
* Lista os regisros filrados
LOOP AT t_20e30 INTO DATA(ls_20e30).
write:/ |KUNNR: { ls_20e30-kunnr } NAME1: { ls_20e30-name1 }| .
ENDLOOP.
WRITE:/ |.|.
ULINE.
ENDMETHOD.