// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // // F@C_InformeSAT.rpt // // Sistema: AdminPAQ v1.1 // // Elaboró: Leonardo Aguilar Pizano // Fecha: 27 de Diciembre de 2005 // // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> // Historia de modificaciones // Fecha Nombre IDLotus Descripcion // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // // 30/Mayo/2005 ND: 4084 F@C - El Informe Mensual al SAT toma los importes del documento en // su moneda en vez de presentarlos en pesos. Habrá que revisar la situación con // el reporte Comprobantes Fiscales Digitales. (ELVS) // 05/Junio/2006 N.D.4090 AdminPAQ VS AMECE - Si un documento se cancela en el mismo // periodo en el que fue creado deben mostrarse el Documento Activo y el // documento Cancelado en el reporte Mensual, pero si el documento fue // cancelado en un Periodo diferente debe reportarse solo el Cancelado. (ELVS) // 07/Junio/2006 N.D.4097 AdminPAQ VS AMECE - Si una Empresa maneja CFD y documentos en // papel (tradicionales) debe existir al menos un reporte que detalle los // dos tipos de Documentos. (ELVS) // 08/Junio/2006 N.D.4099 AdminPAQ VS AMECE - Si una Empresa maneja CFD y documentos en papel // (tradicionales) en el reporte que muestra ambos tipos de documentos Informe // Mensual el SAT y comprobantes fiscales digitales) se debe incluir el número // de aprobación y ejercicio de aprobación de los documentos tradicionales. (ELVS) // 13/Junio/2006 N.D.4108 AdmilImpuestonPAQ VS AMECE - El Informe Mensual en su modalidad de Informativo // o Excel debe informar los documentos CFD´s que no han sido emitidos y poner en // el estado la leyenda "Pendiente de emitir". La leyenda se cambio de "pendiente // por emitir" por "no emitido" (ELVS) // 14/Junio/2006 N.D.4109 AdminPAQ VS AMECE - Hace falta validar que el informe mensual del SAT cumpla con // las especificaciones del Anexo 20. Uno de los errores detectados es en el // despliegue de la aprobación. (ELVS) // 22/Junio/2006 N.D.4157 Al generar el reporte Informe mensual al SAT - Informativo, aparece // desalineada la columna Estado con respecto al contenido de la misma columna. // 14/Julio/2006 N.D.4196 F@C - Informe Mensual al SAT- AdminPAQ VS AMECE - Cuando un documento se // cancela se debe poner la fecha de emisión y no la de cancelación, este estatus // solo es indicado en el reporte como un 0. (ELVS) // 20/Julio/2006 N.D.4208 La información de Estado del reporte Informe mensual al SAT aparece en // 1 sola linea en lugar de aparecer en lista como el resto de los reportes en AdminPAQ. // 14/Noviembre/2008 N.D.5535 F@C - Informe Mensual al SAT CFDs - La columna 6 "Monto de la // Operación" muestra el Neto del documento y no el Monto total de la transacción que // ampara el comprobante, como lo señala el Anexo 20. (ELVS) // 20/Noviembre/2008 N.D.5535 Informe Mensual al SAT CFDs - La columna 7 "Monto del // Impuesto" muestra la suma de todos los impuestos del documento y solo debe // incluir el impuesto configurado como IVA. (ELVS) // 26/Enero/2010 N.C.275 Cambio a la estructura del reporte mensual de CFD por nueva versión del Anexo de 21 de diciembre de 2009. (IYPZ) // 25/Noviembre/2010 N.D.6519 Reportes - ERROR SE MUESTRA VACIA LA COLUMNA OPERACION E IMPUESTO // PARA DOCUMENTOS CON IMPORTE 0, AL EMITIR EL REPORTE INFORME MENSUAL AL SAT / CFDS EN // FORMATO INFORMATIVO; SIENDO QUE EL ARCHIVO TXT SI ENVIA CERO. (ALRH) // 26/Noviembre/2010 N.D.6546 Genérico - aERROR EL EFETO DEL COMPROBANTE DEBE SER I E O T AL CARGAR // EL INFORME MENSUAL DE CFDS AL SAT. (ALRH) // 26/Noviembre/2010 N.D.6530 Genérico - ERROR EL INFORME MENSUAL AL SAT/CFDS SOLO ARROJA DOS DECIMALES, // AUN Y CUANDO EN LA CONFIGURACION GENERAL SE UTILIZAN 5. (ELVS)(ALRH) // 03/12/2010 N.C.315 Documentos - SUGERENCIA AGREGAR EL DOCUMENTO CARTAS PORTES (COMPROBANTE) // EN LOS DOCUMENTOS DISPONIBLES DE ADMINPAQ. (ELVS) // 20/01/2011 N.C.351 Unificar el reporte mensual para que pueda generarse con documentos tradicionales y CFDs. // Además incluir en los documentos tradicionales el número y año de aprobación. // (Actualmente solo se permite el número). (ALRH) // 27/01/2011 N.D.6896 ERROR EL INFORME MENSUAL AL SAT DESPLIEGA MAS DE 2 DECIMAL // OCASIONANDO QUE EL VALIDADOR NO LO CARGUE CARRECTAMENTE. (ALRH) // 11/02/2011 N.D.6949 Estan apareciendo documentos CFDi en el reporte. (ALRH) // 18/02/2011 N.D.6997 ERROR LINEA 1 ESTRUCTURA DE ARCHIVO INCORRECTO AL ENTREGAR EL INFORME MENSUAL AL SAT. (ALRH) // 22/02/2011 N.D.6999 ERROR NO CAMBIA EL ESTATUS A 0 CANCELADO EN EL INFORME MENSUAL AL SAT TRADICIONALES. (ALRH) // 25/02/2011 N.D.7019 El estatus del documento es incorrecto, cuando se tiene un documento emitido y cancelado en el mismo periodo. (ALRH)(IYPZ) // 17/03/2011 N.D.7075 ERROR EL REPORTE MENSUAL AL SAT MUESTRA DOS ESPACIOS EN BLANCO CUANDO HAY MAS DE // 7 PEDIMENTOS AL EJECUTAR EL REPORTE MENSUAL AL SAT CON LOS REPORTES ACTUALIZADOS. (ALRH) // 31/03/2011 N.D.7096 Reportes - ERROR SE INCLUYE EL NUMERO DE APROBACION AL GENERAR EL REPORTE DEL INFORME // MENSUAL AL SAT / TRADICIONALES, CUANDO NO DEBERIA INCLUIRSE DE ACUERDO AL LAYOUT DEL SAT. (FPP) // 10/06/2011 N.D.7123 Si el primer movimiento del documento es un producto exento de IVA considera al documento como exento. (IYPZ) // 08/12/2011 N.D.876 Según el anexo 20, en documentos tradicionales ya no debe aparecer año de aprobación. (ALRH) // 30/03/2011 N.C.115 Se agregan los conceptos de abonos del cliente como CFDs. (IYPZ) // 06/06/2012 N.D.1060 Se agrega validación para en el caso de los documentos de pago electrónico buscar algún producto exento en base al documento origen. (IYPZ) // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< // ************************************************************************************************************************************************************ // Funciones de librería // ************************************************************************************************************************************************************ Incluye LibAdminPAQ.rpt // ************************************************************************************************************************************************************ // Tablas a utilizar e Indices de búsqueda // ************************************************************************************************************************************************************ UsaEmpresa tEmpresa;'CONTPAQ i FACTURACION' UsaTabla tParametros = tEmpresa['MGW10000'] // Parámetros de la empresa tParametros.Usaindice[''] // Indice primario: cIdEmpresa UsaTabla tDocumentos = tEmpresa['MGW10008'] Alias 'Docto1' // Documentos tDocumentos.Usaindice['cFecha'] // cFecha UsaTabla tFoliosDig = tEmpresa['MGW10045'] Alias 'Folios1' // Folios Digitales tFoliosDig.Usaindice['cIdDocto'] // cIdDocto UsaTabla tFoliosCancelados = tEmpresa['MGW10045'] Alias 'Folios2' // Folios Digitales tFoliosCancelados.Usaindice['cFechacanc'] // cIdDocto UsaTabla tEjercicio = tEmpresa['MGW10031'] // Ejercicios tEjercicio.Usaindice['cNumeroEjercicio'] // cNumeroEjercicio UsaTabla tDocto = tEmpresa['MGW10008'] Alias 'Docto2' // Documentos tDocto.UsaIndice[''] UsaTabla tClientes = tEmpresa['MGW10002'] // Clientes //N.C.275 UsaTabla tMovimiento = tEmpresa['MGW10010'] Alias 'Movto' // Movimientos tMovimiento.Usaindice['iDoctoNumeroMovto'] // cIdDocumento + cNumeroMovimiento UsaTabla tProducto = tEmpresa['mgw10005'] tProducto.Usaindice[''] // Indice primario: cIdProducto UsaTabla tCapa = tEmpresa['MGW10025'] // Capas tCapa.Usaindice[''] // Indice primario: cIdCapa UsaTabla tMovimientoCapa = tEmpresa['MGW10028'] // Movimientos de capas (pedimentos) tMovimientoCapa.Usaindice[''] //Indice primario: cIdMovimiento+cIdCapa UsaTabla tSerie = tEmpresa['MGW10032'] // Series tSerie.Usaindice[''] // Indice primario: cIdSerie UsaTabla tMovimientoSerie = tEmpresa['MGW10036'] // Movimientos de series tMovimientoSerie.Usaindice[''] // Indice primario: cIdMovimiento+cIdSerie //N.C.315 UsaTabla tConceptoDocto = tEmpresa['MGW10006'] // Conceptos tConceptoDocto.Usaindice[''] // cIdConceptoDocumento //N.D.6530 //Monedas UsaTabla tMoneda = tEmpresa['mgw10034'] tMoneda.Usaindice[''] // ************************************************************************************************************************************************************ // Parametros // ************************************************************************************************************************************************************ // N.D.F@C Versión 2 Reordenamiento de los argumentos de entrada Parametro pEjercicio = 0 Parametro pMes = 0 // Enero, Febrero, ..., Octubre, Noviembre, Diciembre Parametro pFormato = 0 // 0 - Pantalla // 1 - Excel // 2 - TXT Parametro pNoEmitidos = 0 // 0 - No4108 // 1 - Sí //N.D. 4097 Se manejan 4 tipo de documentos diferentes para el reporte Parametro pImprimeDoctos = 0 // 0 - Tradicionales // 1 - CFD's // 2 - AutoImpresos // 3 - Todos // 2 - Ambos //Parametro pArchivo = '' // ************************************************************************************************************************************************************ // Definiciones y asumidos globales para el reporte // ************************************************************************************************************************************************************ Columnas 1;1 Usaletra 'Arial' Altura 9 //4108 constante kNoEmitidosNo 0 constante kNoEmitidosSi 1 //N.D. 4097 Se manejan 4 tipo de documentos diferentes para el reporte constante kTradicionales 0 constante kCFDs 1 constante kAutoimpresos 2 constante kTodos 3 constante kPantalla 0 constante kExcel 1 constante kTXT 2 constante kSeparador '|' kMeses = 'Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre'[C0] Si pEjercicio = 0 y pMes = 0 lOpciones = '' tEjercicio.Busca Primero Mientras tEjercicio->Encontro Si lOpciones != '' lOpciones = lOpciones & ',' FinSi lOpciones = lOpciones & @SubStr(tEjercicio(cFecIniPeriodo1);0;4) tEjercicio.Saltareg[1] FinMientras Acepta 'Ejercicio'; lSeleccion; lOpciones pEjercicio = @Val(lSeleccion) Acepta 'Mes:'; lSeleccion; kMeses Escoge lSeleccion Caso 'Enero' pMes = 1 FinCaso Caso 'Febrero' pMes = 2 FinCaso Caso 'Marzo' pMes = 3 FinCaso Caso 'Abril' pMes = 4 FinCaso Caso 'Mayo' pMes = 5 FinCaso Caso 'Junio' pMes = 6 FinCaso Caso 'Julio' pMes = 7 FinCaso Caso 'Agosto' pMes = 8 FinCaso Caso 'Septiembre' pMes = 9 FinCaso Caso 'Octubre' pMes = 10 FinCaso Caso 'Noviembre' pMes = 11 FinCaso Caso 'Diciembre' pMes = 12 FinCaso FinEscoge lOpciones = '' Acepta 'Salida'; lSeleccion; lOpciones Escoge lSeleccion Caso 'No' pNoEmitidos = kNoEmitidosNo FinCaso Caso 'Sí' pNoEmitidos = kNoEmitidosSi FinEscoge lOpciones = '' //N.D. 4097 Se manejan 4 tipo de documentos diferentes para el reporte // lOpciones = 'Tradicionales,CFDs,AutoImpresos,Todos' // Acepta 'Salida'; lSeleccion; lOpciones // Escoge lSeleccion // Caso 'Tradicionales' // pImprimeDoctos = kTradcionales // FinCaso // Caso 'CFDs' // pImprimeDoctos = kCFDs // FinCaso // Caso 'AutoImpresos' // pImprimeDoctos = kAutoimpresos // FinCaso // Caso 'Todos' // pImprimeDoctos = kTodos // FinCaso // FinEscoge // lOpciones = 'Pantalla,TXT,Excel' // Acepta 'Salida'; lSeleccion; lOpciones // Escoge PFormtao // Caso 'TXT' // pFormato = kTXT // FinCaso // Caso 'Pantalla' // pFormato = kPantalla // FinCaso // Caso 'Excel' // pFormato = kExcel // FinCaso // FinEscoge //Si pFormato = kTXT // Acepta 'Archivo: '; pArchivo //FinSi FinSi // ************************************************************************************************************************************************************ // Variables de ámbito global: // ************************************************************************************************************************************************************ gIdioma = 0 // Idioma del reporte // 0 = Español // 1 = Inglés gFechaMes = @Str(pEjercicio;0) Si pMes < 10 gFechaMes = gFechaMes & '0' FinSi gFechaMes = gFechaMes & @Str(pMes;0) // ************************************************************************************************************************************************************ // Inicializa R E P O R T E // ************************************************************************************************************************************************************ Si pFormato = kExcel // 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 // 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 //N.D. 4109 Modifica el tamaño de las columnas según el formato del SAT // Pone la longitud de cada columna ws.Columns(1).ColumnWidth = 13[C0] //20[C0] // A RFC ws.Columns(2).ColumnWidth = 10[C0] // B Serie ws.Columns(3).ColumnWidth = 10[C0] // C Folio ws.Columns(4).ColumnWidth = 14[C0] // D N.D. 4099 Se concatena el año al No Aprobación ws.Columns(5).ColumnWidth = 19[C0] // E N.D. 4090 Fecha / Hora (Expedicion o Cancelación) ws.Columns(6).ColumnWidth = 13[C0] // F Monto operacion ws.Columns(7).ColumnWidth = 13[C0] // G Monto del impuesto ws.Columns(8).ColumnWidth = 1[C0] // H //N.D. 4157 Estado del comprobante //N.D. 4109 ... formato SAT //N.D. 4109 Modifica el formato del campo según el SAT ws.Columns( 1).NumberFormat = '@'[C0] ws.Columns( 2).NumberFormat = '@'[C0] ws.Columns( 3).NumberFormat = '##########'[C0] ws.Columns( 4).NumberFormat = '@'[C0] //N.D. 4099 Se cambio el formato del dato para presentarse en excel ws.Columns( 5).NumberFormat = '@'[C0] ws.Columns( 6).NumberFormat = '##########.00' [C0] //N.D. 4109 ws.Columns( 7).NumberFormat = '##########.00' [C0] //N.D. 4109 ws.Columns( 8).NumberFormat = '@'[C0] constante kColInicio 'A' constante kColFin 'H' constante kRFC 'A' constante kSerie 'B' constante kFolio 'C' constante kAprobacion 'D' //N.D. 4099 No.Aprobación y Año constante kExpedicion 'E' constante kOperacion 'F' constante kImpuesto 'G' constante kEstado 'H' FinSi Si pFormato = kPantalla // Ancho de columnas = caracteres / 17 * 2.54 // C0 C2 C4 C6 C8 C10 C12 C14 // RFC Serie Folio #AprobAño Expedicion Monto Impuestos Estado // 13 10 10 14 19 13 13 6 //N.D. 4109 Columnas 16;3.00,0.15, 3.00,0.15, 3.00,0.15, 2.50,0.15, 3.50,0.15, 3.00,0.15, 2.00,0.15, 1.15,0.00 Columnas 16;2.6,0.15,2.0,0.15,2.0,0.15,2.8,0.15,4.2,0.15,2.6,0.15,2.6,0.15,0.20,0.00 [C0,C2,C4,C6,C8,C10,C12,C14].Blanco '' //N.D. Todas las columnas las hace de tipo texto // [C0,C2,C6,C8].Blanco '' // N.D.4099 [C4,C6,C14].Decimales 0 // [C4,C14].Decimales 0 // [C4,C6,C10,C12].Coma // [C10,C12].Decimales kDecimales Finsi Si pFormato = kTXT Columnas 0;1 FinSi // ************************************************************************************************************************************************************ // F U N C I O N E S // ************************************************************************************************************************************************************ DefFunc fRedondeaImporte(aImporte; aDecimales) Local lImporte, lImporteCadena, lIndice lImporte = aImporte lIndice = 1 Mientras lIndice <= aDecimales lImporte = lImporte * 10 lIndice = lIndice + 1 FinMientras lImporteCadena = @Str(lImporte;0) lImporte = @Val(lImporteCadena) lIndice = 1 Mientras lIndice <= aDecimales lImporte = lImporte / 10 lIndice = lIndice + 1 FinMientras Retorna lImporte FinFunc // ************************************************************************************************************************************************************ // Nombre: fImprimeFormatoExcel // Objetivo: Imprime el cuerpo del reporte en formato de excel // ************************************************************************************************************************************************************ DefFunc fImprimeFormatoExcel (aRFC; aSerie; aFolio; aNoAprob; aExpedicion; aOperacion; aImpuesto; aLeyendaEstado; aCancelacion) Local lEstado //N.D. 4157 ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kRFC & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kSerie & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kFolio & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kAprobacion & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kExpedicion & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kOperacion & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kImpuesto & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kEstado & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kRFC & RenActual).Value = aRFC[C0] ws.Range(kSerie & RenActual).Value = aSerie[C0] ws.Range(kFolio & RenActual).Value = aFolio[C0] ws.Range(kAprobacion & RenActual).Value = aNoAprob[C0] // N.D. 4090 Imprime la fecha y hora según sea el caso de expedición o cancelación Si aLeyendaEstado='Vigente' ws.Range(kExpedicion & RenActual).Value = aExpedicion[C0] lEstado='1' //N.D. 4157 Solo muestra un 1 o un 0 según sea el caso de acuerdo al SAT, Anexo 20 FinSi Si aLeyendaEstado='Cancelado' ws.Range(kExpedicion & RenActual).Value = aExpedicion[C0] //N.D.4196 aCancelacion[C0] lEstado='0' //N.D. 4157 Solo muestra un 1 o un 0 según sea el caso de acuerdo al SAT, Anexo 20 FinSi //4108 Si aLeyendaEstado='No Emitido' ws.Range(kExpedicion & RenActual).Value = ''[C0] lEstado='N' //N.D. 4157 En este caso pone un "NE", en el Sat no se considera este estado. FinSi ws.Range(kOperacion & RenActual).Value = aOperacion[C0] ws.Range(kImpuesto & RenActual).Value = aImpuesto[C0] //N.D. 4090 Se pone la leyenda del estado como vigente al primer documento //N.D. 4109 Solo se pone 1 o 0 según el formato del SAT ws.Range(kEstado & RenActual).Value = lEstado[C0] //N.D. 4157 Solo muestra un 1 o un 0 según sea el caso de acuerdo al SAT, Anexo 20 // Avanza de renglon RenActual = RenActual + 1[C0] FinFunc // ************************************************************************************************************************************************************ // Nombre: fImprimeEnPantalla // Objetivo: Imprime el cuerpo del reporte en pantalla // ************************************************************************************************************************************************************ DefFunc fImprimeEnPantalla (aRFC; aSerie; aFolio; aNoAprob; aExpedicion; aOperacion; aImpuesto; aLeyendaEstado; aCancelacion) Local lEstado //N.D. 4157 lRenglon = '' lRenglon[0] = '"'&aRFC //N.D. 4109 lRenglon[2] = '"'&aSerie //N.D. 4109 lRenglon[4] = '"'&aFolio //N.D. 4109 lRenglon[6] = '"'&aNoAprob Si aLeyendaEstado='Vigente' lRenglon[8] = '"'&aExpedicion lEstado='1' //N.D. 4157 Solo muestra un 1 o un 0 según sea el caso de acuerdo al SAT, Anexo 20 FinSi Si aLeyendaEstado='Cancelado' lRenglon[8] = '"'&aExpedicion //N.D.4196 aCancelacion lEstado='0' //N.D. 4157 Solo muestra un 1 o un 0 según sea el caso de acuerdo al SAT, Anexo 20 FinSi //4108 Si aLeyendaEstado='No Emitido' lRenglon[8] ='' lEstado='N' //N.D. 4157 En este caso pone un "NE", en el Sat no se considera este estado. FinSi lRenglon[10] = aOperacion lRenglon[12] = aImpuesto //N.D. 4109 Solo se pone 1 o 0 según el formato del SAT lRenglon[14] = lEstado //N.D. 4157 En este caso pone un "NE", en el Sat no se considera este estado. Imprime lRenglon FINFUNC ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /// Nombre: fImprimeDocumento /// Imprime un documento electrónico, incluye cancelados ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// DEFFUNC fImprimeDocumento(atFoliosDig:TABLA; atDocumentos:TABLA; EstadoOriginal) Local lInfoAduanal lCancelacion = '' lBanImprimeDocto=0 lTipoComprob = '' lCadenaPedi = '' //N.D. 4108 poner en el estado la leyenda "No emitido" //Solamente se consideran los CFDs Cancelados y/o Emitidos O los cancelados //Si (atFoliosDig(cEstado) = 2 O atFoliosDig(cEstado) =3) lSerie = @Mayusculas(@SubStr(atDocumentos(cSerieDocumento);0;10))[C0] //N.D. 4109 cambiar a mayúsculas // Expedicion: dd/mm/yyyy hh:mm:ss N.D. 4109 en el caso de documentos tradicionales se deja el formato de hora en 00:00:00 lExpedicion = @Substr(atFoliosDig(cFechaEmi);6;2) & '/' & @Substr(atFoliosDig(cFechaEmi);4;2) & '/' & @Substr(atFoliosDig(cFechaEmi);0;4) & ' ' & atFoliosDig(cHoraEmi) //Inicio N.D.5535 Si tParametros(CNUMIMPUESTOIVA) = 1 lImpuesto = fRedondeaImporte(atDocumentos(cImpuesto1); kDecimales) FinSi Si tParametros(CNUMIMPUESTOIVA) = 2 lImpuesto = fRedondeaImporte(atDocumentos(cImpuesto2); kDecimales) FinSi Si tParametros(CNUMIMPUESTOIVA) = 3 lImpuesto = fRedondeaImporte(atDocumentos(cImpuesto3); kDecimales) FinSi //N.D.7123 Si el impuesto es 0, averigua si el primer producto está exento de IVA para no mostrar el importe de IVA. Si lImpuesto = 0.00 tMovimiento.Busca[@Str(atDocumentos(cIdDocumento);0)] //N.D.1060 Si es un pago electronico busca el documento origen Si atFoliosDig(cIdDoctoDe) = 9 O atFoliosDig(cIdDoctoDe) = 10 O atFoliosDig(cIdDoctoDe) = 12 tMovimiento.Busca[@Str(atDocumentos(cIdDocumentoOrigen);0)] Sino tMovimiento.Busca[@Str(atDocumentos(cIdDocumento);0)] FinSi Si tMovimiento->Encontro tProducto.Busca[@Str(tMovimiento(cIdProducto);0)] Si tProducto->Encontro Si tProducto(cEsExento) = 1 lImpuesto = '' FinSi FinSi FinSi FinSi lOperacion = fRedondeaImporte(atDocumentos(cTotal); kDecimales) //N.D. 4084 (ELVS) F@C - Validación para que el reporte presente sus importes en pesos Si atDocumentos(cIdmoneda) != 1 //N.D.5535 La columna operación debe llevar el monto total, no el neto menos descuentos lTipoCambio = atDocumentos(cTipocam01) lOperacion = fRedondeaImporte(lOperacion * lTipoCambio; kDecimales) lImpuesto =fRedondeaImporte(lImpuesto * lTipoCambio; kDecimales) Finsi //Fin N.D.5535 Escoge EstadoOriginal Caso 1 // 'No emitido' lEstado=2 lLeyendaEstado = 'No Emitido' FinCaso Caso 2 // 'Vigente' lEstado=1 lLeyendaEstado = 'Vigente' FinCaso Caso 3 // 'Cancelado' lEstado=0 lLeyendaEstado = 'Cancelado' FinCaso FinEscoge Si atDocumentos(cRFC) != '' lRFC = @Mayusculas(@Substr(atDocumentos(cRFC);0;13)) Sino tClientes.Busca[@Str(atDocumentos(cIdClienteProveedor);0)] Si tClientes->Encontro lRFC = @Mayusculas(@Substr(tCLientes(cRFC);0;13)) FinSi FinSi lCadenaTemp = '' lCadenaTemp = @SubStr(lRFC;3;1) Si lCadenaTemp = ' ' lRFC1 = ' ' lRFC2 = ' ' lRFC1 = @SubStr(lRFC;0;3) lRFC2 = @SubStr(lRFC;4;@Len(lRFC)-1) lRFC = '' lRFC= lRFC1 & lRFC2 FinSi //N.D.6546 Se agrega el documento modelo de honorarios del cliente //N.C.275 Factura y nota de cargo cte son ingresos, dev s/venta y nota de credito son egresos //N.C.115 Se agregan los conceptos de abonos del cliente como ingresos Si atFoliosDig(cIdDoctoDe) = 4 O atFoliosDig(cIdDoctoDe) = 13 O atFoliosDig(cIdDoctoDe) = 9 O atFoliosDig(cIdDoctoDe) = 10 O atFoliosDig(cIdDoctoDe) = 11 O atFoliosDig(cIdDoctoDe) = 12 lTipoComprob = 'I' //Ingreso //N.C.315 Lee el concepto del documento para identificar si es carta porte tConceptoDocto.Busca[@Str(atDocumentos(CIDCONCE01);0)] Si tConceptoDocto->Encontro lCartaPorte = tConceptoDocto(cCartaPor) FinSi Si atFoliosDig(cIdDoctoDe) = 4 Y lCartaPorte lTipoComprob = 'T' //Traslado FinSi FinSi Si atFoliosDig(cIdDoctoDe) = 5 O atFoliosDig(cIdDoctoDe) = 7 lTipoComprob = 'E' //Egreso FinSi // Inicializacion de la bandera para indicar que se ha impreso al menos un documento gAlgunDocumentoImpreso = 1 //N.D. 4097 Se manejan 4 tipo de documentos diferentes para el reporte Escoge pImprimeDoctos Caso kTradicionales Si atFoliosDig(cEsTrad) = 1 Y (atFoliosDig(cNoAprob)!=0 O atFoliosDig(cNoAprob)!='') //Y pImprimeDoctos=0 //4152 // N.C.351 (ALRH) lAprobacion = @Str(atFoliosDig(cNoAprob);0) //N. D. 7096 // Expedicion: dd/mm/yyyy N.D. 4109 en el caso de documentos tradicionales se deja el formato de hora en 00:00:00 lExpedicion = @Substr(atFoliosDig(cFechaEmi);6;2) & '/' & @Substr(atFoliosDig(cFechaEmi);4;2) & '/' & @Substr(atFoliosDig(cFechaEmi);0;4) & ' ' & '00:00:00' lBanImprimeDocto=1 // Cancelación: dd/mm/yyyy N.D. 4109 en el caso de documentos tradicionales se deja el formato de hora en 00:00:00 Si lEstado=0 lCancelacion=@Substr(atFoliosDig(cFechaCanc);6;2) & '/' & @Substr(atFoliosDig(cFechaCanc);4;2) & '/' & @Substr(atFoliosDig(cFechaCanc);0;4) & ' ' & '00:00:00' FinSi FinSi FinCaso Caso kCFDs Si atDocumentos(cEsCFD) = 1 //Y pImprimeDoctos=1 lAprobacion=@Substr(atFoliosDig(cFecAprob);0;4)&atFoliosDig(cNoAprob) //N.D. 4097 //N.D. 4108 CFDs No emitidos lBanImprimeDocto=1 Si pNoEmitidos=kNoEmitidosNo Y lEstado=2 lBanImprimeDocto=0 FinSi // N.D.6949 (ALRH) Omitir si se trata de un CFDi o un CBB Si atFoliosDig(CESTRAD) = 3 O atFoliosDig(CESTRAD) = 2 lBanImprimeDocto = 0 FinSi Si lEstado=0 lCancelacion=@Substr(atFoliosDig(cFechaCanc);6;2) & '/' & @Substr(atFoliosDig(cFechaCanc);4;2) & '/' & @Substr(atFoliosDig(cFechaCanc);0;4) & ' ' & atFoliosDig(cHoraCanc) FinSi FinSi FinCaso // El Autoimpreso se comporta como un documento tradicional pero sin No. de Aprobación Caso kAutoimpresos Si atFoliosDig(cEsTrad) = 1 Y (atFoliosDig(cNoAprob)=0 O atFoliosDig(cNoAprob)='') //Y pImprimeDoctos=2 //4152 lBanImprimeDocto=1 lAprobacion='' //N.D. 4108 Si lEstado=0 lCancelacion=@Substr(atFoliosDig(cFechaCanc);6;2) & '/' & @Substr(atFoliosDig(cFechaCanc);4;2) & '/' & @Substr(atFoliosDig(cFechaCanc);0;4) & ' ' & atFoliosDig(cHoraCanc) FinSi FinSi FinCaso Caso kTodos Si pImprimeDoctos=3 Si atDocumentos(cEsCFD)=1 lAprobacion=@Substr(atFoliosDig(cFecAprob);0;4)&atFoliosDig(cNoAprob) //N.D. 4108 lBanImprimeDocto=1 //N.D. 4108 CFDs No emitidos Si pNoEmitidos=kNoEmitidosNo Y lEstado=2 lBanImprimeDocto=0 FinSi // N.D.6949 (ALRH) Omitir si se trata de un CFDi Si atFoliosDig(CESTRAD) = 3 lBanImprimeDocto = 0 FinSi Si lEstado=0 lCancelacion=@Substr(atFoliosDig(cFechaCanc);6;2) & '/' & @Substr(atFoliosDig(cFechaCanc);4;2) & '/' & @Substr(atFoliosDig(cFechaCanc);0;4) & ' ' & atFoliosDig(cHoraCanc) FinSi SiNo //Tradicionales Si atFoliosDig(cEsTrad) = 1 Y (atFoliosDig(cNoAprob)!=0 O atFoliosDig(cNoAprob)!='') //4152 // N.C.351 (ALRH) // N.D.876 ALRH lAprobacion = @Str(atFoliosDig(cNoAprob);0) // Expedicion: dd/mm/yyyy N.D. 4109 en el caso de documentos tradicionales se deja el formato de hora en 00:00:00 lExpedicion = @Substr(atFoliosDig(cFechaEmi);6;2) & '/' & @Substr(atFoliosDig(cFechaEmi);4;2) & '/' & @Substr(atFoliosDig(cFechaEmi);0;4) & ' ' & '00:00:00' lBanImprimeDocto=1 Si lEstado=0 // Expedicion: dd/mm/yyyy N.D. 4109 en el caso de documentos tradicionales se deja el formato de hora en 00:00:00 lCancelacion=@Substr(atFoliosDig(cFechaCanc);6;2) & '/' & @Substr(atFoliosDig(cFechaCanc);4;2) & '/' & @Substr(atFoliosDig(cFechaCanc);0;4) & ' ' & '00:00:00' FinSi SiNo //AutoImpresos lAprobacion='' //N.D. 4097 lBanImprimeDocto=1 // N.D.6949 (ALRH) Omitir si se trata de un CBB Si atFoliosDig(CESTRAD) = 2 lBanImprimeDocto = 0 FinSi Si lEstado=0 lCancelacion=@Substr(atFoliosDig(cFechaCanc);6;2) & '/' & @Substr(atFoliosDig(cFechaCanc);4;2) & '/' & @Substr(atFoliosDig(cFechaCanc);0;4) & ' ' & atFoliosDig(cHoraCanc) FinSi FinSi FinSi FinSi FinCaso FinEscoge Si lBanImprimeDocto=1 //N.D. 4090 Se hicieron funciones para mandar a formato de excel y en pantalla Escoge pFormato Caso kExcel //manda llamar la función en formato de excel //Si @Substr(atFoliosDig(cFechaEmi);0;6)=gFechaMes Si lEstado=1 O lEstado = 0 fImprimeFormatoExcel(lRFC; lSerie; atDocumentos(cFolio); lAprobacion; lExpedicion; lOperacion; lImpuesto; lLeyendaEstado; lCancelacion) //N.D. 4108 SiNo fImprimeFormatoExcel(lRFC; lSerie; atDocumentos(cFolio); lAprobacion; lExpedicion; lOperacion; lImpuesto; lLeyendaEstado; lCancelacion) //N.D. 4108, N.D.6086 FinSi //FinSi //Si @Substr(atFoliosDig(cfechacanc);0;6)=gFechaMes Y lEstado=0 // fImprimeFormatoExcel(lRFC; lSerie; atDocumentos(cFolio); lAprobacion; lExpedicion; lOperacion; lImpuesto; lLeyendaEstado; lCancelacion) //FinSi FinCaso Caso kPantalla //manda llamar la función de imprimir en Pantalla //Si @Substr(atFoliosDig(cFechaEmi);0;6)=gFechaMes //fImprimeEnPantalla(lRFC; lSerie; atDocumentos(cFolio); lAprobacion; lExpedicion; lOperacion; lImpuesto; 'Vigente'; lCancelacion) //N.D. 4108 Si lEstado=1 O lEstado = 0 fImprimeEnPantalla(lRFC; lSerie; atDocumentos(cFolio); lAprobacion; lExpedicion; @Str(lOperacion;kDecimales); @Str(lImpuesto;kDecimales); lLeyendaEstado; lCancelacion) //N.D. 4108 //N.D.6519 SiNo fImprimeEnPantalla(lRFC; lSerie; atDocumentos(cFolio); lAprobacion; lExpedicion; @Str(lOperacion;kDecimales); @Str(lImpuesto;kDecimales); lLeyendaEstado; lCancelacion) //N.D. 4108, N.D.6086, //N.D.6519 FinSi //FinSi //Si @Substr(atFoliosDig(cfechacanc);0;6)=gFechaMes Y lEstado=0 // fImprimeEnPantalla(lRFC; lSerie; atDocumentos(cFolio); lAprobacion; lExpedicion; lOperacion; lImpuesto; lLeyendaEstado; lCancelacion) //FinSi FinCaso Caso kTXT Columnas 0;1 //N.D6063 IYPZ Se imprimen en txt los documentos en estado de emitido o cancelado Si (lEstado = 1 O lEstado = 0) //Si @Substr(atFoliosDig(cFechaEmi);0;6)=gFechaMes //N.D.6226 Lee la informaición aduanal de la tabla de folios digitales. lInfoAduanal = atFoliosDig(cCadPedi) Si lInfoAduanal = '' lInfoAduanal = kSeparador & kSeparador FinSi lRenglon = kSeparador & lRFC & kSeparador & lSerie & kSeparador & atDocumentos(cFolio) & kSeparador & lAprobacion & kSeparador & lExpedicion & kSeparador & @Str(lOperacion;kDecimales) & kSeparador & @Str(lImpuesto;kDecimales) & kSeparador & lEstado & kSeparador & lTipoComprob & kSeparador & lInfoAduanal & kSeparador //lTamano = @Len(lRenglon) + 50//25 // Ancho de columnas = caracteres / 17 * 2.54 //lColumna = (lTamano / 17) * 2.54 // N.D.6997 ALRH Cada caracter mide 0.2125 centímetros lColumna = @Len(lRenglon) * 0.2125 // N.D.7075 ALRH Por cada 255 caracteres, eliminar el espacio en blanco agregado después de cada 255 caracteres lEspacios = @Int(@Len(lRenglon) / 255) lColumna = lColumna - (lEspacios * 0.2125) // Después de obtener el ancho de columna en base a la longitud de lRenglon, // si se trata de una cadena cuyo tamaño sea múltiplo de 255, // se aumenta el ancho de la columna para que no se coma el último | Si @Int(@Len(lRenglon) / 255) = (@Len(lRenglon) / 255) lColumna = lColumna + (0.2125 / 2) FinSi Columnas 2;lColumna,0 Texto @Substr(lRenglon; 0; @Len(lRenglon)) Imprime //FinSi //Si @Substr(atFoliosDig(cfechacanc);0;6)=gFechaMes Y lEstado=0 //N.D.4196 Se modifica la fecha y hora de cancelación por la de la emisión del documento lCancelacion //lRenglon = kSeparador & lRFC & kSeparador & lSerie & kSeparador & atDocumentos(cFolio) & kSeparador & lAprobacion & kSeparador & lCancelacion & kSeparador & @Str(lOperacion;kDecimales) & kSeparador & @Str(lImpuesto;kDecimales) & kSeparador & 0 & kSeparador // lRenglon = kSeparador & lRFC & kSeparador & lSerie & kSeparador & atDocumentos(cFolio) & kSeparador & lAprobacion & kSeparador & lExpedicion & kSeparador & @Str(lOperacion;kDecimales) & kSeparador & @Str(lImpuesto;kDecimales) & kSeparador & 0 & kSeparador // lTamano = @Len(lRenglon) + 50//25 // Ancho de columnas = caracteres / 17 * 2.54 // lColumna = (lTamano / 17) * 2.54 // Columnas 2;lColumna,0 // Texto @Substr(lRenglon; 0; @Len(lRenglon)) // Imprime //FinSi // fin del lBanCancelado=1 FinSi FinCaso FinEscoge FinSi //Fin del si se imprime //N.D. 4108 poner en el estado la leyenda "No emitido" //FinSi //Fin del (atFoliosDig(cEstado) = 2 O atFoliosDig(cEstado) =3) FINFUNC // ************************************************************************************************************************************************************ // Encabezado del reporte // ************************************************************************************************************************************************************ Encab Escoge pFormato Caso kExcel // Pone el nombre del sistema ws.Range(kColInicio & RenActual).Font.Color = @RGB(255;0;0)[C0] ws.Range(kColInicio & RenActual).Font.Size = 10[C0] ws.Range(kColInicio & RenActual).Value = 'AdminPAQ'[C0] // Avanza de renglon RenActual = RenActual + 1[C0] // Pone el nombre de la empresa ws.Range(kColInicio & RenActual).Font.Size = 14[C0] ws.Range(kColInicio & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] ws.Range(kColInicio & RenActual).Value = tEmpresa->Nombre // Avanza de renglon RenActual = RenActual + 2[C0] // Pone el titulo del reporte en EXCEL ws.Range(kColInicio & RenActual).Font.Size = 12[C0] ws.Range(kColInicio & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range(kColInicio & RenActual).Value = 'I N F O R M E M E N S U A L A L S A T'[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] // Avanza de renglon RenActual = RenActual + 1[C0] ws.Range(kColInicio & RenActual).Font.Size = 12[C0] ws.Range(kColInicio & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range(kColInicio & RenActual).Value = 'Mes: ' & @Escoge(kMeses; pMes-1)[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).HorizontalAlignment = xlCentrarEnSeleccion[C0] // Avanza de renglon RenActual = RenActual + 1[C0] // Pone el titulo de cada columna en EXCEL ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Borders(xlInferior).LineStyle = xlLineaSimple[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Borders(xlSuperior).LineStyle = xlLineaSimple[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Borders(xlIzquierda).LineStyle = xlLineaSimple[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Borders(xlDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Interior.ColorIndex = 55[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Font.FontStyle = 'Negrita'[C0] ws.Range(kColInicio & RenActual & ':' & kColFin & RenActual).Font.Color = @RGB(255;255;255)[C0] ws.Range(kRFC & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kSerie & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kFolio & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kAprobacion & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kExpedicion & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kOperacion & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kImpuesto & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kEstado & RenActual).Borders(xlBordeDerecha).LineStyle = xlLineaSimple[C0] ws.Range(kRFC & RenActual).Value = 'R.F.C.'[C0] ws.Range(kSerie & RenActual).Value = 'Serie'[C0] ws.Range(kFolio & RenActual).Value = 'Folio'[C0] ws.Range(kAprobacion & RenActual).Value = 'Aprobación'[C0] //N.D.3838 ws.Range(kExpedicion & RenActual).Value = 'Expedición'[C0] //N.D.4196 //N.D.4090 N.D. 4109 ws.Range(kOperacion & RenActual).Value = 'Operación'[C0] ws.Range(kImpuesto & RenActual).Value = 'Impuesto'[C0] ws.Range(kEstado & RenActual).Value = 'E'[C0] //N.D. 4157 En este caso pone un "NE", en el Sat no se considera este estado. //N.D. 4109 Estado // Avanza de renglon RenActual = RenActual + 1[C0] Excel.Rows(RenActual & ':' & RenActual).Select Excel.ActiveWindow.FreezePanes = True ws.Range(kColInicio & RenActual).Select FinCaso Caso kPantalla Texto '@TC{255,0,0}@S{8}AdminPAQ' Imprime Texto '^@TC{0,0,0}@S{22}' & tEmpresa->Nombre Imprime Texto '^@TC{0,0,0}@S{16}' & 'INFORME MENSUAL AL SAT' Imprime Texto '^@TC{0,0,0}@S{16}'& 'Mes: ' & @Escoge(kMeses; pMes-1) Imprime NEGRITAS TRUE Altura 9 Texto '@TC{0,0,0}@L{-1}' Imprime //N.D 4109 Formato Texto C0;'"R.F.C' Texto C2;'"Serie' Texto C4;'"Folio ' Texto C6;'"Aprobación ' //N.D.3838 Texto C8;'"Expedición' //N.D.4196//N.D.4090 Texto C10;'"Operación ' Texto C12;'"Impuesto ' Texto C14;'"E' //N.D. 4157 En este caso pone un "NE", en el Sat no se considera este estado. //N.D. 4109 Estado Imprime Texto '@TC{0,0,0}@L{-1}' Imprime NEGRITAS FALSE FinCaso FinEscoge FinEncab // ************************************************************************************************************************************************************ // Cuerpo del reporte // ************************************************************************************************************************************************************ // Inicializacion de la bandera para indicar que no se ha impreso documento alguno gAlgunDocumentoImpreso = 0 lExpedicion='' //N.D.4090 Declaración de variables lCancelacion='' lSerie='' //N.D.4099 lAprobacion='' //N.D. 4090 Se hace un barrido de documentos de todo el ejercicio a fin de localizar documentos emitidos en //periodos diferentes pero cancelados en el periodo solicitado en el reporte. //Para localizar el primer documento del ejercicio/mes gFechaBusqueda = gFechaMes & '01' //Parametros tParametros.Busca Primero //N.D.6530 //N.D.277 - CONTPAQi F@C lIdMoneda1 = '1' //Moneda Base tMoneda.Busca[lIdMoneda1] // N.D.6896 (ALRH) //kDecimales = tMoneda(cDecimalesMoneda) kDecimales = 2 // Se todos los documentos que estén dentro del rango de fechas Mientras @VAL(@SUBSTR(gFechaBusqueda;4;2)) = @VAL(@SUBSTR(gFechaMes;4;2)) tDocumentos.Busca[gFechaBusqueda] Mientras tDocumentos->Encontro tFoliosDig.Busca[@Str(tDocumentos(cIdDocumento);0)] //N.D. 4090 Se valida que la fecha de emisión o cancelación estén dentro del periodo Si tFoliosDig->Encontro Y @Substr(tFoliosDig(cFechaEmi);0;6)=gFechaMes // N.D.6999, N.D.7019 ALRH Rectificar el estado del Documento para el caso de tradicionales. //Si es tradicional Si ( tDocumentos(cEsCFD) = 0 ) //N.D.7548 Si esta cancelado y sí tiene fecha de cancelación, se imprime primero como vigente Si tDocumentos(cCancelado) = 1 Y tFoliosDig(cFechaCanc) != ' ' lEstado = 2 Sino lEstado = tFoliosDig(cEstado) FinSi fImprimeDocumento(tFoliosDig; tDocumentos; lEstado) FinSi //N.D.7019 IYPZ Si es CFD versión 2 y está cancelado, lo imprime como emitido ya que los cancelados se procesan aparte Si ( tDocumentos(cEsCFD) = 1 Y tFoliosDig(cEsTrad) = 0 ) fImprimeDocumento(tFoliosDig; tDocumentos; tFoliosDig(cEstado) = 3 ? 2: tFoliosDig(cEstado)) FinSi FinSi tDocumentos.Busca Siguiente[1] FinMientras // Busca aquellos folios digitales que estén en el rango de fechas (canceladas) pero no hayan sido impresos todavía // si el documento al que pertenece el folio digital fue ya impreso por pertenecer al rango de fechas, entonces no lo imprime, sino // si lo imprime tFoliosCancelados.Busca[gFechaBusqueda] Mientras tFoliosCancelados->Encontro tDocto.Busca[@STR(tFoliosCancelados(cIdDocto);0)] SI tDocto->ENCONTRO fImprimeDocumento(tFoliosCancelados; tDocto; 3) FINSI tFoliosCancelados.Busca Siguiente[1] FinMientras gFechaBusqueda = fFechaSiguiente(gFechaBusqueda) FinMientras //N.D.4208 Reacomodo de la información del Estado en el reporte //N.D.4157 Pie de página Escoge pFormato Caso kPantalla //Imprime un renglón en blanco lRenglon[0] = '' lRenglon[2] = '' lRenglon[4] = '' lRenglon[6] = '' lRenglon[8] = '' lRenglon[10] = '' lRenglon[12] = '' lRenglon[14] = '' Imprime lRenglon //Imprime un renglón en blanco Imprime lRenglon //Imprime la leyenda del estado lRenglon[0] = 'E = Estado' Imprime lRenglon lRenglon[0] = '1 = Vigente' Imprime lRenglon lRenglon[0] = '0 = Cancelado' Imprime lRenglon Si pNoEmitidos=kNoEmitidosSi lRenglon[0] = 'N = No Emitido' Imprime lRenglon FinSi FinCaso Caso kExcel //Imprime un renglón en blanco ws.Range('A'& RenActual).Value = '' ws.Range('B'& RenActual).Value = '' ws.Range('C'& RenActual).Value = '' ws.Range('D'& RenActual).Value = '' // Avanza de renglon RenActual = RenActual + 1[C0] //Imprime un renglón en blanco // Avanza de renglon RenActual = RenActual + 1[C0] ws.Range('A'& RenActual).Value = 'E = Estado' // Avanza de renglon RenActual = RenActual + 1[C0] ws.Range('A'& RenActual).Value = '1 = Vigente' // Avanza de renglon RenActual = RenActual + 1[C0] ws.Range('A'& RenActual).Value = '0 = Cancelado' // Avanza de renglon RenActual = RenActual + 1[C0] Si pNoEmitidos=kNoEmitidosSi ws.Range('A'& RenActual).Value = 'N = No Emitido' // Avanza de renglon RenActual = RenActual + 1[C0] FinSi FinCaso FinEscoge //N.D. 4157 Termina el pie de página para imprimir el Estado Si gAlgunDocumentoImpreso = 0 Y pFormato = kTXT Columnas 0;2 Texto 'No existen documentos' Imprime FinSi