// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // Reporte: AUXILIAR DE MOVIMIENTOS DE CLIENTES/PROVEDORES AuxMovto.rpt // // Sistema: ADMINPAQ Versión v1.0 Windows // // Descripcion: EL auxiliar de movimientos imprime todos los documentos registrados para un // cliente de acuerdo al rango de fechas seleccionado. // Este reporte se imprime por el orden de la fecha del docto. // Imprime doctos de cargo y de abono sin diferenciar si están saldados o no. // // Consideraciones : // Creación : Felix de la Cruz S. 10/Julio/2001 // Revisiones : // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // 28/07/2003 CILA N.D.2335 Se cambio el numero de decimales de 2 a 4 // para la columna de tipo de cambio. // 16/03/2005 HVA 3023 Saldos bimonedas // 20/04/2005 LAP N.D.3023 Incluir los documentos de utilidad / perdida // cambiaria siempre y cuando correspondan a la // moneda del reporte. // - fDiscriminaDocto cambia a fDiscriminaDocumento // Expresar los importes de los documentos en la moneda // del reporte. Considerando que los documentos en moneda // base tienen el tipo de cambio de la moneda del cliente // a la moneda base. Utilizar fCambiarMonedaDoctoAReporte de // LibAdminPAQ.rpt // - fImprimeDocumento // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // INCLUSION DE ARCHIVOS // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Incluye LibAdminPaq.rpt Incluye LibCliProv.rpt // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // INICIO PARAMETROS // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Parametro pDeLaFecha = '20010101' Parametro pAlaFecha = '20011220' Parametro pDelCliente = ' ' // clave del primer cliente en el rango Parametro pAlCliente = ' ' // clave del ultimo cliente en el rango Parametro pSoloConDoctos = 0 // 1 = Si, 0 = No Parametro pCualesClientes = 0 // 0 =todos, 1= Activos, 2= InActivos Parametro pIdMoneda = 1 // 1 = ID moneda Peso mexicano Parametro pQueTipo = 1 // 0 = Clientes, 1 = Proveedores Parametro pIdClase1 = 0 // por omisión deben recibir 0 = ninguna Parametro pIdClase2 = 0 Parametro pIdClase3 = 0 Parametro pIdClase4 = 0 // deben ser el ID de la clasificacion Parametro pIdClase5 = 0 Parametro pIdClase6 = 0 // por omisión deben recibir 0 = ninguna // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // INICIO APERTURA TABLAS // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // Nombres terminados en Lib, indican que la tabla fue abierta explicitamente para alguna Fx de libreria UsaEmpresa tEmpresa;'CONTPAQ I Facturacion' // Periodos UsaTabla tPeriodos = tEmpresa['mgw10031'] // Usa el indice primario, cIDEjercicio tPeriodos.UsaIndice['cNumeroEjercicio'] // Parametros de la empresa UsaTabla tParametros = tEmpresa['mgw10000'] // Usa el indice primario // TiposCambio Usatabla tTiposCambioLib = tEmpresa['mgw10035'] tTiposCambioLib.Usaindice['iMonedaFecha'] // cIdMoneda + cFecha // Documentos UsaTabla tDocumentos = tEmpresa['mgw10008'] Alias 'tDoctos1' tDocumentos.Usaindice['iClienteProveedorFecha'] //IdClienteProveedor+cFecha+cSerie+cFolio UsaTabla tDoctoslib = tEmpresa['mgw10008'] Alias 'tDoctos2' tDoctosLib.UsaIndice['iClienteProveedorFecha'] //IdClienteProveedor+cFecha+cSerie+cFolio // Clientes y Provedores UsaTabla tClientes = tEmpresa['mgw10002'] tClientes.Usaindice['iCodigoTipo'] // cCodigoCliente + cTipoCliente // Acumulados por periodo UsaTabla tAcumuladosLib = tEmpresa['mgw10018'] // cIdTipoAcumulado + Importe modelo+ cIdOwner1 + cIdOwner2 tAcumuladosLib.Usaindice['iAcumImpteOwnerEjerMoneda'] // + cIdEjercicio + cIdMoneda UsaTabla tConceptos = tEmpresa['mgw10006'] tConceptos.UsaIndice['cIdConceptoDocumento'] UsaTabla tMonedas = tEmpresa['mgw10034'] tMonedas.Usaindice[''] // Usa el índice primario, por cIdMoneda UsaTabla tValoresDeClasif = tEmpresa['mgw10020'] tValoresDeClasif.UsaIndice[''] // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< //DEFINICION DE COLUMNAS // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // C0 C2 C4 C6 C8 C10 C12 C14 C16 Columnas 17;1.65,0.15,0.75,0.15,1.2,0.15,3.75,0.15,2.1,0.15,2.1,0.15,2.1,0.15,1.95,0.15,1.2 UsaLetra 'Arial' Altura 9 [C0..C5].Coma [C0..C5].Decimales 0 [C0..C5].Blanco ' ' [C6..C16].Coma tMonedas.Busca[@Str(pIdMoneda;0)] gDecimales = tMonedas(cDecimalesMoneda) [C6..C14].Decimales gDecimales [C6..C14].Blanco '0.00' [C16].Decimales 4 [C16].Blanco '0.0000' [C6..C16].Corchete True // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // VARIABLES GLOBALES // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< gHoy = fFormateaFecha(@Hoy();0) gDelaFecha = '' gAlaFecha = '' gPeriodo = 0 gIdEjercicio = 0 gSaldoCliente = 0.0 // se actualiza al imprimir cada documento del cliente gTotalCargosCliente = 0.0 gTotalAbonosCliente = 0.0 gGranTotalCargos = 0.0 gGranTotalAbonos = 0.0 gNombreMoneda = tMonedas(cNombreMoneda) // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // FUNCIONES <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ========================================================================================== // fColumnas (Procedimiento) // Descripcion : Establece uno de los dos tipos de columnas que se utilizan en el reporte // Entrada : atipo : El tipode de columnas // ========================================================================================== Deffunc fColumnas(atipo) Si atipo = 1 // C0 C2 C4 C6 C8 C10 C12 C14 C16 Columnas 17;1.65,0.15,0.75,0.15,1.2,0.15,3.75,0.15,2.1,0.15,2.1,0.15,2.1,0.15,1.95,0.15,1.2 Sino Si pQueTipo = 0 // C0 C1 C2 Columnas 5;1.2,0.15,6.45 Sino // C0 C1 C2 Columnas 5;1.5,0.15,6.45 Finsi Finsi Finfunc // ========================================================================================== // fImpDatosCliente (Procedimiento) // Descripcion : Imprime los datos del cliente, como encabezado para despues imprimir el detalle // Obtiene el saldo inicial ya que es parte de los datos del cliente // Entrada : La tabla de clientes, con el cliente a imprimir abierto // Salida : No regresa valor, // pero imprime los renglones de 1.- Datos del cliente; 1.- Saldo inicial el cliente // ========================================================================================== DefFunc fImpDatosCliente(aTblCliente:TABLA;aSaldo) local lRenglon NEGRITAS TRUE fColumnas(2) lRenglon = '' Si pQueTipo = 0 lRenglon[0] = 'Cliente:' Sino lRenglon[0] = 'Proveedor:' Finsi lRenglon[2] = fMascarilla(aTblCliente(cCodigoCliente);tParametros(cMascarillaClientes)) Imprime lRenglon lRenglon[0] = 'Nombre:' lrenglon = aTblCliente(cRazonSocial)[C2] Imprime lrenglon NEGRITAS FALSE fColumnas(1) lRenglon = '' lRenglon[6] = 'Saldo Inicial' lRenglon[12] = aSaldo Imprime lRenglon FinFunc // ========================================================================================== // fImprimeDocumento (Procedimiento) // Descripcion : // Entrada : // aTblDocto = Documento que se va a imprimir // aSaldoCliente = Saldo del cliente, es por referencia y se actualiza despues de // imprimir el documento. + Cargo - Abonos // pIdMoneda = ID de la moneda en que se pide el reporte // aTipo = (0 = Cliente; 1 = Proveedor) // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // 20/04/2005 LAP N.D.3023 Expresar los importes de los documentos en la moneda // del reporte. Considerando que los documentos en moneda // base tienen el tipo de cambio de la moneda del cliente // a la moneda base. Utilizar fCambiarMonedaDoctoAReporte de // LibAdminPAQ.rpt // ========================================================================================== DefFunc fImprimeDocumento(aTblDocto:TABLA; aSaldoCliente; aIdMoneda; aTipo) Local lRenglon, lNaturaleza, lImporteDoctoMonedaRpt lImporteDoctoMonedaRpt = fCambiarMonedaDoctoAReporte(aTblDocto; tTiposCambioLib; aTblDocto(cTotal); pIdMoneda; tClientes(cIdMoneda)) // Si el documento es un cargo imprime en la columna Cargo, de lo contrario // imprime en la columna Abono. // Los cargos incrementan el saldo del cliente, los abonos lo decrementan // Los cargos decrementan el saldo del proveedor, los abonos lo incrementan lRenglon = ''[C0..C16] lRenglon = aTblDocto(cSerieDocumento)[C2] lRenglon = aTblDocto(cFolio)[C4] lrenglon[0] = fFormateaFecha(aTblDocto(cFecha);0) tConceptos.Busca[@Str(aTblDocto(cIDConceptoDocumento);0)] Si tConceptos->Encontro lRenglon = tConceptos(cNombreConcepto)[C6] Finsi // Se verifica la naturaleza por aquellos doctos de Utilidad O perdida Cambiaria lNaturaleza = aTblDocto(cNaturaleza) // 28. Utilidad Cambiaria Cliente (cargo) // 29. Perdida Cambiaria Cliente (abono) // 30. Utilidad Cambiaria Provedor(cargo) // 31. Perdida Cambiaria Proveedor(abono) Si aTblDocto(cIdDocumentoDe) = 28 O aTblDocto(cIdDocumentoDe)= 30 // Cargos lNaturaleza = 0 Finsi Si aTblDocto(cIdDocumentoDe) = 29 O aTblDocto(cIdDocumentoDe)= 31 // Abonos lNaturaleza = 1 Finsi // Si lNaturaleza = 0 gTotalCargosCliente = gTotalCargosCliente + lImporteDoctoMonedaRpt // Caso Clientes-Proveedores : Si Se imprimen clientes y el documento es para clientes Si aTipo = 1 // es para un proveedor, el signo del cargo se invierte lImporteDoctoMonedaRpt = -lImporteDoctoMonedaRpt Sino // Es un cliente el docto tiene fecha de vencimiento lRenglon[14]= fFormateaFecha(aTblDocto(cFechaVencimiento);0) Finsi lRenglon[8] = lImporteDoctoMonedaRpt // solo los cargos usados por clientes tienen fecha de vencimiento Sino // se trata de un abono gTotalAbonosCliente = gTotalAbonosCliente + lImporteDoctoMonedaRpt Si aTipo = 0 // es para clientes, el signo del abono se invierte lImporteDoctoMonedaRpt = -lImporteDoctoMonedaRpt Sino lRenglon[14]= fFormateaFecha(aTblDocto(cFechaVencimiento);0) Finsi lRenglon[10] = lImporteDoctoMonedaRpt // Caso Cliente-Proveedor : solo los abonos usados por proveedores tiene vencimiento Finsi // se suma el Importe del docto, dado que ya se le cambio el signo cuando se requiere aSaldoCliente = aSaldoCliente + lImporteDoctoMonedaRpt lRenglon[12] = aSaldoCliente lRenglon = aTblDocto(cTipoCambio)[C16] Imprime lRenglon Finfunc // ========================================================================================== // fImprimeResumen (Procedimiento) // Descripcion : Imprime los totales por Cliente/Proveedor // Comentarios : asume la misma distribucion de columnas que el cuerpo principal del reporte // ========================================================================================== Deffunc fImprimeResumen() Local lRenglon [C8,C10].Subrayacol '-' lRenglon[8] = (pQueTipo = 0 ? gTotalCargosCliente : -gTotalCargosCliente) lRenglon[10] = (pQueTipo = 0 ? -gTotalAbonosCliente : gTotalAbonosCliente) Imprime lRenglon gGranTotalCargos = gGranTotalCargos + gTotalCargosCliente gGranTotalAbonos = gGranTotalAbonos + gTotalAbonosCliente FinFunc // ========================================================================================== // fGranTotal (Procedimiento) // Descripcion : Imprime los totales generales del reporte // ========================================================================================== Deffunc fImprimeGranTotal() Local lRenglon, lSubRaya lSubRaya = '' lRenglon[8] = (pQueTipo = 0? gGranTotalCargos :-gGranTotalCargos) lRenglon[10] = (pQueTipo = 0? -gGranTotalAbonos : gGranTotalAbonos) Saltalin 1 lSubRaya = '================'[C8,C10] Imprime lSubRaya Imprime lRenglon FinFunc // ========================================================================================== // fDiscriminaCliente() // Salidas: 1 = indica que el cliente no aplica, debe descartarse // 0 = indica que el cliente no debe descartarse. // ========================================================================================== DefFunc fDiscriminaCliente(aCliente:TABLA) Local lRegresa lRegresa = 0 // Se salta el Cliente NINGUNO Si aCliente(cIdClienteProveedor) = 0 lRegresa = 1 Finsi // Si se requieren los clientes y no se trata de un cliente:(1=cliente,2=cliente/provedor,3= proveedor) Si pQueTipo = 0 Y (aCliente(cTipoCliente) > 2) lRegresa = 1 Finsi // Si se requieren los Proveedores y no se trata de un Proveedor Si pQueTipo = 1 Y (aCliente(cTipoCliente) < 2) lRegresa = 1 Finsi // Si Estado solicitado no es Todos y No Coincide el tipo de cliente con el parametro // pCualesClientes = 2(inactivos) aplicando %2 = 0, 0 = inactivos en la tabla de clientes Si (pCualesClientes != 0) Y (aCliente(cEstatus) != pCualesClientes%2) lRegresa = 1 Finsi // Se Revisan las CLASIFICACIONES, solo en el caso de haber seleccionado al menos una Si gNumDeClases > 0 Si !fMiembroDeUnaClase(aCliente;gNumDeClases;gListIdDeClases;pQueTipo) // Sa salta el cliente actual, por no pertenecer a alguna de las clasificaciones lRegresa = 1 Finsi Finsi Retorna lRegresa FinFunc // ========================================================================================== // fDiscriminaDocumento() // Salidas: 1 = indica que el Docto no aplica, debe descartarse // 0 = indica que el Docto no debe descartarse. // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // 20/04/2005 LAP N.D.3023 Incluir los documentos de utilidad / perdida // cambiaria siempre y cuando correspondan a la // moneda del reporte. Esto debido a que ahora // existen documentos de este tipo en cualquier // moneda. // ========================================================================================== DefFunc fDiscriminaDocumento(atDocumento:TABLA) Local lRegresa lRegresa = 0 // N.D.3023 Inicio // Si no es cargo o abono y no es docto de utilidad o perdida cambiaria) Si atDocumento(cNaturaleza) = 2 Y !(atDocumento(cIDDocumentoDe) >= 28 Y atDocumento(cIDDocumentoDe) <= 31) lRegresa =1 Finsi // Si no esta afectado se lo brinca Si atDocumento(cAfectado) != 1 lRegresa = 1 Finsi // Los documentos de utilidad perdida cambiaria solo se incluyen si su moneda corresponde // a la del reporte Si atDocumento(cIdDocumentoDe) >= 28 Y atDocumento(cIdDocumentoDe) <= 31 Si atDocumento(cIdMoneda) != pIdMoneda lRegresa = 1 FinSi FinSi // N.D.3023 Fin // CASO Clientes/Proveedores : se descartan los cargos que no son de clientes y los abonos // que no son de proveedores, solo imprime los doctos de acuerdo a el tipo de reporte pedido Si pQueTipo = 0 y (atDocumento(cUsaCliente) = 0 O (atDocumento(cIdDocumentoDe) = 30 O atDocumento(cIdDocumentoDe) = 31) ) lRegresa =1 Finsi Si pQueTipo = 1 y (atDocumento(cUsaProveedor) = 0 O (atDocumento(cIdDocumentoDe) = 28 O atDocumento(cIdDocumentoDe) = 29) ) lRegresa =1 Finsi Retorna lRegresa FinFunc // ========================================================================================== // fBuscaAlgunReg // Descripcion : Busca algun registro que coincida con el campo aIDBuscado, y alguna de las // fechas que sea menor o igual que aFechaFin. // Salida : modifica el argumento aFechaIni, para regresar la fecha en que se encontro el 1er. // registro que coincide // ========================================================================================== Deffunc BuscaAlgunReg(aFechaIni;aFechaFin;aIdBuscado;aTblDeBusqueda:TABLA) Mientras aFechaIni <= aFechaFin Y !aTblDeBusqueda->ENCONTRO aTblDeBusqueda.BUSCA[aIdBuscado &':'&aFechaIni] Si !aTblDeBusqueda->Encontro aFechaIni = fFechaSiguiente(aFechaIni) Finsi FinMientras Finfunc // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< //ENCABEZADO // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Encab Texto '@TC{156;0;89}@S{8}Factura Electrónica' Hoja '"@TC{0,0,0}@S{8}Hoja: ' Imprime Texto '@TC{0,0,0}@S{8}Moneda: ' & gNombreMoneda Texto '"@TC{0,0,0}@S{8}Fecha: ' & gHoy Imprime Texto '^@TC{0,0,0}@S{22}' & tEmpresa->Nombre Imprime Texto '^@TC{0,0,0}@S{16}' & 'AUXILIAR DE MOVIMIENTOS' Imprime gDelaFecha = fFormateaFecha(pDelaFecha;0) gAlaFecha = fFormateaFecha(pAlaFecha;0) Texto '^@TC{0,0,0}@S{16}'& 'Del: ' & gDelaFecha & ' Al: ' & gAlaFecha Imprime // ===== Se Revisan las clasificaciones, para recuperarlas e imprimirlas en el encabezado fRevisaClases(tValoresDeClasif) // ===== Fin de la revision de clasificaciones NEGRITAS TRUE fColumnas(1) Altura 9 Texto '@TC{0,0,0}@L{-1}' Imprime Texto C12;'^Saldo' Texto C16;'Tipo' Imprime Texto C0;'Fecha' Texto C2;'Serie' Texto C4;'Folio' Texto C6;'Concepto' Texto C8;'^Cargos' Texto C10;'^Abonos' Si pQueTipo = 0 Texto C12;'^Cliente' Sino Texto C12;'^Proveedor' Finsi Texto C14;'Vence' Texto C16;'Cambio' Imprime 1 Texto '@TC{0,0,0}@L{-1}' Imprime NEGRITAS FALSE FinEncab // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // PRINCIPAL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Si pDelCliente = ' ' tClientes.Busca Primero pDelCliente = tClientes(cCodigoCliente) Finsi Si pAlCliente = ' ' tClientes.Busca Ultimo pAlCliente = tClientes(cCodigoCliente) Finsi tParametros.Busca Primero // Esta función se debe ejecutar antes del cuerpo del reporte, para inicializar algunas valores // Globales para la biblioteca LibAdminPAQ.rpt fIniFechasHistoria(tPeriodos) // Obtener el Ejercicio y el Periodo que le corresponde a pFechaIni, para calcular saldo inicial // Se calculan al inicio y se pasan como parametros, para calcularlos solo una vez. fEjercicioPeriodo(pDelaFecha;&gPeriodo;&gIdEjercicio;tPeriodos) Mientras [tClientes.Busca[pDelCliente & '..' & pAlCliente ]; tClientes->Encontro ; tClientes.Busca Siguiente[1]] Si fDiscriminaCliente(tClientes) = 1 Continua Finsi Si pIdMoneda != 1 Y pIdMoneda != tClientes(cIdMoneda) Continua FinSi // Se inicializan las variables de totales por cliente gTotalAbonosCliente = 0.0 gTotalCargosCliente = 0.0 // Se inicializa la fecha con la que se realizaran las busquedas en el rango de fechas gFechaBusqueda = pDeLaFecha // busca Algun docto , debe estar afectado y dentro del rango, Si Encontro algún registro // tDocumentos queda en el registro encontrado y gFechaBusqueda en la fecha en que se encontro BuscaAlgunReg(&gFechaBusqueda;pAlaFecha;tClientes(cIdClienteProveedor);&tDocumentos) // Todos aun sin Doctos o el Cliente si tiene Doctos Si (pSoloConDoctos = 0) O ( tDocumentos->ENCONTRO ) gSaldoCliente = fSaldoInicial(tClientes;gIdEjercicio;gPeriodo;pIdMoneda;pDelaFecha;pQueTipo;tAcumuladosLib;tDoctosLib;tTiposCambioLib) fImpDatosCliente(tClientes;gSaldoInicialCliente)// Imprime datos del cliente y su saldo inicial Mientras gFechaBusqueda <= pAlaFecha // Ahora si barre todos los movimientos a partir del primero que ya habia encontrado Mientras [tDocumentos.BUSCA[@Str(tClientes(cIdClienteProveedor);0) &':'& gFechaBusqueda]; tDocumentos->ENCONTRO; tDocumentos.BUSCA SIGUIENTE[2]] Si fDiscriminaDocumento(tDocumentos) = 1 Continua Finsi // Imprime el Documento fImprimeDocumento(tDocumentos; &gSaldoCliente; pIdMoneda; pQueTipo) FinMientras // Fin del mientras Documentos.busca gFechaBusqueda = fFechaSiguiente(gFechaBusqueda) FinMientras // mientras la fecha es menor fImprimeResumen() Finsi // fin del tDocumentos->encontro FinMientras // Fin del mientras tClientes.busca fImprimeGranTotal() // FIN DEL REPORTE