MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Buscar el NOMBRE del campo de una itab. (foro/showthread.php?t=72152)

cosagaucha 25/07/14 11:36:13

Buscar el NOMBRE del campo de una itab.
 
hola a todos!

consulta, en la pantalla de selección ingreso el campo MES(numérico), y luego, en mi reporte, debo buscar en la tabla faglflext, en los campos:

hsl01 hsl02 hsl03 ......... hasta hsl16

SEGUN el mes ingresado, debo ir al campo hslxx correspondiente, y tomar su valor.

Pero mi consulta es ahora el "Cómo" ???!!! ya que nunca me lleve bien con los flied-symbols, y no tengo mucha idea de como debo encararlo.

O de casualidad, habrá alguna función de sap que me permita saber ese dato pasando mes y año??..

muchas gracias de antemano!!

vanesamacri 25/07/14 12:30:30

Hola.

Supongamos que tenemos la siguiente estructura:

DATA wa_faglflext TYPE faglflext.


En estructura se encontrará poblada con una línea de información de la tabla faglflext. Para ir al campo deseado, realizar lo siguiente (explicado de manera muy básica):

FIELD-SYMBOL <fs> TYPE any.
DATA v_campo TYPE string.

CONCATENATE 'WA_FAGLFLEXT-HSL' p_mes INTO v_campo. (Se entiende que en p_mes va a venir el valor del mes ingresado. De esta manera, si el mes ingresado fue 10, en v_campo te va a quedar el valor WA_FAGLFLEXT-HSL10).

ASSIGN (v_campo) TO <fs>. (se asigna el valor del campo al puntero)

IF <fs> IS ASSIGNED.

Si la asignación fue correcta, en <fs> vas a tener referenciado el valor del campo HSLXX de la estructura de la tabla faglflext que sea correspondiente al mes ingresado.

Probablemente tengas que verificar, en caso de ingresar un número de mes de un dígito, agregar el cero manualmente a la hora de concatenar el valor del campo para asignarlo al puntero (por ejemplo, para que te quede HSL01 y no HSL1).

ENDIF.


Si querés evitar el uso de punteros, podés utilizar la instrucción DO... VARYING la cual te permite recorrer registros de manera horizontal. Podés jugar con el índice de la iteración del DO...ENDDO para determinar el campo que se corresponde con el número del mes ingresado en pantalla de selección.


Espero que la explicación haya sido clara.

Un saludo.

cosagaucha 25/07/14 12:39:06

hola Vanesa, MUCHISIMAS GRACIAS por la mano!!!

Ahora me voy a poner a probar estos códigos, y buscar un poco más también sobre el DO, ya que se me había ocurrido el recorrer las columnas de la tabla "p_mes veces" (do p_mes times) pero no se me ocurria como variar las columnas y no las filas.

pruebo y comento.
Gracias!!

cosagaucha 25/07/14 13:29:08

aca vuelvo con una consulta relacionada..

hice tal cual decías:

FIELD-SYMBOLS <fs> TYPE ANY.
DATA v_campo TYPE string.

CONCATENATE 'WA_FAGLFLEXT-WTG0' p_monat INTO v_campo.

ASSIGN (v_campo) TO <fs>.
IF <fs> IS ASSIGNED.
ENDIF.

pero el tema, es que en (v_campo) no me toma ningún valor.. por lo tanto, no se asigna nada al fs, por más que el valor resultante del CONCATENATE es bien el nombre del campo...

por donde se me está escapando?..

GRACIAS de nuevo!

Mauricio Hidalgo 25/07/14 14:07:25

Las instrucciones están bien:

Asegurate que la estructura WA_FAGLFLEXT tiene datos.

Saludos

cosagaucha 25/07/14 14:13:59


hola Mauricio, debuggeando una vez más, me di cuenta que había tenido un error al nombrar el campo, pero ya lo solucione! :)

Consulta adicional.. es una posibilidad, que el valor del campo a buscar, venga en CERO, en ese caso.. daría error? O sólo decías por si la estructura estaba directamente vacía -y no el campo en 0-

Gracias!!!

Mauricio Hidalgo 25/07/14 15:03:24

No, no daría error si viene en blanco o cero. En realidad preguntaba por si tenias datos en la estructura no más.

Saludos

cosagaucha 25/07/14 15:34:31

Perfecto entonces. Y lo prometido es deuda,

acá el código de lo que anda, y me trae el valor buscado en <fs> :)

READ TABLE gt_faglflext INTO wa_faglflext WITH KEY ryear = p_gjahr
racct = wa_ctasbles-t_ctacble.
IF sy-subrc EQ 0.

**************
FIELD-SYMBOLS <fs> TYPE ANY.
DATA v_campo TYPE string.

CONCATENATE 'WA_FAGLFLEXT-HSL' p_monat INTO v_campo.

ASSIGN (v_campo) TO <fs>.

IF <fs> IS ASSIGNED.
ENDIF.

Gracias Vanesa y Mauricio!!
Saludos!


Husos Horarios son GMT. La hora en este momento es 22:02:01.

www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web