// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // // AnIVAPagado.rpt // Nombre del reporte en el sistema: Análisis de IVA por Documento de Pago. // // Sistema: AdminPAQ v1.1 // // Este reporte perteneciente al módulo de ventas y compras, despliega en Excel // un listado de documentos pagados con el desglose de IVA para un rango de // fechas dado. // // Consideraciones especiales: // // Elaboró: Daniel Robles de Alba // Fecha: 06 de marzo del 2002. // // Historia de revisiones: // Autor: // Fecha: // 14/11/2005 HVA N.D.3469 Los importes en moneda extranjera no eran correctos. // 23/08/2006 HVA N.C.109 Reforma Fiscal se le agregaron 2 columnas de proveedor, 1 de concepto y 2 de retenciones // 16/04/2019 IYPZ S.C.4073 Se agrega el IVA 8%. // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ***************************************************************************** // Funciones de librería Incluye LibAdminPAQ.Rpt // ***************************************************************************** // Parámetros del reporte: Parametro pFechaInicial = '20020101' // Fecha inicial del rango Parametro pFechaFinal = '20021231' // Fecha final del rango Parametro pIdMoneda = 1 // Id de la moneda a expresar el reporte Parametro pTipoReporte = 0 // Si es salida por factura o compra // 0 = Factura // 1 = Compra Parametro pMostrarTasa8 = 0 // Si se muestra el IVA AL 8% // 0 = No // 1 = Sí // ***************************************************************************** // Tablas a utilizar e Indices de búsqueda por omisión UsaEmpresa tEmpresa;'CONTPAQ I Facturacion' // Parámetros UsaTabla tPagos = tEmpresa['MGW10008'] Alias 'tDoc1' // Documentos de pago tPagos.Usaindice['cFecha'] // cFecha UsaTabla tDocumento = tEmpresa['MGW10008'] Alias 'tDoc2' // Documentos tDocumento.Usaindice[''] // Indice primario: cIdDocumento UsaTabla tMovimiento = tEmpresa['MGW10010'] // Movimientos tMovimiento.Usaindice['iDoctoNumeroMovto'] // cIdDocumento+cNumeroMovimiento UsaTabla tAsociacion = tEmpresa['MGW10009'] // Asociación tAsociacion.Usaindice[''] // Indice primario: cIdDocumentoAbono+cIdDocumentoCargo UsaTabla tProducto = tEmpresa['MGW10005'] // Productos tProducto.Usaindice[''] // Indice primario: cIdProducto UsaTabla tMoneda = tEmpresa['MGW10034'] // Monedas tMoneda.Usaindice[''] // Indice primario: cIdMoneda UsaTabla tTipoCambio = tEmpresa['MGW10035'] // Tipos de cambio entre monedas tTipoCambio.Usaindice['iMonedaFecha'] // cIdMoneda+cFecha UsaTabla tParametros = tEmpresa['MGW10000'] // Parámetros de la empresa tParametros.Usaindice[''] // Indice primario: cIdEmpresa Usatabla tTiposCambioLib = tEmpresa['mgw10035'] Alias 'tTipoC' tTiposCambioLib.Usaindice['iMonedaFecha'] UsaTabla tClienteProveedorTmp = tEmpresa['MGW10002'] Alias tCProv // Clientes/Proveedores tClienteProveedorTmp.Usaindice[''] // Indice primario: cIdClienteProveedor //Clientes y Provedores. //Índice: cCodigoCliente + cTipoCliente. UsaTabla tClientes = tEmpresa['mgw10002'] tClientes.Usaindice['iCodigoTipo'] // Conceptos de los documentos UsaTabla tConceptos = tEmpresa['mgw10006'] tConceptos.UsaIndice['cIdConceptoDocumento'] // ***************************************************************************** // Definiciones y asumidos globales para el reporte Columnas 40;1 Usaletra 'Arial' Altura 9 // ***************************************************************************** // Variables de ámbito global: gIdioma = 0 // Idioma del reporte // 0 = Español // 1 = Inglés gDecimalesMoneda = 2 // Número de decimales en la moneda gNeto = 0 // Bases del IVA (15,10,0,etc) gImpuesto = 0 // IVAs (15,10,0,etc) gProporcional = 0 // Proporciones de IVA sobre el neto del documento gTotalConIVA = 0 // Importes con IVA gTotalSinIVA = 0 // Importes sin IVA gIVA = 0 // IVA al 15% y al 10% gGranTotalConIVA = 0 // Acumulado de importes con IVA gGranTotalSinIVA = 0 // Acumulado de importes sin IVA gGranNeto = 0 // Acumulado del neto gGranTotal = 0 // Acumulado del importe pagado gGranIVA = 0 // Acumulado del IVA al 15% y al 10% gGranRetencion = 0 gIdDocumento = 0 // Documento relacionado con el documento de pago gnImporte = 0 // Importe pagado gNumImpuesto = 1 // Cúal de los tres impuesto es usado [C0..C5].Decimales 0 [C7..C11].Decimales 0 tMoneda.Busca[@Str(pIdMoneda;0)] gDecimalesMoneda = tMoneda(cDecimalesMoneda) [C6].Decimales gDecimalesMoneda [C12..C38].Decimales gDecimalesMoneda tParametros.Busca Primero // Número de impuesto que tiene el IVA gNumImpuesto = tParametros(cNumImpuestoIVA) Si gNumImpuesto > 0 // ND-255 gNumImpuesto = gNumImpuesto - 1 // (0 = Impuesto1, 1 = Impuesto2, 2 = Impuesto3) FinSi // ************************************* // 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 // ************************************* // 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 // Pone la longitud de cada columna // Fecha pago = 12 caracteres ws.Columns(1).ColumnWidth = 12[C0] // Serie pago = 5 caracteres ws.Columns(2).ColumnWidth = 5[C0] // Folio pago = 8 caracteres ws.Columns(3).ColumnWidth = 8[C0] // Codigo Proveedor ws.Columns(4).ColumnWidth = 18[C0] // Proveedor ws.Columns(5).ColumnWidth = 25[C0] // Concepto ws.Columns(6).ColumnWidth = 25[C0] // Importe pagado = 15 caracteres ws.Columns(7).ColumnWidth = 14[C0] // Serie factura = 5 caracteres ws.Columns(8).ColumnWidth = 5[C0] // Folio factura = 8 caracteres ws.Columns(9).ColumnWidth = 8[C0] // Total 15% = 15 caracteres ws.Columns(10).ColumnWidth = 15[C0] // Total 10% = 15 caracteres ws.Columns(11).ColumnWidth = 15[C0] // Total 8% = 15 caracteres ws.Columns(12).ColumnWidth = (pMostrarTasa8=0? 0:15 )[C0] // Total 0% = 15 caracteres ws.Columns(13).ColumnWidth = 15[C0] // Total Exento = 15 caracteres ws.Columns(14).ColumnWidth = 15[C0] // Total Otros = 15 caracteres ws.Columns(15).ColumnWidth = 15[C0] // Base 15% = 15 caracteres ws.Columns(16).ColumnWidth = 15[C0] // Base 10% = 15 caracteres ws.Columns(17).ColumnWidth = 15[C0] // Base 8% = 15 caracteres ws.Columns(18).ColumnWidth = (pMostrarTasa8=0? 0:15 )[C0] // Base 0% = 15 caracteres ws.Columns(19).ColumnWidth = 15[C0] // Base Exento = 15 caracteres ws.Columns(20).ColumnWidth = 15[C0] // Base Otros = 15 caracteres ws.Columns(21).ColumnWidth = 15[C0] // Neto = 15 caracteres ws.Columns(22).ColumnWidth = 15[C0] // IVA 15% = 15 caracteres ws.Columns(23).ColumnWidth = 15[C0] // IVA 10% = 15 caracteres ws.Columns(24).ColumnWidth = 15[C0] // IVA 8% = 15 caracteres ws.Columns(25).ColumnWidth = (pMostrarTasa8=0? 0:15 )[C0] // IVA Otros = 15 caracteres ws.Columns(26).ColumnWidth = 15[C0] // Retencion 1 ws.Columns(27).ColumnWidth = 15[C0] // Retencion 2 ws.Columns(28).ColumnWidth = 15[C0] // ***************************************************************************** // fConfiguraDecimales // // Configura el número de decimales de las columnas de importes, basado // en los parámetros de la empresa. // // Parámetros // // Salidas // ***************************************************************************** DefFunc fConfiguraDecimales() LOCAL lDigDecimales, lDecs, lFormato lDigDecimales = '0000000000' // Busca el registro de la moneda del documento tMoneda.Busca[@Str(pIdMoneda;0)] Si tMoneda->Encontro // Si lo encontró lDecs = @SUBSTR(lDigDecimales;1;tMoneda(cDecimalesMoneda)) // lFormato = '#,##0.' & lDecs & '_);[Rojo](#,##0.' & lDecs & ')' lFormato = '#,##0.' & lDecs & '_);(#,##0.' & lDecs & ')' ws.Columns(7).NumberFormat = lFormato[C0] 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] 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] ws.Columns(22).NumberFormat = lFormato[C0] ws.Columns(23).NumberFormat = lFormato[C0] ws.Columns(24).NumberFormat = lFormato[C0] ws.Columns(25).NumberFormat = lFormato[C0] ws.Columns(26).NumberFormat = lFormato[C0] ws.Columns(27).NumberFormat = lFormato[C0] ws.Columns(28).NumberFormat = lFormato[C0] ws.Columns(29).NumberFormat = lFormato[C0] ws.Columns(30).NumberFormat = lFormato[C0] ws.Columns(31).NumberFormat = lFormato[C0] Sino // Si no encontró el registro de la empresa [C8..C32].Decimales 2 // ws.Columns(6).NumberFormat = '#,##0.00_);[Rojo](#,##0.00)'[C0] ws.Columns(7).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(10).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(11).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(12).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(13).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(14).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(15).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(16).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(17).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(18).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(19).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(20).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(21).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(22).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(23).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(24).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(25).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(26).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(27).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(28).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(29).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(30).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] ws.Columns(31).NumberFormat = '#,##0.00_);(#,##0.00)'[C0] FinSi FinFunc // ***************************************************************************** // fImprimeDocumento // // Esta función imprime los datos del documento y los calculados // // Parámetros // // Salidas // ***************************************************************************** DefFunc fImprimeDocumento(atPagos: Tabla; atDocumento: Tabla; anImporte; aTotalConIVA; aTotalSinIVA; aNeto; aIVA; aRetencion) Local lFechaEditada // Manda a Excel Pagos(cFecha), Pagos(cSerieDocumento), Pagos(cFolio), nImporte // Manda a Execl Documentos(cSerieDocumento), Documentos(cFolio), Documentos(cFecha) // Manda a Excel TotalConIVA(0..3), TotalSinIVA(0..3), Neto, IVA(0...1) // Avanza de renglon RenActual = RenActual + 1[C0] ws.Range('A' & RenActual & ':AB' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':AB' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':AB' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':AB' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] // Fecha del documento lFechaEditada = fFormateaFecha(atPagos(cFecha); gIdioma) ws.Range('A' & RenActual).Value = @Col(lFechaEditada;0)[C0] // Serie ws.Range('B' & RenActual).Value = atPagos(cSerieDocumento)[C0] // Folio ws.Range('C' & RenActual).Value = atPagos(cFolio)[C0] // Codigo Proveedor ws.Range('A' & RenActual).Value = @Col(lFechaEditada;0)[C0] // Serie ws.Range('B' & RenActual).Value = atPagos(cSerieDocumento)[C0] // Folio ws.Range('C' & RenActual).Value = atPagos(cFolio)[C0] ws.Range('D' & RenActual).Value = tClienteProveedorTmp(cCodigoCliente)[C0] ws.Range('E' & RenActual).Value = tClienteProveedorTmp(cRazonSo01)[C0] // buscar el concepto tConceptos.Busca[@Str(atPagos(cIdConceptoDocumento);0)] Si tConceptos->Encontro ws.Range('F' & RenActual).Value = tConceptos(cNombreConcepto)[C0] FinSi // Importe pagado ws.Range('G' & RenActual).Value = @Col(anImporte;0)[C0] // Serie ws.Range('H' & RenActual).Value = atDocumento(cSerieDocumento)[C0] // Folio ws.Range('I' & RenActual).Value = atDocumento(cFolio)[C0] // Total con IVA 15% ws.Range('J' & RenActual).Value = @Col(aTotalConIVA;0)[C0] // Total con IVA 10% ws.Range('K' & RenActual).Value = @Col(aTotalConIVA;1)[C0] // Total con IVA 8% ws.Range('L' & RenActual).Value = @Col(aTotalConIVA;2)[C0] // Total con IVA 0% ws.Range('M' & RenActual).Value = @Col(aTotalConIVA;3)[C0] // Total con IVA Exento ws.Range('N' & RenActual).Value = @Col(aTotalConIVA;4)[C0] // Total con IVA Otros ws.Range('O' & RenActual).Value = @Col(aTotalConIVA;5)[C0] // Total sin IVA 15% ws.Range('P' & RenActual).Value = @Col(aTotalSinIVA;0)[C0] // Total sin IVA 10% ws.Range('Q' & RenActual).Value = @Col(aTotalSinIVA;1)[C0] // Total sin IVA 8% ws.Range('R' & RenActual).Value = @Col(aTotalSinIVA;2)[C0] // Total sin IVA 0% ws.Range('S' & RenActual).Value = @Col(aTotalSinIVA;3)[C0] // Total sin IVA Exento ws.Range('T' & RenActual).Value = @Col(aTotalSinIVA;4)[C0] // Total sin IVA Otros ws.Range('U' & RenActual).Value = @Col(aTotalSinIVA;5)[C0] // Neto ws.Range('V' & RenActual).Value = @Col(aNeto;7)[C0] // IVA 15% ws.Range('W' & RenActual).Value = @Col(aIVA;0)[C0] // IVA 10% ws.Range('X' & RenActual).Value = @Col(aIVA;1)[C0] // IVA 8% ws.Range('Y' & RenActual).Value = @Col(aIVA;2)[C0] // IVA Otros ws.Range('Z' & RenActual).Value = @Col(aIVA;3)[C0] // RETENCION 1 ws.Range('AA' & RenActual).Value = @COL(aRetencion;0)[C0] // RETENCION 2 ws.Range('AB' & RenActual).Value = @COL(aRetencion;1)[C0] FinFunc // ***************************************************************************** // fImprimeTotales // // Esta función imprime los totales de los documentos y los calculados // // Parámetros // // Salidas // ***************************************************************************** DefFunc fImprimeTotales(gGranTotal; gGranTotalConIVA; gGranTotalSinIVA; gGranNeto; gGranIVA; gGranRetencion) // Avanza de renglon RenActual = RenActual + 1[C0] ws.Range('G' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('G' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('G' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('G' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('G' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('J' & RenActual & ':AB' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('J' & RenActual & ':AB' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('J' & RenActual & ':AB' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('J' & RenActual & ':AB' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('J' & RenActual & ':AB' & RenActual).Font.FontStyle = 'Negrita'[C0] // Total del importe pagado ws.Range('G' & RenActual).Value = @Col(gGranTotal;0)[C0] // Gran total con IVA 15% ws.Range('J' & RenActual).Value = @Col(gGranTotalConIVA;0)[C0] // Gran total con IVA 10% ws.Range('K' & RenActual).Value = @Col(gGranTotalConIVA;1)[C0] // Gran total con IVA 8% ws.Range('L' & RenActual).Value = @Col(gGranTotalConIVA;2)[C0] // Gran total con IVA 0% ws.Range('M' & RenActual).Value = @Col(gGranTotalConIVA;3)[C0] // Gran total con IVA Exento ws.Range('N' & RenActual).Value = @Col(gGranTotalConIVA;4)[C0] // Gran total con IVA Otros ws.Range('O' & RenActual).Value = @Col(gGranTotalConIVA;5)[C0] // Gran total sin IVA 15% ws.Range('P' & RenActual).Value = @Col(gGranTotalSinIVA;0)[C0] // Gran total sin IVA 10% ws.Range('Q' & RenActual).Value = @Col(gGranTotalSinIVA;1)[C0] // Gran total sin IVA 8% ws.Range('R' & RenActual).Value = @Col(gGranTotalSinIVA;2)[C0] // Gran total sin IVA 0% ws.Range('S' & RenActual).Value = @Col(gGranTotalSinIVA;3)[C0] // Gran total sin IVA Exento ws.Range('T' & RenActual).Value = @Col(gGranTotalSinIVA;4)[C0] // Gran total sin IVA Otros ws.Range('U' & RenActual).Value = @Col(gGranTotalSinIVA;5)[C0] // Total Neto ws.Range('V' & RenActual).Value = @Col(gGranNeto;0)[C0] // Total IVA 15% ws.Range('W' & RenActual).Value = @Col(gGranIVA;0)[C0] // Total IVA 10% ws.Range('X' & RenActual).Value = @Col(gGranIVA;1)[C0] // Total IVA 8% ws.Range('Y' & RenActual).Value = @Col(gGranIVA;2)[C0] // Total IVA Otros ws.Range('Z' & RenActual).Value = @Col(gGranIVA;3)[C0] // Total Retencion1 ws.Range('AA' & RenActual).Value = @Col(gGranRetencion;0)[C0] // Total Retencion2 ws.Range('AB' & RenActual).Value = @Col(gGranRetencion;1)[C1] FinFunc // ***************************************************************************** // fCalculaTotales // // Esta función lee el IVA de los movtos y calcula los importe base de los IVAs // // Parámetros // // Entradas: aIdDocumento - Identificador del documento padre de los movtos // aNumImpuesto - determina el campo impuesto de la tabla de movtos // entre el 1 y 3l tres // Salidas: Los parámetros aNeto y aImpuesto deben ser enviados por referencia // ***************************************************************************** DefFunc fCalculaTotales(aNeto; aImpuesto; aRetencion; atDocumento: Tabla; aNumImpuesto; atPagos: Tabla) Local lOffsetImporte, lOffsetPorcentaje, lEsExento, lNeto, lTotal, lImpuesto, lOtraTasa aNeto = 0[C0..C7] aImpuesto = 0[C0..C3] aRetencion = 0[C0..C1] lTotal = 0[C0] lImpuesto = 0[C0..C2] lOffsetImporte = 16 + (aNumImpuesto * 2) lOffsetPorcentaje = 17 + (aNumImpuesto * 2) Mientras [ tMovimiento.Busca[@Str(atDocumento(cIdDocumento);0)]; tMovimiento->Encontro; tMovimiento.Busca Siguiente[1] ] lNeto[0] = tMovimiento(cNeto) - tMovimiento(cDescuento1) - tMovimiento(cDescuento2) - tMovimiento(cDescuento3) - tMovimiento(cDescuento4) - tMovimiento(cDescuento5) aRetencion[0] = @COL(aRetencion;0) + tMovimiento(cRetenci01) aRetencion[1] = @COL(aRetencion;1) + tMovimiento(cRetenci02) lTotal[0] = tMovimiento(cTotal) + tMovimiento(cRetenci01) + tMovimiento(cRetenci02) lOtraTasa = FALSE Escoge tMovimiento->CampoVal[lOffsetPorcentaje] Caso 15 SI @VAL(@SUBSTR(atDocumento(cFecha);0;4)) <= 2009 // AJUSTE 2010 CASO PAGOS DEL 2009 PAGADOS EN LA FECHA DE AJUSTE O POSTERIOR SI atPagos(cFecha) >= tParametros(cfecaj2010) lNeto[0] = @COL(lTotal;0) / 1.16 lImpuesto[0] = @COL(lNeto;0) * 0.16 SINO lImpuesto[0] = tMovimiento->CampoVal[lOffsetImporte] FINSI aNeto[0] = @Col(aNeto;0) + @Col(lNeto;0) aImpuesto[0] = @Col(aImpuesto;0) + @COL(lImpuesto;0) SINO lOtraTasa = TRUE FINSI FinCaso Caso 16 SI @VAL(@SUBSTR(atDocumento(cFecha);0;4)) > 2009 // AJUSTE 2010 CASO DOCUMENTO DE AJUSTE ESPECIAL SI atDocumento(cIdDocumentoOrigen) > 0 Y (atDocumento(cIdConce01) = gIdAjusteCliente O atDocumento(cIdConce01) = gIdAjusteProveedor) lNeto[0] = tMovimiento->CampoVal[lOffsetImporte] / 1.16 lImpuesto[0] = @COL(lNeto;0) * 0.16 SINO lImpuesto[0] = tMovimiento->CampoVal[lOffsetImporte] FINSI aNeto[0] = @Col(aNeto;0) + @Col(lNeto;0) aImpuesto[0] = @Col(aImpuesto;0) + @Col(lImpuesto;0) SINO lOtraTasa = TRUE FINSI FinCaso Caso 10 SI @VAL(@SUBSTR(atDocumento(cFecha);0;4)) <= 2009 // AJUSTE 2010 CASO PAGOS DEL 2009 PAGADOS EN LA FECHA DE AJUSTE O POSTERIOR SI atPagos(cFecha) >= tParametros(cfecaj2010) lNeto[0] = @COL(lTotal;0) / 1.11 lImpuesto[0] = @COL(lNeto;0) * 0.11 SINO lImpuesto[0] = tMovimiento->CampoVal[lOffsetImporte] FINSI aImpuesto[1] = @Col(aImpuesto;1) + @Col(lImpuesto;0) aNeto[1] = @Col(aNeto;1) + @Col(lNeto;0) SINO lOtraTasa = TRUE FINSI FinCaso Caso 11 SI @VAL(@SUBSTR(atDocumento(cFecha);0;4)) > 2009 // AJUSTE 2010 CASO DOCUMENTO DE AJUSTE ESPECIAL SI atDocumento(cIdDocumentoOrigen) > 0 Y (atDocumento(cIdConce01) = gIdAjusteCliente O atDocumento(cIdConce01) = gIdAjusteProveedor) lNeto[0] = tMovimiento->CampoVal[lOffsetImporte] / 1.11 lImpuesto[0] = @COL(lNeto;0) * 0.11 SINO lImpuesto[0] = tMovimiento->CampoVal[lOffsetImporte] FINSI aNeto[1] = @Col(aNeto;1) + @Col(lNeto;0) aImpuesto[1] = @Col(aImpuesto;1) + @Col(lImpuesto;0) SINO lOtraTasa = TRUE FINSI FinCaso Caso 8 SI @VAL(@SUBSTR(atDocumento(cFecha);0;4)) > 2018 lImpuesto[0] = tMovimiento->CampoVal[lOffsetImporte] aNeto[2] = @Col(aNeto;2) + @Col(lNeto;0) aImpuesto[2] = @Col(aImpuesto;2) + @Col(lImpuesto;0) SINO lOtraTasa = TRUE FINSI FinCaso Caso 0 // Si el importe del impuesto es distinto de cero es por que se capturó // y debe ir a otras tasas Si tMovimiento->CampoVal[lOffsetImporte] = 0.0 lEsExento = 0 Si tMovimiento(cIdProducto) != 0 tProducto.Busca[@Str(tMovimiento(cIdProducto);0)] Si !tProducto->Encontro Continua FinSi lEsExento = tProducto(cEsExento) FinSi Si lEsExento = 0 aNeto[3] = @Col(aNeto;3) + @Col(lNeto;0) SiNo aNeto[4] = @Col(aNeto;4) + @Col(lNeto;0) FinSi SiNo aImpuesto[3] = @Col(aImpuesto;3) + tMovimiento->CampoVal[lOffsetImporte] aNeto[5] = @Col(aNeto;5) + @Col(lNeto;0) FinSi FinCaso OtroCaso lOtraTasa = TRUE FinCaso FinEscoge SI lOtraTasa aImpuesto[3] = @Col(aImpuesto;3) + tMovimiento->CampoVal[lOffsetImporte] aNeto[5] = @Col(aNeto;5) + @Col(lNeto;0) FINSI FinMientras aNeto[6] = atDocumento(cNeto) - atDocumento(cDescuentoMov) aNeto[7] = atDocumento(cTotal) FinFunc // ***************************************************************************** // Encabezado del reporte Encab // Pone el nombre del sistema ws.Range('A' & RenActual).Font.Color = @RGB(156;0;89)[C0] ws.Range('A' & RenActual).Font.Size = 8[C0] ws.Range('A' & RenActual).Value = 'Factura Electrónica'[C0] // Pone el nombre de la empresa ws.Range('C' & RenActual).Font.Size = 14[C0] ws.Range('C' & RenActual).Font.FontStyle = 'Negrita'[C0] // Lo centra en las columnas B a la S ws.Range('C' & RenActual & ':S' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('C' & 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] Si pTipoReporte = 0 ws.Range('A' & RenActual ).Value = 'A N Á L I S I S D E I V A P O R D O C U M E N T O D E P A G O C R O N O L O G I C O ( C L I E N T E )'[C0] SiNo ws.Range('A' & RenActual ).Value = 'A N Á L I S I S D E I V A P O R D O C U M E N T O D E P A G O C R O N O L O G I C O ( P R O V E E D O R) '[C0] FinSi // Lo centra en las columnas A a la T ws.Range('A' & RenActual & ':T' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] // Avanza de renglon RenActual = RenActual + 1[C0] // Pone el rango de fechas en EXCEL ws.Range('A' & RenActual).Font.Size = 12[C0] ws.Range('A' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('A' & RenActual ).Value = 'Del: ' & fFormateaFecha(pFechaInicial;gIdioma) & ' Al: ' & fFormateaFecha(pFechaFinal;gIdioma)[C0] // Lo centra en las columnas A a la T ws.Range('A' & RenActual & ':Y' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] // Avanza de renglon RenActual = RenActual + 1[C0] ws.Range('A' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('A' & RenActual ).Value = 'Impuesto a considerar: ' & tParametros->CampoVal[65+gNumImpuesto][C0] tMoneda.Busca[@Str(pIdMoneda;0)] Si tMoneda->Encontro ws.Range('AB' & RenActual).HorizontalAlignment = xlDerecha[C0] ws.Range('AB' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('AB' & RenActual ).Value = 'Moneda: ' & tMoneda(cNombreMoneda)[C0] FinSi // Avanza de renglon RenActual = RenActual + 1[C0] // Pone el titulo para el documento de Pago ws.Range('B' & RenActual & ':F' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('B' & RenActual & ':F' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('B' & RenActual & ':F' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('B' & RenActual & ':F' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('B' & RenActual & ':F' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('B' & RenActual & ':F' & RenActual).Interior.ColorIndex = 3[C0] ws.Range('B' & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('B' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('B' & RenActual ).Value = 'PAGO'[C0] // Pone el titulo Factura o Compra ws.Range('H' & RenActual & ':I' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('H' & RenActual & ':I' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('H' & RenActual & ':I' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('H' & RenActual & ':I' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('H' & RenActual & ':I' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('H' & RenActual & ':I' & RenActual).Interior.ColorIndex = 3[C0] ws.Range('H' & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('H' & RenActual).Font.FontStyle = 'Negrita'[C0] Si pTipoReporte = 0 // Por clientes? ws.Range('H' & RenActual ).Value = 'FACTURA'[C0] SiNo // por Proveedor ws.Range('H' & RenActual ).Value = 'COMPRA'[C0] FinSi // Pone el titulo Importes totales incluyendo IVA ws.Range('J' & RenActual & ':O' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('J' & RenActual & ':O' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('J' & RenActual & ':O' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('J' & RenActual & ':O' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('J' & RenActual & ':O' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('J' & RenActual & ':O' & RenActual).Interior.ColorIndex = 3[C0] ws.Range('J' & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('J' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('J' & RenActual ).Value = 'IMPORTES TOTALES INCLUYENDO IVA'[C0] // Pone el titulo Importes totales sin IVA ws.Range('P' & RenActual & ':U' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('P' & RenActual & ':U' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('P' & RenActual & ':U' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('P' & RenActual & ':U' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('P' & RenActual & ':U' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('P' & RenActual & ':U' & RenActual).Interior.ColorIndex = 3[C0] ws.Range('P' & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('P' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('P' & RenActual ).Value = 'IMPORTES TOTALES SIN IVA'[C0] // Pone el titulo Importe de IVA ws.Range('W' & RenActual & ':Z' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('W' & RenActual & ':Z' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('W' & RenActual & ':Z' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('W' & RenActual & ':Z' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('W' & RenActual & ':Z' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('W' & RenActual & ':Z' & RenActual).Interior.ColorIndex = 3[C0] ws.Range('W' & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('W' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('W' & RenActual ).Value = 'IMPORTE DE IVA'[C0] // Pone el titulo Retenciones ws.Range('AA' & RenActual & ':AB' & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range('AA' & RenActual & ':AB' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('AA' & RenActual & ':AB' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('AA' & RenActual & ':AB' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('AA' & RenActual & ':AB' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('AA' & RenActual & ':AB' & RenActual).Interior.ColorIndex = 3[C0] ws.Range('AA' & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('AA' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('AA' & RenActual ).Value = 'RETENCIONES'[C0] // Avanza de renglon RenActual = RenActual + 1[C0] // Pone el titulo de cada columna en EXCEL ws.Range('A' & RenActual & ':AB' & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':AB' & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':AB' & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':AB' & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range('A' & RenActual & ':AB' & RenActual).Interior.ColorIndex = 55[C0] ws.Range('A' & RenActual & ':AB' & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range('A' & RenActual & ':AB' & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range('D' & RenActual).HorizontalAlignment = xlCentro[C0] ws.Range('G' & RenActual & ':AB' & RenActual).HorizontalAlignment = xlCentro[C0] // leer los nombres de las retenciones de la tabla de parametros gNombreRetencion1 = tParametros(cNombrer01) gNombreRetencion2 = tParametros(cNombrer02) SI pTipoReporte = 0 ws.Range('A' & RenActual & ':AB' & RenActual).Value = 'Fecha','Serie','Folio','Codigo Cliente','Cliente','Concepto','Importe Pagado','Serie','Folio',@Chr(39)&'16%',@Chr(39)&'11%',@Chr(39)&'8%',@Chr(39)&'0%','Exento','Otros Impuestos',@Chr(39)&'16%',@Chr(39)&'11%',@Chr(39)&'8%',@Chr(39)&'0%','Exento','Otros Impuestos','Neto','IVA 16%','IVA 11%','IVA 8%','Otros Impuestos' SINO ws.Range('A' & RenActual & ':AB' & RenActual).Value = 'Fecha','Serie','Folio','Codigo Proveedor','Proveedor','Concepto','Importe Pagado','Serie','Folio',@Chr(39)&'16%',@Chr(39)&'11%',@Chr(39)&'8%',@Chr(39)&'0%','Exento','Otros Impuestos',@Chr(39)&'16%',@Chr(39)&'11%',@Chr(39)&'8%',@Chr(39)&'0%','Exento','Otros Impuestos','Neto','IVA 16%','IVA 11%','IVA 8%','Otros Impuestos' FINSI ws.Range('AA' & RenActual).value = gNombreRetencion1 ws.Range('AB' & RenActual).value = gNombreRetencion2 Excel.Rows('7:7').Select Excel.ActiveWindow.FreezePanes = True ws.Range('A' & RenActual).Select FinEncab // ***************************************************************************** // Cuerpo del reporte // Configura los decimales del reporte fConfiguraDecimales() // Inicializa los conceptos de ajuste tConceptos.UsaIndice['cCodigoC01'] tConceptos.BUSCA['AJUSTE_IVA_CTE_CARGO_2010'] gIdAjusteCliente = tConceptos(cIdConce01) tConceptos.BUSCA['AJUSTE_IVA_PRV_CARGO_2010'] gIdAjusteProveedor = tConceptos(cIdConce01) tConceptos.UsaIndice['PrimaryKey'] Si pTipoReporte = 0 // por Clientes? tAsociacion.Usaindice[''] // Llave primaria: cIdDocumentoAbono+cIdDocumentoCargo SiNo // proveedores tAsociacion.Usaindice['iDoctoCargoAbono'] // cIdDocumentoCargo+cIdDocumentoAbono FinSi // Obtiene los documentos en el rango de fechas especificado en el reporte Mientras pFechaInicial <= pFechaFinal // Si encontro algún documento en esa fecha, recupera todos los documentos en esa fecha Mientras [tPagos.Busca[pFechaInicial]; tPagos->Encontro; tPagos.Busca Siguiente[1] ] // Si el docto tiene fecha menor a 2002 no desglosar su IVA Si tPagos(cFecha) < '20020101' Continua FinSi // Omite los documentos cancelados, y que no han sido afectados Si tPagos(cCancelado) != 0 Continua FinSi Si tPagos(cAfectado) = 0 Continua FinSi // Si el reporte es de cliente únicamente se procesan los cheques, pagos y abonos Si pTipoReporte = 0 Y tPagos(cIdDocumentoDe) != 9 Y tPagos(cIdDocumentoDe) != 10 Y tPagos(cIdDocumentoDe) != 12 Continua FinSi // Si el reporte es de proveedores únicamente se procesan los cheques, pagos y abonos SI pTipoReporte = 1 Y tPagos(cIdDocumentoDe) != 23 Y tPagos(cIdDocumentoDe) != 24 Y tPagos(cIdDocumentoDe) != 26 Continua FinSi // Si encontro documentos asociados a ese documento de pago Mientras [tAsociacion.Busca[@Str(tPagos(cIdDocumento);0)]; tAsociacion->Encontro; tAsociacion.Busca Siguiente[1] ] Si pTipoReporte = 0 gIdDocumento = tAsociacion(cIdDocumentoCargo) gnImporte = tAsociacion(cImporteAbono) SiNo gIdDocumento = tAsociacion(cIdDocumentoAbono) gnImporte = tAsociacion(cImporteCargo) FinSi tDocumento.Busca[@Str(gIdDocumento;0)] Si !tDocumento->Encontro Continua Finsi // Si el docto tiene fecha menor a 2002 no desglosar su IVA Si tDocumento(cFecha) < '20020101' Continua FinSi tClienteProveedorTmp.Busca[@Str(tDocumento(cIdClienteProveedor);0)] Si tClienteProveedorTmp->Encontro lIdMonedaCliente = tClienteProveedorTmp(cIdMoneda) Sino lIdMonedaCliente = 1 FinSi Si lIdMonedaCliente != pIdMoneda Y pIdMoneda != 1 Continua FinSi // Nota únicamente se ocupará del Neto, sin embargo, se utiliza la misma función fCalculaTotales(&gNeto; &gImpuesto; &gRetencion; tDocumento; gNumImpuesto; tPagos) gProporcional = @Col(gnImporte;0) / tDocumento(cTotal) gNeto[0] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gNeto;0); pIdMoneda; lIdMonedaCliente) gNeto[1] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gNeto;1); pIdMoneda; lIdMonedaCliente) gNeto[2] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gNeto;2); pIdMoneda; lIdMonedaCliente) gNeto[3] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gNeto;3); pIdMoneda; lIdMonedaCliente) gNeto[4] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gNeto;4); pIdMoneda; lIdMonedaCliente) gNeto[5] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gNeto;5); pIdMoneda; lIdMonedaCliente) gNeto[6] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gNeto;6); pIdMoneda; lIdMonedaCliente) gNeto[7] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gNeto;7); pIdMoneda; lIdMonedaCliente) gNeto[8] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gNeto;8); pIdMoneda; lIdMonedaCliente) gImpuesto[0] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gImpuesto;0); pIdMoneda; lIdMonedaCliente) gImpuesto[1] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gImpuesto;1); pIdMoneda; lIdMonedaCliente) gImpuesto[2] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gImpuesto;2); pIdMoneda; lIdMonedaCliente) gImpuesto[3] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gImpuesto;3); pIdMoneda; lIdMonedaCliente) gRetencion[0] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gRetencion;0); pIdMoneda; lIdMonedaCliente) gRetencion[1] = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; @Col(gRetencion;1); pIdMoneda; lIdMonedaCliente) gnImporte = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; gnImporte; pIdMoneda; lIdMonedaCliente) //Calcula las columnas de acuerdo a las proporciones obtenidas gTotalConIVA = (gNeto + gImpuesto) * @Col(gProporcional;0)[C0] gTotalConIVA = (gNeto + gImpuesto) * @Col(gProporcional;0)[C1] gTotalConIVA = (gNeto + gImpuesto) * @Col(gProporcional;0)[C2] gTotalConIVA = gNeto * @Col(gProporcional;0)[C3] gTotalConIVA = gNeto * @Col(gProporcional;0)[C4] gTotalConIVA = (gNeto + @Col(gImpuesto;3)) * @Col(gProporcional;0)[C5] Si pMostrarTasa8 = 0 gnImporte[0] = @COL(gnImporte; 0) - @COL(gTotalConIVA; 2) FinSi // Calcula impuestos en base a la proporción general gIVA = gImpuesto * @Col(gProporcional;0)[C0] gIVA = gImpuesto * @Col(gProporcional;0)[C1] gIVA = gImpuesto * @Col(gProporcional;0)[C2] // No se considerará el importe 3 ni el 4 ya que estos son tasa 0% gIVA = gImpuesto * @Col(gProporcional;0)[C3] gRet = gRetencion * @Col(gProporcional;0)[C0] gRet = gRetencion * @Col(gProporcional;0)[C1] // Calcula los totales sin impuestos gTotalSinIVA = gTotalConIVA - gIVA[C0] gTotalSinIVA = gTotalConIVA - gIVA[C1] gTotalSinIVA = gTotalConIVA - gIVA[C2] gTotalSinIVA = gTotalConIVA[C3] gTotalSinIVA = gTotalConIVA[C4] gTotalSinIVA[5] = @Col(gTotalConIVA;5) - @Col(gIVA;3) gNeto[7] = @Col(gTotalSinIVA;0) + @Col(gTotalSinIVA;1) + @Col(gTotalSinIVA;2) + @Col(gTotalSinIVA;3) + @Col(gTotalSinIVA;4) + @Col(gTotalSinIVA;5) //Si no muestra IVA 8%, se resta el importe al neto y total. Si pMostrarTasa8 = 0 gNeto[7] = @COL(gNeto; 7) - @COL(gTotalSinIVA; 2) FinSi gRetDocto1 = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; tDocumento(cRetencion1); pIdMoneda; lIdMonedaCliente) gRetencion1 = gRetencion1 + gRetDocto1 gRetDocto2 = fCambiarMonedaDoctoAReporte(tPagos; tTiposCambioLib; tDocumento(cRetencion2); pIdMoneda; lIdMonedaCliente) gRetencion2 = gRetencion2 + gRetDocto2 gGranTotal = gGranTotal + gnImporte[C0] gGranTotalConIVA = gGranTotalConIVA + gTotalConIVA[C0..C5] gGranTotalSinIVA = gGranTotalSinIVA + gTotalSinIVA[C0..C5] gGranNeto = gGranNeto + @Col(gNeto;7)[C0] gGranIVA = gGranIVA + gIVA[C0..C3] gGranRetencion = gGranRetencion + gRet[C0..C1] // Imprime el documento fImprimeDocumento(tPagos; tDocumento; gnImporte; gTotalConIVA; gTotalSinIVA; gNeto; gIVA; gRet) FinMientras FinMientras // Busca en la siguiente fecha pFechaInicial = fFechaSiguiente(pFechaInicial) FinMientras // Manda a Excel GranTotal, GranTotalConIVA, GranTotalSinIVA, GranNeto, GranIVA fImprimeTotales(gGranTotal; gGranTotalConIVA; gGranTotalSinIVA; gGranNeto; gGranIVA; gGranRetencion)