Carlos Mora wrote:Adriano,
Creo que el SET RELATION no te va a servir en este caso. Dependiendo del proceso tal vez te convenga conservar un consolidado por año como para ir dejando las cosas más o menos totalizadas, ya que los datos hasta el 2006 no cambian, o bien hacer una rutina que te arme un unico fichero de movimientos cada vez que haga falta..
Otra posibilidad sería una rutina que me arme en un temporal el mayor de cada cuenta, recorriendo todas las dbf's, algo mas o menos así:
dBCreate( cFile:= TmpFile( 'DBF' ), { estructura del movim } )
Use (cFile) Alias TempMov Exclusive New
For i:= 2 to Year(Date())%100
For j:= 1 to 12
If File( cMov:= 'MOV'+StrZero(j,2)+StrZero(i,2)+'.dbf' )
Use (cMov) Alias MOVMES Shared ReadOnly New
// Traspasar los movimientos
Close MOVMES
EndIf
EndFor
EndFor
Bueno, no está completo pero el resto seguro lo puedes manejar.
Un saludo,
Carlos
Gracias Carlos Mora, es mas o menos parecido a la rutina o proceso como usted indica, pero mientras mas base de datos se vaya creando cada mes, mas lento se hace al pedir movimientos de cuentas, en el reporte de balanza no hay problema porque se pide del mes actual, pero la primera parte no le entendi de conservar consolidado por año, en fin busco una rutina con mayor rapidez, aunque no queda de otra que seguir creando archivo temporal, por cada usuario que entre al sistema y con su respectivo clave, se crea la base de datos temporal, este es mi codigo, de como creo mi archivo temporal:
*****************************************************************
*----- TRASPASANDO AUXILIAR DE CUENTAS EN ARCHIVO TEMPORAL -----*
*****************************************************************
Dbf1Tmp := "EMP"+TSTR(xEMP)+TRIM("\R_AUXI"+nStation)+".DBF"
Ntx1Tmp := "EMP"+TSTR(xEMP)+TRIM("\R_AUXI"+nStation)+".NTX"
IF !FILE(Dbf1Tmp)
CreaDbf1 := {{"TIPO " , "C" , 2 , 0 } ,;
{"NUMPOL " , "N" , 5 , 0 } ,;
{"FHAMOV " , "D" , 8 , 0 } ,;
{"CUENTAS" , "C" , 12 , 0 } ,;
{"CTADETA" , "C" , 8 , 0 } ,;
{"REFERE " , "C" , 10 , 0 } ,;
{"CONCEP " , "C" , 60 , 0 } ,;
{"SALCARG" , "N" , 12 , 2 } ,;
{"SALCRED" , "N" , 12 , 2 }}
DbCreate(Dbf1Tmp,CreaDbf1)
USE (Dbf1Tmp) ALIAS TEMP EXCLUSIVE NEW SHARED
INDEX ON CUENTAS+DTOS(FHAMOV) TO (Ntx1Tmp)
SET INDEX TO (Ntx1Tmp)
ELSE
USE (Dbf1Tmp) ALIAS TEMP EXCLUSIVE
ZAP
INDEX ON CUENTAS+DTOS(FHAMOV) TO (Ntx1Tmp)
SET INDEX TO (Ntx1Tmp)
ENDIF
MA->(DbSEEK(cMA_Ini))
DO WHILE MA->ANOMES >= cMA_Ini .AND. MA->ANOMES <= cMA_Fin .AND. MA->(!EOF())
Mes_Per := VAL(SUBS((MA->AnoMes,3,2))
Ano_Per := VAL(SUBS((MA->AnoMes,1,2))
UsarDbf("MOVT"+Mes_Per+Ano_Per") // Use: MOVTxMxA.DBF
MOVT->(DbSetOrder(3))
MOVT->(DbGoTop())
MOVT->(SetSeek(CtaIni))
DO WHILE MOVT->(!EOF())
IF MOVT->MV_NCTA > CtaFin
EXIT
ENDIF
TEMP->(DbSeek(MOVT->MV_NCTA))
IF (MOVT->MV_CARG - MOVT->MV_ABON) <>0
TEMP->(DbAppend())
REPLACE TEMP->TIPO WITH MOVT->MV_TIPO ,;
TEMP->NUMPOL WITH MOVT->MV_NUMP ,;
TEMP->FHAMOV WITH MOVT->MV_FHAM ,;
TEMP->CUENTAS WITH MOVT->MV_NCTA ,;
TEMP->CTADETA WITH MOVT->(SUBS(MOVT->MV_NCTA,5,8)) ,;
TEMP->REFERE WITH MOVT->MV_REFE ,;
TEMP->CONCEP WITH MOVT->MV_CONC ,;
TEMP->SALCARG WITH MOVT->MV_CARG ,;
TEMP->SALCRED WITH MOVT->MV_ABON
ENDIF
MOVT->(DbSkip())
ENDDO
MA->(DbSkip())
Cierra_Dbf("MOVT"+Mes_Per+Ano_Per")
ENDDO
Es el procedimiento de barrer todas las bases de datos, desde el mes y año septiembre de 2002 o solo se pide el año actual, que no lleva mucho tiempo de proceso
Ya creado el archivo temporal, el siguiente codigo es donde procede a imprimir cuentas desde inicial al final, asi como mes y año inicial
Espero mas ayuda o experiencia, que alguien haya implementado programa de contabilidad .
Gracias Carlos Mora
Adriano