// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // Reporte: ESTADO DE CUENTAS DE CLIENTES/PROVEDORES EdoCtaCl.rpt // // Sistema: ADMINPAQ Versión v1.0 Windows // // Descripcion: En Caso de mostrar información de Clientes : // El Estado de Cuenta despliega los Documentos del Cliente en un rango // de Fechas seleccionados, el orden puede ser : // a)Si se trata de un cargo: en orden de acuerdo a la serie-folio. // b)Si se trata de un abono: Aparecera despues del cargo al que salda, // o al final ordenado por serie-folio si es que no salda ningun cargo o // le queda un saldo a favor. // // En Caso de mostrar información de Proveedores : // El Estado de Cuenta despliega los Documentos del Proveedor en un rango // de Fechas seleccionados, el orden puede ser : // a)Si se trata de un Abono: en orden de acuerdo a la serie-folio. // b)Si se trata de un Cargo: Aparecera despues del Abono al que salda, // o al final ordenado por serie-folio si es que no salda ningun Abono o // le queda un saldo a favor. // Consideraciones : // Creación : Felix de la Cruz S. 18/junio/2001 // Revisiones : // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // 28/01/2002 MOFM SC 25 Se agregó el parámetro pSoloConSaldo, se // agregó la variable global gSoloConSaldo // Se modificó la parte principal del reporte. // 07/05/2002 EGV N.D.389 Se modificó la función: fDiscriminaDocto. // 14/05/2002 CFAC N.C.0095 Ajuste de nueva columna 'Edo. del Docto.' // Se espació y revisó estándares. // Se modificó 'Definición de columnas': // - 19 columnas en lugar de 17. // Se modificó 'Encabezado': // - Se agregó 'Texto C18' // Se modificó 'Cuerpo principal': // - Se agregó llamada a fImprimeNotaEstadoDocto // Se modificó: // - fColumnas // - fImprimeDocumento // Se agregó: // - fImprimeNotaEstadoDocto // 01/07/2002 FG N.D. 670 Se agregó validación para no imprimir doctos asociados // sin afectar en función fImprimeAbonosCargosAsociados // 29/10/2002 LAP N.D.1427 En el caso de clientes/proveedores, si se // imprime el Estado de Cuenta del Cliente con // el filtro "Solo con documentos" no debe de // considerar los documentos que tenga como // proveedor. // - fImpDatosCliente // - fImprimeResumen // - Cuerpo del reporte // 06/12/2002 LAP N.D.1672 Corrección a fin de que si el filtro de Solo // con documentos (pSoloConDoctos) este en Todos // realmente se impriman todos los clientes, ya que // actualmente solo imprime los que tienen documentos // - Cuerpo del reporte // 28/07/2003 CILA N.D.2335 Se cambio los decimales de la columna de // Tipo de Cambio de ser 2 a 4 decimales. // 18/06/2004 EGV N.D.2808 Se modificó: fImprimeDocumento. // 10/03/2005 HVA N.D.3023 Saldos bimonedas // 16/03/2005 HVA N.D.3023 Saldos bimonedas (Revision entre colegas) // 20/04/2005 LAP N.D.3023 Incluir los documentos de utilidad / perdida // cambiaria siempre y cuando correspondan a la // moneda del reporte. // - fImprimeAbonosCargosAsociados // 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 // 06/07/2005 LAP N.D.3347 Incluir los documentos de utilidad / perdida cambiaria cuando // el documento de abono no se imprima. (LAP) // - Cuerpo del reporte // - fImprimeUtilidadesAsociadas (NUEVO) // 01/12/2005 LAP N.D.3010 Nuevo esquema de búsquedas parciales para agilizar los reportes // - Cuerpo del reporte // - BuscaAlgunReg (ELIMINADO) // 27/02/2009 ELVS N.D.5683 ERROR NO SE MUESTRA INFORMACION DE UN CLIENTE QUE TIENE MONEDA // DOLARES AL EJECUTAR EL REPORTE DE ESTADO DE CUENTA SELECIONANDO // MONEDA EN PESO MEXICANO. // Donde consideraba el pIdMoneda ahora será sustituido por el pIdMoneda1 // excepto para el caso del filtro de moneda del cliente. // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< //****************************************************************************** //Funciones de librería. Incluye LibAdminPaq.rpt Incluye LibCliProv.rpt //****************************************************************************** //Parámetros. Parametro pDeLaFecha = '20020101' Parametro pAlaFecha = '20021231' Parametro pDelCliente = ' ' // Espacio en blanco, clave del primer cliente en el rango Parametro pAlCliente = ' ' // Espacio en blanco, clave del ultimo cliente en el rango Parametro pSoloConDoctos = 0 // 1 = Si, 0 = No Parametro pSoloConSaldo = 0 // 0 = todos, 1 = Sólo con saldo Parametro pCualesClientes = 0 // 0 = todos, 1 = Activos, 2 = InActivos Parametro pIdMoneda = 1 // 1 = ID moneda Peso mexicano // N.D.5683 Este parámetro solo mostrará los proveedores o clientes // que en el catálogo tengan definida esta moneda en moneda // del cliente o proveedor. Parametro pFormato = 0 // 0 = Continuo, 1 = Cliente por Hoja Parametro pQueTipo = 0 // 0 = Clientes , 1 = Proveedores Parametro pConDoctosNoAfectados = 0 // 0 = No, 1 = Si Parametro pIdClase1 = 0 // Por omisión deben recibir 0 = ninguna Parametro pIdClase2 = 0 Parametro pIdClase3 = 0 Parametro pIdClase4 = 0 // Deben ser los ID´s de los valores de las clases seleccionadas Parametro pIdClase5 = 0 // Para cada tipo de clasificación. Parametro pIdClase6 = 0 // Por omisión deben recibir 0 = ninguna Parametro pIdMoneda1 = 1 // N.D.5683 Este parámetro de moneda mostrará en que // moneda se visualizará el estado de cuenta. //****************************************************************************** //Apertura de tablas. //Nombres terminados en Lib, indican que la tabla fue abierta explícitamente //para alguna Fx de librería UsaEmpresa tEmpresa;'CONTPAQ I Facturacion' //Periodos. //Índice: cNumeroEjercicio UsaTabla tPeriodos = tEmpresa['mgw10031'] tPeriodos.UsaIndice['cNumeroEjercicio'] //Parametros de la empresa. //Índice: primario. UsaTabla tParametros = tEmpresa['mgw10000'] //Tipos de cambio. //Índice: cIdMoneda + cFecha. Usatabla tTiposCambioLib = tEmpresa['mgw10035'] tTiposCambioLib.Usaindice['iMonedaFecha'] //Documentos. //Índice: IdClienteProveedor + cFecha + cSerie + cFolio. //Esta tabla se usa para que no se pierda el puntero del recorrido principal. UsaTabla tDocumentos = tEmpresa['mgw10008'] Alias 'tDoctos1' tDocumentos.Usaindice['iClienteProveedorFecha'] // //Documentos. //Índice: IdClienteProveedor + cFecha + cSerie + cFolio. UsaTabla tDoctosLib1 = tEmpresa['mgw10008'] Alias 'tDoctos2' tDoctosLib1.Usaindice['iClienteProveedorFecha'] //Documentos. //Índice: primario. UsaTabla tDoctosLib2 = tEmpresa['mgw10008'] Alias 'tDoctos3' tDoctosLib2.Usaindice[''] //Documentos. //Índice: primario. UsaTabla tDoctosLib3 = tEmpresa['mgw10008'] Alias 'tDoctos4' tDoctosLib3.Usaindice[''] //Clientes y Provedores. //Índice: cCodigoCliente + cTipoCliente. UsaTabla tClientes = tEmpresa['mgw10002'] tClientes.Usaindice['iCodigoTipo'] //Acumulados por periodo. //Índice: cIdTipoAcumulado + Importe modelo + cIdOwner1 + cIdOwner2 + cIdEjercicio + cIdMoneda UsaTabla tAcumuladosLib = tEmpresa['mgw10018'] tAcumuladosLib.Usaindice['iAcumImpteOwnerEjerMoneda'] //Cargos y Abonos. //Índice: IDDoctoCargo + IDDoctoAbono. UsaTabla tCargosAbonosLib = tEmpresa['mgw10009'] tCargosAbonosLib.UsaIndice['iDoctoCargoAbono'] //Conceptos de documento. //Índice: cIdConceptoDocumento. UsaTabla tConceptos = tEmpresa['mgw10006'] tConceptos.UsaIndice[''] //Monedas. //Índice: primario. UsaTabla tMonedas = tEmpresa['mgw10034'] tMonedas.Usaindice[''] //Valores de clasificación. //Índice: primario. UsaTabla tValoresDeClasif = tEmpresa['mgw10020'] tValoresDeClasif.UsaIndice[''] //****************************************************************************** //Definición de columnas y atributos generales. //C0 C2 C4 C6 C8 C10 C12 C14 C16 C18 Columnas 20;1.75,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,0.15,1.2,0.15 UsaLetra 'Arial' Altura 9 [C0..C5].Coma [C0..C5].Decimales 0 [C0..C5].Blanco ' ' [C6..C16].Coma //N.D.5683 tMonedas.Busca[@Str(pIdMoneda1;0)] gDecimales = tMonedas(cDecimalesMoneda) // N.D.2335 Inicio --------------------- //[C6..C16].Decimales gDecimales //[C6..C16].Blanco '0.00' [C6..C14].Decimales gDecimales [C6..C14].Blanco '0.00' [C16].Decimales 4 [C16].Blanco '0.0000' // N.D.2335 Fin ------------------------ [C6..C16].Corchete True //****************************************************************************** //Declaración de variables globales. gHoy = fFormateaFecha(@Hoy();0) gDelaFecha = '' gAlaFecha = '' gPeriodo = 0 gIdEjercicio = 0 gSaldoDocto = 0.0 gSoloConSaldo = 0 gSaldoInicialCliente = 0.0 gTotalCargosCliente = 0.0 gTotalAbonosCliente = 0.0 gTotalSaldosCliente = 0.0 gTotalCargosGral = 0.0 gTotalAbonosGral = 0.0 gTotalSaldosGral = 0.0 gNombreMoneda = tMonedas(cNombreMoneda) //****************************************************************************** //Funciones. // ================================================================================================= // Función área sensible al contexto // ================================================================================================= DefFunc ContextoDetalleDocto(aNumeroColumna; aValor) Local lTipo Si pQueTipo = 0 // Clientes lTipo = 1 // Ventas Sino lTipo = 0 // Compras FinSI EJECUTA tEmpresa->SysDirDatos & '\Reportes\Facturacion\ImpDoctos.RTW';@Escoge(aValor;1),@Escoge(aValor;1),@Escoge(aValor;2),@Escoge(aValor;3),@Escoge(aValor;3),@Escoge(aValor;0),' ',' ',' ',' ',' ',0,1,0,0,2,1,lTipo;tEmpresa->Directorio FinFunc // ========================================================================================== // fColumnas (Procedimiento) // Descripcion: Establece la configuración atipo de columnas que se utilizan en el reporte. // // Entrada: // - atipo = Número de configuración. // // Salida: // // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // 14/05/2002 CFAC N.C.0095 Se agregó configuración para configuración 3. // ========================================================================================== Deffunc fColumnas(atipo) Si atipo = 1 //C0 C2 C4 C6 C8 C10 C12 C14 C16 C18 Columnas 20;1.75,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,0.15,1.2,0.15 Sino Si atipo = 2 //C0 C1 C2 Columnas 6;1.5,0.15,6.45,0.1 Sino Si atipo = 3 //C0 Columnas 2;3,0.1 Finsi 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 // ========================================================================================== // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // 29/10/2002 LAP N.D.1427 Adición de la variable global gClienteImpreso // a fin de identificar si el encabezado del // cliente se ha impreso o no . // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< DefFunc fImpDatosCliente(aTblCliente:TABLA;aSaldo;aTipo) local lRenglon // N.D.1427 Inicio Si gClienteImpreso = 1 // Ya se imprimio el cliente Retorna Sino // No se ha impreso el cliente gClienteImpreso = 1 FinSi // N.D.1427 Fin NEGRITAS TRUE fColumnas(2) /*Si pTipoReporte = 1 o pTipoReporte = 3 Texto 0; '@B{Cliente:}' Sino Texto 0; '@B{Proveedor:}' Finsi*/ //N.D.-1191 Si pQueTipo = 0 Texto 0; '@B{Cliente:}' SiNo Texto 0; '@B{Proveedor:}' FinSi Texto 2; fMascarilla(tClientes(cCodigoCliente);tParametros(cMascarillaClientes)) Imprime // N.D.780 Se corrigió la sintaxis para imprimir Cliente Texto 0; '@B{Nombre:}' Texto 2; tClientes(cRazonSocial) Imprime Negritas False fColumnas(1) lRenglon = '' lRenglon[6] = 'Saldo Inicial' lRenglon[12] = aSaldo Imprime lRenglon FinFunc // ========================================================================================== Deffunc fNaturaleza(atDocto:TABLA) Local lNaturaleza // Se verifica la naturaleza por aquellos doctos de Utilidad O perdida Cambiaria lNaturaleza = atDocto(cNaturaleza) // 28. Utilidad Cambiaria Cliente (cargo) // 29. Perdida Cambiaria Cliente (abono) // 30. Utilidad Cambiaria Provedor(cargo) // 31. Perdida Cambiaria Proveedor(abono) Si atDocto(cIdDocumentoDe) = 28 O atDocto(cIdDocumentoDe)= 30 lNaturaleza = 0 // son cargos Finsi Si atDocto(cIdDocumentoDe) = 29 O atDocto(cIdDocumentoDe)= 31 lNaturaleza = 1 // son abonos Finsi Retorna lNaturaleza FinFunc // ========================================================================================== // fImprimeDocumento (Procedimiento) // Descripcion : // Entrada :La tabla de clientes, con el cliente a imprimir abierto // Salida :aTblDocto = Documento que se va a imprimir // gSaldoDocto = Saldo final del documento // pIdMoneda = ID de la moneda del cliente definido en el catálogo // aNivel : 1 = Si es el docto inicial // 2 = Si es un docto de cargo o abono, asociado al docto inicial // 3 = CUando es un Abono a saldo a favor de un cliente // o un cargo con saldo a favor de un proveedor // aImpDocto = Este importe es que corresponde al docto. // aNaturaleza = NAturaleza del Docto que se imprime 0=Cargo, 1=Abono // // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // 14/05/2002 CFAC N.C.0095 Se agregó bloque de código 'N.C.0095-14/05/2002' // para determinar el valor a imprimir del estado // del documento. // 18/06/2004 EGV N.D.2808 Si se hizo una asociación entre ADM y CheqPAQ de // 1 Docto. en Pesos y uno en M.E. tomar el tipo // de cambio que guardó CheqPAQ en el Documento de Pesos. // 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; aSaldoDocto;aIdMoneda;aTipo;aNivel;aImpDocto;aNaturaleza;aIdentado) Local lSaldoMonedaRpt,lSaldoMonedaBase Local lRenglon Local lImpreso, lAfectado, lDevuelto Local lImporteDoctoMonedaRpt, lImporteDoctoMonedaBase, lTipoCambioRpt // N.D.3023 Inicio // Expresar los importes de los documentos en la moneda del reporte. // Utilizar fCambiarMonedaDoctoAReporte de LibAdminPAQ.rpt lSaldoMonedaRpt = fCambiarMonedaDoctoAReporte(aTblDocto; tTiposCambioLib; aSaldoDocto; pIdMoneda1; tClientes(cIdMoneda)) //N.D.5683 lImporteDoctoMonedaRpt = fCambiarMonedaDoctoAReporte(aTblDocto; tTiposCambioLib; aImpDocto; pIdMoneda1; tClientes(cIdMoneda)) //N.D.5683 // N.D.3023 Fin // N.D.3238 Redondear los importes antes de mostrarlos lSaldoMonedaRpt = fRedondeaImporteLib(lSaldoMonedaRpt; gDecimales) lImporteDoctoMonedaRpt = fRedondeaImporteLib(lImporteDoctoMonedaRpt; gDecimales) // 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 Abonos Incrementan el saldo del Proveedor, los cargos lo decrementan lRenglon = ''[C0..C18] lRenglon = aTblDocto(cSerieDocumento)[C2] lRenglon = aTblDocto(cFolio)[C4] DEFREGION ContextoDetalleDocto [C4].REGIONINFO aTblDocto(cIdDocumentoDe) & ',' & aTblDocto(cFecha) & ' ,' & aTblDocto(cSerieDocumento) & ',' & aTblDocto(cFolio) //N.D.5511 // N.D.3023 Identar los documentos asociados Si aIdentado = 1 lRenglon[0] = ' ' & fFormateaFecha(aTblDocto(cFecha);0) Sino lRenglon[0] = fFormateaFecha(aTblDocto(cFecha);0) FinSi tConceptos.Busca[@Str(aTblDocto(cIDConceptoDocumento);0)] Si tConceptos->Encontro lRenglon = tConceptos(cNombreConcepto)[C6] Finsi Si aNaturaleza = 0 // es un cargo lRenglon[8] = lImporteDoctoMonedaRpt Si aNivel != -1 gTotalCargosCliente = gTotalCargosCliente + lImporteDoctoMonedaRpt FinSi Sino // es un abono lRenglon[10] = lImporteDoctoMonedaRpt Si aNivel != -1 gTotalAbonosCliente = gTotalAbonosCliente + lImporteDoctoMonedaRpt FinSi Finsi Si (aNaturaleza = 0 Y aTipo = 0) O (aNaturaleza = 1 Y aTipo = 1) lRenglon[14]= fFormateaFecha(aTblDocto(cFechaVencimiento);0) Finsi Si aNivel > 1 lRenglon[12] = (aNivel = 2 ? ' ' : lSaldoMonedaRpt) Sino lRenglon[12] = (aNivel = -1 ? ' ' : lSaldoMonedaRpt) Finsi // se acumulan los saldos, gTotalSaldosCliente = gTotalSaldosCliente + lSaldoMonedaRpt //Si el reporte es solicitado en moneda extranjera y el documento está en pesos se calcula el tipo de cambio // Si aTblDocto(cTipoCambio) = 1 Y pIdMoneda1 != 1 // lRenglon[16] = gTipoCambioCalculado // Sino lRenglon[16] = aTblDocto(cTipoCambio) // FinSi //Inicia 'N.C.0095-14/05/2002' //Se determina el estado del documento lImpreso = aTblDocto( cImpreso ) lAfectado= aTblDocto( cAfectado ) lDevuelto = aTblDocto( cDevuelto ) Si lImpreso = 1 lRenglon[18] = '^(1)' Si lDevuelto = 1 lRenglon[18] = '^(4)' Finsi Sino lRenglon[18] = '^(5)' Si lDevuelto = 1 lRenglon[18] = '^(3)' Sino Si lAfectado = 1 lRenglon[18] = '^(2)' Finsi Finsi Finsi //Termina 'N.C.0095-14/05/2002' Si aNivel = -1 ITALICO TRUE Finsi Imprime lRenglon Si aNivel = -1 ITALICO FALSE Finsi Finfunc // ========================================================================================== // fImprimeAbonosAsociados (Procedimiento) // Descripcion : Imprime los abonos asociados a un documento de cargo // Entrada :aTblDoctoActivo = Es el documento para el cual se buscaran los abonos/Cargos // aTblDoctosTmp = Tabla de documentos sobre la que se buscaran los abonos/Cargos // aTblCargos = la Tabla de asociación de Documentos -> Documentos // aFechaInicial = Incio del rango // aFechaFinal = Fin del rango // aTipo = (0 = Clientes buscar abonos, 1= Proveedores Buscar cargos) // Salida :Imprime un renglón por cada abono asociado al documento. // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // 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 fImprimeAbonosCargosAsociados(aTblDoctoActivo:TABLA;aTblDoctosTmp:TABLA;aTblCargos:TABLA;aFechaInicial;aFechaFinal;aTipo) Local lsaldo, lImpDocto, lNat, lSaldoAjuste // Regresa al inicio de cargos y abonos para poder imprimir los abonos asociados al cargo lSaldo = 0.0 // Documentos de Cargo, se asegura que el indice sea el apropiado Si aTipo = 0 aTblCargos.UsaIndice['iDoctoCargoAbono'] aTblCargos.Busca Primero Sino aTblCargos.UsaIndice[''] // el indice primario es IDDoctoAbono+IDDoctoCargo aTblCargos.Busca Primero Finsi aTblCargos.BUSCA[@Str(aTblDoctoActivo(cIdDocumento);0)] Mientras aTblCargos->ENCONTRO Si (aTipo = 0) // si es para clientes, busca el abono // busca el documento de abono asociado, para obtener la fecha del docto,no la del CargoAbono aTblDoctosTmp.BUSCA[@Str(aTblCargos(cIdDocumentoAbono);0)] Sino // Si es para Proveedores, busca el cargo // busca el documento de abono asociado, para obtener la fecha del docto,no la del CargoAbono aTblDoctosTmp.BUSCA[@Str(aTblCargos(cIdDocumentoCargo);0)] Finsi Si aTblDoctosTmp->Encontro // Toma solo el importe abonado o cargado a el documento, ya que el Importe Total puede estár // divido en varios abonos a doctos diferentes. // Para clientes toma el importe cargo ;ya que es un abono asoc. a un cargo // Para Proveedore toma el importe de abono;ya que es un cargo asoc. a un abono // -ambos importes estan reflejados en la moneda del docto de la tabla aTblDoctosTmp- lImpDocto = (aTipo = 1? -aTblCargos(cImporteCargo):-aTblCargos(cImporteAbono)) // valida la fecha que este dentro del rango, o que solo se busquen a una fecha de corte Si (aFechaInicial = '' O aTblDoctosTmp(cFecha) >= aFechaInicial) Y (aTblDoctosTmp(cFecha) <= aFechaFinal) Si (pConDoctosNoAfectados = 1 O pConDoctosNoAfectados = 0 Y aTblDoctosTmp(cAfectado) = 1) // N.D.3023 Identar los documentos asociados fImprimeDocumento(aTblDoctosTmp; lSaldo; pIdMoneda1;aTipo;2;lImpDocto;aTblDoctosTmp(cNaturaleza);1) //N.D.5683 // N.D.3023 Incluir los documentos de utilidad / perdida cambiaria si la moneda de dichos // documentos corresponde a la del reporte Si aTblCargos(cIdUtilidadPerdidaCamb) > 0 aTblDoctosTmp.Busca[@Str(aTblCargos(cIdUtilidadPerdidaCamb);0)] Si aTblDoctosTmp->Encontro // N.D.3023 Incluir el documento solo si corresponden las monedas Si aTblDoctosTmp(cIdMoneda) = pIdMoneda1 //N.D.5683 lImpDocto = aTblDoctosTmp(cTotal) // Verifica la naturaleza del documento lNat = fNaturaleza(aTblDoctosTmp) Si pQueTipo = 0 Y lNat = 1 // Si es cliente y se trata de un abono lImpDocto = -lImpDocto Finsi Si pQueTipo = 1 y lNat = 0 // Si es proveedor y se trata de un cargo lImpDocto = -lImpDocto Finsi // N.D.3023 Identar los documentos asociados fImprimeDocumento(aTblDoctosTmp; lSaldo; pIdMoneda1;aTipo;4;lImpDocto;lNat;1) //N.D.5683 FinSi Finsi FinSi // S.C.264 Impresión del documento de Ajuste al IVA Si aTblCargos(cIdAjusIVA) > 0 aTblDoctosTmp.Busca[@Str(aTblCargos(cIdAjusIVA);0)] Si aTblDoctosTmp->Encontro Y aTblDoctosTmp(cIdDocumentoOrigen) = aTblDoctoActivo(cIdDocumento) lImpDocto = aTblDoctosTmp(cTotal) lNat = fNaturaleza(aTblDoctosTmp) Si pQueTipo = 0 Y lNat = 1 // Si es cliente y se trata de un abono lImpDocto = -lImpDocto Finsi Si pQueTipo = 1 y lNat = 0 // Si es proveedor y se trata de un cargo lImpDocto = -lImpDocto Finsi lSaldoAjuste = 0 //fSaldoDocumento(pDelaFecha; pAlaFecha; tCargosAbonosLib; aTblDoctosTmp; tDoctosLib2) fImprimeDocumento(aTblDoctosTmp; lSaldoAjuste; pIdMoneda1; aTipo; -1; lImpDocto; lNat; 1) //N.D.5683 //fImprimeAbonosCargosAsociados(aTblDoctosTmp; tDoctosLib2; tCargosAbonosLib; pDelaFecha; pAlaFecha; pQueTipo) Finsi FinSi FinSi // Finsi Finsi aTblCargos.Busca Siguiente[1] Finmientras FinFunc // ========================================================================================== // fImprimeUtilidadesAsociadas (Procedimiento) // Descripcion : Imprime los documentos de utilidad/perdida cambiaria asociados al documento de // abono (clientes) o cargo (proveedores) siempre y cuando el documento de // naturaleza contraria no se haya impreso // Entrada : aTblDoctoActivo = Es el documento para el cual se buscaran los abonos/Cargos // aTblDoctosTmp = Tabla de documentos sobre la que se buscaran los abonos/Cargos // aTblCargosAbonos = la Tabla de asociación de Documentos -> Documentos // Salida :Imprime un renglón por cada abono asociado al documento. // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // 06/07/2005 LAP N.D.3347 Implementación inicial. // ========================================================================================== DefFunc fImprimeUtilidadesAsociadas(aTblDoctoActivo:TABLA; aTblDoctosTmp:TABLA; aTblCargosAbonos:TABLA) Local lImpDocto, lNat // Documentos de Cargo, se asegura que el indice sea el apropiado Si pQueTipo = 0 // Clientes Recibe el documento de abono, y debe de buscar si existe alguna asoción con un cargo aTblCargosAbonos.UsaIndice[''] // cIdDocumentotoAbono + cIdDocumentoCargo Sino // Proveedores Recibe el documento de cargo, y debe de buscar si existe alguna asoción con un abono aTblCargosAbonos.UsaIndice['iDoctoCargoAbono'] // cIdDocumentotoCargo + cIdDocumentoAbono Finsi aTblCargosAbonos.Busca Primero Mientras[aTblCargosAbonos.BUSCA[@Str(aTblDoctoActivo(cIdDocumento);0)]; aTblCargosAbonos->Encontro; aTblCargosAbonos.Busca Siguiente[1]] Si (pQueTipo = 0) // Clientes: Busqueda del documento de cargo [Factura, etc.] aTblDoctosTmp.BUSCA[@Str(aTblCargosAbonos(cIdDocumentoCargo);0)] Sino // Proveedores: Busqueda del documento de abono [Compra, etc.] aTblDoctosTmp.BUSCA[@Str(aTblCargosAbonos(cIdDocumentoAbono);0)] Finsi // Valida si existe documento de utilidad/perdida cambiaria Si aTblCargosAbonos(cIdUtilidadPerdidaCamb) = 0 Continua FinSi // Validar que el documento de cargo/abono asociado al documento principal no se imprimio debido al rango de fechas. Si aTblDoctosTmp->Encontro Si aTblDoctosTmp(cFecha) >= pDeLaFecha Y aTblDoctosTmp(cFecha) <= pAlaFecha // Si el documento asociado si se imprimio continuar con el siguiente cargo-abono Continua FinSi FinSi // Incluir los documentos de utilidad / perdida cambiaria si la moneda de dichos documentos corresponde a la del reporte aTblDoctosTmp.Busca[@Str(aTblCargosAbonos(cIdUtilidadPerdidaCamb);0)] Si aTblDoctosTmp->Encontro // Incluir el documento solo si corresponden las monedas Si aTblDoctosTmp(cIdMoneda) = pIdMoneda1 //N.D.5683 lImpDocto = aTblDoctosTmp(cTotal) // Verifica la naturaleza del documento lNat = fNaturaleza(aTblDoctosTmp) Si pQueTipo = 0 Y lNat = 1 // Si es cliente y se trata de un abono lImpDocto = -lImpDocto Finsi Si pQueTipo = 1 y lNat = 0 // Si es proveedor y se trata de un cargo lImpDocto = -lImpDocto Finsi // Identar los documentos asociados fImprimeDocumento(aTblDoctosTmp; lImpDocto; pIdMoneda1; pQueTipo; 4; lImpDocto; lNat; 1) //N.D.5683 Finsi Finsi Finmientras FinFunc // ========================================================================================== // fImprimeResumen (Procedimiento) // Descripcion : Imprime los totales por Cliente/Proveedor // Comentarios : asume la misma distribucion de columnas que el cuerpo principal del reporte // ========================================================================================== // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // 29/10/2002 LAP N.D.1427 Adición de la variable global gClienteImpreso // a fin de identificar si el encabezado del // cliente se ha impreso o no. // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Deffunc fImprimeResumen(aTipo) Local lRenglon // N.D.1427 Inicio // Si el cliente no se ha impreso no se debe imprimir su resumen Si gClienteImpreso = 0 Retorna Sino gClienteImpreso = 1 FinSi // N.D.1427 Fin [C8,C10,C12].Subrayacol '-' lRenglon[8] = gTotalCargosCliente lRenglon[10] = gTotalAbonosCliente lRenglon[12] = gTotalSaldosCliente + gSaldoInicialCliente Imprime lRenglon lRenglon = '' lRenglon[6] = 'Resumen' Imprime lRenglon lRenglon[6] = 'Saldo Inicial' lRenglon[8] = gSaldoInicialCliente Imprime lRenglon Si aTipo = 0 // Se trata de clientes lRenglon[6] = '(+) Cargos' lRenglon[8] = gTotalCargosCliente Imprime lRenglon lRenglon[6] = '(-) Abonos' lRenglon[8] = gTotalAbonosCliente Imprime lRenglon Sino lRenglon[6] = '(-) Cargos' lRenglon[8] = gTotalCargosCliente Imprime lRenglon lRenglon[6] = '(+) Abonos' lRenglon[8] = gTotalAbonosCliente Imprime lRenglon Finsi [C8].Subrayacol'-' lRenglon[6] = '(=) Saldo Final' // todos los totales se suman por que son negativos o positivos según correspondas. Si aTipo = 0 // se trata de clientes lRenglon[8] = gSaldoInicialCliente + gTotalCargosCliente + gTotalAbonosCliente Sino lRenglon[8] = gSaldoInicialCliente + gTotalCargosCliente + gTotalAbonosCliente Finsi Imprime lRenglon Imprime 1 gTotalCargosGral = gTotalCargosGral + gTotalCargosCliente gTotalAbonosGral = gTotalAbonosGral + gTotalAbonosCliente gTotalSaldosGral = gTotalSaldosGral + gTotalSaldosCliente + gSaldoInicialCliente FinFunc // ========================================================================================== // fImprimeGranTotal (Procedimiento) // Descripcion : Imprime los totales generales del reporte // Comentarios : asume la misma distribucion de columnas que el cuerpo principal del reporte // ========================================================================================== Deffunc fImprimeGranTotal() Local lRenglon, lSubRaya lRenglon[8] = gTotalCargosGral lRenglon[10] = gTotalAbonosGral lRenglon[12] = gTotalSaldosGral lSubRaya = '' lSubRaya = '================='[C8,C10,C12] Imprime lSubRaya Imprime lRenglon 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 // ========================================================================================== // N.D.3010 Nuevo esquema de Busquedas Parciales po lo cual este metodo queda fuera de uso //!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 // ========================================================================================== // 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 // ============================================================================= // fDiscriminaDocto() // Salidas: 1 = indica que el Docto no aplica, debe descartarse // 0 = indica que el Docto no debe descartarse. // Historia de revisiones: // // Fecha ID-LOTUS Descripción //------------------------------------------------------------------------------ // 07/05/2002 N.D.389 De acuerdo al parámetro pConDoctosNoAfectados // se verifica que en caso de quererse incluir // Documentos no afectados en el reporte, dichos // Documentos no estén cancelados. (EGV) // ============================================================================= DefFunc fDiscriminaDocto(atDocumento:TABLA) Local lRegresa lRegresa = 0 // si no es cargo o abono Si atDocumento(cNaturaleza) = 2 lRegresa =1 Finsi // Si se despliegan Doctos. sin afectar, verificar que el Docto. no esté cancelado. Si pConDoctosNoAfectados = 1 Si atDocumento(cCancelado) = 1 lRegresa = 1 FinSi FinSi // Si no esta afectado se lo brinca. Solo cuando pConDoctosNoAfectados = 0. Si pConDoctosNoAfectados = 0 Si atDocumento(cAfectado) != 1 lRegresa =1 Finsi FinSi // 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 // cargo pero no es docto de cliente lRegresa =1 Finsi Si pQueTipo = 1 y atDocumento(cUsaProveedor) = 0 // abono pero no es docto de proveedor lRegresa =1 Finsi // S.C.264 Discriminar los ajustes con documento origen //Si atDocumento(cIdConceptoDocumento) = gIdConceptoAjuste Y atDocumento(cIdDocumentoOrigen) > 0 // lRegresa = 1 //FinSi Retorna lRegresa FinFunc // ========================================================================================== // fImprimeNotaEstadoDocto (Procedimiento) // Descripcion: Imprime la nota de especificaciones del estado del documento. // ========================================================================================== Deffunc fImprimeNotaEstadoDocto() fColumnas(3) Texto C0;'(1) Impreso' Imprime Texto C0;'(2) Afectado' Imprime Texto C0;'(3) Devuelto' Imprime Texto C0;'(4) Devuelto e Impreso' Imprime Texto C0;'(5) Sin Afectar' Imprime 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}' & 'ESTADO DE CUENTA ' 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' Texto C18;'Estado' Imprime Texto C0;'Fecha' Texto C2;'Serie' Texto C4;'Folio' Texto C6;'Concepto' Texto C8;'^Cargos' Texto C10;'^Abonos' Texto C12;'^Documento' Texto C14;'Vence' Texto C16;'Cambio' Texto C18;'Docto.' Imprime 1 Texto '@TC{0,0,0}@L{-1}' Imprime NEGRITAS FALSE FinEncab //************************************************************************************************* //Cuerpo principal. // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // 28/01/2002 MOFM SC 25 Se valida el parámetro pSoloConSaldo para // determinar si imprimir el cliente o no. // 29/10/2002 LAP N.D.1427 En el caso de clientes/proveedores, si se // imprime el Estado de Cuenta del Cliente con // el filtro "Solo con documentos" no debe de // considerar los documentos que tenga como // proveedor. // Adición de la variable global gClienteImpreso // a fin de identificar si el encabezado del // cliente se ha impreso o no . // 06/07/2005 LAP N.D.3347 Incluir los documentos de utilidad / perdida cambiaria cuando // el documento de abono no se imprima. (LAP) // 01/12/2005 LAP N.D.3010 Nuevo esquema de búsquedas parciales para agilizar los reportes // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Si pDelCliente = ' ' tClientes.Busca Primero pDelCliente = tClientes(cCodigoCliente) Finsi Si pAlCliente = ' ' tClientes.Busca Ultimo pAlCliente = tClientes(cCodigoCliente) Finsi tParametros.Busca Primero // Obtener el Ejercicio y el Periodo que le corresponde a pFechaIni, para calcular saldo inicial // Se calculan al inicio y se pasan como referencia, para calcularlos solo una vez. fEjercicioPeriodo(pDelaFecha; &gPeriodo; &gIdEjercicio; tPeriodos) // Esta función se debe ejecutar antes del cuerpo del reporte, para inicializar algunas valores // Globales para la biblioteca LibAdminPAQ.rpt fIniFechasHistoria(tPeriodos) // S.C.264 Recuperación del concepto de Ajuste al IVA tConceptos.UsaIndice['CCODIGOC01'] Si pQueTipo = 0 // 0 = Clientes tConceptos.Busca['AJUSTE_IVA_CTE_CARGO_2010'] Sino tConceptos.Busca['AJUSTE_IVA_PRV_CARGO_2010'] FinSi // 1 = Proveedores gIdConceptoAjuste = 0 Si tConceptos->Encontro gIdConceptoAjuste = tConceptos(cIdConceptoDocumento) FinSi tConceptos.UsaIndice[''] gRangoValido = pDeLaFecha <= pAlaFecha ? 1:0 Mientras[tClientes.Busca[pDelCliente & '..' & pAlCliente ]; (gRangoValido Y tClientes->Encontro); tClientes.Busca Siguiente[1]] Si fDiscriminaCliente(tClientes) = 1 Continua Finsi //N.D.5683 Este código queda igual solo se hace la observación que este pIdMoneda es el filtro //solo para mostrar los que clientes o proveedores que tengan definida esta moneda en el catálogo. //Si pIdMoneda != 1 Y pIdMoneda != tClientes(cIdMoneda) Si pIdMoneda != tClientes(cIdMoneda) //RCVG ND 5384 Continua FinSi //Si la moneda del cliente es pesos y requiere un reporte en moneda extranjera nose visualizará este documento //no es posible obtener un tipo de cambio con exactitud para convertir a moneda extranjera Si pIdMoneda = 1 Y pIdMoneda1 != 1 continua FinSi //Fin N.D.5683 // Se inicializan las variables de totales por cliente gTotalAbonosCliente = 0.0 gTotalCargosCliente = 0.0 gTotalSaldosCliente = 0.0 // Inicializar para cada cliente su bandera de impresión. gClienteImpreso = 0 // N.D.3010 Inicio // Búsqueda de un documento del cliente/proveedor a la fecha inicial del reporte // Se inicializa la fecha con la que se realizaran las busquedas en el rango de fechas gFechaBusqueda = pDeLaFecha // NOTA: Es obligatorio volver a fijar el índice a fin de que las búsquedas parciales funcionen correctamente tDocumentos.Usaindice['iClienteProveedorFecha'] tDocumentos.Busca[tClientes(cIdClienteProveedor) & ':' & gFechaBusqueda] Si !tDocumentos->ENCONTRO // Busquedas parciales: Cursor en el registro más cercano que cumple con la llave // NOTA: La propiedad Llave de la tabla nos regresa la llave más cercana que cumple con el criterio de la búsqueda // La llave está en formato cadena y no tiene ningún separador entre los campos, por lo que es necesario revisar // en FoxPro la definición del índice para descomponer los elementos de la Llave // Revisar si la llave actual corresponde al Producto / Almacén y al Rango de Fechas. Si tClientes(cIdClienteProveedor) = @Val(@SUBSTR(tDocumentos->Llave;0;11)) Si @SUBSTR(tDocumentos->Llave;11;8) >= pDeLaFecha Y @SUBSTR(tDocumentos->Llave;11;8) <= pAlaFecha // Realizar nuevamente la búsqueda a fin de posicionarnos en el registro y activar la propiedad Encontro gFechaBusqueda = @SUBSTR(tDocumentos->Llave;11;8) tDocumentos.Busca[tClientes(cIdClienteProveedor) & ':' & gFechaBusqueda] FinSi FinSi FinSi // Todos aun sin Doctos o el Cliente si tiene Doctos Si (pSoloConDoctos = 0) O tDocumentos->ENCONTRO gSaldoInicialCliente = fSaldoInicial(tClientes; gIdEjercicio; gPeriodo; pIdMoneda1; pDelaFecha; pQueTipo; tAcumuladosLib; tDoctosLib1; tTiposCambioLib) //N.D.5683 // Imprime los datos del cliente sólo cuando se selecciona que todos, sin importar si tiene saldo o no Si pSoloConSaldo = 0 gSoloConSaldo = 0 Sino gSoloConSaldo = 1 FinSi // En caso de que el cliente no tenga documentos en el rango de fechas, pero se desean imprimir todos los clientes imprimir sus datos Si pSoloConDoctos = 0 Y (pIdMoneda1 = tClientes(cIdMoneda) O pIdMoneda1 = 1) //N.D.5683 // Imprime datos del cliente que tiene saldo y su saldo inicial fImpDatosCliente(tClientes;gSaldoInicialCliente;pQueTipo) gSoloConSaldo = 0 FinSi // La tabla de documentos ya está posicianada en el primer documento del cliente en el rango de fechas // Recorrer los documentos hasta que sea diferente cliente/proveedor o se rompa el rango de fechas Mientras tDocumentos->Encontro Y (tDocumentos(cFecha) <= pAlaFecha) Si fDiscriminaDocto(tDocumentos) = 1 // Búsqueda del siguiente registro que cumpla con el cliente tDocumentos.BUSCA SIGUIENTE[1] Continua Finsi // Calcula el Saldo del Documento es igual tanto para cargos, como para abonos gSaldoDocto = fSaldoDocumento(pDelaFecha; pAlaFecha; tCargosAbonosLib; tDocumentos; tDoctosLib2) // Se verifica para no imprimir documentos saldados. Si (pSoloConSaldo = 1) Y (gSaldoDocto < 0.001) // Búsqueda del siguiente registro que cumpla con el cliente tDocumentos.BUSCA SIGUIENTE[1] Continua Finsi // Imprime los datos del cliente sólo cuando se selecciona que todos, sin importar si tiene saldo o no Si pSoloConSaldo = 0 fImpDatosCliente(tClientes; gSaldoInicialCliente; pQueTipo) FinSi Si ( pSoloConSaldo = 1 ) Y (gSoloConSaldo = 1) // Imprime datos del cliente que tiene saldo y su saldo inicial fImpDatosCliente(tClientes; gSaldoInicialCliente; pQueTipo) gSoloConSaldo = 0 FinSi Si pQueTipo = 0 // REPORTE PARA CLIENTES Si tDocumentos(cNaturaleza) = 0 // Imprime el Documento de Cargo y luego sus abonos asociados fImprimeDocumento(tDocumentos; gSaldoDocto; pIdMoneda1; pQueTipo; 1; tDocumentos(cTotal); 0; 0) //5683 // Ajuste por saldo //SI tDocumentos(cIdMonedCa) != 0 // tDoctosLib3.BUSCA[@STR(tDocumentos(cIdMonedCa);0)] // SI tDoctosLib3->ENCONTRO // lSaldoAjuste = fSaldoDocumento(pDelaFecha; pAlaFecha; tCargosAbonosLib; tDoctosLib3; tDoctosLib2) // fImprimeDocumento(tDoctosLib3; lSaldoAjuste; pIdMoneda1; pQueTipo; 4; tDoctosLib3(cTotal);0; 1 ) // fImprimeAbonosCargosAsociados(tDoctosLib3; tDoctosLib2; tCargosAbonosLib; pDelaFecha; pAlaFecha; pQueTipo) // FINSI //FINSI fImprimeAbonosCargosAsociados(tDocumentos; tDoctosLib2; tCargosAbonosLib; pDelaFecha; pAlaFecha; pQueTipo) Sino // Si el abono todavía tiene importe Pendiente deberá imprimirse nuevamente con el saldo pendiente por cubrir. Si gSaldoDocto > 0.001 fImprimeDocumento(tDocumentos; -gSaldoDocto; pIdMoneda1; pQueTipo; 3; -gSaldoDocto; 1; 0) //N.D.5683 // En caso de los abonos se deben de imprimir las utilidad / perdidas cambiarias siempre y cuando el cargo no se haya impreso fImprimeUtilidadesAsociadas(tDocumentos; tDoctosLib2; tCargosAbonosLib) Finsi Finsi Sino // REPORTE PARA PROVEEDORES Si tDocumentos(cNaturaleza) = 1 // Imprime el Documento de Abono y luego sus Cargos asociados fImprimeDocumento(tDocumentos; gSaldoDocto; pIdMoneda1; pQueTipo; 1; tDocumentos(cTotal); 1; 0) //N.D.5683 // Ajuste por saldo //SI tDocumentos(cIdMonedCa) != 0 // tDoctosLib3.BUSCA[@STR(tDocumentos(cIdMonedCa);0)] // SI tDoctosLib3->ENCONTRO // lSaldoAjuste = fSaldoDocumento(pDelaFecha; pAlaFecha; tCargosAbonosLib; tDoctosLib3; tDoctosLib2) // fImprimeDocumento(tDoctosLib3; lSaldoAjuste; pIdMoneda1; pQueTipo; 4; tDoctosLib3(cTotal);0; 1 ) // fImprimeAbonosCargosAsociados(tDoctosLib3; tDoctosLib2; tCargosAbonosLib; pDelaFecha; pAlaFecha; pQueTipo) // FINSI //FINSI fImprimeAbonosCargosAsociados(tDocumentos; tDoctosLib2; tCargosAbonosLib; pDelaFecha; pAlaFecha; pQueTipo) Sino // Si el cargo todavía tiene importe Pendiente deberá imprimirse nuevamente con el saldo pendiente por cubrir Si gSaldoDocto > 0.001 fImprimeDocumento(tDocumentos; -gSaldoDocto; pIdMoneda1; pQueTipo; 3; -gSaldoDocto; 0; 0) //N.D.5683 // En caso de los abonos se deben de imprimir las utilidad / perdidas cambiarias siempre y cuando el cargo no se haya impreso fImprimeUtilidadesAsociadas(tDocumentos; tDoctosLib2; tCargosAbonosLib) Finsi Finsi Finsi // Búsqueda del siguiente registro que cumpla con el cliente tDocumentos.BUSCA SIGUIENTE[1] FinMientras Si gSoloConSaldo = 0 fImprimeResumen(pQueTipo) FinSi Si pFormato = 1 // (Impresión de Cliente por hoja) Saltahoj Finsi Finsi // N.D.3010 Fin FinMientras fImprimeGranTotal() fImprimeNotaEstadoDocto() // FIN DEL REPORTE