** R E D U C E
** REDUCE
**
** Permite gerar resultados que antes só eram possíveis
** por meio de loopings
* X = REDUCE dype|#(conditional iteration|table iteration).
* Exemmlo: permite criar uma única saída com o processamento de vários itens
* Soma (total) de todos os registros de uma tabela interna
* SEM REDUCE
data: v_tot_netwr type y_order-netwr.
LOOP AT t_order INTO DATA(s_order).
v_tot_netwr += s_order-netwr.
ENDLOOP.
* COM REDUCE
DATA(v_tot_netwr2) =
REDUCE y_order-netwr(
INIT x = 0
FOR wa IN t_order
NEXT x = x + wa-netwr
).
* COM REDUCE + WHERE
DATA(v_tot_netwr3) =
REDUCE y_order-netwr(
INIT x = 0
FOR wa IN t_order
WHERE ( auart = 'A' )
NEXT x = x + wa-netwr
).
* REDUCE + Tabela denro de tabela
*
DATA(v_tot_netwr4) =
REDUCE y_item-netwr(
INIT result = 0
FOR order IN t_order
WHERE ( auart = 'A' )
FOR item IN order-items
NEXT result = result + item-netwr
).
* REDUCE + Resutado de tipo estruturado
*
types: begin of y_result,
netwr type y_item-netwr,
counter type i,
end of y_result.
*** SEM REDUCE
LOOP AT t_order into data(s_orderx)
WHERE auart = 'A'.
LOOP AT s_order-items into data(s_item).
s_tot-netwr += s_item-netwr.
s_tot-counter += 1.
ENDLOOP.
ENDLOOP.
*** COM REDUCE +
DATA(s_tot) =
REDUCE y_result(
INIT result =
VALUE y_result(
netwr = 0
counter = 0
)
FOR order IN t_order
WHERE ( auart = 'A' )
FOR item IN order-items
NEXT
result-netwr = result-netwr + item-netwr
result-counter += 1
).
** REDUCE -> Fatorial
** Resultado à partir do nada: sem uma tabela interna como base
METHOD fatorial "definition
IMPORTING
iv_base type i
RETURNING
value(rv_fat) type i.
ENDMETHOD.
METHOD fatorial. "implementation
rv_fat =
REDUCE i(
INIT x = 0
FOR n = 1 THEN n + 1 UNTIL n > iv_base
NEXT x = x + n
).
ENDMETHOD.
WRITE:
fatorial( 3 ), "06
fatorial( 4 ), "10
fatorial( 5 ), "15
fatorial( 6 ). "21
** REDUCE
**
** Permite gerar resultados que antes só eram possíveis
** por meio de loopings
* X = REDUCE dype|#(conditional iteration|table iteration).
* Exemmlo: permite criar uma única saída com o processamento de vários itens
* Soma (total) de todos os registros de uma tabela interna
* SEM REDUCE
data: v_tot_netwr type y_order-netwr.
LOOP AT t_order INTO DATA(s_order).
v_tot_netwr += s_order-netwr.
ENDLOOP.
* COM REDUCE
DATA(v_tot_netwr2) =
REDUCE y_order-netwr(
INIT x = 0
FOR wa IN t_order
NEXT x = x + wa-netwr
).
* COM REDUCE + WHERE
DATA(v_tot_netwr3) =
REDUCE y_order-netwr(
INIT x = 0
FOR wa IN t_order
WHERE ( auart = 'A' )
NEXT x = x + wa-netwr
).
* REDUCE + Tabela denro de tabela
*
DATA(v_tot_netwr4) =
REDUCE y_item-netwr(
INIT result = 0
FOR order IN t_order
WHERE ( auart = 'A' )
FOR item IN order-items
NEXT result = result + item-netwr
).
* REDUCE + Resutado de tipo estruturado
*
types: begin of y_result,
netwr type y_item-netwr,
counter type i,
end of y_result.
*** SEM REDUCE
LOOP AT t_order into data(s_orderx)
WHERE auart = 'A'.
LOOP AT s_order-items into data(s_item).
s_tot-netwr += s_item-netwr.
s_tot-counter += 1.
ENDLOOP.
ENDLOOP.
*** COM REDUCE +
DATA(s_tot) =
REDUCE y_result(
INIT result =
VALUE y_result(
netwr = 0
counter = 0
)
FOR order IN t_order
WHERE ( auart = 'A' )
FOR item IN order-items
NEXT
result-netwr = result-netwr + item-netwr
result-counter += 1
).
** REDUCE -> Fatorial
** Resultado à partir do nada: sem uma tabela interna como base
METHOD fatorial "definition
IMPORTING
iv_base type i
RETURNING
value(rv_fat) type i.
ENDMETHOD.
METHOD fatorial. "implementation
rv_fat =
REDUCE i(
INIT x = 0
FOR n = 1 THEN n + 1 UNTIL n > iv_base
NEXT x = x + n
).
ENDMETHOD.
WRITE:
fatorial( 3 ), "06
fatorial( 4 ), "10
fatorial( 5 ), "15
fatorial( 6 ). "21