// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // // AnPreciosExcel.rpt // Nombre del reporte en el sistema: Antigüedad de Saldos y Pronóstico de Cobranza/Pagos // [Detallado] por Cliente/Proveedor en Excel // // Sistema: AdminPAQ v1.1. // // Este reporte pertenece al módulo de clientes y proveedores. // // Consideraciones especiales: // // Elaboró: Leonardo Aguilar Pizano // Fecha: 17 de septiembre de 2002 // Lotus Notes: S.C.239 // // Revisiones : // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // 01/10/2003 EGV 2445 Se agregó el parámetro pHastaFecha que es usado para validarla // con la Fecha de Vencimiento de cada Documento obtenido. Si la // fecha de Vencimiento del Documento es menor que el parámetro // entonces se desplegará en el reporte. // 24/05/2004 DRdA N.C.65 Se agregaron los parámetros pAgenteInicial y pAgenteFinal para // filtrar el reporte por un rango de agentes. // 09/03/2005 HVA N.D.3037 // 09/03/2005 HVA N.D.3077 // 29/04/2005 LAP N.D.3240 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 y // fCambiarMonedaImporteAReporte de LibAdminPAQ.rpt // 22/06/2005 HVA N.D.3316 No se tomaban en cuenta abonos asociados al cargo en la parte de pronostico de cobranza // 08/08/2005 LAP N.D.3377 En caso de presentar el reporte en forma condensada no se debe // de mostrar la columna de agente (LAP) // - Cuerpo del reporte // No incluir los documentos cuya fecha sea mayor a la fecha hasta (LAP) // - Cuerpo del reporte // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ********************************************************************************************* // Funciones de librería // ********************************************************************************************* Incluye LibAdminPAQ.rpt Incluye LibCliProv.rpt // ********************************************************************************************* // Parámetros // ********************************************************************************************* Parametro pTipoReporte = 3 // Tipo del reporte // 1 - Antigüedad de saldos y pronóstico de cobranza por cliente // 2 - Antigüedad de saldos y pronóstico de cobranza detallado por cliente // 3 - Antigüedad de saldos y pronóstico de pagos por proveedor // 4 - Antigüedad de saldos y pronóstico de pagos detallado por proveedor Parametro pFechaCorte = '20040531' // Fecha de corte Parametro pHastaFecha = '20040531' Parametro pCteProvInicial = ' ' // Cliente inicial del rango Parametro pCteProvFinal = ' ' // Cliente final del rango Parametro pDias = 15 // Dias para agrupar saldos vencidos Parametro pEstadoCliente = 0 // Estado del cliente // 0 Todos // 1 Activos // 2 Inactivos Parametro pAgenteInicial = ' ' // Agente inicial del rango Parametro pAgenteFinal = ' ' // Agente final del rango Parametro pTipoImpresion = 0 // Tipo de impresión // 0 Todos // 1 Vencidos // 2 Por vencer Parametro pDocumentosAImprimir= 0 // Documentos a imprimir // 0 Todos // 1 Cargos // 2 Abonos Parametro pIdMonedaReporte = 1 // Moneda del reporte Parametro pDetallado = 1 // Tipo de // 0 Concentrado // 1 Detallado Parametro pClienteProveedor = 1 // Tipo de reporte // 0 - Cliente // 1 - Proveedor Parametro pIdClase1 = 0 // Clasificaciones del cliente Parametro pIdClase2 = 0 // por omisión deben recibir 0 = ninguna Parametro pIdClase3 = 0 // se pueden seleccionar varias clases por clasificación. Parametro pIdClase4 = 0 // por los pueden recibir una lista con los Id´s de las clases Parametro pIdClase5 = 0 // seleccionadas. Parametro pIdClase6 = 0 // ********************************************************************************************* // Tablas // ********************************************************************************************* UsaEmpresa tEmpresa;'CONTPAQ I Facturacion' // Parámetros UsaTabla tClientes = tEmpresa['MGW10002'] // Clientes/Proveedores tClientes.Usaindice['iCodigoTipo'] // cCodigoCliente + cTipo UsaTabla tDocumentos = tEmpresa['MGW10008'] // Documentos tDocumentos.Usaindice['iCLienteProvAfectaNatVenc']// cIdClienteProveedor+cAfectado+cNaturaleza // cFechaVencimiento UsaTabla tValoresDeClasif = tEmpresa['mgw10020'] tValoresDeClasif.UsaIndice[''] UsaTabla tPeriodos = tEmpresa['mgw10031'] // Periodos tPeriodos.UsaIndice[''] UsaTabla tMoneda = tEmpresa['MGW10034'] // Monedas tMoneda.Usaindice[''] // Indice primario: cIdMoneda UsaTabla tParametros = tEmpresa['MGW10000'] // Parámetros de la empresa tParametros.Usaindice[''] // Indice primario: cIdEmpresa UsaTabla tCargosAbonosLib = tEmpresa['mgw10009'] // Cargos / abonos tCargosAbonosLib.UsaIndice['iDoctoCargoAbono'] // IDDoctoCargo + IDDoctoAbono UsaTabla tDoctosLib2 = tEmpresa['mgw10008'] Alias 'tDoctos2' tDoctosLib2.Usaindice[''] // Usa el indice Primario cIDDocumento Usatabla tTiposCambio = tEmpresa['mgw10035'] // Tipos de cambio por día tTiposCambio.Usaindice['iMonedaFecha'] UsaTabla tConceptos = tEmpresa['mgw10006'] tConceptos.UsaIndice[''] Si pClienteProveedor = 0 UsaTabla tAgentes = tEmpresa['mgw10001'] tAgentes.UsaIndice[''] FinSi // ********************************************************************************************* // Definiciones y asumidos globales para el reporte // ********************************************************************************************* Columnas 11;1 Usaletra 'Arial' Altura 9 // ********************************************************************************************* // Variables de ámbito global // ********************************************************************************************* gIdioma = 0 // Idioma del reporte // 0 = Español // 1 = Inglés gIdEjercicio = 0 // ID del ejercicio que contiene la fecha de inicio del reporte gPeriodo = 0 // Numero de período que corresponde a la fecha de inicio del reporte tMoneda.Busca[@str(pIdMonedaReporte;0)] Si tMoneda->Encontro gDecimalesMonedaReporte = tMoneda(cDecimalesMoneda) gNombreMonedaReporte = tMoneda(cNombreMoneda) Sino gDecimalesMonedaReporte = 2 // Número de decimales en la moneda gNombreMonedaReporte = 'Peso Mexicano' FinSi [C0..C7].Decimales 0 gTotalCliente = 0 // Acumulados del cliente gTotalReporte = 0 // Acumulados del reporte gLimite1 = pDias // Guarda el límite superior del primer rango para agrupar saldos [ 1 - 15 Días] gLimite2 = 2 * pDias // Guarda el límite superior del segundo rango para agrupar saldos[16 - 30 Días] gLimite3 = 3 * pDias // Guarda el límite superior del tercer rango para agrupar saldos [31 - 45 Días] // ********************************************************************************************* // Definicion de constantes de EXCEL // ********************************************************************************************* constante xlCentrarEnSeleccion 7 constante xlAutomatico -4105 constante xlManual -4135 constante xlInferior -4107 constante xlSubrayadoDoble -4119 constante xlIzquierda -4131 constante xlMediano -4138 constante xlNinguno -4142 constante xlDerecha -4152 constante xlSuperior -4160 constante xlHojaCalculo -4167 constante xlLineaSimple 1 constante xlBordeSuperior 8 constante xlBordeInferior 9 constante xlBordeIzquierda 7 constante xlBordeDerecha 10 constante xlCentro -4108 // ********************************************************************************************* // Inicializa EXCEL // ********************************************************************************************* // Acceso a los objetos de excel. // Crea un objeto de Excel con la funcion @CreaObjeto(). A esta funcion se le // pasa un identificador de OLE de la aplicacion que se desea crear. En este // caso el identificador es Excel.Application.5 Objeto Excel = @CreaObjeto('Excel.Application') // Invoca el metodo de EXCEL Libros y luego el metodo Agregar para crear un libro // de hoja de calculo representado por la constante de EXCEL (xlHojaCalculo). // Es importante notar que estos metodos NO LOS EJECUTA EL REPORTEADOR sino que // los hace EXCEL y estan documentados en el Help de EXCEL Objeto wb = Excel.WorkBooks.Add(xlHojaCalculo) // Accesa la hoja de calculo (HojasCalculo) numero 1 del Libro creado anteriormente // y representado por la variable wb, de la instruccion anterior Objeto ws = wb.Worksheets(1) // Hace visible a EXCEL. Para Excel, TRUE o VERDADERO es -1, FALSE o FALSO es 0 Excel.ActiveWindow.DisplayGridlines = FALSE[C0] Excel.Visible = -1[C0] RenActual = 1 // Pone la longitud de cada columna // Codigo-Cliente = 10 caracteres ws.Columns(1).ColumnWidth = 10[C0] // Nombre-CLiente = 40 caracteres ws.Columns(2).ColumnWidth = 40[C0] Si pClienteProveedor = 0 // Nombre-Agente = 40 caracteres ws.Columns(3).ColumnWidth = 40[C0] SiNo // Nombre-Agente ws.Columns(3).ColumnWidth = 0[C0] FinSi // Tipo de salida, El reporte es detallado ? Si pDetallado = 0 // Concepto ws.Columns(4).ColumnWidth = 0[C0] // Serie ws.Columns(5).ColumnWidth = 0[C0] // Folio ws.Columns(6).ColumnWidth = 0[C0] // Fecha_Documento ws.Columns(7).ColumnWidth = 0[C0] // Fecha_Vencimiento ws.Columns(8).ColumnWidth = 0[C0] // Dias_Vencidos/Por Vencer ws.Columns(9).ColumnWidth = 0[C0] Sino // Concepto ws.Columns(4).ColumnWidth = 25[C0] // Serie ws.Columns(5).ColumnWidth = 5[C0] // Folio ws.Columns(6).ColumnWidth = 12[C0] // Fecha_Documento = 14 caracteres ws.Columns(7).ColumnWidth = 14[C0] // Fecha_Vencimiento = 14 caracteres ws.Columns(8).ColumnWidth = 14[C0] // Dias_Vencidos/Por Vencer = 8 caracteres ws.Columns(9).ColumnWidth = 8[C0] FinSi // Fin del tipo de salida // Tipo de impresión Si pTipoImpresion = 0 // TODOS: Vencidos y Por vencer // Dias_PorVencer = 8 caracteres Si pDetallado = 0 ws.Columns(10).ColumnWidth = 0[C0] Sino ws.Columns(10).ColumnWidth = 8[C0] FinSI // Total_Vencido = 15 caracteres ws.Columns(11).ColumnWidth = 15[C0] // Titulo_Vencido1 = 15 caracteres ws.Columns(12).ColumnWidth = 15[C0] // Titulo_Vencido2 = 15 caracteres ws.Columns(13).ColumnWidth = 15[C0] // Titulo_Vencido3 = 15 caracteres ws.Columns(14).ColumnWidth = 15[C0] // Titulo_Vencido4 = 15 caracteres ws.Columns(15).ColumnWidth = 15[C0] // Total_PorVencer = 15 caracteres ws.Columns(16).ColumnWidth = 15[C0] // Titulo_Vencido1 = 15 caracteres ws.Columns(17).ColumnWidth = 15[C0] // Titulo_Vencido2 = 15 caracteres ws.Columns(18).ColumnWidth = 15[C0] // Titulo_Vencido3 = 15 caracteres ws.Columns(19).ColumnWidth = 15[C0] // Titulo_Vencido4 = 15 caracteres ws.Columns(20).ColumnWidth = 15[C0] // Total = 15 caracteres ws.Columns(21).ColumnWidth = 15[C0] Sino // Vencidos o Por Vencer // Total_Vencido/Por_Vencer = 15 caracteres ws.Columns(10).ColumnWidth = 15[C0] // Titulo_Vencido1/Por_Vencer1 = 15 caracteres ws.Columns(11).ColumnWidth = 15[C0] // Titulo_Vencido2/Por_Vencer2 = 15 caracteres ws.Columns(12).ColumnWidth = 15[C0] // Titulo_Vencido3/Por_Vencer3 = 15 caracteres ws.Columns(13).ColumnWidth = 15[C0] // Titulo_Vencido4/Por_Vencer4 = 15 caracteres ws.Columns(14).ColumnWidth = 15[C0] // Total = 15 caracteres ws.Columns(15).ColumnWidth = 15[C0] FinSi // Fin del tipo de impresión // ********************************************************************************************* // Nombre: fConfiguraColumnas // Proceso: Configura las mascaras para las columnas que manejan cantidades // Entradas: // Salidas // ********************************************************************************************* DEFFUNC fConfiguraColumnas () LOCAL lDigDecimales, lDecimales, lNumDecimales, lFormato // Configuración de las columnas tParametros.Busca Primero lDigDecimales = '0000000000' // Decimales en días lFormato = '#,##0_);#,##0)' ws.Columns(9).NumberFormat = lFormato[C0] Si pTipoImpresion = 0 ws.Columns(10).NumberFormat = lFormato[C0] FinSi // Decimales en importes lDecimales = @SUBSTR(lDigDecimales; 1; gDecimalesMonedaReporte) lFormato = '#,##0.' & lDecimales & '_);(#,##0.' & lDecimales & ')' // Tipo de impresión: TODOS o Vencidos/PorVencer ? Si pTipoImpresion = 0 ws.Columns(11).NumberFormat = lFormato[C0] ws.Columns(12).NumberFormat = lFormato[C0] ws.Columns(13).NumberFormat = lFormato[C0] ws.Columns(14).NumberFormat = lFormato[C0] ws.Columns(15).NumberFormat = lFormato[C0] ws.Columns(16).NumberFormat = lFormato[C0] ws.Columns(17).NumberFormat = lFormato[C0] ws.Columns(18).NumberFormat = lFormato[C0] ws.Columns(19).NumberFormat = lFormato[C0] ws.Columns(20).NumberFormat = lFormato[C0] ws.Columns(21).NumberFormat = lFormato[C0] Sino ws.Columns(10).NumberFormat = lFormato[C0] ws.Columns(11).NumberFormat = lFormato[C0] ws.Columns(12).NumberFormat = lFormato[C0] ws.Columns(13).NumberFormat = lFormato[C0] ws.Columns(14).NumberFormat = lFormato[C0] ws.Columns(15).NumberFormat = lFormato[C0] FinSi // Fin tipo de impresión FINFUNC // Fin método: fConfiguraColumnas // ========================================================================================== // fDiscriminaCliente // Descripcion : Verifica que el cliente / proveedor cumpla con los filtros del reporte // Entrada : atCliente : tabla de clientes // Salidas: 1 : indica que el cliente no aplica, debe descartarse // 0 : indica que el cliente no debe descartarse. // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // ========================================================================================== Deffunc fDiscriminaCliente(atCliente:TABLA) Local lRegresa lRegresa = 0 // Se salta el Cliente NINGUNO Si atCliente(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 (pClienteProveedor = 0) Y (atCliente(cTipoCliente) > 2) lRegresa = 1 Finsi // Si se requieren los Proveedores y no se trata de un Proveedor Si (pClienteProveedor = 1) Y (atCliente(cTipoCliente) < 2) lRegresa = 1 Finsi // Descarta los clientes segun el filtro de activo / inactivo Si (pEstadoCliente != 0) Si (pEstadoCliente = 1 Y atCliente(cEstatus) = 0) O (pEstadoCliente = 2 Y atCliente(cEstatus) = 1) lRegresa = 1 FinSi Finsi // Se Revisan las CLASIFICACIONES, solo en el caso de haber seleccionado al menos una Si gNumDeClases > 0 Si !fMiembroDeUnaClase(atCliente; gNumDeClases; gListIdDeClases; pClienteProveedor) // Sa salta el cliente actual, por no pertenecer a alguna de las clasificaciones lRegresa = 1 Finsi Finsi Retorna lRegresa FinFunc // Fin Método: fDiscriminaCliente // ========================================================================================== // fDiscriminaPorAgente // Descripcion : Verifica que el agente del documento cumpla con los filtros del reporte // Entrada : aIdAgente : identificador que relaciona al agente. // Salidas: 1 : indica que el agente no aplica, debe descartarse // 0 : indica que el agente no debe descartarse. // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // ========================================================================================== Deffunc fDiscriminaPorAgente(aIdAgente) Local lRegresa lRegresa = 0 Si pClienteProveedor = 0 // Cuando se quiere desde el primero se incluyen los documentos con id de agente en cero // Si no se quiere desde el primer agente y el id es cero se descarta el docto Si pAgenteInicial != ' ' Y aIdAgente = 0 lRegresa = 1 Finsi // Se busca el agente del docto actual para efectuar las comparaciones Si lRegresa = 0 Y aIdAgente != 0 tAgentes.Busca[@str(aIdAgente;0)] FinSi // Si el agente del docto es menor al inicial del rango se descarta el docto Si lRegresa = 0 Y pAgenteInicial != ' ' Y tAgentes(cCodigoAgente) < pAgenteInicial lRegresa = 1 Finsi // Si el agente del docto es mayor al final del rango se descarta el docto Si lRegresa = 0 Y pAgenteFinal != ' ' Y aIdAgente != 0 Y tAgentes(cCodigoAgente) > pAgenteFinal lRegresa = 1 Finsi FinSi Retorna lRegresa FinFunc // Fin Método: fDiscriminaPorAgente // ========================================================================================== // fImprimirTotalReporte // Descripcion : // Entrada : // Salidas: // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // ========================================================================================== Deffunc fImprimirTotalReporte() Local lImporte Local lRango1, lRango2, lCelda1, lCelda2 // Avanza de renglon RenActual = RenActual + 2[C0] lCelda1[0] = 'G' & RenActual Si pTipoImpresion = 0 lCelda2[0] = 'J' & RenActual lRango2 = 'K' & RenActual & ':U' & RenActual Sino lCelda2[0] = 'I' & RenActual lRango2 = 'J' & RenActual & ':O' & RenActual FinSi lRango1 = lCelda1 & ':' & lCelda2 ws.Range(lRango1).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range(lRango1).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range(lCelda1).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range(lCelda2).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range(lCelda1).Value = 'TOTAL REPORTE:'[C0] ws.Range(lRango2).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range(lRango2).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range(lRango2).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range(lRango2).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] Escoge pTipoImpresion Caso 0 // Todos // Total_Vencido ws.Range('K' & RenActual).Value = gTotalReporte[C0] // Vencido1 ws.Range('L' & RenActual).Value = gTotalReporte[C1] // Vencido2 ws.Range('M' & RenActual).Value = gTotalReporte[C2] // Vencido3 ws.Range('N' & RenActual).Value = gTotalReporte[C3] // Vencido4 ws.Range('O' & RenActual).Value = gTotalReporte[C4] // Total_PorVencer ws.Range('P' & RenActual).Value = gTotalReporte[C5] // PorVencer1 ws.Range('Q' & RenActual).Value = gTotalReporte[C6] // PorVencer2 ws.Range('R' & RenActual).Value = gTotalReporte[C7] // PorVencer3 ws.Range('S' & RenActual).Value = gTotalReporte[C8] // PorVencer4 ws.Range('T' & RenActual).Value = gTotalReporte[C9] // Total ws.Range('U' & RenActual).Value = gTotalReporte[C10] FinCaso Caso 1 // Vencidos // Total_Vencido ws.Range('J' & RenActual).Value = gTotalReporte[C0] // Vencido1 ws.Range('K' & RenActual).Value = gTotalReporte[C1] // Vencido2 ws.Range('L' & RenActual).Value = gTotalReporte[C2] // Vencido3 ws.Range('M' & RenActual).Value = gTotalReporte[C3] // Vencido4 ws.Range('N' & RenActual).Value = gTotalReporte[C4] // Total ws.Range('O' & RenActual).Value = gTotalReporte[C10] FinCaso Caso 2 // PorVencer // Total_PorVencer ws.Range('J' & RenActual).Value = gTotalReporte[C5] // PorVencer1 ws.Range('K' & RenActual).Value = gTotalReporte[C6] // PorVencer2 ws.Range('L' & RenActual).Value = gTotalReporte[C7] // PorVencer3 ws.Range('M' & RenActual).Value = gTotalReporte[C8] // PorVencer4 ws.Range('N' & RenActual).Value = gTotalReporte[C9] // Total ws.Range('O' & RenActual).Value = gTotalReporte[C10] FinCaso FinEscoge Finfunc // Fin método: fImprimirTotalReporte // ========================================================================================== // fImprimirTotalCliente // Descripcion : // Entrada : // Salidas: // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // ========================================================================================== Deffunc fImprimirTotalCliente(atCliente:TABLA) Local lImporte Local lRango, lUltimaCelda, lCeldaImportes, lCeldaDias // Avanza de renglon RenActual = RenActual + 1[C0] Si pTipoImpresion = 0 lRango = 'A' & RenActual & ':U' & RenActual lUltimaCelda[0] = 'U' & RenActual lCeldaImportes[0] = 'K' & RenActual lCeldaDias[0] = 'J' & RenActual Sino lRango = 'A' & RenActual & ':O' & RenActual lUltimaCelda[0] = 'O' & RenActual lCeldaImportes[0] = 'J' & RenActual lCeldaDias[0] = 'I' & RenActual FinSi Si pDetallado = 0 ws.Range(lRango).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range(lRango).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range(lRango).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range(lRango).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] // Codigo_Cliente lMascarilla = tParametros(cMascarillaClientes) lCodigo = atCliente(cCodigoCliente) ws.Range('A' & RenActual).Value = @Chr(39) & fMascarilla(lCodigo;lMascarilla)[C0] // Nombre_Cliente ws.Range('B' & RenActual).Value = atCliente(cRazonSocial)[C0] Sino ws.Range('D' & RenActual & ':' & lCeldaDias).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('D' & RenActual & ':' & lCeldaDias).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('D' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range(lCeldaDias).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] Si pClienteProveedor = 0 ws.Range('D' & RenActual).Value = 'TOTAL CLIENTE:'[C0] SiNo ws.Range('D' & RenActual).Value = 'TOTAL PROVEEDOR:'[C0] FinSi ws.Range(lCeldaImportes & ':' & lUltimaCelda).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range(lCeldaImportes & ':' & lUltimaCelda).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range(lCeldaImportes & ':' & lUltimaCelda).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range(lCeldaImportes & ':' & lUltimaCelda).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] FinSi Escoge pTipoImpresion Caso 0 // Todos // Total_Vencido ws.Range('K' & RenActual).Value = gTotalCliente[C0] // Vencido1 ws.Range('L' & RenActual).Value = gTotalCliente[C1] // Vencido2 ws.Range('M' & RenActual).Value = gTotalCliente[C2] // Vencido3 ws.Range('N' & RenActual).Value = gTotalCliente[C3] // Vencido4 ws.Range('O' & RenActual).Value = gTotalCliente[C4] // Total_PorVencer ws.Range('P' & RenActual).Value = gTotalCliente[C5] // Vencido1 ws.Range('Q' & RenActual).Value = gTotalCliente[C6] // Vencido2 ws.Range('R' & RenActual).Value = gTotalCliente[C7] // Vencido3 ws.Range('S' & RenActual).Value = gTotalCliente[C8] // Vencido4 ws.Range('T' & RenActual).Value = gTotalCliente[C9] // Total ws.Range('U' & RenActual).Value = gTotalCliente[C10] FinCaso Caso 1 // Vencidos // Total_Vencido ws.Range('J' & RenActual).Value = gTotalCliente[C0] // Vencido1 ws.Range('K' & RenActual).Value = gTotalCliente[C1] // Vencido2 ws.Range('L' & RenActual).Value = gTotalCliente[C2] // Vencido3 ws.Range('M' & RenActual).Value = gTotalCliente[C3] // Vencido4 ws.Range('N' & RenActual).Value = gTotalCliente[C4] // Total ws.Range('O' & RenActual).Value = gTotalCliente[C10] FinCaso Caso 2 // Por Vencer // Total_PorVencer ws.Range('J' & RenActual).Value = gTotalCliente[C5] // Vencido1 ws.Range('K' & RenActual).Value = gTotalCliente[C6] // Vencido2 ws.Range('L' & RenActual).Value = gTotalCliente[C7] // Vencido3 ws.Range('M' & RenActual).Value = gTotalCliente[C8] // Vencido4 ws.Range('N' & RenActual).Value = gTotalCliente[C9] // Total ws.Range('O' & RenActual).Value = gTotalCliente[C10] FinCaso FinEscoge gTotalCliente = 0 Si pDetallado = 1 // Avanza de renglon RenActual = RenActual + 1[C0] FinSi Finfunc // Fin Método: fImprimirTotalCliente // ========================================================================================== // fImporteMonedaReporte // Descripcion : El importe lo cambia al IdMoneda que recibe a la moneda del Reporte // Entrada : aImporte : Importe a cambiar // aIdMonedaDocto : Id de la moneda del documento // aTipoCambioDocto : Tipo de cambio del documento a la moneda base // Salida : Importe del documento o movimiento reflejado en la moneda que recibe // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // ========================================================================================== //! N.D.3240 Deffunc fImporteMonedaReporte(aImporte; aIdMonedaDocto; aTipoCambioDocto; aFecha) //! N.D.3240 Local lImporteMonedaRpt, lImporteMonedaBase, lTipoCambio //! N.D.3240 //! N.D.3240 Si aIdMonedaDocto != pIdMonedaReporte //! N.D.3240 // Transforma el importe a la moneda base tomando el tipo de cambio del documento //! N.D.3240 lImporteMonedaBase = aImporte * aTipoCambioDocto //! N.D.3240 Si pIdMonedaReporte != 1 //! N.D.3240 // Si la moneda del reporte es diferente a la base convierte tomando el tipo de cambio //! N.D.3240 lTipoCambio = fTipoCambio(aFecha; pIdMonedaReporte; tTiposCambio) //! N.D.3240 lImporteMonedaRpt = lImporteMonedaBase / lTipoCambio //! N.D.3240 Sino //! N.D.3240 lImporteMonedaRpt = lImporteMonedaBase //! N.D.3240 FinSi //! N.D.3240 Sino //! N.D.3240 lImporteMonedaRpt = aImporte //! N.D.3240 FinSi //! N.D.3240 //! N.D.3240 Retorna lImporteMonedaRpt //! N.D.3240 FinFunc // Fin método: fImporteMonedaReporte // ========================================================================================== // fImprimirDocumento // Descripcion : // // Entrada : // Salidas: // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // ========================================================================================== Deffunc fImprimirDocumento(atCliente:TABLA; atDocumento:TABLA; aSumar; aFechaDocto; aFechaVencimiento; aDiasVencidos; aDiasPorVencer; aTotalVencido; aTotalPorVencer; aTotal) Local lImporte, lVencido, lPorVencer Local lRango // Si el reportes es para clientes descartar los documentos que usen proveedor y viceversa // pClienteProveedor [0 - Cliente / 1 - Proveedor] Si (pClienteProveedor = 0) y (atDocumento(cUsaProveedor) = 1) Retorna FinSI Si (pClienteProveedor = 1) y (atDocumento(cUsaCliente) = 1) Retorna FinSI lImporte = 0 lAcumulados = 0 Si pTipoImpresion = 0 o pTipoImpresion = 1 // Todos y/o Vencidos // Si aDiasVencidos != 0 Si aDiasVencidos <= gLimite1 lAcumulados[1] = aTotalVencido Sino Si aDiasVencidos <= gLimite2 lAcumulados[2] = aTotalVencido Sino Si aDiasVencidos <= gLimite3 lAcumulados[3] = aTotalVencido Sino lAcumulados[4] = aTotalVencido Finsi Finsi Finsi // FinSi FinSi Si pTipoImpresion = 0 o pTipoImpresion = 2 // Todos y/o PorVencer // Si aDiasPorVencer != 0 Si aDiasPorVencer <= gLimite1 lAcumulados[6] = aTotalPorVencer Sino Si aDiasPorVencer <= gLimite2 lAcumulados[7] = aTotalPorVencer Sino Si aDiasPorVencer <= gLimite3 lAcumulados[8] = aTotalPorVencer Sino lAcumulados[9] = aTotalPorVencer Finsi Finsi Finsi // FinSi FinSi Si aSumar = 1 lImporte = lAcumulados Si pTipoImpresion = 0 o pTipoImpresion = 1 lImporte[0] = aTotalVencido FinSi Si pTipoImpresion = 0 o pTipoImpresion = 2 lImporte[5] = aTotalPorVencer FinSi lImporte[10] = aTotal Sino lImporte = -lAcumulados Si pTipoImpresion = 0 o pTipoImpresion = 1 lImporte[0] = -aTotalVencido FinSi Si pTipoImpresion = 0 o pTipoImpresion = 2 lImporte[5] = -aTotalPorVencer FinSi lImporte[10] = -aTotal FinSi Si pDetallado = 1 // Avanza de renglon RenActual = RenActual + 1[C0] Si pTipoImpresion = 0 lRango = 'A' & RenActual & ':U' & RenActual Sino lRango = 'A' & RenActual & ':O' & RenActual FinSi ws.Range(lRango).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range(lRango).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range(lRango).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range(lRango).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] // Codigo_Cliente lMascarilla = tParametros(cMascarillaClientes) lCodigo = atCliente(cCodigoCliente) ws.Range('A' & RenActual).Value = @Chr(39) & fMascarilla(lCodigo;lMascarilla)[C0] // Nombre_Cliente ws.Range('B' & RenActual).Value = atCliente(cRazonSocial)[C0] Si pClienteProveedor = 0 ws.Range('C' & RenActual).Value = ''[C0] Si pClienteProveedor = 0 Y atDocumento(cIdAgente) != 0 ws.Range('C' & RenActual).Value = tAgentes(cNombreAgente)[C0] FinSi FinSi // Concepto tConceptos.Busca[@str(atDocumento(cIdConceptoDocumento);0)] ws.Range('D' & RenActual).Value = tConceptos(cNombreConcepto)[C0] // Serie ws.Range('E' & RenActual).Value = atDocumento(cSerieDocumento)[C0] // Folio ws.Range('F' & RenActual).Value = atDocumento(cFolio)[C0] // Fecha_Documento ws.Range('G' & RenActual).Value = @Col(fFormateaFecha(aFechaDocto; gIdioma);0)[C0] // Fecha_Vencimiento Si aFechaVencimiento != 0 ws.Range('H' & RenActual).Value = @Col(fFormateaFecha(aFechaVencimiento; gIdioma);0)[C0] FinSi Escoge pTipoImpresion Caso 0 // Todos // Dias_Vencidos ws.Range('I' & RenActual).Value = aDiasVencidos[C0] // Dias_PorVencer ws.Range('J' & RenActual).Value = aDiasPorVencer[C0] // Total_Vencido ws.Range('K' & RenActual).Value = lImporte[C0] // Vencido1 ws.Range('L' & RenActual).Value = lImporte[C1] // Vencido2 ws.Range('M' & RenActual).Value = lImporte[C2] // Vencido3 ws.Range('N' & RenActual).Value = lImporte[C3] // Vencido4 ws.Range('O' & RenActual).Value = lImporte[C4] // Total_PorVencer ws.Range('P' & RenActual).Value = lImporte[C5] // Vencido1 ws.Range('Q' & RenActual).Value = lImporte[C6] // Vencido2 ws.Range('R' & RenActual).Value = lImporte[C7] // Vencido3 ws.Range('S' & RenActual).Value = lImporte[C8] // Vencido4 ws.Range('T' & RenActual).Value = lImporte[C9] // Total ws.Range('U' & RenActual).Value = lImporte[C10] FinCaso Caso 1 // Vencidos // Dias_Vencidos ws.Range('I' & RenActual).Value = aDiasVencidos[C0] // Total_Vencido ws.Range('J' & RenActual).Value = lImporte[C0] // Vencido1 ws.Range('K' & RenActual).Value = lImporte[C1] // Vencido2 ws.Range('L' & RenActual).Value = lImporte[C2] // Vencido3 ws.Range('M' & RenActual).Value = lImporte[C3] // Vencido4 ws.Range('N' & RenActual).Value = lImporte[C4] // Total ws.Range('O' & RenActual).Value = lImporte[C10] FinCaso Caso 2 // PorVencer // Dias_PorVencer ws.Range('I' & RenActual).Value = aDiasPorVencer[C0] // Total_PorVencer ws.Range('J' & RenActual).Value = lImporte[C5] // Vencido1 ws.Range('K' & RenActual).Value = lImporte[C6] // Vencido2 ws.Range('L' & RenActual).Value = lImporte[C7] // Vencido3 ws.Range('M' & RenActual).Value = lImporte[C8] // Vencido4 ws.Range('N' & RenActual).Value = lImporte[C9] // Total ws.Range('O' & RenActual).Value = lImporte[C10] FinCaso FinEscoge FinSi gTotalReporte = gTotalReporte + lImporte gTotalCliente = gTotalCliente + lImporte Si aTotal != 0 gClienteConSaldo = 1 FinSi Finfunc // Fin método: fImprimirDocumento // ********************************************************************************************* // Encabezado del reporte // ********************************************************************************************* // ========================================================================================== // fImprimeClasesExcel // Descripcion : Imprime los nombres de las clases justificados al centro // Entrada : aNumClases : El número total de clases seleccionadas,contando todas las // clasificaciones // aNumPorClase: Lista que tiene como elementos el numero de clases seleccionadas // para cada clasificación // Salidas: // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // ========================================================================================== Deffunc fImprimeClasesExcel(aListaNombreClases; aNumPorClase) Local lLeyenda, lNumeroClase, lNumElmentos, lContador, lDesplazamiento lDesplazamiento = 0 lNumeroClase = 0 lLeyenda = '' // Se barren las seis listas de ID´s Mientras lNumeroClase < 6 // solo se imprimen los que si tuvieron al menos un ID Si @Escoge(aNumPorClase; lNumeroClase) != '' // Obtengo el número de elementos para la clase lNumElmentos = @Val(@Escoge(aNumPorClase; lNumeroClase)) lContador = 0 // Barre todos los elementos de esta clase Mientras lContador < lNumElmentos lLeyenda = lLeyenda &','& @Escoge(aListaNombreClases; lDesplazamiento+lContador) lContador = lContador +1 FinMientras lDesplazamiento = lDesplazamiento + lNumElmentos // Se imprime la clase y sus valores seleccionados // Avanza de renglon RenActual = RenActual + 1[C0] ws.Range('A' & RenActual).Font.Size = 12[C0] ws.Range('A' & RenActual).Font.FontStyle = 'Negrita'[C0] // Lo centra en las columnas Si pTipoImpresion = 0 ws.Range('A' & RenActual & ':U' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] Sino ws.Range('A' & RenActual & ':O' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] FinSi ws.Range('A' & RenActual ).Value = 'CLASIFICACIÓN No.' & @Str(lNumeroClase+1; 0) & ' : ' & @SubStr(lLeyenda; 1; @Len(lLeyenda)-1) lLeyenda = '' Finsi lNumeroClase = lNumeroClase + 1 FinMientras FinFunc // Fin método: fImprimeClasesExcel Encab // Pone el nombre del sistema ws.Range('A' & RenActual).Font.Color = @RGB(156;0;89)[C0] ws.Range('A' & RenActual).Font.Size = 10[C0] ws.Range('A' & RenActual).Value = 'Factura Electrónica'[C0] // Pone el nombre de la empresa ws.Range('B' & RenActual).Font.Size = 14[C0] ws.Range('B' & RenActual).Font.FontStyle = 'Negrita'[C0] // Lo centra en las columnas Si pTipoImpresion = 0 ws.Range('B' & RenActual & ':T' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] Sino ws.Range('B' & RenActual & ':N' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] FinSi ws.Range('B' & RenActual ).Value = tEmpresa->Nombre // Avanza de renglon RenActual = RenActual + 1[C0] // Pone el titulo del reporte en EXCEL ws.Range('A' & RenActual).Font.Size = 12[C0] ws.Range('A' & RenActual).Font.FontStyle = 'Negrita'[C0] // Lo centra en las columnas Si pTipoImpresion = 0 ws.Range('A' & RenActual & ':U' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] Sino ws.Range('A' & RenActual & ':O' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] FinSi Si pClienteProveedor = 0 ws.Range('A' & RenActual ).Value = 'A N T I G Ü E D A D D E S A L D O S Y P R O N Ó S T I C O D E C O B R A N Z A'[C0] SiNo ws.Range('A' & RenActual ).Value = 'A N T I G Ü E D A D D E S A L D O S Y P R O N Ó S T I C O D E P A G O S'[C0] FinSi // Avanza de renglon RenActual = RenActual + 1[C0] // Pone la fecha de corte ws.Range('A' & RenActual).Font.Size = 12[C0] ws.Range('A' & RenActual).Font.FontStyle = 'Negrita'[C0] // Lo centra en las columnas Si pTipoImpresion = 0 ws.Range('A' & RenActual & ':U' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] Sino ws.Range('A' & RenActual & ':O' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] FinSi ws.Range('A' & RenActual ).Value = 'Fecha de Corte: ' & fFormateaFecha(pFechaCorte;gIdioma)[C0] // Se avanza un renglón y se imprime el rango final de fecha de Vencimiento de los Documentos a imprimir. RenActual = RenActual + 1[C0] ws.Range('A' & RenActual).Font.Size = 12[C0] ws.Range('A' & RenActual).Font.FontStyle = 'Negrita'[C0] Si pTipoImpresion = 0 ws.Range('A' & RenActual & ':U' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] Sino ws.Range('A' & RenActual & ':O' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] FinSi ws.Range('A' & RenActual ).Value = 'Incluír Documentos menores a: ' & fFormateaFecha(pHastaFecha;gIdioma)[C0] // ===== Se Revisan las clasificaciones, para recuperarlas e imprimirlas en el encabezado // ===== se arman los ID en una LIsta para poder recorrerlos en una iteración gClasesRecibidas = fCuentaClases(&gNumClasesPorTipo; pIdClase1; pIdClase2; pIdClase3; pIdClase4; pIdClase5; pIdClase6) // se cargan las clasificaciones validas y se obtiene el número de clases validas gNumDeClases = fCargaClases(tValoresDeClasif; &gListNombreDeClases; &gListIdDeClases; gClasesRecibidas) Si gNumDeClases > 0 // solo si hubo al menos una clase seleccionada fImprimeClasesExcel(gListNombreDeClases; gNumClasesPorTipo ) Finsi // Avanza de renglon RenActual = RenActual + 1[C0] // Moneda del reporte Si pTipoImpresion = 0 ws.Range('R' & RenActual).Font.Size = 12[C0] ws.Range('R' & RenActual ).Value = 'Moneda: ' & gNombreMonedaReporte[C0] Sino ws.Range('N' & RenActual).Font.Size = 12[C0] ws.Range('N' & RenActual ).Value = 'Moneda: ' & gNombreMonedaReporte[C0] FinSi // Avanza de renglon RenActual = RenActual + 1[C0] Si pTipoImpresion = 0 ws.Range('L' & RenActual & ':O' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('L' & RenActual & ':O' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('L' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('O' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('L' & RenActual & ':O' & RenActual).Interior.ColorIndex = 3[C0] ws.Range('L' & RenActual & ':O' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('L' & RenActual & ':O' & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('L' & RenActual & ':O' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('L' & RenActual).Value = 'SALDOS VENCIDOS' ws.Range('Q' & RenActual & ':T' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('Q' & RenActual & ':T' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('Q' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('T' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('Q' & RenActual & ':T' & RenActual).Interior.ColorIndex = 3[C0] ws.Range('Q' & RenActual & ':T' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('Q' & RenActual & ':T' & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('Q' & RenActual & ':T' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('Q' & RenActual).Value = 'SALDOS POR VENCER' Sino ws.Range('K' & RenActual & ':N' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('K' & RenActual & ':N' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('K' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('N' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('K' & RenActual & ':N' & RenActual).Interior.ColorIndex = 3[C0] ws.Range('K' & RenActual & ':N' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('K' & RenActual & ':N' & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('K' & RenActual & ':N' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] Si pTipoImpresion = 1 // Vencidos ws.Range('K' & RenActual).Value = 'SALDOS VENCIDOS' Sino // PorVencer ws.Range('K' & RenActual).Value = 'SALDOS POR VENCER' FinSI FinSi // Avanza de renglon RenActual = RenActual + 1[C0] // Pone el titulo de cada columna en EXCEL Si pTipoImpresion = 0 lRango = 'A' & RenActual & ':U' & RenActual Sino lRango = 'A' & RenActual & ':O' & RenActual FinSi ws.Range(lRango).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range(lRango).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range(lRango).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range(lRango).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range(lRango).Interior.ColorIndex = 55[C0] ws.Range(lRango).Font.FontStyle = 'Negrita'[C0] ws.Range(lRango).Font.Color = @RGB(255;255;255)[C0] Si pTipoImpresion = 0 ws.Range('C' & RenActual & ':U' & RenActual).HorizontalAlignment = xlCentro[C0] Sino ws.Range('C' & RenActual & ':O' & RenActual).HorizontalAlignment = xlCentro[C0] FinSi ws.Range('A' & RenActual & ':C' & RenActual).WrapText = 1[C0] Si pClienteProveedor = 0 ws.Range('A' & RenActual & ':C' & RenActual).Value = 'Código','Nombre(Cliente)','Nombre(Agente)' Sino ws.Range('A' & RenActual & ':C' & RenActual).Value = 'Código','Nombre(Proveedor)','' FinSi Si pTipoImpresion = 0 ws.Range('D' & RenActual & ':U' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('D' & RenActual & ':U' & RenActual).VerticalAlignment = xlCentro[C0] ws.Range('D' & RenActual & ':U' & RenActual).WrapText = 1[C0] ws.Range('D' & RenActual & ':J' & RenActual).Value = 'Concepto Documento', 'Serie', 'Folio','Fecha Documento','Fecha Vencimiento','Dias Vencidos','Dias por Vencer' ws.Range('K' & RenActual & ':O' & RenActual).Value = 'Total Vencido','0-' & @str(pDias;0) & ' Días',@str(pDias+1;0) & '-' & @str(pDias*2;0) & ' Días',@str((pDias*2)+1;0) & '-' & @str(pDias*3;0) & ' Días',@str((pDias*3)+1;0) & ' Días o más' ws.Range('P' & RenActual & ':U' & RenActual).Value = 'Total por Vencer','0-' & @str(pDias;0) & ' Días',@str(pDias+1;0) & '-' & @str(pDias*2;0) & ' Días',@str((pDias*2)+1;0) & '-' & @str(pDias*3;0) & ' Días',@str((pDias*3)+1;0) & ' Días o más','Total' Sino ws.Range('D' & RenActual & ':O' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('D' & RenActual & ':O' & RenActual).VerticalAlignment = xlCentro[C0] ws.Range('D' & RenActual & ':O' & RenActual).WrapText = 1[C0] Si pTipoImpresion = 1 // Vencidos ws.Range('D' & RenActual & ':I' & RenActual).Value = 'Concepto Documento', 'Serie', 'Folio','Fecha Documento','Fecha Vencimiento','Dias Vencidos' ws.Range('J' & RenActual & ':O' & RenActual).Value = 'Total Vencido','0-' & @str(pDias;0) & ' Días',@str(pDias+1;0) & '-' & @str(pDias*2;0) & ' Días',@str((pDias*2)+1;0) & '-' & @str(pDias*3;0) & ' Días',@str((pDias*3)+1;0) & ' Días o más','Total' Sino // PorVencer ws.Range('D' & RenActual & ':I' & RenActual).Value = 'Concepto Documento', 'Serie', 'Folio','Fecha Documento','Fecha Vencimiento','Dias por Vencer' ws.Range('J' & RenActual & ':O' & RenActual).Value = 'Total por Vencer','0-' & @str(pDias;0) & ' Días',@str(pDias+1;0) & '-' & @str(pDias*2;0) & ' Días',@str((pDias*2)+1;0) & '-' & @str(pDias*3;0) & ' Días',@str((pDias*3)+1;0) & ' Días o más','Total' FinSi FinSi RenFijo = RenActual + 1 Excel.Rows(RenFijo & ':' & RenFijo).Select Excel.ActiveWindow.FreezePanes = True ws.Range('A' & RenActual).Select FinEncab // ********************************************************************************************* // Cuerpo del reporte // ********************************************************************************************* 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) fConfiguraColumnas() // N.D.3377 Inicio // En caso de ser concentrado y de pertenecer a Clientes no se debe de mostrar la columna de agentes Si pClienteProveedor = 0 Y pDetallado = 0 ws.Columns(3).ColumnWidth = 0[C0] FinSi // N.D.3377 Fin Si pCteProvInicial = ' ' tClientes.Busca Primero pCteProvInicial = tClientes(cCodigoCliente) Finsi Si pCteProvFinal = ' ' tClientes.Busca Ultimo pCteProvFinal = tClientes(cCodigoCliente) Finsi Mientras[tClientes.Busca[pCteProvInicial & '..' & pCteProvFinal]; tClientes->Encontro ; tClientes.Busca Siguiente[1]] gClienteConSaldo = 0 // Filtra los clientes/proveedores en base a las clasificaciones Si fDiscriminaCliente(tClientes) = 1 Continua Finsi Si pDocumentosAImprimir = 0 lLimite = 2 Si pClienteProveedor = 0 // Clientes lArreglo[0] = '0,1' //"Cargo","Abono" Sino // Proveedores lArreglo[0] = '1,0' //"Abono","Cargo" FinSi Sino lLimite = 1 Si pDocumentosAImprimir = 1 Si pClienteProveedor = 0 // Clientes lArreglo[0] = '0' //"Cargo" Sino // Proveedores lArreglo[0] = '1' //"Abono" FinSi FinSi Si pDocumentosAImprimir = 2 Si pClienteProveedor = 0 // Clientes lArreglo[0] = '1' //"Abono" Sino // Proveedores lArreglo[0] = '0' //"Cargo" FinSi FinSi FinSi lContador = 0 Mientras lContador < lLimite // Se buscan todos los documentos asociados a el cliente, afectados lLlave[0] = tClientes(cIdClienteProveedor) & ':' & '1:' & @Escoge(lArreglo;lContador) Mientras[tDocumentos.Busca[lLlave]; tDocumentos->Encontro; tDocumentos.Busca Siguiente[3]] // Filtra los agentes para los documentos de clientes Si pClienteProveedor = 0 Y fDiscriminaPorAgente(tDocumentos(cIdAgente)) = 1 Continua Finsi lSaldoDocumento = 0 lImporte = 0 Si (pClienteProveedor = 0 Y @Escoge(lArreglo;lContador) = '1') O (pClienteProveedor = 1 Y @Escoge(lArreglo;lContador) = '0') // N.D.3377 No incluir los documentos de cuya fecha sea mayor a la fecha hasta Si tDocumentos(cPendiente) != 0 Y tDocumentos(cFecha) <= pHastaFecha //! N.D.3240 lImporte = fImporteMonedaReporte(tDocumentos(cPendiente); tDocumentos(cIdMoneda); tDocumentos(cTipoCambio); tDocumentos(cFecha)) lImporte = fCambiarMonedaDoctoAReporte(tDocumentos; tTiposCambio; tDocumentos(cPendiente); pIdMonedaReporte; tClientes(cIdMoneda)) // N.D.3238/4362 Redondear los importes antes de mostrarlos lImporte = fRedondeaImporteLib(lImporte; gDecimalesMonedaReporte) Si tDocumentos(cFecha) < pFechaCorte // Documento con importe vencido Si pTipoImpresion < 2 lDiasVencidos = fConvJul(pFechaCorte) - fConvJul(tDocumentos(cFecha)) // Cliente, Documento, Restar=0, Fecha_Docto, Fecha_Vencimiento, aDiasVencidos, aDiasPorVencer, aTotalVencido, aTotalPorVencer, aTotal) fImprimirDocumento(tClientes; tDocumentos; 0; tDocumentos(cFecha); 0; lDiasVencidos; 0; lImporte; 0; lImporte) FinSi Sino // Documento con importe por vencer Si pTipoImpresion = 0 o pTipoImpresion = 2 lDiasPorVencer = fConvJul(tDocumentos(cFecha)) - fConvJul(pFechaCorte) // Cliente, Documento, Restar=0, Fecha_Docto, Fecha_Vencimiento, aDiasVencidos, aDiasPorVencer, aTotalVencido, aTotalPorVencer, aTotal) fImprimirDocumento(tClientes; tDocumentos; 0; tDocumentos(cFecha); 0; 0; lDiasPorVencer; 0; lImporte; lImporte) FinSi FinSi FinSi Continua FinSi Si (tDocumentos(cFechaVencimiento) < pFechaCorte) y (pDocumentosAImprimir < 2) Si pTipoImpresion < 2 // Calcular Saldo del Documento lSaldoDocumento = fSaldoDocumento(''; pFechaCorte; tCargosAbonosLib; tDocumentos; tDoctosLib2) // N.D.3238/4362 Redondear los importes antes de mostrarlos Si tMoneda(cIdMoneda) != tDocumentos(cIdMoneda) tMoneda.Busca[@Str(tDocumentos(cIdMoneda);0)] FinSi lSaldoDocumento = fRedondeaImporteLib(lSaldoDocumento; tMoneda(cDecimalesMoneda)) //Si lSaldoDocumento > 0.0001 Y tDocumentos(cFechaVencimiento) <= pHastaFecha Si lSaldoDocumento > 0.000001 Y tDocumentos(cFecha) <= pHastaFecha // El documento tiene un saldo vencido de acuerdo a la fecha de corte lDiasVencidos = fConvJul(pFechaCorte) - fConvJul(tDocumentos(cFechaVencimiento)) //! N.D.3240 lImporte = fImporteMonedaReporte(lSaldoDocumento; tDocumentos(cIdMoneda); tDocumentos(cTipoCambio); tDocumentos(cFecha)) lImporte = fCambiarMonedaDoctoAReporte(tDocumentos; tTiposCambio; lSaldoDocumento; pIdMonedaReporte; tClientes(cIdMoneda)) // N.D.3238/4362 Redondear los importes antes de mostrarlos lImporte = fRedondeaImporteLib(lImporte; gDecimalesMonedaReporte) // Cliente, Documento, Sumar=1, Fecha_Docto, Fecha_Vencimiento, aDiasVencidos, aDiasPorVencer, aTotalVencido, aTotalPorVencer, aTotal) fImprimirDocumento(tClientes; tDocumentos; 1; tDocumentos(cFecha); tDocumentos(cFechaVencimiento); lDiasVencidos; 0; lImporte; 0; lImporte) FinSi FinSi Sino Si pDocumentosAImprimir = 2 Continua FinSi Si pTipoImpresion = 1 Continua FinSi // Aquí se procesan los documentos de cargo que se vencen en una fecha posterior a la fecha de corte lSaldoDocumento = fSaldoDocumento(''; pHastaFecha; tCargosAbonosLib; tDocumentos; tDoctosLib2) // N.D.3238/4362 Redondear los importes antes de mostrarlos Si tMoneda(cIdMoneda) != tDocumentos(cIdMoneda) tMoneda.Busca[@Str(tDocumentos(cIdMoneda);0)] FinSi lSaldoDocumento = fRedondeaImporteLib(lSaldoDocumento; tMoneda(cDecimalesMoneda)) //Si lSaldoDocumento > 0.0001 Y tDocumentos(cFechaVencimiento) <= pHastaFecha Si lSaldoDocumento > 0.000001 Y tDocumentos(cFecha) <= pHastaFecha // El documento tiene un saldo por vencer lDiasPorVencer = fConvJul(tDocumentos(cFechaVencimiento)) - fConvJul(pFechaCorte) //! N.D.3240 lImporte = fImporteMonedaReporte(lSaldoDocumento; tDocumentos(cIdMoneda); tDocumentos(cTipoCambio); tDocumentos(cFecha)) lImporte = fCambiarMonedaDoctoAReporte(tDocumentos; tTiposCambio; lSaldoDocumento; pIdMonedaReporte; tClientes(cIdMoneda)) // N.D.3238/4362 Redondear los importes antes de mostrarlos lImporte = fRedondeaImporteLib(lImporte; gDecimalesMonedaReporte) // Cliente, Documento, Sumar=1, Fecha_Docto, Fecha_Vencimiento, aDiasVencidos, aDiasPorVencer, aTotalVencido, aTotalPorVencer, aTotal) fImprimirDocumento(tClientes; tDocumentos; 1; tDocumentos(cFecha); tDocumentos(cFechaVencimiento); 0; lDiasPorVencer; 0; lImporte; lImporte) FinSi FinSi FinMientras lContador = lContador + 1 FinMientras // Si el Clientetiene algun importe vencido Si gClienteConSaldo != 0 fImprimirTotalCliente(tClientes) FinSi FinMientras // Imprime Total General fImprimirTotalReporte()