Pensei em separar cada cadastro em um arquivo diferente, ou usar o mesmo arquivo em ALIAS diferentes e com filtro.
Mas trabalhando com DBFs, não sei se isso seria problema pro Harbour: abertura de arquivos em rede se tornar lenta, usar mesmo arquivo em alias diferentes ter problema de execucão, etc.
Será o aumento de uns 100 arquivos no sistema, ou 200 contando os CDXs.
O que indicam? Deixar como está, ou dividir de uma dessas formas pra não ter problemas com Harbour?
Por enquanto fiz este teste e funciona.
Neste exemplo, jptabel contém as tabelas de cst de icms, ipi, pis e cofins, indicado pelo campo AXTABELA.
Código: Selecionar todos
PROCEDURE Main
REQUEST SIXCDX
RddSetDefault( "SIXCDX" )
SET EXCLUSIVE OFF
IF .NOT. OpenDatabases( { "jpregra", "jpicmcst", "jpipicst", "jppiscst", "jpcofcst" } )
QUIT
ENDIF
FOR nCont = 1 TO 1000
SELECT (nCont)
IF .NOT. Empty( Alias() )
? Alias()
ENDIF
NEXT
RETURN NIL
STATIC FUNCTION OpenDatabases( aFiles )
LOCAL nCont, lOk := .t.
FOR nCont = 1 To Len( aFiles )
IF .Not. OpenDbf( aFiles[ nCont ] )
lOK := .f.
EXIT
ENDIF
NEXT
RETURN lOk
STATIC FUNCTION OpenDbf( cAliasName )
LOCAL lOk := .t., nSelect
LOCAL cDbfName := ""
LOCAL cFilter := ""
DO CASE
CASE cAliasName == "jpregra"
cDbfName := "jpimpos"
cFilter := ""
CASE cAliasName == "jpicmcst"
cDbfName := "jptabel"
cFilter := "Val(jpicmcst->axTabela) == 2"
CASE cAliasName == "jpipicst"
cDbfName := "jptabel"
cFilter := "Val(jpipicst->axTabela) == 7"
CASE cAliasName == "jppiscst"
cDbfName := "jptabel"
cFilter := "Val(jppiscst->axTabela) == 14"
CASE cAliasName == "jpcofcst"
cDbfName := "jptabel"
cFilter := "Val(jpcofcst->axTabela) == 16"
OTHERWISE
lOk := .f.
ENDCASE
IF lOk
nSelect := Select( cAliasName )
SELECT ( nSelect )
USE (cDbfName) ALIAS (cAliasName)
SET INDEX TO (cDbfName)
SET FILTER TO &( cFilter )
GOTO BOTTOM
ENDIF
RETURN lOk


