Introducción #
En este grupo se irán poniendo las distintas sentencias, que son las que más uso, para poder informar tablas internas en base a otras tablas internas.
Estas sentencias se pueden utilizar para crear nuevas variables o ponerlas como entrada de parámetro en clases.
La sentencia estrella de esta página es la FOR. Pero ojo: que si usamos field-symbols/variable no tiene que estar declarada previamente.
Ejemplo 1 #
Se recorren los datos de MT_TIPPQPS filtrando por dos campos y se rellenando los valores de ET_COND_CRUD con los datos de la estructura leída y de otras variables:
et_cond_crud = VALUE #( FOR ls_tippqps IN mt_tippqps
                            WHERE ( pqtyp = is_header-negotiation_type_code
                                    AND keyfield = lv_keyfield )
                                    ( kschl = ls_tippqps-kschl
                                      kotab = ls_tippqps-kotab
                                      keyvalue = is_header-customer_code
                                      datab = is_header-validity_to
                                      datbi = is_header-validity_from
                                      updkz = zif_rtn_data=>cv_updkz_insert ) ).
Nota: Si et_cond_crud tuviera datos se perderían, si se quieren añadir los datos a los existentes hay que añadir la opción BASE:
Utilización de la opción BASE #
BASE es una opción del VALUE que permite que los datos tiene la tabla donde se van a volcar los datos no se pierdan. Pero tiene un funcionamiento distinto si es una estructura o tabla interna.
Si es una tabla interna funciona de esta manera:
lt_header_selparams = VALUE #( BASE lt_header_selparams FOR <wa> IN s_soldto 
                               ( attribute_name = zif_car_bo_orders_c=>sc_node_attribute-root-soldto 
                                 sign = 'I' 
                                 option = 'EQ' 
                                 low = <wa>-low ) ).
Si es una estructura va de la siguiente manera:
<ls_datos> = CORRESPONDING #( BASE ( <ls_datos> ) <ls_positions> ).
La diferencia radica en que la tabla interna no lleva paréntesis y la estructura si.
Ejemplo 2 #
Ampliación de la sentencia INSERT de siempre pero con en este caso no es necesario crear estructuras intermediante o usar el insert/append a un field-symbols y luego informar los valores
INSERT VALUE #( sign = 'I' option = 'EQ' low = abap_false ) INTO TABLE lt_params_sl.
Ejemplo usando CORRESPONDING #
Hacer un insert + corresponding en una tabla interna.
 INSERT CORRESPONDING #( <ls_orders> ) INTO TABLE lt_positions.