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






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
RuFer
Posts: 140
Joined: Sat Oct 08, 2005 5:16 pm
Location: Uruguay

Post by RuFer »

Fabian:

Prueba a hacer el índice de fecha dtos(fecha)
Sele 11
USE FACTURA
iNDEX on dtos(fecha) to ddto
set index to ddto


Saludos

Ruben Fernandez.
fleal
Posts: 234
Joined: Tue Oct 25, 2005 12:39 am
Location: México, DF

yo lo haría asi

Post by fleal »

// De ésta manera recorres toda la base de FACTURA.

function vdm(desde,hasta,odlg1,ofont)

local nTotal := 0

FACTURA->( dbgotop() )

while FACTURA->( !eof() )
if FACTURA->FECHA >= desde AND FACTURA->FECHA <= hasta
nTotal+= FECHA->TOTAL
endif
FACTURA->( dbskip() )
enddo

?nTotal


// De ésta otra manera, como tienes FACTURA indexado por FECHA entonces primero hago una busqueda para ver si hay fechas, sino para que barrer toda la base

function vdm(desde,hasta,odlg1,ofont)
local dBus := desde
local nTotal := 0
local lExiste := FALSE


while dBus <= hasta
FACTURA->( dbgotop() )
if FACTURA->( dbseek( dBus ) )
lExiste := TRUE
exit
endif
dBus++
enddo

if !lExiste
msgstop("No hay registros en el rango de fechas","Aviso)
endif


// a partir de aquí como ya está posicionado en la primera fecha que halló, solo voy sumando el TOTAL

while FACTURA->( !eof() )
if FACTURA->FECHA >= desde AND FACTURA->FECHA <= hasta
nTotal+= FECHA->TOTAL
endif
FACTURA->( dbskip() )
enddo

?nTotal


Saludos
Fernando Leal
User avatar
Raymundo Islas M.
Posts: 590
Joined: Tue Mar 14, 2006 11:34 pm
Location: Acapulco, Gro. MEXICO

Post by Raymundo Islas M. »

Hola

Otra opcion :

Teniendo la base indexada por fecha con el DtoS()

Puedes hacer un ciclo :

For dFecha := dFechIni TO dFechFin
XBase->( DbSeek( DtoS( dFecha ) ) )
IF XBase( Found() )
While XBase->FechCampo == dFecha .AND. XBase->( !Eof() )
nVarTot += XBase->CampTotal
XBase->( DbSkip() )
EndDo
NEXT

No me ha fallado a mi .... :wink:


Espero te sirva


SALUDOS
FWH 10.6 + xHarbour + Borland 582
Post Reply