PDA

Ver la Versión Completa : Alv: Campo Vacío en Control de Precios


marilinmendoza
13/10/08, 22:16:07
Hola a todos,
Este es un requerimiento del módulo CO, y en la empresa acaba de terminar el año fiscal 2008 , por tanto se comenzó con el periodo 1 del año 2009.

La funcional me pidió esto:
Para los materiales que tengan control de precios "V" en la MBEW, entra en la MBEWH con el campo MATNR LFMON (Periodo) y el año LFGJA Toma el campo VERPR, Si el campo está vacío toma el valor anterior registrado en la tabla.

Yo hice esto:
SELECT SINGLE verpr
INTO CORRESPONDING FIELDS OF it_ckis
FROM mbewh
WHERE matnr = it_ckis-matnr
AND vprsv EQ 'V'
AND lfmon EQ e_buper " Periodo
AND lfgja EQ ejerc " Año
AND verpr NE space.

itab_out-cost_std = it_ckis-verpr.

Lo cual me trae todos los campos que tienen valores en la tabla MBEWH y el campo VERPR.

Me faltaría entonces 'Si el campo está vacío toma el valor anterior registrado en la tabla', es decir, si VERPR tiene valores 25 26 27 29, entonces, como no está 28 en su lugar debe salir 27.

Así sale por los momentos:
MATNR LFGJA LFMON VPRSV VERPR
---------------------------------------------
11001 2008 05 V 250,5
11002 2008 05 V 275,5
11004 2009 02 V 285,7

Falta que salga el material que esté vacio en VERPR, en este caso el 11003 :

En caso que el material 11003 esté en el año 2008:

MATNR LFGJA LFMON VPRSV VERPR
---------------------------------------------
11003 2008 05 V 275,5

o

En caso que el material 11003 esté en el año 2009:

MATNR LFGJA LFMON VPRSV VERPR
---------------------------------------------
11003 2009 01 V 275,5


Por favor una manito.
Gracias.

Bmamba
14/10/08, 14:17:05
Yo no sé si me he enterado de algo. Pero lo que yo haría sería quitar lo de verpr NE space, recuperar así todos (los del verpr vacío también). Y recorrer la tabla guardando el verpr anterior, por si me encuentro alguno vacío endosarselo.
Algo asi:
SELECT SINGLE verpr
INTO CORRESPONDING FIELDS OF it_ckis
FROM mbewh
WHERE matnr = it_ckis-matnr
AND vprsv EQ 'V'
AND lfmon EQ e_buper " Periodo
AND lfgja EQ ejerc.

**Supongo que aquí habría un sort a la tabla
loop at it_ckis.

if it_ckis-verpr is initial.
it_ckis-verpr = g_verpr_ant.
else.
g_verpr_ant = it_ckis.
endif.

endloop.

Eso sí, no sé qué pasaría si el primer verpr de la tabla está vacío.

marilinmendoza
15/10/08, 13:55:32
Hola BMAMBA,
Estoy haciendo lo que me comentas, le quité lo de verpr NE space, para traérmelos todos, pero estoy trancada aquí:

if it_ckis-verpr is initial.
it_ckis-verpr = g_verpr_ant.
else.
g_verpr_ant = it_ckis.
endif.
Debo traerme el último valor no vacío , pero nada.
Intenté con esto: pos = sy-tabix - 1, igual sigue sin funcionar.

Alguna otra idea, please...

Bmamba
20/10/08, 09:01:07
Hola BMAMBA,
Estoy haciendo lo que me comentas, le quité lo de verpr NE space, para traérmelos todos, pero estoy trancada aquí:

if it_ckis-verpr is initial.
it_ckis-verpr = g_verpr_ant.
else.
g_verpr_ant = it_ckis.
endif.
Debo traerme el último valor no vacío , pero nada.
Intenté con esto: pos = sy-tabix - 1, igual sigue sin funcionar.

Alguna otra idea, please...

Hola! hay un error en el código que te pasé y es que :
g_verpr_ant = it_ckis-verpr. (no = a it_ckis) Prueba asi.