Vou dar uma pequena contribuiçäo:
1) cria uma funçäo que retorne todos os DBFs que vc usa, assim:
Código: Selecionar todos
vdbf:={}
dbfs()
Procedure dbfs
AAdd(vdbf,{'ABREVIA.DBF'})
AAdd(vdbf,{'ADITIVO.DBF'})
AAdd(vdbf,{'AF.DBF'})
AAdd(vdbf,{'AP.DBF'})
AAdd(vdbf,{'AUTSER.DBF'})
AAdd(vdbf,{'CDM.DBF'})
AAdd(vdbf,{'CLIENTES.DBF'})
AAdd(vdbf,{'COPIAD.DBF'})
AAdd(vdbf,{'CPU.DBF'})
AAdd(vdbf,{'CPUINS.DBF'})
AAdd(vdbf,{'CQP.DBF'})
AAdd(vdbf,{'CQPCPU.DBF'})
AAdd(vdbf,{'DESC_EPG.DBF'})
AAdd(vdbf,{'DESC_PER.DBF'})
AAdd(vdbf,{'DESEMB.DBF'})
AAdd(vdbf,{'DEST_LD.DBF'})
AAdd(vdbf,{'DET_IAP.DBF'})
AAdd(vdbf,{'DET_INS.DBF'})
AAdd(vdbf,{'DETMAP.DBF'})
AAdd(vdbf,{'DEVOLVE.DBF'})
AAdd(vdbf,{'DF.DBF'})
AAdd(vdbf,{'DF_AP.DBF'})
AAdd(vdbf,{'DIARIAS.DBF'})
AAdd(vdbf,{'DIGITADA.DBF'})
AAdd(vdbf,{'DOCEMP.DBF'})
AAdd(vdbf,{'DOCSOL.DBF'})
AAdd(vdbf,{'DOCUMENT.DBF'})
AAdd(vdbf,{'EMPRESA.DBF'})
AAdd(vdbf,{'EMPREST.DBF'})
AAdd(vdbf,{'ENTIDADE.DBF'})
AAdd(vdbf,{'EPG_AF.DBF'})
AAdd(vdbf,{'ETA_DOC.DBF'})
AAdd(vdbf,{'ETAPAS.DBF'})
AAdd(vdbf,{'EVENTOAF.DBF'})
AAdd(vdbf,{'EVENTOAP.DBF'})
AAdd(vdbf,{'FAM_CPU.DBF'})
AAdd(vdbf,{'FAMILIAS.DBF'})
AAdd(vdbf,{'FATORK.DBF'})
AAdd(vdbf,{'FON_CPU.DBF'})
AAdd(vdbf,{'FON_INS.DBF'})
AAdd(vdbf,{'FON_PRE.DBF'})
AAdd(vdbf,{'FORMAP.DBF'})
AAdd(vdbf,{'FORNECED.DBF'})
AAdd(vdbf,{'GER_OBR.DBF'})
AAdd(vdbf,{'IMP_AF.DBF'})
AAdd(vdbf,{'IMP_AP.DBF'})
AAdd(vdbf,{'IMP_DF.DBF'})
AAdd(vdbf,{'IMPI_AF.DBF'})
AAdd(vdbf,{'IMPI_AP.DBF'})
AAdd(vdbf,{'IMPOSTOS.DBF'})
AAdd(vdbf,{'INDICES.DBF'})
AAdd(vdbf,{'INS_AF.DBF'})
AAdd(vdbf,{'INS_AP.DBF'})
AAdd(vdbf,{'INS_PER.DBF'})
AAdd(vdbf,{'INSFOR.DBF'})
AAdd(vdbf,{'INSUMOS.DBF'})
AAdd(vdbf,{'ITE_CONT.DBF'})
AAdd(vdbf,{'ITE_ENDE.DBF'})
AAdd(vdbf,{'ITE_PRJ.DBF'})
AAdd(vdbf,{'ITEM_AF.DBF'})
AAdd(vdbf,{'ITEM_EPG.DBF'})
AAdd(vdbf,{'LD.DBF'})
AAdd(vdbf,{'MAPA.DBF'})
AAdd(vdbf,{'MED_EPG.DBF'})
AAdd(vdbf,{'MENSAIS.DBF'})
AAdd(vdbf,{'MUD_ORC.DBF'})
AAdd(vdbf,{'NFSR.DBF'})
AAdd(vdbf,{'OBRAS.DBF'})
AAdd(vdbf,{'OBSERV.DBF'})
AAdd(vdbf,{'OBSPLA.DBF'})
AAdd(vdbf,{'ORCAMENT.DBF'})
AAdd(vdbf,{'PASSWORD.DBF'})
AAdd(vdbf,{'PERMIS.DBF'})
AAdd(vdbf,{'PLADOC.DBF'})
AAdd(vdbf,{'PLANEJA.DBF'})
AAdd(vdbf,{'PREC_CPU.DBF'})
AAdd(vdbf,{'PREC_INS.DBF'})
AAdd(vdbf,{'PRECED.DBF'})
AAdd(vdbf,{'PROJETOS.DBF'})
AAdd(vdbf,{'REA_AF.DBF'})
AAdd(vdbf,{'RESPONSA.DBF'})
AAdd(vdbf,{'SOLICIT.DBF'})
AAdd(vdbf,{'TAREFAS.DBF'})
AAdd(vdbf,{'TEMA_DOC.DBF'})
AAdd(vdbf,{'TIPO_DOC.DBF'})
AAdd(vdbf,{'TIPOSDOC.DBF'})
AAdd(vdbf,{'UNIDADE.DBF'})
AAdd(vdbf,{'VAL_AF.DBF'})
Return
2) depois cria outra que retorne seus índices, assim:
Código: Selecionar todos
Function cdxs
Parameters marq
Do Case
Case marq=='ABREVIA'
aadd(v_cdx,{"cod_abr"})
aadd(v_cdx,{"desc"})
Case marq=='ADITIVO'
aadd(v_cdx,{"cod_obra+num_adt"})
Case marq=='AF'
aadd(v_cdx,{"cod_obra+cod_af"})
aadd(v_cdx,{"cod_obra+dtos(data)"}) // customizado
aadd(v_cdx,{"cod_obra+item+dtos(data)"}) // customizado
aadd(v_cdx,{"cod_obra+cod_for+dtos(data)"}) // customizado
aadd(v_cdx,{"cod_obra+num_ped"})
aadd(v_cdx,{"num_ped"})
Case marq=='AP'
aadd(v_cdx,{"cod_obra+cod_af+cod_ap"})
aadd(v_cdx,{"cod_obra+dtos(data)"}) // customizado
aadd(v_cdx,{"grap"})
Case marq=='AUTSER'
aadd(v_cdx,{"cod_obra+item"})
aadd(v_cdx,{"cod_obra+cod_as+item"})
Case marq=='CDM'
aadd(v_cdx,{"cdm"})
aadd(v_cdx,{"desc1"})
Case marq=='CLIENTES'
aadd(v_cdx,{"cod_cli"})
aadd(v_cdx,{"nome"})
Case marq=='COPIAD'
aadd(v_cdx,{"dtos(data)"}) // customizado
Case marq=='CPU'
aadd(v_cdx,{"cod_cpu"})
aadd(v_cdx,{"desc1+desc2"})
//aadd(v_cdx,{"desc1i+desc2i"}) saiu em 16/03/2008 pois nao tava sendo usado por nenhum programa
//aadd(v_cdx,{"cod_fam+cod_cpu"}) saiu em 16/03/2008 pois nao tava sendo usado por nenhum programa
Case marq=='CPUINS'
aadd(v_cdx,{"cod_cpu+cod_ins+qual_fon"})
aadd(v_cdx,{"cod_ins+qual_fon"})
aadd(v_cdx,{"cod_cpu+qual_fon+cod_ins"})
Case marq=='CQP'
aadd(v_cdx,{"cqp"})
aadd(v_cdx,{"desc1"})
Case marq=='CQPCPU'
aadd(v_cdx,{"cod_cpu+cqp"})
Case marq=='DESC_EPG'
aadd(v_cdx,{"cod_obra+cod_af+periodo"})
Case marq=='DESC_PER'
aadd(v_cdx,{"cod_obra+periodo"})
Case marq=='DESEMB'
aadd(v_cdx,{"cod_obra+versao+cod_ins+item"})
Case marq=='DEST_LD'
aadd(v_cdx,{"cod_lis+st_dest+codigo"})
Case marq=='DET_IAP'
aadd(v_cdx,{"cod_obra+cod_af+cod_ap+tipo+numero+cod_ins1+cod_ins2"})
aadd(v_cdx,{"cod_obra+cod_af+cod_ins1+cod_ins2"})
Case marq=='DET_INS'
aadd(v_cdx,{"cod_obra+cod_af+cod_ins1+cod_ins2"})
aadd(v_cdx,{"cod_obra+cod_ins1+cod_ins2"})
Case marq=='DEVOLVE'
aadd(v_cdx,{"cod_grd+cod_doc+nr_rev+dtos(data)"}) // customizado
aadd(v_cdx,{"cod_doc+nr_rev+cod_grd"})
Case marq=='DF'
aadd(v_cdx,{"tipo"})
Case marq=='DF_AP'
aadd(v_cdx,{"cod_obra+cod_af+cod_ap+tipo+numero"})
aadd(v_cdx,{"cod_obra+tipo+numero+cod_af+cod_ap"})
aadd(v_cdx,{"cod_obra+cod_af+cod_for+tipo+numero"})
Case marq=='DIARIAS'
aadd(v_cdx,{"cod_ind+dtos(data)"}) // customizado
Case marq=='DIGITADA'
aadd(v_cdx,{"cod_obra+dtos(data)+hora"}) // customizado
aadd(v_cdx,{"cod_obra+item"})
Case marq=='DOCEMP'
aadd(v_cdx,{"cod_grd+cod_doc+nr_rev"})
aadd(v_cdx,{"cod_doc+nr_rev+cod_grd"})
Case marq=='DOCSOL'
aadd(v_cdx,{"cod_sol+cod_doc+nr_rev"})
aadd(v_cdx,{"grc+num_seq"})
aadd(v_cdx,{"cod_doc+nr_rev"})
aadd(v_cdx,{"doc_ret+rev_ret"})
Case marq=='DOCUMENT'
aadd(v_cdx,{"cod_doc+nr_rev"})
aadd(v_cdx,{"doc_origem+rev_doc"})
aadd(v_cdx,{"cod_end+cod_doc+nr_rev"})
aadd(v_cdx,{"cod_end2+cod_doc+nr_rev"})
aadd(v_cdx,{"cod_end3+cod_doc+nr_rev"})
aadd(v_cdx,{"cod_doc+myind(nr_rev)"}) // customizado
Case marq=='EMPRESA'
Case marq=='EMPREST'
aadd(v_cdx,{"cod_grd"})
aadd(v_cdx,{"responsave"})
aadd(v_cdx,{"dtos(data)+cod_grd"}) // customizado
Case marq=='ENTIDADE'
aadd(v_cdx,{"cod_ent"})
Case marq=='EPG_AF'
aadd(v_cdx,{"cod_obra+cod_af+cod_epg"})
Case marq=='ETAPAS'
aadd(v_cdx,{"cod_eta"})
Case marq=='ETA_DOC'
aadd(v_cdx,{"cod_doc+nr_rev+cod_eta"})
aadd(v_cdx,{"cod_eta+cod_doc+nr_rev"})
Case marq=='EVENTOAF'
aadd(v_cdx,{"cod_obra+cod_af+dtos(data)"}) // customizado
aadd(v_cdx,{"cod_obra+dtos(data)+cod_af"}) // customizado
Case marq=='EVENTOAP'
aadd(v_cdx,{"cod_obra+cod_af+cod_ap+dtos(data)"}) // customizado
aadd(v_cdx,{"cod_obra+dtos(data)+cod_af"}) // customizado
aadd(v_cdx,{"cod_obra+cod_af+dtos(data_af)"}) // customizado
Case marq=='FAMILIAS'
aadd(v_cdx,{"cod_fam"})
aadd(v_cdx,{"desc"})
Case marq=='FAM_CPU'
aadd(v_cdx,{"cod_fam"})
aadd(v_cdx,{"desc"})
Case marq=='FATORK'
aadd(v_cdx,{"cod_obra+versao+cod_ins"})
Case marq=='FON_CPU'
aadd(v_cdx,{"cod_cpu+qual_fon+cod_fon"})
aadd(v_cdx,{"qual_fon+cod_fon"})
Case marq=='FON_INS'
aadd(v_cdx,{"cod_ins+qual_fon+cod_fon"})
aadd(v_cdx,{"qual_fon+cod_fon"})
Case marq=='FON_PRE'
aadd(v_cdx,{"cod_fon"})
Case marq=='FORNECED'
aadd(v_cdx,{"cod_for"})
aadd(v_cdx,{"nome"})
Case marq=='GER_OBR'
aadd(v_cdx,{"obrao"})
Case marq=='IMPI_AF'
aadd(v_cdx,{"cod_obra+cod_af+sigla1+sigla2"})
Case marq=='IMPI_AP'
aadd(v_cdx,{"cod_obra+cod_af+cod_ap+sigla1+sigla2"})
Case marq=='IMPOSTOS'
aadd(v_cdx,{"sigla"})
Case marq=='IMP_AF'
aadd(v_cdx,{"cod_obra+cod_af+sigla"})
Case marq=='IMP_AP'
aadd(v_cdx,{"cod_obra+cod_af+cod_ap+sigla"})
Case marq=='IMP_DF'
aadd(v_cdx,{"cod_obra+cod_af+cod_ap+tipo+numero+sigla"})
Case marq=='INDICES'
aadd(v_cdx,{"cod_ind"})
Case marq=='INSUMOS'
aadd(v_cdx,{"cod_ins"})
aadd(v_cdx,{"cod_reut"})
aadd(v_cdx,{"cod_fam+cod_ins"})
aadd(v_cdx,{"desc1+desc2"})
//aadd(v_cdx,{"desc1i+desc2i"}) saiu em 16/03/2008 pois nao tava sendo usado por nenhum programa
Case marq=='INS_AF'
aadd(v_cdx,{"cod_obra+cod_af+cod_ins+item"})
aadd(v_cdx,{"cod_obra+cod_ins+item"})
aadd(v_cdx,{"cod_obra+cod_af+item"})
aadd(v_cdx,{"cod_obra+item"})
aadd(v_cdx,{"cod_ins"})
Case marq=='INS_AP'
aadd(v_cdx,{"cod_obra+cod_af+cod_ap+tipo+numero+cod_ins+item"}) // entrou item em 13/03/2008
aadd(v_cdx,{"cod_obra+cod_af+cod_ins+item"})
aadd(v_cdx,{"cod_obra+cod_af+cod_ap+tipo+numero+item"})
aadd(v_cdx,{"cod_obra+cod_af+item"})
aadd(v_cdx,{"cod_obra+item"})
Case marq=='INS_PER'
aadd(v_cdx,{"cod_cpu+cod_ins+cod_inc+qual_fon"})
aadd(v_cdx,{"cod_inc"})
aadd(v_cdx,{"cod_cpu+cod_ins+qual_fon+cod_inc"})
Case marq=='ITE_CONT'
aadd(v_cdx,{"cod_prj+nivel+item_nivel"})
Case marq=='ITE_ENDE'
aadd(v_cdx,{"nivel+item_nivel"})
Case marq=='ITE_PRJ'
aadd(v_cdx,{"cod_prj+nivel+item_nivel"})
Case marq=='ITEM_AF'
aadd(v_cdx,{"cod_obra+cod_af+item"})
aadd(v_cdx,{"cod_obra+item"})
Case marq=='ITEM_EPG'
aadd(v_cdx,{"cod_obra+cod_af+cod_epg+item"})
aadd(v_cdx,{"cod_obra+item"})
Case marq=='LD'
aadd(v_cdx,{"cod_lis"})
Case marq=='MED_EPG'
aadd(v_cdx,{"cod_obra+cod_af+cod_epg+periodo"})
Case marq=='MENSAIS'
aadd(v_cdx,{"cod_ind+ano+mes"})
Case marq=='MUD_ORC'
aadd(v_cdx,{"cod_obra+periodo+item"})
aadd(v_cdx,{"cod_obra+item+periodo"})
Case marq=='NFSR'
aadd(v_cdx,{"cod_obra+cod_af+cod_ap+tipo+numero+tiposr+numerosr"})
Case marq=='OBRAS'
aadd(v_cdx,{"cod_obra+versao"})
aadd(v_cdx,{"num_doc"})
aadd(v_cdx,{"cod_prj+cod_obra+versao"})
Case marq=='OBSERV'
aadd(v_cdx,{"cod_cpu"})
aadd(v_cdx,{"cod_ins"})
aadd(v_cdx,{"cod_obra+versao+item"})
Case marq=='OBSPLA'
aadd(v_cdx,{"cod_obra+item"})
Case marq=='ORCAMENT'
aadd(v_cdx,{"cod_obra+versao+item"})
aadd(v_cdx,{"cod_cpu+cod_obra+versao+item"})
aadd(v_cdx,{"cod_obra+versao+cod_cpu"})
//aadd(v_cdx,{"cod_cpu"}) saiu em 16/03/2008 para usar a TAG 2 (so orc130.prg usava)
Case marq=='PASSWORD'
aadd(v_cdx,{"usuario"})
Case marq=='PERMIS'
aadd(v_cdx,{"usuario+modulo"})
Case marq=='PLADOC'
aadd(v_cdx,{"cod_doc+nr_rev"})
aadd(v_cdx,{"st_origem+cod_origem"})
Case marq=='PLANEJA'
aadd(v_cdx,{"cod_obra+versao+item"})
Case marq=='PRECED'
aadd(v_cdx,{"cod_obra+versao+cod_ins+item"})
Case marq=='PREC_CPU'
aadd(v_cdx,{"cod_cpu+ano_mes+qual_fon"})
aadd(v_cdx,{"ano_mes"})
Case marq=='PREC_INS'
aadd(v_cdx,{"cod_ins+ano_mes+qual_fon"})
aadd(v_cdx,{"ano_mes"})
Case marq=='PROJETOS'
aadd(v_cdx,{"cod_prj"})
aadd(v_cdx,{"cod_cli+substr(cod_prj,3)+substr(cod_prj,1,2)"}) // customizado
aadd(v_cdx,{"substr(cod_prj,3)+substr(cod_prj,1,2)"}) // customizado
Case marq=='REA_AF'
aadd(v_cdx,{"cod_obra+cod_af+dtos(data)"}) // customizado
Case marq=='VAL_AF'
aadd(v_cdx,{"cod_obra+cod_af+item+dtos(data)"}) // customizado
aadd(v_cdx,{"cod_obra+item"})
aadd(v_cdx,{"cod_obra+cod_af+item+cod_ins+dtos(data)"}) // customizado
Case marq=='RESPONSA'
aadd(v_cdx,{"num_doc"})
aadd(v_cdx,{"nome"})
Case marq=='SOLICIT'
aadd(v_cdx,{"cod_sol"})
aadd(v_cdx,{"st_dest+codigo"})
Case marq=='TAREFAS'
aadd(v_cdx,{"cod_doc+nr_rev+dtos(inicio)"}) // customizado
Case marq=='TEMA_DOC'
aadd(v_cdx,{"cod_tema"})
Case marq=='TIPOSDOC'
aadd(v_cdx,{"cod_doc+nr_rev+dtos(data)"}) // customizado
Case marq=='TIPO_DOC'
aadd(v_cdx,{"cod_tipo"})
Case marq=='UNIDADE'
aadd(v_cdx,{"unidade"})
Case marq=='MAPA'
aadd(v_cdx,{"cod_map"})
Case marq=='FORMAP'
aadd(v_cdx,{"cod_map+cod_for"})
Case marq=='DETMAP'
aadd(v_cdx,{"cod_map+cod_ins+item"})
Case marq=='INSFOR'
aadd(v_cdx,{"cod_map+cod_ins+cod_for"})
EndCase
Return
3) depois cria outra que diga pro seu sistema quais arquivos abrir qando vc entrar em deerminada rotina ou módulo de seu sistema, assim:
Código: Selecionar todos
function AbrirDbfs
para mprograma
local x,y,va:={}
mprograma=alltrim(lower(mprograma))
do case
case mprograma="orc010()"
aadd(va,{"AF"})
aadd(va,{"CLIENTES"})
aadd(va,{"FON_PRE"})
aadd(va,{"FORNECED"})
aadd(va,{"INDICES"})
aadd(va,{"OBRAS"})
aadd(va,{"ORCAMENT"})
aadd(va,{"PLANEJA"})
aadd(va,{"PROJETOS"})
aadd(va,{"RESPONSA"})
case mprograma="orc020()"
aadd(va,{"ABREVIA"})
aadd(va,{"AF"})
...
bla .. bla.. bla..
...
endcase
return(va)
4) no incio do seu sistema e na entrada de cada módulo ou rotina vc faz assim:
Código: Selecionar todos
function abrir
para mexclusivo,mindexar,mlimpar,va
local nomeDBF,nomeCDX,x,y
private v_cdx:={}
// para poder indexar corretamente campos acentuados
REQUEST HB_CODEPAGE_PT850
HB_SETCODEPAGE( "PT850" )
if !mindexar
preencheSB("Abrindo Arquivos ...")
endif
for x=1 to len(va)
nomeDBF=strtran(va[x,1],".DBF","")
SELECT 0
if netuse(nomeDBF,mexclusivo,20)
v_cdx:={}
cdxs(nomeDBF)
if len(v_cdx)#0
if mindexar
pack
for y=1 to len(v_cdx)
nomeCDX=nomeDBF+strzero(y,2)
GTprocessmessages()
OrdCreate( nomeDBF, nomeCDX, v_cdx[y,1])
next
use
else
OrdListAdd( nomeDBF )
endif
else
if mindexar .or. mlimpar
use
endif
endif
else
close databases
return(.f.)
endif
next
if !mindexar
restauraSB()
endif
return(.t.)
assim sempre que vc mexer em algum índice ou arquivo basta mexer nas funçöes que os definam