Ordscope() ¿Tiene alguna limitación?
Moderator: Rathinagiri
Ordscope() ¿Tiene alguna limitación?
El tema es asi:
En una grilla quiero mostrar las ventas realizadas por un rango de clientes, un rango de vendedores y en un determinado período. Para eso tengo una tabla STVE.DBF que tiene un TAG (Es índice CDX) que es así:
INDEX ON zona+cliente+vendedor+Dtos(fecha) TAG stve1
El código del cliente está formado por 6 caracteres, 2 de la "zona" y 4 del "cliente", o sea en la tabla puedo tener algo así
zona cliente vendedor fecha
06 0000 01 05/01/2014
asumiendo el siguiente filtro hago lo siguiente:
DesCli:="060000"
HasCli:="069999"
DesVen:="01"
HasVen:="02"
DesFec:=ctod( "01/01/2014" )
HasFec:=ctod( "31/01/2014" )
select stve
ordsetfocus(1)
ordscope(0,DesCli +DesVen +Dtos( DesFec ) )
ordscope(1,HasCli +HasVen +Dtos( HasFec ) )
go top
....
y en la grilla me muestra bien el rango de clientes y vendedores seleccionados, pero mal las fechas. Por las dudas aclaro que en el programa principal tengo:
SET DATE FRENCH
por el tema de que la fecha tiene el formato "DD/MM/YYYY"
Uso ORDSCOPE(), porque las tablas están en un servidor Windows 2008 server, y si hago un SET FILTER, el proceso se "duerme". Es como que el filtro llega a abarcar los códigos de Cliente y vendedor, pero no el de fecha. Por eso puse como título del post, si hay alguna limitación en el largo del filtro que se tiene que usar.
Antonio
Sistemas
Resipol
En una grilla quiero mostrar las ventas realizadas por un rango de clientes, un rango de vendedores y en un determinado período. Para eso tengo una tabla STVE.DBF que tiene un TAG (Es índice CDX) que es así:
INDEX ON zona+cliente+vendedor+Dtos(fecha) TAG stve1
El código del cliente está formado por 6 caracteres, 2 de la "zona" y 4 del "cliente", o sea en la tabla puedo tener algo así
zona cliente vendedor fecha
06 0000 01 05/01/2014
asumiendo el siguiente filtro hago lo siguiente:
DesCli:="060000"
HasCli:="069999"
DesVen:="01"
HasVen:="02"
DesFec:=ctod( "01/01/2014" )
HasFec:=ctod( "31/01/2014" )
select stve
ordsetfocus(1)
ordscope(0,DesCli +DesVen +Dtos( DesFec ) )
ordscope(1,HasCli +HasVen +Dtos( HasFec ) )
go top
....
y en la grilla me muestra bien el rango de clientes y vendedores seleccionados, pero mal las fechas. Por las dudas aclaro que en el programa principal tengo:
SET DATE FRENCH
por el tema de que la fecha tiene el formato "DD/MM/YYYY"
Uso ORDSCOPE(), porque las tablas están en un servidor Windows 2008 server, y si hago un SET FILTER, el proceso se "duerme". Es como que el filtro llega a abarcar los códigos de Cliente y vendedor, pero no el de fecha. Por eso puse como título del post, si hay alguna limitación en el largo del filtro que se tiene que usar.
Antonio
Sistemas
Resipol
Antonio
Sistemas
Resipol
Sistemas
Resipol
-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Ordscope() ¿Tiene alguna limitación?
Hola citro,
Yo lo he hecho así:
Fechas + zona+cliente+vendedor
ya que en en general lo que estas haciendo es consultar:
1.- En un rango determinado de fechas
2.- De una determinada Zona
3.- De un determinado Cliente
4.- de un determinado vendedor.
Y sale sin problemas!
Espero te sirva!
Saludos
Yo lo he hecho así:
Fechas + zona+cliente+vendedor
ya que en en general lo que estas haciendo es consultar:
1.- En un rango determinado de fechas
2.- De una determinada Zona
3.- De un determinado Cliente
4.- de un determinado vendedor.
Y sale sin problemas!
Espero te sirva!
Saludos
-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Ordscope() ¿Tiene alguna limitación?
El indice principal debe ser por Fechas!
Saludos
Saludos
-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Ordscope() ¿Tiene alguna limitación?
Hola ,
También podría ser:
zona + fecha + cliente + vendedor
06 05/01/2014 0000 01
Saludos
También podría ser:
zona + fecha + cliente + vendedor
06 05/01/2014 0000 01
Saludos
Re: Ordscope() ¿Tiene alguna limitación?
Hola Javier, Gracias por las respuestas. Ayer a la tarde me fue imposible probar lo que me sugeriste, recién hoy pude ver los mensajes. Probé de las 2 formas pero ninguna de las 2 me dió resultado. Igualmente decidí probar con un ejemplo compilable por cualquiera, en donde creo una tabla con los mismos campos que tiene la tabla del sistema que quiero filtrar, a la cual le agrego 6 registros, y cree los 2 tags según como me habias sugerido. El ejemplo compilable es este:
#include "hmg.ch"
Function Main
SET DATE FRENCH
REQUEST DBFCDX , DBFFPT
RDDSETDEFAULT( "DBFCDX" )
CreaTabla()
AgreDatos()
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 800 ;
HEIGHT 510 ;
TITLE 'Filtro con ORDSCOPE()' ;
ON RELEASE DbCloseAll() ;
MAIN
@ 10,10 GRID Grid_1 ;
WIDTH 770 ;
HEIGHT 200 ;
HEADERS {'Zona','Cliente','Vendedor','Fecha'} ;
WIDTHS {100,100,100,100};
VALUE { 1,1} ;
ROWSOURCE "stve" ;
COLUMNFIELDS { 'zona','cliente','vendedor','fecha' }
DEFINE BUTTON BUTTON1
ROW 260
COL 10
CAPTION 'Filtro'
ACTION FiltraTabla()
WIDTH 150
END BUTTON
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return
/***/
static Function FiltraTabla()
ordsetfocus(2)
DesFec:=ctod( "01/10/2013" )
HasFec:=ctod( "31/10/2013" )
DesVen:="19"
HasVen:="20"
DesZona:="06"
HasZona:="06"
DesCli:="0000"
HasCli:="9999"
ordscope( 0,DesZona +Dtos( DesFec ) +DesCli +DesVen )
ordscope( 1,HasZona +Dtos( HasFec ) +HasCli +HasVen )
go top
Form_1.Grid_1.Refresh
Return Nil
/***/
static Function CreaTabla()
local aEstru
aEstru:={ { "zona","C",2,0 },;
{ "cliente","C",4,0 },;
{ "fecha","D",8,0 },;
{ "vendedor","C",2,0 }}
DbCreate( "stve",aEstru )
use stve exclusive new
index on Dtos( fecha ) +zona +cliente +vendedor tag STVE
index on zona +Dtos(fecha) +cliente +vendedor tag STVEZO
retu Nil
static Function AgreDatos()
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0057"
stve->fecha :=ctod( "08/10/2013" )
stve->vendedor:="20"
stve->( DbAppend() )
stve->zona :="02"
stve->cliente :="0855"
stve->fecha :=ctod( "09/10/2013" )
stve->vendedor:="14"
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0628"
stve->fecha :=ctod( "10/09/2013" )
stve->vendedor:="19"
stve->( DbAppend() )
stve->zona :="10"
stve->cliente :="0019"
stve->fecha :=ctod( "11/10/2013" )
stve->vendedor:="03"
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0020"
stve->fecha :=ctod( "12/10/2013" )
stve->vendedor:="19"
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0821"
stve->fecha :=ctod( "02/10/2013" )
stve->vendedor:="07"
retu Nil
El que más se acerca al filtro es el orden que va por zona +Dtos(fecha) +cliente +vendedor, pero termina mostrando un movimiento del vendedor "07".
#include "hmg.ch"
Function Main
SET DATE FRENCH
REQUEST DBFCDX , DBFFPT
RDDSETDEFAULT( "DBFCDX" )
CreaTabla()
AgreDatos()
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 800 ;
HEIGHT 510 ;
TITLE 'Filtro con ORDSCOPE()' ;
ON RELEASE DbCloseAll() ;
MAIN
@ 10,10 GRID Grid_1 ;
WIDTH 770 ;
HEIGHT 200 ;
HEADERS {'Zona','Cliente','Vendedor','Fecha'} ;
WIDTHS {100,100,100,100};
VALUE { 1,1} ;
ROWSOURCE "stve" ;
COLUMNFIELDS { 'zona','cliente','vendedor','fecha' }
DEFINE BUTTON BUTTON1
ROW 260
COL 10
CAPTION 'Filtro'
ACTION FiltraTabla()
WIDTH 150
END BUTTON
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return
/***/
static Function FiltraTabla()
ordsetfocus(2)
DesFec:=ctod( "01/10/2013" )
HasFec:=ctod( "31/10/2013" )
DesVen:="19"
HasVen:="20"
DesZona:="06"
HasZona:="06"
DesCli:="0000"
HasCli:="9999"
ordscope( 0,DesZona +Dtos( DesFec ) +DesCli +DesVen )
ordscope( 1,HasZona +Dtos( HasFec ) +HasCli +HasVen )
go top
Form_1.Grid_1.Refresh
Return Nil
/***/
static Function CreaTabla()
local aEstru
aEstru:={ { "zona","C",2,0 },;
{ "cliente","C",4,0 },;
{ "fecha","D",8,0 },;
{ "vendedor","C",2,0 }}
DbCreate( "stve",aEstru )
use stve exclusive new
index on Dtos( fecha ) +zona +cliente +vendedor tag STVE
index on zona +Dtos(fecha) +cliente +vendedor tag STVEZO
retu Nil
static Function AgreDatos()
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0057"
stve->fecha :=ctod( "08/10/2013" )
stve->vendedor:="20"
stve->( DbAppend() )
stve->zona :="02"
stve->cliente :="0855"
stve->fecha :=ctod( "09/10/2013" )
stve->vendedor:="14"
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0628"
stve->fecha :=ctod( "10/09/2013" )
stve->vendedor:="19"
stve->( DbAppend() )
stve->zona :="10"
stve->cliente :="0019"
stve->fecha :=ctod( "11/10/2013" )
stve->vendedor:="03"
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0020"
stve->fecha :=ctod( "12/10/2013" )
stve->vendedor:="19"
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0821"
stve->fecha :=ctod( "02/10/2013" )
stve->vendedor:="07"
retu Nil
El que más se acerca al filtro es el orden que va por zona +Dtos(fecha) +cliente +vendedor, pero termina mostrando un movimiento del vendedor "07".
Antonio
Sistemas
Resipol
Sistemas
Resipol
-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Ordscope() ¿Tiene alguna limitación?
Hola citro,
A mi me funciona bien tu ejemplo:
Saludos
A mi me funciona bien tu ejemplo:
Saludos
-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Ordscope() ¿Tiene alguna limitación?
ok, ya vi, voy a checar!
Saludos
Saludos
-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Ordscope() ¿Tiene alguna limitación?
Hola citro,
Ya vi cual es el ERROR, creo, es que el del cliente "07" esta entre las fechas señaladas y OrdScope() toma ese rango de fechas y por eso el siguiente no lo descarta!.
Ya vi cual es el ERROR, creo, es que el del cliente "07" esta entre las fechas señaladas y OrdScope() toma ese rango de fechas y por eso el siguiente no lo descarta!.
-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Ordscope() ¿Tiene alguna limitación?
Hola Citro,
He pensado en una solución, pero creo que no hay de otra mas que crear una nueva Base de datos con los Registros Filtrados hasta el momento y de esta nueva DBF hacer un nuevo Filter. Y ya va a ser rápido ya que la nueva DBF va a estar en tu maquina!
Saludos
He pensado en una solución, pero creo que no hay de otra mas que crear una nueva Base de datos con los Registros Filtrados hasta el momento y de esta nueva DBF hacer un nuevo Filter. Y ya va a ser rápido ya que la nueva DBF va a estar en tu maquina!
Saludos
-
- Posts: 1275
- Joined: Tue Sep 03, 2013 4:22 am
- Location: Tecámac, México
Re: Ordscope() ¿Tiene alguna limitación?
Hola Citro,
Asi quedo
Saludos
Asi quedo
Code: Select all
#include "hmg.ch"
Function Main
PRIVATE aDB
SET DATE FRENCH
REQUEST DBFCDX , DBFFPT
RDDSETDEFAULT( "DBFCDX" )
CreaTabla()
AgreDatos()
DEFINE WINDOW Form_1 ;
AT 0,0 ;
WIDTH 1000 ;
HEIGHT 510 ;
TITLE 'Filtro con ORDSCOPE()' ;
ON RELEASE DbCloseAll() ;
MAIN
@ 10,10 GRID Grid_1 ;
WIDTH 450 ;
HEIGHT 200 ;
HEADERS {'Zona','Vendedor','Fecha','Cliente'} ;
WIDTHS {100,100,100,100};
VALUE { 1,1} ;
ROWSOURCE "stve" ;
COLUMNFIELDS { 'zona','vendedor','fecha','cliente' }
@ 10,470 GRID Grid_2 ;
WIDTH 450 ;
HEIGHT 200 ;
HEADERS {'Zona','Vendedor','Fecha','Cliente'} ;
WIDTHS {100,100,100,100};
VALUE { 1,1} ;
ROWSOURCE "MiDB" ;
COLUMNFIELDS { 'zona','vendedor','fecha','cliente' }
DEFINE BUTTON BUTTON1
ROW 260
COL 10
CAPTION 'Filtro'
ACTION FiltraTabla()
WIDTH 150
END BUTTON
END WINDOW
CENTER WINDOW Form_1
ACTIVATE WINDOW Form_1
Return
/***/
static Function FiltraTabla()
LOCAL nItems
ordsetfocus(1)
DesFec:=ctod( "01/10/2013" )
HasFec:=ctod( "31/10/2013" )
DesVen:="19"
HasVen:="20"
DesZona:="06"
HasZona:="06"
DesCli:="0000"
HasCli:="9999"
ordscope( 0,DesZona +Dtos( DesFec ) + DesVen + DesCli )
ordscope( 1,HasZona +Dtos( HasFec ) + HasVen + HasCli )
go top
DO WHILE !EOF()
MiDB->(dbAppend())
MiDB->Zona := stve->Zona
MiDB->Fecha := stve->Fecha
MiDB->Vendedor:= stve->Vendedor
MiDB->Cliente := stve->Cliente
stve->(DBSKIP())
END DO
Select("MiDB")
ordscope( 2,DesVen )
ordscope( 3,HasVen )
DBSELECTAREA(1)
Form_1.Grid_2.Refresh
Return Nil
/***/
static Function CreaTabla()
local aEstru
aEstru:={ { "zona","C",2,0 },;
{ "cliente","C",4,0 },;
{ "fecha","D",8,0 },;
{ "vendedor","C",2,0 }}
aDB := aEstru
DbCreate( "stve",aEstru )
DbCreate( "MiDB",aDB )
use MiDB new shared
index on vendedor tag MiDB
use stve new shared
*index on Dtos( fecha ) +zona +cliente +vendedor tag STVE
index on zona + DToS(fecha) + vendedor + cliente tag STVEZO
retu Nil
static Function AgreDatos()
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0057"
stve->fecha :=ctod( "08/10/2013" )
stve->vendedor:="20"
stve->( DbAppend() )
stve->zona :="02"
stve->cliente :="0855"
stve->fecha :=ctod( "09/10/2013" )
stve->vendedor:="14"
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0628"
stve->fecha :=ctod( "10/09/2013" )
stve->vendedor:="19"
stve->( DbAppend() )
stve->zona :="10"
stve->cliente :="0019"
stve->fecha :=ctod( "11/10/2013" )
stve->vendedor:="03"
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0020"
stve->fecha :=ctod( "12/10/2013" )
stve->vendedor:="19"
stve->( DbAppend() )
stve->zona :="06"
stve->cliente :="0821"
stve->fecha :=ctod( "02/10/2013" )
stve->vendedor:="07"
retu Nil