Ayuda Rango de Fechas desde-hasta

Post Reply
Databaselab2002
Posts: 142
Joined: Sun Oct 09, 2005 1:36 am

Ayuda Rango de Fechas desde-hasta

Post by Databaselab2002 »

Estimados Colegas

Tengo el siguiente problema con rangos de fecha, quiero saber por
ejemplo la cantidad de $ que vendi de tal fecha , con algunas fechas
me tira el monto correcto , con otras me tira 0 , alguien me puede
orientar que estoy haciendo mal, adjunto Codigo

Gracias
Fabian
databaselab2002@yahoo.com.ar





function VDYM


local odlg1
local nStyle := nOr( WS_POPUP, ; // System menu de oDlg
WS_MAXIMIZE ) // botón maximize habilitado y botón minimize deshabilitado

local ofecha


SET DATE FRENCH
desde:= CToD(" / / ")
hasta:= CToD(" / / ")

DEFINE FONT oFont NAME "ARIAL" SIZE 0,-13.70 BOLD


Sele 11
USE FACTURA
iNDEX on factura->fecha to ddto
set index to ddto



DEFINE DIALOG oDlg1 from 10,35 to 20,70 STYLE nStyle COLOR CLR_BLUE,CLR_6 && of oDlg

@ 0 ,03 say ofecha Prompt "VENTAS DIARIAS Y MENSUALES " FONT OFONT of oDlg1 COLOR CLR_BLACK,CLR_6
@ 1.5 ,06 say ofecha Prompt "Desde " FONT OFONT of oDlg1 COLOR CLR_BLACK,CLR_6
@ 2.5 ,06 say ofecha Prompt "Hasta " FONT OFONT of oDlg1 COLOR CLR_BLACK,CLR_6

@ 1.7 ,8 get desde of odlg1
@ 2.7 ,8 get hasta of odlg1


@ 5 ,2 sbutton b resource "ok" PROMPT "Aceptar" size 40,10 OF oDlg1 LOOK W97 TEXT ON_RIGHT action vdm(desde,hasta,odlg1,ofont)
@ 5 , 10 sbutton b resource "cancel" PROMPT "Cancelar" size 40,10 OF oDlg1 LOOK W97 TEXT ON_RIGHT action(exi(odlg1))


ACTIVATE DIALOG oDlg1 CENTERED

return nil




function vdm(desde,hasta,odlg1,ofont)

local odlgv
local TO1,EF1,TA1

local nStyle1 := nOr( WS_POPUP, ;
WS_MAXIMIZE ) o


SELE 11
USE FACTURA


SUM factura->total to PTOTAL FOR factura->fecha >= desde .AND. factura->fecha <= hasta

? Ptotal
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Post by Willi Quintana »

Veamos,,,
En :
USE FACTURA
iNDEX on factura->fecha to ddto
set index to ddto

Seria mejor
USE FACTURA
iNDEX on DTOS(factura->fecha) to ddto
set index to ddto
...

Y en :
...
...
SUM factura->total to PTOTAL FOR factura->fecha >= desde .AND. factura->fecha <= hasta

trabajara mejor :
pTotal := 0
If DbSeek(desde)
WHILE factura->fecha >= desde .AND. factura->fecha <= hasta
pTotal := pTotal + factura->total
DbSkip()
ENDDO
EndIf
? Ptotal

Salu2
manuramos
Posts: 219
Joined: Mon Dec 26, 2005 7:25 pm
Location: Jerez de la Frontera (Spain)

Post by manuramos »

Es cierto, para indexar por fechas, o para comparar fechas hay que utilizar DTOS(). Las fechas por si solas no se comparan correctamente, pues creo que Clipper/FW las convierte a un tipo extraño de cadenas que según que fechas no las ordena correctamente.
Por lo tanto, además del índice: INDEX on DTOS(factura->fecha) to ddto

Tienes que utilizar valores Desde, Hasta tipo DTOS. Por ejemplo: Desde := DTOS(CTOD("01/01/2006")) y Hasta := DTOS(Date()).

Después intenta: SUM factura->total to PTOTAL FOR DTOS(factura->fecha) >= desde .AND. DTOS(factura->fecha) <= hasta

Debería funcionar, pero si no va bien, tendrás que utilizar un bucle DO WHILE como te sugiere Willi, pero con DTOS.
Es decir: WHILE DTOS(factura->fecha) >= desde .AND. DTOS(factura->fecha) <= hasta etc...

Suerte
Nos Gusta Programar
Post Reply