PDA

Ver la Versión Completa : Duda con rangos.


ximena251
04/04/14, 14:57:09
Buenos días, espero puedan ayudarme con esto, sé que es bastante fácil, pero aún así apenas inicio en esto.
La duda es la siguiente:
Tengo esté select
SELECT zzmod
zzproyt
repid
fname
INTO TABLE gt_cnst
FROM zim_cnst
WHERE zzmod EQ 'EWM' AND
zzproyt EQ 'SICAL' AND
repid EQ 'ZRTINB679' AND
( ( fname EQ '101') OR
( fname EQ '601') OR
( fname EQ '641') OR
( fname EQ '653' ) ).

pero, los valores de fname me gustaría ponerlos en un rango, pero no sé como :confused: de ahí sigue la siguiente duda.
El campo fname se compone de AAABBBBD donde AAA corresponde a la clave de movimiento, BBBB el centro origen y D el tipo diurno y nocturno.
Tengo que recorrer la tabla interna que guarda ese valor, y eliminar la D; es decir si tengo un 6009123N. tengo que eliminar la N. No sé si me explico pero espero puedan ayudarme

vanesamacri
04/04/14, 16:50:21
Buenas tardes.

Te recomiendo hacer lo siguiente:

A.- Ingresar los valores de AAA en un rango. Lo podés hacer de la siguiente manera:

DATA ra_campo TYPE RANGE OF char3 WITH HEADER LINE.

ra_campo-sign = 'I'.
ra_campo-option = 'EQ'.
ra_campo-high = space.
ra_campo-low = '101'.
APPEND ra_campo.

ra_campo-low = '601'.
APPEND ra_campo.

ra_campo-low = '641'.
APPEND ra_campo.

ra_campo-low = '653'.
APPEND ra_campo.

B.- Realizar la consulta a la tabla transparente sin tener en cuenta al campo fname. En otras palabras, el filtrado por este campo no se hará en el SELECT.

C.- Luego de la consulta, recorrer la tabla interna con los registros recuperados (mediante LOOP) y por cada entrada realizar la siguiente verificación:

IF gt_cnst-fname(3) NOT IN ra_campo.

CLEAR gt_cnst-fname+7(1).

ENDIF.
Si los primeros tres caracteres del campo fname NO se encuentran dentro de los valores determinados en el rango anteriormente definido, entonces se le borra el caracter ubicado en la octava posición. De acuerdo a cómo decidas recorrer la tabla interna, te va a convenir quizás utilizar la sentencia MODIFY para impactar el cambio.


Cualquier duda, avisame.

Un saludo.

ximena251
04/04/14, 19:37:55
Muchas gracias, esto me ha ayudado, y me ha quedado bastante claro. :)

Spainnavar
10/04/14, 10:40:04
No se si funcionara, pero si lo pruebas dime por favor:

Tengo curiosidad por los caracteres comodin, pero no se si funcionará: *

DATA ra_campo TYPE RANGE OF char3 WITH HEADER LINE.

ra_campo-sign = 'I'.
ra_campo-option = 'EQ'.
ra_campo-high = space.
ra_campo-low = '101*'.
APPEND ra_campo.

ra_campo-low = '601*'.
APPEND ra_campo.

ra_campo-low = '641*'.
APPEND ra_campo.

ra_campo-low = '653*'.
APPEND ra_campo.


SELECT zzmod
zzproyt
repid
fname
INTO TABLE gt_cnst
FROM zim_cnst
WHERE zzmod EQ 'EWM' AND
zzproyt EQ 'SICAL' AND
repid EQ 'ZRTINB679' AND
fname IN ra_campo.

Fijate que para el rango no pongo EQ o =... pongo IN,

Espero que funcione, pero nunca he probao con caracteres comodin. Nos cuentas! ;)

Un saludo

zocter
10/04/14, 14:35:52
Para usar los caracteres * tienes que cambiar el option de EQ a CP por ejemplo....