REDUCE crea una estructura plana en lugar de una tabla. ¿Por qué?
Mi objetivo es lograr lo siguiente usando un bucle FOR.
DATA(lt_wherecondn) = VALUE string_table( ).
DATA(lt_fields) = VALUE rsds_frange_t(
( fieldname = ‘A~FLD1’ ) ( fieldname = ‘A~FLD2’ ) ).
DATA(lv_lines) = lines( lt_fields ).
LOOP AT lt_fields ASSIGNING FIELD-SYMBOL(
DATA(lv_length) = strlen(
DATA(lv_line) = COND string(
WHEN lv_lines <> sy-tabix
THEN
ELSE
APPEND lv_line TO lt_wherecondn.
ENDLOOP.
Además:
Hay nombres de campos en LT_FIELDS.
Concatenar los datos de LT_FIELDS-FIELDNAME en un formato específico.
Añádelo a LT_WHERE.
Resultado en LT_WHERECONDN:
FLD1 IN @A~FLD1 AND
FLD2 IN @A~FLD2
A continuación se muestra mi código (no estoy seguro de dónde añadir mi lógica de lv_length en el bucle):
TYPES: BEGIN OF ty_whr,
fieldname TYPE string,
END OF ty_whr.
DATA(lt_where) = REDUCE ty_whr(
INIT whereclause = VALUE ty_whr( )
FOR
NEXT whereclause-fieldname =
COND #( WHEN whereclause IS NOT INITIAL
THEN
ELSE
El fragmento anterior está creando una estructura profunda lt_where con fieldname y contiene solo una línea de datos. Parece ser un problema de sintaxis. ¿Qué hay que corregir aquí?
davy.ai
Necesitas usar la instrucción
REDUCE
para iterar a través de la tablaLT_FIELDS
y agregar los datos aLT_WHERECONDN
. La lógica delv_length
debe incluirse en la cláusulaNEXT
de la instrucciónREDUCE
. El código debe verse así: