MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Problema Con Rango.... (foro/showthread.php?t=12748)

Edd_401 18/04/08 16:59:58

Problema Con Rango....
 
Que Tal, Primero Que Nada Saludos

Tengo Un Problemon !!!!!!!!


Tengon Un Programa Que Muestra Un Reporte, Al Cual Le He Asigando Que La Fecha Se Aobligatoria...

El Caso Es Que Si Se Corre El Reporte Para Una Fecha, Ya No Puede Volverse A Correr Para La Misma Fecha O Periodo...

Ejemplo.

Si Corro El Reporte Para El 1-01-2008 Al 31-01- 2008

1. Ya No Puedo Volverlo A Correr Para Esa Fecha.
2. Ya No Puedo Correrlo Para Otra Fecha Que Tenga Ese Rango

Por Ejemplo Ya No Correria Para El Cualquier Fecha O Rango De Ese Periodo.................




Para Esto He Hecho Una Tabla, En La Cual Guardo Los Periodos O Rangos Para Los Cuales Ya Se Ha Corrido El Reporte.............................

Tengo Lo Siguiente:


Select *
Into Table Ti_zret004
From Zret004
Where Bukrs_low In S_bukrs And
Vkorg_low In S_gsber And
Werks_low In S_werks And
( ( ( Fecha_low <= S_fkdat-low And Fecha_high <= S_fkdat-high ) )
Or
( ( Fecha_low In S_fkdat ) Or
( Fecha_high In S_fkdat ) ) ).

If Sy-subrc = 0.
Message Id '00' Type 'e' Number 208 With Text-100.
Endif.





El Problemas Es:

1. Con Lo Que He Hecho Me No Me Deja Correr Lo Demas Periodos, A Menos De Que Ponga El Rango, Es Decir De Una Fecha X A Una Y..........

Si Solo Pongo La Fecha X........ A Otra Ya No Me Deja Correrlo......




Ojala Y Alguien Haya Hecho Algo Pareceido Antes Y Pueda Ayudarme, Saludos.............

pmarinab 21/04/08 06:40:55

Hola Edd_401,

a mi se me ocurre otra idea que quizas te pueda ayudar. Create una tabla Z en la que almacenes los días para los que se ha lanzado el informe. De esta forma, si has ejecutado para el rango 01.01.2008-05.01.2008 en la tabla te debería guardar:
DATUM
01.01.2008
02.01.2008
03.01.2008
04.01.2008
05.01.2008

Luego, cada vez que vuelvas a lanzar tu informe simplemente tienes que hacer la siguiente validación:

SELECT SINGLE *
FROM zXXXX
WHERE datum IN s_fkdat
... quí el resto de condiciones que tengas en tu tabla (sociedad,...)

De esta forma, si la select te devuelve algún valor será que el programa se está ejecutando para una fecha del rango que ya se está tratando.

No se si este metodo te parecerá mejor o peor. A mi me parece más sencillo, aunque quizás no te sirva en tu caso.

Un saludo.

davidffh 21/04/08 16:15:16

Otra forma
 
Mira;

Para los rangos yo hago así; no necesito especificar rango mayor o menor en el SELECT "Fecha in S_fkdat".


Aquí tomo los valores ingresados de fecha:

SELECT-OPTIONS pfecha FOR mkpf-budat OBLIGATORY.

Select *
Into Table Ti_zret004
From Zret004
Where Bukrs_low In S_bukrs And
Vkorg_low In S_gsber And
Werks_low In S_werks And
Pfecha in S_fkdat.

Espero te ayude

Edd_401 21/04/08 16:48:20

gracias marina y david por su ayuda....


MARINA, DE HECHO ESO ES LO QUE HICE.... A AHI ES DONDE ALMACENO LAS FECHAS............ ES SOLO QUE MI VALIDACION ESTABA MAL...........


YA LO RESOLVI, SOLO ERA CUESTION DE MATEMATICAS..........



IF NOT S_FKDAT-LOW IS INITIAL.
IF NOT S_FKDAT-HIGH IS INITIAL.

SELECT *
INTO TABLE TI_ZRET004
FROM ZRET004
WHERE BUKRS_LOW IN S_BUKRS AND
VKORG_LOW IN S_GSBER AND
WERKS_LOW IN S_WERKS AND
( ( ( FECHA_LOW <= S_FKDAT-LOW AND FECHA_HIGH >= S_FKDAT-LOW ) AND
( FECHA_LOW <= S_FKDAT-HIGH AND FECHA_HIGH >= S_FKDAT-HIGH ) )
OR
( ( FECHA_LOW IN S_FKDAT ) OR
( FECHA_HIGH IN S_FKDAT ) ) ).

IF SY-SUBRC = 0.
MESSAGE ID '00' TYPE 'E' NUMBER 208 WITH TEXT-100.
ENDIF.

ENDIF.
ENDIF.

IF NOT S_FKDAT-LOW IS INITIAL.
IF S_FKDAT-HIGH IS INITIAL.

SELECT *
INTO TABLE TI_ZRET004
FROM ZRET004
WHERE BUKRS_LOW IN S_BUKRS AND
VKORG_LOW IN S_GSBER AND
WERKS_LOW IN S_WERKS AND

( ( ( FECHA_LOW <= S_FKDAT-LOW AND FECHA_HIGH >= S_FKDAT-LOW )
)
OR
( ( FECHA_LOW IN S_FKDAT ) ) ).

IF SY-SUBRC = 0.
MESSAGE ID '00' TYPE 'E' NUMBER 208 WITH TEXT-100.
ENDIF.

ENDIF.
ENDIF.



CREE DOS SUBRUTINAS, UNA CUANDO TRAIGO UN RANGO DE FCEHAS----------
DE XXXX----A------XXXXX


Y OTRA CUANDO SOLO TRAIGO UNA SOLA FECHA........





QUE LES PARECE:.......



SALUDOS


Y NUEVAMENTE MUCHAS GRACIAS..

pmarinab 21/04/08 20:40:39

Hola Edd_401,

mi nick es pmarinab, pero no llamo marina jeje.

Creo que no hemos coincidido en la solución. Tú almacenas en la tabla las fechas en forma de rango, y eso hace que tus busquedas sean más complejas. Yo te aconsejo que en vez de guardar el rango tal cual se ha introducido en tu informe, guardes un registro con cada una de los días que están dentro de ese rango. De esa forma evitarás una condición WHERE tan compleja.

Con mi manera podrías hacer lo siguiente, pero deberías redefinir la funcionalidad de tu tabla:

SELECT *
INTO TABLE TI_ZRET004
FROM ZRET004
WHERE BUKRS_LOW IN S_BUKRS AND
VKORG_LOW IN S_GSBER AND
WERKS_LOW IN S_WERKS AND
FECHA IN S_FKDAT .

IF SY-SUBRC = 0.
MESSAGE ID '00' TYPE 'E' NUMBER 208 WITH TEXT-100.
ENDIF.

ENDIF.
ENDIF.

Edd_401 22/04/08 15:35:49

Jjje......lo Siento Por Lo De Marina. !!!!!!!


Me Parece Bien Tu Propuesta, Probare Las 2.... Todo Dependera Le Performance, Bueno.... Si Me Da Tiempo...jjeje.... Pues Ya Urge.....



Saludos


Husos Horarios son GMT. La hora en este momento es 01:27:08.

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