Duda con assing (field symbol)

Buenas, no se que tengo mal en mi codigo, se que tengo la linea despues del assign mala, pero no veo como acomodarla, ayuda por favor

mi field symbol <fs_cal_prec> tiene cargada los valores resultantes de la concatenacion, ahi no hay problema, p_0419 me devuelve una variable para el form y v_pos simplemente el conteo de sy-tabix, en esa parte todo excelente! en ejemplo devuelve: <fs_cal_prec>-ps_1

LOOP AT it_cc.
      v_pos = sy-tabix.
      SELECT

        ko~kbetr

        INTO v_kbert
        FROM
            a913 AS a
        INNER JOIN
            konp AS ko
        ON
          a~knumh = ko~knumh
        WHERE
          a~datab <= p_fech AND
          a~datbi >= p_fech AND
          a~kschl = p_0418 AND
          a~matnr = it_cal_prec-matnr AND
          a~vkorg = p_orgvta AND
          a~kvgr1 = it_cc-kvgr1.

        v_campo = '<fs_cal_prec>' && '-' && p_0419 && '_' && v_pos.
        ASSIGN (v_campo) to <fs_cal_prec>.
        <fs_cal_prec> = v_kbert.
      ENDSELECT.
    ENDLOOP.

a ver…tu lo que quieres pasar el valor que tiene la variable “v_campo” al <fs_cal_prec> o quieres darle el tipo de referencia que es “v_campo” ???

A v_campo le estoy pasando la concatenacion del campo en el field symbol, luego al field symbol darle el campo donde guardara lo que tengo que v_kbert (gracias a lo que tengo en v_campo)

hasta donde yo entiendo estas haciendo lo siguiente:

v_campo = ‘<fs_cal_prec>’ && ‘-’ && p_0419 && ‘_’ && v_pos. = esto, seria algo asi como v_campo = <fs_cal_prec>-p_0419_v_pos.

con esto: ASSIGN (v_campo) to <fs_cal_prec>. lo que haces que el <fs_cal_prec> apunte o guarde el valor que tenga una variable que se llamame “<fs_cal_prec>-p_0419_v_pos”

y luego <fs_cal_prec> = v_kbert , esta volviendo a setear el field con el valor que consultaste en el select.

ahora, no entiendo.

Por ejemplo: Yo necesitaba tomar el valor de una variable que iba cambiando (el nombre de la variable) y lo hice asi.

CONCATENATE '<EXIT>-GSV' lv_pos_c INTO lv_field.
          CONDENSE lv_field NO-GAPS.
          ASSIGN (lv_field) TO <gsv>.

Donde lv_pos es un contador, eso lo que quiere decir que a mi le voy a dar el valor al tiene la variable -GSV01 y luego -GSV02 y asi…no se si me entiendas.

lo que quiero es crear el campo donde voy a guardar lo que obtuve del select, por eso la concatenacion del field symbol con p_0419 y el v_pos, no se si mi assign este bueno y/o la linea siguiente al assign

Hola,

A ver si entendi. ¿En p_0419 está la variable dónde debes guardar el dato?.

Porque, “crear el campo”, es algo que me suena extraño, perdón mi ignorancia.

Si la variable está en P_0419 haría lo siguiente:

    v_campo = p_0419.
    ASSIGN (v_campo) to <fs_cal_prec>.
    <fs_cal_prec> = v_kbert.

Saludos.

Hola @sconoredhot , no… en v_kbert esta la variable que contiene el resultante de la consulta. En v_campo esta la concatenacion para “crear” la direccion del campo del field symbol donde debo guardar el valor de la variable generada en esa consulta

Si, entonces no entendí tan mal las cosas.

No veo que esté mal el assign o la línea siguiente. Para mí la concatenación te está dando un campo que no existe y por eso no te asigna bien.

¿Pudiste ver por debug que valor te está quedando en v_campo al concatenar y comprobar que el mismo exista?

Saludos.

Me da este error

jajaja, no se ya me perdi !!

si el valor de “v_kbert” lo quieres asignar a una variable que al parecer se llama “'<fs_cal_prec>-p_0419_v_pos” o algo asi…
porque no setear el valor directo de “v_kbert” a la variable que quieres ??

No se…yo ya me perdi

1 me gusta

no lo puedo setear directamente pues el v_pos cambia cada vez que hace un loop, esta asignado a una sy-tabbix, por ende, mi campo cambiara (sera dinamico), por eso no lo hago directamente compañero

jaja yo también me perdí un poquito.

@mestanza para ese error, debes verificar como estan declaradas tanto la variable donde tienes el valor, la variable a la cual haces referencia con el field symbol y el field symbol en si, verificando que sean del mismo tipo.

Por lo general si no sabes que le vas a mandar al field symbol se le pone TYPE ANY.

Saludos,

1 me gusta

te voy a adjuntar un codigo…yo hago eso y tu ahi lo adaptas jajajaja

Data: lv_pos_aux         TYPE i,
        lv_pos_c(2)        TYPE c,
        lv_field(17)       TYPE c,

FIELD-SYMBOLS: 
                 <fs>              TYPE any,
                 <gsv>             TYPE any,
                 <unv>             TYPE any,

DO lv_cont TIMES.

          lv_pos_aux = lv_pos_aux + 1.

          UNPACK lv_pos TO lv_pos_c.
          CONCATENATE 'LS_DVER-GSV' lv_pos_c INTO lv_field.
          CONDENSE lv_field NO-GAPS.
          ASSIGN (lv_field) TO <fs>.

          UNPACK lv_pos_aux TO lv_pos_c.
          CONCATENATE '<EXIT>-GSV' lv_pos_c INTO lv_field.
          CONDENSE lv_field NO-GAPS.
          ASSIGN (lv_field) TO <gsv>.

          <gsv> = <fs>.

          UNPACK lv_pos TO lv_pos_c.
          CONCATENATE 'LS_DVER-MGV' lv_pos_c INTO lv_field.
          CONDENSE lv_field NO-GAPS.
          ASSIGN (lv_field) TO <fs>.

          UNPACK lv_pos_aux TO lv_pos_c.
          CONCATENATE '<EXIT>-MGV' lv_pos_c INTO lv_field.
          CONDENSE lv_field NO-GAPS.
          ASSIGN (lv_field) TO <unv>.

          <unv> = <fs>.

          lv_pos = lv_pos - 1.
        ENDDO.

espero te sirva

1 me gusta

ya vi mi error!!! no habia declarado el field symbol type any!! ya esta andando y rodando!! muchas gracias!!!

2 Me gusta