Manuel
Te comento como lo tengo hecho y ves si te sirve.
En una Ficha ingreso todos los datos, hago los calculos, validaciones. Etc.
En el boton acceptar hago las grabaciones (Todas manualmente)
Archivo Cuentas Corrientes, Cheques, Caja, Stock, IVA, etc
Podes cargar los datos de la cabecera usando variables, LOC:IdCliente, LOC:FechaEmision, LOC:FechaVence, etc y al detalle en una Queue
! Para cargar una Queue. Aca cargo los comporbantes de un cliente
QResumen se llamara la Queue
AC2:Cliente = CodClie
SET(AC2:KeyCliente,AC2:KeyCliente)
LOOP UNTIL Access:ACLIE002.Next() OR AC2:Cliente Not = CodClie
! Lee a partir del primer registro todos los de ese cliente y cargo la queue
I# += 1
QR:FecEmi = AC2:Fecemi
QR:FecVen = AC2:Fecven
QR:Letra = AC2:Letcom
QR:Puesto = AC2:Ptocom
QR:Numero = AC2:Nrocom
QR:Debe = AC2:Debe
QR:Haber = AC2:Haber
QR:Saldo += QR:Debe - QR:Haber
ADD(QResumen,I#)
IF ERRORCODE() THEN STOP(ERROR()).
END !Loop
! Para ordenarla por numero, podes usar varios campos para el ordenamiento
SORT (QResumen,QR:Numero) ! aca usamos nada mas que por numero
! Para leer los datos almacenados en una queue
Loop I#= 1 to Records(QResumen)
Get(QResumen,I#) ! Lee
Print(RPT:Detail) ! Podes imprimir hacer calculos y leer y actualizar archivos
End
! Para agregar a una queue
ADD(QResumen,I#)
IF ERRORCODE() THEN STOP(ERROR()).
! Modificar un reg de la queue: (antes lo tenes que leer con GET)
PUT(QResumen,I#)
IF ERRORCODE() THEN STOP(ERROR()).
! Borrar un reg de la queue: (Tambien tenes que leerlo antes)
DEL(QResumen,I#)
IF ERRORCODE() THEN STOP(ERROR()).
ARCHIVOS
Para grabar :
IF ACCESS:VENTAS.INSERT()
MESSAGE('NO GRABA VENTAS','Mensaje del Sistema',ICON:Exclamation)
END
! Para Modificar (antes lo debes haber podido leer)
AS1:IdSocio = QUE:IdSocio
IF Access:Socios.Fetch(S1KeyIdSocio) !Lee
MESSAGE('No Lee Socio Cuenta N° '&QUE:IdSocio ,'Mensaje del Sistema',ICON:Exclamation)
END
IF Access:Asocio01.Update() ! Modifica
MESSAGE('No Regraba ASOCIO01','Mensaje del Sistema',ICON:Exclamation)
END
! Para Borrar (antes lo debes haber podido leer)
AC4:CtaContable = QUE:CtaContable
IF Access:ASTOC001.Fetch(AC4:KeyCtaContable) !Lee
MESSAGE('No Lee ACONT004 Cuenta N° '&QUE:CtaContable ,'Mensaje del Sistema',ICON:Exclamation)
END
Delete(ACONT004) ! Borra ACONT004
IF ErrorCode()
MESSAGE('No Borra ACONT004.. Cuenta N° '&QUE:CtaContable ,'Mensaje del Sistema',ICON:Exclamation)
END
Saludos