// <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // Reporte: DOCUMENTOS RELACIONADOS // // Sistema: ADMINPAQ Versión v10.0 Windows // // Descripcion: Reporte que imprime la relación de abonos timbrados vs xml generado y factura pagada // Unicamente se imprimirán pagos electrónicos, y el reporte de despliega // ordenado por fecha-serie-folio pago // Consideraciones : La información se obtiene de datos almacenados en tablas, no lee los xml // Creación : Agosto 2017 // Revisiones : // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< //****************************************************************************** //Funciones de librería. Incluye LibAdminPaq.rpt Incluye LibDigitales.rpt //****************************************************************************** //Parámetros. Parametro pDeLaFecha = '20170101' Parametro pAlaFecha = '20171231' Parametro pDeLaCuenta = ' ' // Código de la Cuenta bancaria EMPRESA Parametro pALaCuenta = ' ' // Código de la Cuenta bancaria EMPRESA Parametro pDelCliente = ' ' Parametro pAlCliente = ' ' Parametro pConcepto = ' ' // Código del Concepto de Facturación Parametro pIdMoneda = 1 // 1 = ID moneda Peso mexicano //****************************************************************************** //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' // Parámetros //Periodos. //Índice: cNumeroEjercicio UsaTabla tPeriodos = tEmpresa['mgw10031'] tPeriodos.UsaIndice['cNumeroEjercicio'] //Parametros de la empresa. //Índice: primario. UsaTabla tParametros = tEmpresa['mgw10000'] Usatabla tCuentas = tEmpresa['mgw10056'] Alias 'tCuenta1' tCuentas.Usaindice['INUMEROC01'] //Documentos. UsaTabla tPagos = tEmpresa['mgw10008'] Alias 'tDoctos1' tPagos.Usaindice['cFecha'] // UsaTabla tDocumentos = tEmpresa['mgw10008'] Alias 'tDoctos2' tDocumentos.Usaindice[''] // UsaTabla tDoctoLib = tEmpresa['mgw10008'] Alias 'tDoctos3' tDoctoLib.Usaindice[''] // UsaTabla tDigitales = tEmpresa['mgw10045'] Alias 'tDigital1' tDigitales.Usaindice['CIDDOCTO'] UsaTabla tDigitalDocto = tEmpresa['mgw10045'] Alias 'tDigital2' tDigitalDocto.Usaindice['CIDDOCTO'] //Clientes y Provedores. //Índice: cCodigoCliente + cTipoCliente. UsaTabla tClientes = tEmpresa['mgw10002'] Alias 'tCliente' tClientes.Usaindice[''] UsaTabla tClientesFiltro = tEmpresa['mgw10002'] Alias 'tCliente1' tClientesFiltro.Usaindice['iCodigoTipo'] //Cargos y Abonos. //Índice: IDDoctoAbono + IDDoctoCargo UsaTabla tCargosAbonos = tEmpresa['mgw10009'] Alias 'tCA1' tCargosAbonos.UsaIndice[''] //Índice: IDDoctoCargp + IDDoctoAbono UsaTabla tCargosAbonosLib = tEmpresa['mgw10009'] Alias 'tCA2' tCargosAbonosLib.UsaIndice['IDOCTOCA01'] //Monedas. //Índice: primario. UsaTabla tMonedas = tEmpresa['mgw10034'] tMonedas.Usaindice[''] Usatabla tConcepto = tEmpresa['mgw10006'] Alias 'tConcepto' tConcepto.Usaindice[''] pIdMoneda = 1 tMonedas.Busca[@Str(pIdMoneda;0)] gDecimales = tMonedas(cDecimalesMoneda) //****************************************************************************** //Declaración de variables globales. Columnas 1;5 gHoy = fFormateaFecha(@Hoy();0) gNombreMoneda = tMonedas(cNombreMoneda) // ************************************* // 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 constante xlSaltoPagina -4135 // ************************************* // Inicializa EXCEL // ************************************* // Accesa 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 ws.Columns(1).ColumnWidth = 11[C0] // A ws.Columns(2).ColumnWidth = 10[C0] // B ws.Columns(3).ColumnWidth = 12[C0] // C ws.Columns(4).ColumnWidth = 25[C0] //D ws.Columns(5).ColumnWidth = 38[C0] //E ws.Columns(6).ColumnWidth = 30[C0] //F ws.Columns(7).ColumnWidth = 10[C0] //G ws.Columns(8).ColumnWidth = 12[C0] //H ws.Columns(9).ColumnWidth = 34[C0] //I ws.Columns(10).ColumnWidth = 10[C0] //J ws.Columns(11).ColumnWidth = 12[C0] //K ws.Columns(12).ColumnWidth = 20[C0] //L ws.Columns(13).ColumnWidth = 11[C0] //M ws.Columns(14).ColumnWidth = 14[C0] //N ws.Columns(15).ColumnWidth = 11[C0] //O ws.Columns(16).ColumnWidth = 10[C0] //P ws.Columns(17).ColumnWidth = 12[C0] //Q ws.Columns(18).ColumnWidth = 25[C0] //R ws.Columns(19).ColumnWidth = 38[C0] //S lDigsDecimales = '0000000000' lDecs = @SUBSTR(lDigsDecimales;1;gDecimales) ws.Columns(1).NumberFormat = 'dd-mmm-aaaa' ws.Columns(13).NumberFormat = 'dd-mmm-aaaa' ws.Columns(15).NumberFormat = 'dd-mmm-aaaa' lFormato = '#,##0.' & lDecs & '_);(#,##0.' & lDecs & ')' ws.Columns(11).NumberFormat = lFormato[C0] lFormato = '#,##0.0000_);(#,##0.0000)' ws.Columns(8).NumberFormat = lFormato[C0] //****************************************************************************** //Funciones. // ========================================================================================== // fImprimeEstado // Descripcion : Regresa el número de pago que representa el abono que se envia con // respecto a la factura que esta pagando // Salida: Número de pago // ========================================================================================== DefFunc fNumeroParcialidad(aTblPago:TABLA; aTblDocumento:TABLA; aTblCargosAbonosLib:TABLA;aTblDoctoLib:TABLA) Local lRegresa, lContinua, lImporte lRegresa = 0 lContinua = true lImporte = 0 Mientras[aTblCargosAbonosLib.Busca[@STR(aTblDocumento(cIdDocumento);0)]; (lContinua Y aTblCargosAbonosLib->Encontro); aTblCargosAbonosLib.Busca Siguiente[1]] aTblDoctoLib.Busca[@STR(aTblCargosAbonosLib(cIdDocum01);0)] Si ATblDoctoLib->ENCONTRO lRegresa = lRegresa + 1 Si aTblPago(cIdDocumento) = aTblCargosAbonosLib(cIdDocum01) // se encontro el pago lImporte = aTblCargosAbonosLib(cImporte02) // almacena el importe asociado en la moneda del cargo lContinua = false FinSi FinSi FinMientras Si lRegresa = 1 Y (aTblDocumento(cTotal)-lImporte) <= 0.01 // si solo hay un pago y el saldo de la factura es 0, entonces es pago en una sola exhibición lRegresa = 0 FinSi Retorna lRegresa FinFunc // ========================================================================================== // fImpDatosCuenta (Procedimiento) // Descripcion : Imprime los datos de la cuenta de la empresa (DESTINO) // Entrada : aTblCuenta // Salida : No regresa valor // ========================================================================================== DefFunc fImpDatosCuenta(aTblCuenta:TABLA) RenActual = RenActual + 1[C0] ws.Range('A' & RenActual ).Value = 'Número de Cuenta:'[C0] ws.Range('A' & RenActual).Font.Bold = true[C0] ws.Range('C' & RenActual).Font.Bold = true[C0] ws.Range('C' & RenActual ).Value = @chr(39) & aTblCuenta(cNumeroC01)[C0] RenActual = RenActual + 1[C0] ws.Range('A' & RenActual ).Value = 'Alias:'[C0] ws.Range('A' & RenActual).Font.Bold = true[C0] ws.Range('C' & RenActual).Font.Bold = true[C0] ws.Range('C' & RenActual ).Value = aTblCuenta(cNombreC01)[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] RenActual = RenActual + 1[C0] FinFunc // ============================================================================= // fDiscriminaDocto() // Salidas: 1 = indica que el Docto no aplica, debe descartarse // 0 = indica que el Docto no debe descartarse. // ============================================================================= DefFunc fDiscriminaDocto(atDocumento:TABLA) Local lRegresa lRegresa = 0 Si atDocumento(cNaturaleza) != 1 // solo abonos lRegresa = 1 Finsi Si atDocumento(cUsaCliente) = 0 // solo documentos de clientes lRegresa = 1 Finsi Si atDocumento(cIdCuenta) = 0 // solo documentos con cuentas bancarias lRegresa = 1 Finsi Retorna lRegresa FinFunc //****************************************************************************** //Encabezado. Encab // Valida el rango de fechas pALaFecha = pALaFecha < pDeLaFecha ? pDeLaFecha : pAlaFecha // Pone el nombre del sistema gFinReporte = 'S'[C0] gEmpresa = 'M'[C0] 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] RenActual = RenActual + 1[C0] ws.Range(gFinReporte & RenActual).HorizontalAlignment = xlDerecha[C0] ws.Range(gFinReporte & RenActual).Value = gHoy RenActual = RenActual + 1[C0] // Pone el nombre de la empresa ws.Range('A' & RenActual).Font.Size = 14[C0] ws.Range('A' & RenActual).Font.Bold = true[C0] ws.Range('A' & RenActual & ':' & gEmpresa & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('A' & RenActual ).Value = tEmpresa->Nombre RenActual = RenActual + 1[C0] ws.Range('A' & RenActual).Font.Size = 12[C0] ws.Range('A' & RenActual).Font.Bold = true[C0] ws.Range('A' & RenActual & ':' & gEmpresa & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('A' & RenActual ).Value = 'Documentos Relacionados'[C0] RenActual = RenActual + 1[C0] ws.Range('A' & RenActual).Font.Size = 12[C0] ws.Range('A' & RenActual).Font.Bold = true[C0] ws.Range('A' & RenActual & ':' & gEmpresa & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] gDelaFecha = fFormateaFecha(pDelaFecha;0) gAlaFecha = fFormateaFecha(pAlaFecha;0) ws.Range('A' & RenActual ).Value = 'Del: ' & gDelaFecha & ' Al: ' & gAlaFecha[C0] RenActual = RenActual + 2[C0] ws.Range('A' & RenActual & ':K' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion ws.Range('A' & RenActual & ':K' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple ws.Range('A' & RenActual & ':K' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple ws.Range('A' & RenActual & ':K' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple ws.Range('A' & RenActual & ':K' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple ws.Range('A' & RenActual & ':K' & RenActual).Interior.Color = @RGB(255;0;0) ws.Range('A' & RenActual).Font.Color = @RGB(255;255;255) ws.Range('A' & RenActual).Font.Bold = true ws.Range('A' & RenActual ).Value = 'RECIBO ELECTRÓNICO DE PAGO' ws.Range('L' & RenActual & ':N' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion ws.Range('L' & RenActual & ':N' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple ws.Range('L' & RenActual & ':N' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple ws.Range('L' & RenActual & ':N' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple ws.Range('L' & RenActual & ':N' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple ws.Range('L' & RenActual & ':N' & RenActual).Interior.Color = @RGB(255;0;0) ws.Range('L' & RenActual).Font.Color = @RGB(255;255;255) ws.Range('L' & RenActual).Font.Bold = true ws.Range('L' & RenActual ).Value = 'ENCABEZADO XML' ws.Range('O' & RenActual & ':S' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion ws.Range('O' & RenActual & ':S' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple ws.Range('O' & RenActual & ':S' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple ws.Range('O' & RenActual & ':S' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple ws.Range('O' & RenActual & ':S' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple ws.Range('O' & RenActual & ':S' & RenActual).Interior.Color = @RGB(255;0;0) ws.Range('O' & RenActual).Font.Color = @RGB(255;255;255) ws.Range('O' & RenActual).Font.Bold = true ws.Range('O' & RenActual ).Value = 'DOCUMENTO RELACIONADO' RenActual = RenActual + 1[C0] // Pone el titulo de cada columna en EXCEL ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Interior.ColorIndex = 55[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Font.Bold = true[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).WrapText = True ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).HorizontalAlignment = xlCentro[C0] ws.Range('A' & RenActual).Value = 'Fecha Pago' ws.Range('B' & RenActual).Value = 'Serie Pago' ws.Range('C' & RenActual).Value = 'Folio Pago' ws.Range('D' & RenActual).Value = 'Concepto Pago' ws.Range('E' & RenActual).Value = 'UUID del Pago' ws.Range('F' & RenActual).Value = 'Cliente' ws.Range('G' & RenActual).Value = 'Moneda' ws.Range('H' & RenActual).Value = 'Tipo Cambio' ws.Range('I' & RenActual).Value = 'Forma Pago' ws.Range('J' & RenActual).Value = 'No. de Parcialidad' ws.Range('K' & RenActual).Value = 'Importe Pagado' ws.Range('L' & RenActual).Value = 'Número Operación' ws.Range('M' & RenActual).Value = 'Fecha Emisión' ws.Range('N' & RenActual).Value = 'Estatus' ws.Range('O' & RenActual).Value = 'Fecha' ws.Range('P' & RenActual).Value = 'Serie' ws.Range('Q' & RenActual).Value = 'Folio' ws.Range('R' & RenActual).Value = 'Concepto' ws.Range('S' & RenActual).Value = 'UUID' RenActual = RenActual + 1[C0] FinEncab //****************************************************************************** //Cuerpo principal. //****************************************************************************** tParametros.Busca Primero Si pDeLaCuenta = ' ' tCuentas.Busca Primero pDeLaCuenta = tCuentas(cNumeroC01) FinSi Si pAlaCuenta = ' ' tCuentas.Busca Ultimo pALaCuenta = tCuentas(cNumeroC01) FinSi Si pDelCliente = ' ' tClientesFiltro.Busca Primero pDelCliente = tClientesFiltro(cCodigoC01) FinSi Si pAlCliente = ' ' tClientesFiltro.Busca Ultimo pAlCliente = tClientesFiltro(cCodigoC01) FinSi gIdCuenta = 0 Mientras[tCuentas.Busca[pDeLaCuenta & '..' & pAlaCuenta ]; tCuentas->Encontro ; tCuentas.Busca Siguiente[1]] Si tCuentas(cIdCuenta) = 0 O tCuentas(cIdCatal01) != 0 // Quita la cuenta 0, y las cuentas que no son de la empresa Continua FinSi // 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 tPagos.Usaindice['CIDCUENTA'] tPagos.Busca[tCuentas(cIdCuenta) & ':' & gFechaBusqueda] Si !tPagos->ENCONTRO Si tCuentas(cIdCuenta) = @Val(@SUBSTR(tPagos->Llave;0;11)) Si @SUBSTR(tPagos->Llave;11;8) >= pDeLaFecha Y @SUBSTR(tPagos->Llave;11;8) <= pAlaFecha gFechaBusqueda = @SUBSTR(tPagos->Llave;11;8) tPagos.Busca[tCuentas(cIdCuenta) & ':' & gFechaBusqueda] FinSi FinSi FinSi gCuentaImpreso = 0 // Bandera para controlar la impresión de la cuenta Mientras tPagos->Encontro Y (tPagos(cFecha) <= pAlaFecha) Si fDiscriminaDocto(tPagos) = 1 tPagos.BUSCA SIGUIENTE[1] Continua FinSi // Filtro de Conceptos Si pConcepto != ' ' Y pConcepto != '' lConceptoIncluido = False lNum = 0 Mientras (!lConceptoIncluido) Y @Escoge(pConcepto;lNum) Si @Val(@Escoge(pConcepto;lNum)) > 0 Y @Val(@Escoge(pConcepto;lNum)) = tPagos(cIdConceptoDocumento) lConceptoIncluido = true FinSi lNum = lNum +1 FinMientras Si !lConceptoIncluido tPagos.BUSCA SIGUIENTE[1] Continua FinSi FinSi tClientes.Busca[@STR(tPagos(cIdClien01);0)] Si !tClientes->ENCONTRO O tClientes(cCodigoC01) < pDelCliente O tClientes(cCodigoC01) > pAlCliente tPagos.BUSCA SIGUIENTE[1] Continua FinSi Si gIdCuenta != tPagos(cIdCuenta) fImpDatosCuenta(tCuentas) gIdCuenta = tPagos(cIdCuenta) FinSi tDigitales.Busca[@STR(tPagos(cIdDocumento);0)] tMonedas.Busca[@STR(tPagos(cIdMoneda);0)] gImprime = true ws.Range('A' & RenActual ).Value = @chr(39) & fFormateaFecha(tPagos(cFecha);0)[C0] ws.Range('B' & RenActual ).Value = tPagos(cSerieDo01)[C0] ws.Range('C' & RenActual ).Value = tPagos(cFolio)[C0] tConcepto.Busca[@STR(tPagos(cIdConce01);0)] SI tConcepto->ENCONTRO ws.Range('D' & RenActual ).Value = tConcepto(CNOMBREC01)[C0] FINSI ws.Range('F' & RenActual ).Value = tClientes(CRazonSo01)[C0] Si tDigitales->ENCONTRO // Busca el pago en documentos asociados ws.Range('E' & RenActual ).Value = @chr(39) & tDigitales(cUUID)[C0] ws.Range('L' & RenActual ).Value = @chr(39) & tDigitales(CDESCONCBA)[C0] ws.Range('N' & RenActual ).Value = fImprimeEstado(tDigitales(cEstado); tPagos(cCancelado))[C0] ws.Range('M' & RenActual ).Value = @chr(39) & fFormateaFecha(tDigitales(cFechaEmi);0)[C0] FinSi // Código sat de la moneda del documento Si tMonedas->ENCONTRO ws.Range('G' & RenActual ).Value = tMonedas(cClaveSAT)[C0] FinSi ws.Range('H' & RenActual ).Value = tPagos(cTipoCambio)[C0] ws.Range('I' & RenActual ).Value = fBuscaFormaPago(tPagos(cMetodoPag))[C0] ws.Range('K' & RenActual ).Value = tPagos(cTotal)[C0] // se imprime el total del documento, el cual será remplazado si tiene cargos asociados Mientras[tCargosAbonos.Busca[@STR(tPagos(cIdDocumento);0)]; tCargosAbonos->Encontro; tCargosAbonos.Busca Siguiente[1]] Si gImprime gImprime = false SiNo Si tDigitales->ENCONTRO // Busca el pago en documentos asociados ws.Range('E' & RenActual ).Value = @chr(39) & tDigitales(cUUID)[C0] ws.Range('L' & RenActual ).Value = @chr(39) & tDigitales(CDESCONCBA)[C0] ws.Range('N' & RenActual ).Value = fImprimeEstado(tDigitales(cEstado); tPagos(cCancelado))[C0] ws.Range('M' & RenActual ).Value = @chr(39) & fFormateaFecha(tDigitales(cFechaEmi);0)[C0] FinSi ws.Range('A' & RenActual ).Value = @chr(39) & fFormateaFecha(tPagos(cFecha);0)[C0] ws.Range('B' & RenActual ).Value = tPagos(cSerieDo01)[C0] ws.Range('C' & RenActual ).Value = tPagos(cFolio)[C0] tConcepto.Busca[@STR(tPagos(cIdConce01);0)] SI tConcepto->ENCONTRO ws.Range('D' & RenActual ).Value = tConcepto(CNOMBREC01)[C0] FINSI ws.Range('F' & RenActual ).Value = tClientes(CRazonSo01)[C0] // Código sat de la moneda del documento Si tMonedas->ENCONTRO ws.Range('G' & RenActual ).Value = tMonedas(cClaveSAT)[C0] FinSi ws.Range('H' & RenActual ).Value = tPagos(cTipoCambio)[C0] ws.Range('I' & RenActual ).Value = fBuscaFormaPago(tPagos(cMetodoPag))[C0] FinSi ws.Range('K' & RenActual ).Value = tCargosAbonos(cImporte01)[C0] // Busca el documento que paga tDocumentos.Busca[@STR(tCargosAbonos(cIdDocum02);0)] Si tDocumentos->ENCONTRO lParcialidad = fNumeroParcialidad(tPagos;tDocumentos;tCargosAbonosLib;tDoctoLib) ws.Range('J' & RenActual).HorizontalAlignment = xlCentro[C0] ws.Range('J' & RenActual ).Value = lParcialidad = 0 ? '-':lParcialidad[C0] ws.Range('O' & RenActual ).Value = @chr(39) & fFormateaFecha(tDocumentos(cFecha);0)[C0] ws.Range('P' & RenActual ).Value = tDocumentos(cSerieDo01)[C0] ws.Range('Q' & RenActual ).Value = tDocumentos(cFolio)[C0] tConcepto.Busca[@STR(tDocumentos(cIdConce01);0)] SI tConcepto->ENCONTRO ws.Range('R' & RenActual ).Value = tConcepto(CNOMBREC01)[C0] FINSI tDigitalDocto.Busca[@STR(tDocumentos(cIdDocumento);0)] Si tDigitalDocto->ENCONTRO ws.Range('S' & RenActual ).Value = @chr(39) & tDigitalDocto(cUUID)[C0] FinSi FinSi ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] RenActual = RenActual + 1[C0] FinMientras Si gImprime ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':' & gFinReporte & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] RenActual = RenActual + 1[C0] FinSi tPagos.BUSCA SIGUIENTE[1] FinMientras tPagos.Usaindice[''] FinMientras // FIN DEL REPORTE