Ayuda SAP

Duda con assing (field symbol)

sap-abap
Etiquetas: #<Tag:0x00007f4dbd970650>
#1

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.
#2

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” ???

#3

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)

#4

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.

#5

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

#6

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.

#7

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

#8

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.

#9

Me da este error

#10

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
#11

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

#12

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
#13

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
#14

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

2 me gusta
cerrado #15