Relleno de valores

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.