Используя "понимание таблицы", как показано ниже, вы можете получить таблицу с отфильтрованными ярлыками:
TYPES:
BEGIN OF zatool_t_doc_input_s,
field1 TYPE c,
field2 TYPE c,
celltab TYPE lvc_t_styl,
END OF zatool_t_doc_input_s,
zatool_t_doc_input TYPE STANDARD TABLE OF zatool_t_doc_input_s WITH EMPTY KEY.
DATA(it_doc_input) = VALUE zatool_t_doc_input(
( field1 = 'A' field2 = 'B' celltab = VALUE #( ( fieldname = 'SCAN_ID' ) ) )
( field1 = 'C' field2 = 'D' celltab = VALUE #( ( fieldname = 'USER_ID' ) ) )
( field1 = 'C' field2 = 'D' celltab = VALUE #( ( fieldname = 'SCAN_ID' ) ) )
( field1 = 'E' field2 = 'F' celltab = VALUE #( ( fieldname = 'SYST_ID' ) ) )
).
DATA(rt_doc_input) = VALUE zatool_t_doc_input(
FOR ls_doc_input IN it_doc_input (
VALUE #( BASE ls_doc_input
celltab = FILTER #( ls_doc_input-celltab
WHERE fieldname <> CONV lvc_fname( 'SCAN_ID' ) ) ) ) ).
Что касается синтаксической ошибки, как указывает @Florian, проблема в том, что при использовании BASE
со структурой (в данном случае ls_doc_input
) соответствующий VALUE #(
возвращает структуру. Если VALUE возвращает таблицу, BASE также должна использовать таблицу.
Независимо от того, даже если вы обойдете синтаксическую ошибку BASE с чем-то вроде этого
DATA(rt_doc_input) =
REDUCE #( INIT lt_doc_input = VALUE zatool_t_doc_input( )
FOR ls_doc_input IN it_doc_input
NEXT lt_doc_input = VALUE #( ( field1 = ls_doc_input-field1
field2 = ls_doc_input-field2
celltab = FILTER #( ls_doc_input-celltab
WHERE fieldname <> CONV lvc_fname( 'SCAN_ID' ) )
) )
). "reduces the original table to a single line (albeit with celltab filtered)
или даже эквивалент, используя BASE, чтобы избежать отдельного назначения поля
DATA(rt_doc_input) =
REDUCE #( INIT lt_doc_input = VALUE zatool_t_doc_input( )
FOR ls_doc_input IN it_doc_input
NEXT lt_doc_input =
VALUE #(
( VALUE #( BASE ls_doc_input
celltab = FILTER #( ls_doc_input-celltab
WHERE fieldname <> CONV lvc_fname( 'SCAN_ID' ) )
) "VALUE: table line using BASE
) " VALUE: table row
) "VALUE: table
). "reduces the original table to a single line (albeit with celltab filtered)
он по-прежнему не будет делать то, к чему, как я предполагаю, вы стремитесь, поскольку он уменьшит it_doc_input
до одной строки.