Nelson,
Lo que vos queres hacer, se puede hacer sin problemas. Solo depende de como tengas armado tu DCT.
Seguramente alguien lo haga mas sencillo o con mas ingenio, pero como te dije antes todo depende de como tengas armado tu DCT.
Un forma que se me ocurre seria:
Podes recurrir a campos banderas y a relaciones con los archivos que intervienen. (Para poder leer datos del cheque y saber si se cobro o no)
Podes cargar los datos leidos en una Queue y luego ordenarlos según tus necesidades
El campo bandera para saber si se liquido o no, debe ser clave duplicada, para poder hacer la lectura de solo los que faltan liquidar, sin importar en la fecha que se genero la operacion.
I# = 0
FREE (QVentas) ! inicializo Queue QVentas
FAC:Liquidado = 'NO'
SET(FAC:KeyLiquidado ,FAC:KeyLiquidado ) ! ordena y me posiciono en el primer registro con el valor = 'NO'
LOOP UNTIL Access:Facturas.Next() or FAC:Liquidado <> 'NO' ! Leo secuencialmente hasta que encuentre un valor distinto de 'NO'
! aca irian todas tus validaciones
! Luego si fue pagado con un cheque leeria Cheque para saber si se cobro o no
IF FAC:Cheque = 'SI'
! aca leo el archivo Cheque
CHE:IdCheque = FAC:IdCheque
IF Access:Cheque.Fetch(CHE:KeyIdCheque) !Lee
MESSAGE('No Encuentra Registro del Cheque','Mensaje del Sistema',ICON:Exclamation) ! Muestra el cartel de que no lo encontro
CYCLE ! Regresa a leer un nuevo registro
End
IF CHE:Cobrado = 'SI'
Cycle ! Regresa a leer un nuevo registro
END
END
! Despues cargas la Queue
I# += 1
QUE:Fecha = FAC:Fecha
QUE:Numero = FAC:Numero
QUE:Comprobante = FAC:Comprobante
QUE:Importe = FAC:Importe
ADD(QVentas,I#) ! Agregas un registro a la Queue
IF ERRORCODE() THEN STOP(ERROR()). ! Haces el control de error
END
! para ordenar la Queue se usa la sentencia SORT
SORT (QVentas, QUE:Fecha, QUE:Numero)
!*** Recorre la cola e imprime el detalle ***
LOOP I# = 1 to Records(QVentas)
Get(QVentas, I#)
PRINT(RPT:detail) ! Imprimis manualmente el detalle
! aca lees y actualizas Facturas con el valor Liquidado = 'SI'
FAC:Numero = QUE:Numero
IF Access:Facturas.Fetch(FAC:KeyNumero) !Lee
MESSAGE('No Encuentra Registro de la Factura,'Mensaje del Sistema',ICON:Exclamation) ! Muestra el cartel de que no lo encontro
CYCLE ! Regresa a leer un nuevo registro
End
FAC:Liquidado = 'SI'
IF Access:Facturas.Update()
MESSAGE('No Actualiza Registro Facturas,'Mensaje del Sistema',ICON:Exclamation)
END
End
Saludos