diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 1586c3425..9292e9dab 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -4101,26 +4101,51 @@ Public Class ClsPaginas HttpContext.Current.Application(AppNombre) = value End Set End Property - Property GlobalDTAcumGarantiasMesesTipoUso(CveEmpresa As Integer, CveMarca As Integer) As DataTable + + Property GlobalDTAcumGarantiasTipoUso(CveEmpresa As Integer, CveMarca As Integer, CveTipoUso As Integer) As DataTable Get - Dim AppNombre As String = $"GlobalDTAcumGarantiasMesesTipoUso-{CveEmpresa}" + Dim AppNombre As String = $"GlobalDTAcumGarantiasTipoUso-{CveEmpresa}" If Application(AppNombre) Is Nothing Then Dim ObjAcumuladores As New ClsAcumuladores() If ObjAcumuladores.GarantiasMesesGet(-1, CveEmpresa) Then Application(AppNombre) = ObjAcumuladores.DtResultados.FiltraParametros("", DistinctColumns:={"CveMarca", "CveTipoUso", "TipoUso"}) ObjAcumuladores.Dispose() End If - If CveMarca <> -1 Then - Dim Str As StringBuilder = New StringBuilder() - If CveMarca <> -1 Then Str.AppendFormat("CveMarca = {0}", CveMarca) - Dim Dv As New DataView(DirectCast(Application(AppNombre), DataTable), Str.ToString, "", DataViewRowState.CurrentRows) - GlobalDTAcumGarantiasMesesTipoUso = Dv.ToTable - Dv.Dispose() - Else - GlobalDTAcumGarantiasMesesTipoUso = DirectCast(Application(AppNombre), DataTable) - End If + + Dim filtros As New List(Of String) + If CveMarca <> -1 Then filtros.Add($"CveMarca = {CveMarca}") + If CveTipoUso <> -1 Then filtros.Add($"CveTipoUso = {CveTipoUso}") + + Dim Dv As New DataView(DirectCast(Application(AppNombre), DataTable), String.Join(" AND ", filtros), "", DataViewRowState.CurrentRows) + GlobalDTAcumGarantiasTipoUso = Dv.ToTable + Dv.Dispose() + End Get Set(value As DataTable) - Dim AppNombre As String = $"GlobalDTAcumGarantiasMesesTipoUso-{CveEmpresa}" + Dim AppNombre As String = $"GlobalDTAcumGarantiasTipoUso-{CveEmpresa}" + Application(AppNombre) = value + End Set + End Property + Property GlobalDTAcumGarantiasTipoUsoMeses(CveEmpresa As Integer, CveMarca As Integer, CveTipoUso As Integer, Mes As Integer) As DataTable + Get + Dim AppNombre As String = $"GlobalDTAcumGarantiasTipoUsoMeses-{CveEmpresa}" + If Application(AppNombre) Is Nothing Then + Dim ObjAcumuladores As New ClsAcumuladores() + If ObjAcumuladores.GarantiasMesesGet(-1, CveEmpresa) Then Application(AppNombre) = ObjAcumuladores.DtResultados + ObjAcumuladores.Dispose() + End If + + Dim filtros As New List(Of String) + If CveMarca <> -1 Then filtros.Add($"CveMarca = {CveMarca}") + If CveTipoUso <> -1 Then filtros.Add($"CveTipoUso = {CveTipoUso}") + If Mes <> -1 Then filtros.Add($"Mes = {Mes}") + + Dim Dv As New DataView(DirectCast(Application(AppNombre), DataTable), String.Join(" AND ", filtros), "", DataViewRowState.CurrentRows) + GlobalDTAcumGarantiasTipoUsoMeses = Dv.ToTable + Dv.Dispose() + + End Get + Set(value As DataTable) + Dim AppNombre As String = $"GlobalDTAcumGarantiasTipoUsoMeses-{CveEmpresa}" Application(AppNombre) = value End Set End Property @@ -8121,6 +8146,7 @@ Public Class ClsPaginas PaginaDict.Add("/CargaCuentas.aspx".ToUpper(), -1) PaginaDict.Add("/OI/Tareas.aspx".ToUpper(), -1) PaginaDict.Add("/OI/RepProyectos.aspx".ToUpper(), 907) + 'PaginaDict.Add("/OI/GraficaGantt.aspx".ToUpper(), 371) PaginaDict.Add("/OI/Proyecto.aspx".ToUpper(), 907) PaginaDict.Add("/OI/Tablero.aspx".ToUpper(), 910) PaginaDict.Add("/OI/TableroDetalle.aspx".ToUpper(), 910) @@ -9173,9 +9199,9 @@ Public Class ClsPaginas PaginaDict.Add("/Ventas/RepProductosServicios.aspx".ToUpper(), 352) PaginaDict.Add("/Ventas/RepProductosServiciosDetalle.aspx".ToUpper(), 352) PaginaDict.Add("/Ventas/RepPS.aspx".ToUpper(), 701) - PaginaDict.Add("/Ventas/RepABT.aspx".ToUpper(), 353) + 'PaginaDict.Add("/Ventas/RepABT.aspx".ToUpper(), 353) PaginaDict.Add("/Ventas/CatPromociones.aspx".ToUpper(), 123) - PaginaDict.Add("/Ventas/Promociones.aspx".ToUpper(), 124) + PaginaDict.Add("/Ventas/Promociones.aspx".ToUpper(), 123) PaginaDict.Add("/Ventas/CatFamiliaSubFamilia.aspx".ToUpper(), 372) PaginaDict.Add("/Ventas/RepComisiones.aspx".ToUpper(), 382) PaginaDict.Add("/Ventas/RepComisionesDetalle.aspx".ToUpper(), 382) diff --git a/App_Code/ClsVentas.vb b/App_Code/ClsVentas.vb index d198effdb..f01f4b90e 100644 --- a/App_Code/ClsVentas.vb +++ b/App_Code/ClsVentas.vb @@ -2126,24 +2126,24 @@ Public Class ClsVentas End Function #End Region - Public Function GetRepABT(Ejercicio As Integer, Periodo As Integer) As Boolean - Dim Retorno As Boolean = False - DataAdapter("PA_VentasGetRepABT") + 'Public Function GetRepABT(Ejercicio As Integer, Periodo As Integer) As Boolean + ' Dim Retorno As Boolean = False + ' DataAdapter("PA_VentasGetRepABT") - With SqlAdapter.SelectCommand.Parameters - .Add("@Ejercicio", SqlDbType.Int).Value = Ejercicio - .Add("@Periodo", SqlDbType.Int).Value = Periodo - End With + ' With SqlAdapter.SelectCommand.Parameters + ' .Add("@Ejercicio", SqlDbType.Int).Value = Ejercicio + ' .Add("@Periodo", SqlDbType.Int).Value = Periodo + ' End With - Try - SqlAdapter.Fill(Data) - Retorno = True - Catch ex As Exception - OnError("Ocurrió un error al obtener el Reporte ABT.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) - End Try + ' Try + ' SqlAdapter.Fill(Data) + ' Retorno = True + ' Catch ex As Exception + ' OnError("Ocurrió un error al obtener el Reporte ABT.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + ' End Try - Return Retorno - End Function + ' Return Retorno + 'End Function #Region " PROMOCIONES " Public Function GetPromociones(CvePromocion As Integer, Fecha As String, CveVendedor As Integer, CveCliente As Integer, Estatus As Integer, CveEmpresa As Integer, diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 8c6b98c45..d6d8c9bc3 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -10,8 +10,6 @@ Imports System.Xml Imports System.Xml.Serialization Imports Extensiones Imports Newtonsoft.Json.Linq -Imports Profact.TimbraCFDI33.Complementos.CartaPorte10 -Imports Profact.TimbraCFDI33.Complementos.CartaPorte20 Imports ProfactCartaPorte = Profact.TimbraCFDI33.Complementos.CartaPorte20 @@ -1218,9 +1216,6 @@ Public Class Timbrado Dim Retorno As Boolean = False Dim tCvePAC As Integer = UsuarioActual.Empresa.CvePAC If CvePACEspecial <> -1 Then tCvePAC = CvePACEspecial - If versionTimbre = VersionTimbradoEnum.PorDefectoEmpresa Then - versionTimbre = If(UsuarioActual.Empresa.Funcionalidad(350) = "1", VersionTimbradoEnum.Version4_0, VersionTimbradoEnum.Version3_3) - End If 'validación especial. If Ventas.TipoDocto.Contiene("Ing", "Dev") Then @@ -1240,48 +1235,33 @@ Public Class Timbrado End If Select Case tCvePAC - Case 1 - ' Retorno = TimbrarFacturaBIInform33(UsuarioActual, Ventas, FM, TmpDTConceptos, TmpDTImpuestos, TmpDT7Eleven, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV) - Dim Ret As String = TimbrarFacturaBIInform33(Ventas, UsuarioActual) - Retorno = If(Ret = "", True, False) + 'Case 1 + ' ' Retorno = TimbrarFacturaBIInform33(UsuarioActual, Ventas, FM, TmpDTConceptos, TmpDTImpuestos, TmpDT7Eleven, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV) + ' Dim Ret As String = TimbrarFacturaBIInform33(Ventas, UsuarioActual) + ' Retorno = If(Ret = "", True, False) - Case 2 - 'Retorno = TimbrarFacturaRealVirtual(UsuarioActual, Ventas, TmpDTConceptos, TmpDTImpuestos, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV) - Dim Ret As String = TimbrarFacturaRealVirtualv33(Ventas, UsuarioActual) - If Ret <> "" Then MensajeErrorCFDI = Ret - Retorno = If(Ret = "", True, False) + 'Case 2 + ' 'Retorno = TimbrarFacturaRealVirtual(UsuarioActual, Ventas, TmpDTConceptos, TmpDTImpuestos, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV) + ' Dim Ret As String = TimbrarFacturaRealVirtualv33(Ventas, UsuarioActual) + ' If Ret <> "" Then MensajeErrorCFDI = Ret + ' Retorno = If(Ret = "", True, False) Case 3 - If versionTimbre = VersionTimbradoEnum.Version4_0 Then - Retorno = TimbrarFacturaProFactV40(UsuarioActual, Ventas) - Else - Retorno = TimbrarFacturaProFact(UsuarioActual, Ventas) - End If + + Retorno = TimbrarFacturaProFactV40(UsuarioActual, Ventas) 'Retorno = TimbrarFacturaProFact(UsuarioActual, Ventas, TmpDTConceptos, TmpDTImpuestos, TmpDTComplementos, Ruta, LstFordASN, FordGSDBM, ObjV) Case 4 - If versionTimbre = VersionTimbradoEnum.Version4_0 Then - Dim Ret As String = TimbrarFacturaGoCFDIv40(Ventas, UsuarioActual, CvePACEspecial) - If Ret <> "" Then MensajeErrorCFDI = Ret - Retorno = If(Ret = "", True, False) - Else - Dim Ret As String = TimbrarFacturaGoCFDIv33(Ventas, UsuarioActual, CvePACEspecial) - If Ret <> "" Then MensajeErrorCFDI = Ret - Retorno = If(Ret = "", True, False) - End If + Dim Ret As String = TimbrarFacturaGoCFDIv40(Ventas, UsuarioActual, CvePACEspecial) + If Ret <> "" Then MensajeErrorCFDI = Ret + Retorno = If(Ret = "", True, False) Case 5 - If versionTimbre = VersionTimbradoEnum.Version4_0 Then - Dim Ret As String = TimbrarFacturaPADEv40(Ventas, UsuarioActual, CvePACEspecial) + + Dim Ret As String = TimbrarFacturaPADEv40(Ventas, UsuarioActual, CvePACEspecial) If Ret <> "" Then MensajeErrorCFDI = Ret - Retorno = If(Ret = "", True, False) - Else - Dim Ret As String = TimbrarFacturaPADEv33(Ventas, UsuarioActual, CvePACEspecial) - If Ret <> "" Then MensajeErrorCFDI = Ret - Retorno = If(Ret = "", True, False) - End If - 'Dim error + Retorno = If(Ret = "", True, False) End Select @@ -1289,2307 +1269,6 @@ Public Class Timbrado Return Retorno End Function - Public Function TimbrarFacturaBIInform33(Ventas As Modelos.Factura, UsuarioActual As Usuario) As String - - - Dim Retorno As String = "" - - 'Dim SucMatriz As SubProyectoModel = Ventas.SubProyectoMatriz - 'Dim SucEmpresa As SubProyectoModel = Ventas.SubProyecto - 'Dim SucCliente As SucursalModel = Ventas.ClienteSucursal - Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre - Dim ArchivoLLave As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoKey}" - Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoCer}" - Dim ArchivoPFX As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoPfx}" - Dim UsuarioServicio As String = UsuarioActual.Empresa.RFC - Dim ClaveServicio As String = UsuarioActual.Empresa.RFC.ToLower - Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey - Dim EmisorRFC As String = UsuarioActual.Empresa.RFC - Dim UrlServicio As String = "http://portalbiinform.com.mx/srvCFDi33/service1.asmx" ' Produccion - Dim RutaArchivo As String = $"{UsuarioActual.Empresa.Ruta}XML\{Ventas.TipoDocto}\" - Dim NombreArchivoXML As String = $"{ObjCFDITimbre.Comprobante.SerieFolio}" - Dim TimbraProduccion As Boolean = True - - 'Dim sevenElevenNumProveedor = TmpDT7Eleven.Rows(0)("sevenElevenNumProveedor").ToString - 'Dim sevenElevenFolio = TmpDT7Eleven.Rows(0)("sevenElevenFolio").ToString - 'Dim sevenElevenTienda = TmpDT7Eleven.Rows(0)("sevenElevenTienda").ToString - 'Dim sevenElevenFecha = TmpDT7Eleven.Rows(0)("sevenElevenFecha").ToString - - If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then - UsuarioServicio = UsuarioActual.Empresa.BIUsuario - ClaveServicio = UsuarioActual.Empresa.BIContraseña - Clave = "12345678a" - - 'EmisorRFC = "AAA010101AAA" - 'ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.key" - 'ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.cer" - - EmisorRFC = "ZUÑ920208KL4" - ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key" - ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer" - - UrlServicio = "http://portalmacropro.com.mx/srvCFDi33prueba/service1.asmx" - TimbraProduccion = False - End If - - Dim CFDi As New ClbNegBICFDv3_3.ClsNegEDI - Dim ObjFemsa As New ClbNegBICFDv3_3.ClsNegAddFemsa - Dim ObjDetallista As New ClbNegBICFDv3_3.ClsNegEDICompDet - Dim ImpLoc As New ClbNegBICFDv3_3.ClsNegEDICompImplocal - - Dim Msg As String = String.Empty - 'Nodo Comprobante - Dim clbcomp As ClbNegBICFDv3_3.TipoDeComprobante = If(ObjCFDITimbre.Comprobante.TipoComprobante = "I", ClbNegBICFDv3_3.TipoDeComprobante.I, If(ObjCFDITimbre.Comprobante.TipoComprobante = "E", ClbNegBICFDv3_3.TipoDeComprobante.E, If(ObjCFDITimbre.Comprobante.TipoComprobante = "P", ClbNegBICFDv3_3.TipoDeComprobante.P, ClbNegBICFDv3_3.TipoDeComprobante.T))) - Msg = CFDi.comprobantecfd(0, 0, ObjCFDITimbre.Comprobante.Serie, - ObjCFDITimbre.Comprobante.Folio.ToString, - ObjCFDITimbre.Comprobante.Fecha, - ObjCFDITimbre.Comprobante.FormadePago, - ObjCFDITimbre.Comprobante.CondicionesdePago, - ObjCFDITimbre.Comprobante.SubTotal, - ObjCFDITimbre.Comprobante.Descuentos, - ObjCFDITimbre.Comprobante.TipoCambio.ToDecimal, - ObjCFDITimbre.Comprobante.Moneda, - ObjCFDITimbre.Comprobante.Total, - ObjCFDITimbre.Comprobante.MetodoPago, - clbcomp, - ObjCFDITimbre.Comprobante.LugarExpedicion, - ObjCFDITimbre.Comprobante.Confirmacion) - - If Msg = String.Empty Then - 'Nodo emisor - Msg = CFDi.EmisorCfd(If(UsuarioActual.Empresa.FacturaProduccion, UsuarioActual.Empresa.RFC, "AAA010101AAA"), UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal) - If Msg = String.Empty Then - - 'Nodo receptor - Msg = CFDi.ReceptorCfd(ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Receptor.Nombre, "", "", Ventas.ClaveUsoCFDI) - If Msg = String.Empty Then - - 'Nodo conceptos, se agregan los PS - Dim HasErrorConceptos As Boolean = False - - If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then - For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos - CFDi.ConceptosCfd(concep.ClaveProdServ, concep.Cantidad, concep.Unidad, concep.Noidentificacion, concep.Descripcion, concep.ValorUnitario, concep.Importe, concep.ClaveUnidad, concep.Descuento) - For Each imp As CFDIConceptosImpuestos In concep.Impuestos - Dim clbImp As ClbNegBICFDv3_3.Impuesto = If(imp.Impuesto = "002", ClbNegBICFDv3_3.Impuesto.IVA, If(imp.Impuesto = "003", ClbNegBICFDv3_3.Impuesto.IEPS, ClbNegBICFDv3_3.Impuesto.ISR)) - Dim clbTipo As ClbNegBICFDv3_3.TipoFactor = If(imp.TipoFactor = "Tasa", ClbNegBICFDv3_3.TipoFactor.Tasa, If(imp.TipoFactor = "Cuota", ClbNegBICFDv3_3.TipoFactor.Cuota, ClbNegBICFDv3_3.TipoFactor.Exento)) - Dim Posicion As Integer = imp.TasaOCuota.ToString.IndexOf(".") - If imp.TrasladooRetencion = "T" Then - CFDi.ConceptosTrasladosCfd(imp.Base, clbImp, clbTipo, imp.TasaOCuota.ToString.PadRight(imp.TasaOCuota.ToString.Length + (6 - imp.TasaOCuota.ToString.Substring(Posicion, imp.TasaOCuota.ToString.Length - 1).Length.ToEntero + 1), Convert.ToChar("0")), imp.Importe) - Else - CFDi.ConceptosRetencionesCfd(imp.Base, clbImp, clbTipo, imp.TasaOCuota.ToString.PadRight(imp.TasaOCuota.ToString.Length + (6 - imp.TasaOCuota.ToString.Substring(Posicion, imp.TasaOCuota.ToString.Length - 1).Length.ToEntero + 1), Convert.ToChar("0")), imp.Importe) - End If - - Next - Next - End If - - - If Not HasErrorConceptos Then - 'Nodo Impuestos, se agrega el total de impuestos - Msg = CFDi.ImpuestosCfd(Ventas.RetIVATC + Ventas.RetISRTC, Ventas.IVATC) - If Msg = String.Empty Then - - Dim HasErrorRetenciones As Boolean = False - 'Nodo Impuestos-retenciones - - - For Each Ret In ObjCFDITimbre.Retenciones - Dim clbImp As ClbNegBICFDv3_3.Impuesto = If(Ret.Impuesto = "002", ClbNegBICFDv3_3.Impuesto.IVA, If(Ret.Impuesto = "003", ClbNegBICFDv3_3.Impuesto.IEPS, ClbNegBICFDv3_3.Impuesto.ISR)) - Msg = CFDi.ImpuestosRetencionesCfd(clbImp, Ret.Importe) - Next - - If Not HasErrorRetenciones Then - - 'Nodo Impuestos-traslado - Dim HasErrorIVA As Boolean = False - ''se acumulan los importes - For Each Tras In ObjCFDITimbre.Traslados - Dim Posicion As Integer = Tras.TasaOCuota.ToString.IndexOf(".") - Dim tipfact As ClbNegBICFDv3_3.TipoFactor = If(Tras.TipoFactor = "Tasa", ClbNegBICFDv3_3.TipoFactor.Tasa, If(Tras.TipoFactor = "Cuota", ClbNegBICFDv3_3.TipoFactor.Cuota, ClbNegBICFDv3_3.TipoFactor.Exento)) - Msg = CFDi.ImpuestosTrasladosCfd(ClbNegBICFDv3_3.Impuesto.IVA, Tras.TasaOCuota.ToString.PadRight(Tras.TasaOCuota.ToString.Length + (6 - Tras.TasaOCuota.ToString.Substring(Posicion, Tras.TasaOCuota.ToString.Length - 1).Length.ToEntero + 1), Convert.ToChar("0")), Tras.Importe, tipfact) - Next - - - If Not HasErrorIVA Then - 'Nodo Impuestos locales - 'JJMQ 20150826: Se habilitó de nueva cuenta impuestos locales - Dim HasErrorImpuestosLocales As Boolean = False - Dim TieneImpuestosLocales As Boolean = False - - - If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 Then - - For Each ret As CFDIRetencionesLocales In ObjCFDITimbre.RetencionesLocales - If ret.Importe > 0 Then - Msg = ImpLoc.RetencionesLocales(ret.ImpuestoLocalRetenido, ret.TasaRetencion, ret.Importe) - TieneImpuestosLocales = True - End If - Next - End If - - CFDi.CompImplocal = ImpLoc - If Msg <> String.Empty Then HasErrorImpuestosLocales = True - - If Not HasErrorImpuestosLocales Then - - - - 'Agrega Adenda FEMSA - Dim HasErrorFEMSA As Boolean = False - If Ventas.Cliente.AplicaFEMSA Then - - Msg = ObjFemsa.Carga(Ventas.FemsaFactura.FEMSA_Version, Ventas.ClaseDoctoSat, Ventas.FemsaFactura.FEMSA_NumSociedad, Ventas.FemsaFactura.FEMSA_NumProveedor, Ventas.FemsaFactura.FEMSA_NumPedido, - Ventas.MonedaAbreviatura, Ventas.FemsaFactura.FEMSA_NumEntrada, Ventas.FemsaFactura.FEMSA_NumRemision, Ventas.FemsaFactura.FEMSA_NumSocio, Ventas.FemsaFactura.FEMSA_CentroCosto, - Ventas.FemsaFactura.FEMSA_IPeriodoLiquidacion, Ventas.FemsaFactura.FEMSA_FPeriodoLiquidacion, Ventas.FemsaFactura.FEMSA_CodRetencion1, Ventas.FemsaFactura.FEMSA_CodRetencion2, - Ventas.FemsaFactura.FEMSA_Mail) - If Msg <> String.Empty Then HasErrorFEMSA = True - End If - - If Not HasErrorFEMSA Then - If Ventas.Cliente.AplicaFEMSA Then Msg = CFDi.AddendaFemsa(ObjFemsa) - If Msg = String.Empty Then - 'Agrega Complemento Detallista - Dim HasErrorDetallista As Boolean = False - If Ventas.Cliente.AplicaDetallista Then - 'Desarrollar Detallista - If Msg <> String.Empty Then HasErrorDetallista = True - '1 - Msg = ObjDetallista._1_1R_requestForPaymentIdentification(ClbNegBICFDv3_3.CompDetEntityType.INVOICE) - If Msg <> String.Empty Then HasErrorDetallista = True - '2 - Dim LstInstruccionComercial As New List(Of String) - LstInstruccionComercial.Add(Ventas.TotalTC.ToString.ToDouble.Texto2Letras.ToUpper) - Msg = ObjDetallista._2_1O_SpecialInstruction(ClbNegBICFDv3_3.CompDetCode.ZZZ, LstInstruccionComercial) - If Msg <> String.Empty Then HasErrorDetallista = True - '3 - Msg = ObjDetallista._3_1R_OrderIdentification_ReferenceIdentification("ON", Ventas.Det_OrdenCompra) - If Msg <> String.Empty Then HasErrorDetallista = True - Msg = ObjDetallista._3_2O_OrderIdentification_ReferenceDate(Ventas.Det_FechaOrdenCompra.ToDate) - If Msg <> String.Empty Then HasErrorDetallista = True - '4 - Msg = ObjDetallista._4_1R_AdditionalInformation_ReferenceIdentification("DQ", Ventas.Det_ContraRecibo) - If Msg <> String.Empty Then HasErrorDetallista = True - '5 - Msg = ObjDetallista._5_1R_DeliveryNote_ReferenceIdentification(Ventas.Det_ContraRecibo) - If Msg <> String.Empty Then HasErrorDetallista = True - Msg = ObjDetallista._5_2O_DeliveryNote_ReferenceDate(Ventas.Det_FechaOrdenCompra.ToDate) - If Msg <> String.Empty Then HasErrorDetallista = True - '6 - Msg = ObjDetallista._6_1R_Buyer(Ventas.Cliente.Detallista_GLNComprador, Ventas.Cliente.Detallista_Departamento) - If Msg <> String.Empty Then HasErrorDetallista = True - '7 - Msg = ObjDetallista._7_1R_Seller(Ventas.Cliente.Detallista_GLNVendedor, "SELLER_ASSIGNED_IDENTIFIER_FOR_A_PARTY", Ventas.Cliente.Detallista_NumProveedor) - If Msg <> String.Empty Then HasErrorDetallista = True - '8 - Msg = ObjDetallista._8_1O_AllowanceCharge(ClbNegBICFDv3_3.CompDetNetAllowanceChargeType.ALLOWANCE_GLOBAL, - ClbNegBICFDv3_3.CompDetNetSettlementType.OFF_INVOICE, - "0", - ClbNegBICFDv3_3.CompDetNetSpecialServicesType.AJ, - ClbNegBICFDv3_3.CompDetNetMonetaryAmountOrPercentageBase.INVOICE_VALUE, - If(Ventas.DescuentoTC > 0 AndAlso Ventas.SubTotalTC > 0, (Ventas.DescuentoTC * 100) / Ventas.SubTotalTC, 0)) - If Msg <> String.Empty Then HasErrorDetallista = True - '9 - Dim LineNumber As Integer = 1 - If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then - For Each Row As DataRow In Ventas.DtDetalle.Rows - Dim PS As String = If(Row("PS").ToString.Length = 1, Row("Obs").ToString, If(Row("PS").ToString.Length = 0, "", Row("PS").ToString & " ") & Row("Obs").ToString & If(Row("Obs").ToString.Trim.Length > 0, vbLf, "")) & vbLf - Msg = ObjDetallista._9_1R_LineItem("SimpleInvoidLineItemType", - LineNumber, - Row("Codigo").ToString, - ClbNegBICFDv3_3.CompDetAlternateTradeItemIdentification.SUPPLIER_ASSIGNED, - Row("Codigo").ToString, - ClbNegBICFDv3_3.CompDetNetLanguage.ES, - If((Row("Codigo").ToString & If(Row("Codigo").ToString.Length > 0, "-", "") & PS).Length > 35, (Row("Codigo").ToString & If(Row("Codigo").ToString.Length > 0, "-", "") & PS).Substring(0, 34), (Row("Codigo").ToString & If(Row("Codigo").ToString.Length > 0, "-", "") & PS)), - If(Row("UM").ToString.ToLower = "no aplica", "NA", Row("UM").ToString), - Row("Cantidad").ToString, - Row("PU").ToString.ToDecimal, - Row("PU").ToString.ToDecimal * (1 + Row("IVA").ToString.ToDecimal), - Row("Cantidad").ToString.ToDecimal * Row("PU").ToString.ToDecimal, - (Row("Cantidad").ToString.ToDecimal * Row("PU").ToString.ToDecimal) * (1 + Row("IVA").ToString.ToDecimal)) - LineNumber = LineNumber + 1 - Next - End If - If Msg <> String.Empty Then HasErrorDetallista = True - '10 - Msg = ObjDetallista._10_1R_TotalAmount(Ventas.SubTotalTC) - If Msg <> String.Empty Then HasErrorDetallista = True - '11 - Msg = ObjDetallista._11_1R_TotalAllowanceCharge(ClbNegBICFDv3_3.CompDetNetAllowanceOrChargeType.ALLOWANCE, - ClbNegBICFDv3_3.CompDetNetSpecialServicesType.AA, - Ventas.DescuentoTC) - If Msg <> String.Empty Then HasErrorDetallista = True - End If - If Not HasErrorDetallista Then - If Ventas.Cliente.AplicaDetallista Then Msg = CFDi.ClomplementoDetallistaCfd(ObjDetallista) - If Msg <> String.Empty Then HasErrorDetallista = True - 'Timbrar - - 'Web Services de producción: http://biinform.com.mx/srvCFDi/service1.asmx - 'Web Services de pruebasd: http://biinform.com.mx/srvCFDiPrueba/service1.asmx - - - - - If Not System.IO.Directory.Exists(UsuarioActual.Empresa.Ruta & "XML\") Then System.IO.Directory.CreateDirectory(UsuarioActual.Empresa.Ruta & "XML\") - If Not System.IO.Directory.Exists(UsuarioActual.Empresa.Ruta & "XML\" & Ventas.TipoDocto) Then System.IO.Directory.CreateDirectory(UsuarioActual.Empresa.Ruta & "XML\" & Ventas.TipoDocto) - - 'GENERAR TIMBRE - CFDi.Generar(ArchivoPFX, - UsuarioActual.Empresa.ContraseñaKey, - ArchivoCertificado, - $"{RutaArchivo }{NombreArchivoXML}.xml", - UsuarioActual.Empresa.Ruta & "Certificados\", - UsuarioServicio, - ClaveServicio, - UrlServicio, - True) - - - If CFDi.MsgError <> String.Empty Then - OnError($"Ocurrió un error al generar el timbre, el mensaje del SAT fue: {CFDi.MsgError}. Emp:{UsuarioActual.CveEmpresa}. MetPag: {Ventas.ClaveMetodoPagoSAT}", New Exception(CFDi.MsgError)) - Retorno = $"Ocurrió un error al generar el timbre, el mensaje del SAT fue: {CFDi.MsgError}. Emp:{UsuarioActual.CveEmpresa}. MetPag: {Ventas.ClaveMetodoPagoSAT}" - Else - Dim CBB As New ClbNegBICFDv3_3.ClsNegCBBGenerar() - Dim FechaCertificacion As DateTime - Dim FolioFiscal, NoSerieCertificado, NoSerieCertificadoContribuyente, SelloCFDi, SelloSAT As String - - FolioFiscal = CFDi.Timbrado.UUDI 'XmlDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText - NoSerieCertificado = CFDi.Timbrado.NoCertificadoSAT - FechaCertificacion = CFDi.Timbrado.FechaTimbrado - SelloCFDi = CFDi.Timbrado.SelloCFD - SelloSAT = CFDi.Timbrado.SelloSAT - NoSerieCertificadoContribuyente = CFDi.Timbrado.NoCertificado - - - Dim ObjVentas As New ClsVentas() - If Not ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", ObjCFDITimbre.Comprobante.Fecha, Ventas.CveVenta, CvePAC:=1, CFDIVersion:="3.3") Then - Retorno = "No se pudo registrar el folio fiscal" - End If - ObjVentas.Dispose() - - - ''Actualiza Cliente (NumeroCuenta) - 'If Not UsuarioActual.CveEmpresa.Contiene(72, 80) Then - ' Dim Hilo2 As New System.Threading.Thread(Sub() ActualizaCliente(UsuarioActual.CveUsuario, Ventas.Cliente.NumCtaPago, Ventas.CveMetodoPago, Ventas.CveCliente)) - ' Hilo2.Start() - 'End If - - - Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\{ObjCFDITimbre.Comprobante.SerieFolio}.jpg" - CBB.GenerarCBB(UsuarioActual.Empresa.RFC, ObjCFDITimbre.Receptor.RFC, Ventas.TotalTC, FolioFiscal, RutaCBB) - - ''Genero la addenda de 7-Eleven - 'If sevenElevenNumProveedor <> "" AndAlso sevenElevenFolio <> "" AndAlso sevenElevenTienda <> "" AndAlso sevenElevenFecha <> "" AndAlso sevenElevenFecha <> "__/__/____" Then - ' Dim RutaCadena As String = $"{Ruta}XML\{Ventas.TipoDocto}\{Ventas.SerieFolio}.xml" 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio)) - - ' GeneraAddenda7Eleven(RutaCadena, TmpDTConceptos, TmpDT7Eleven) - 'End If - - 'Genero la addenda Ford - If Ventas.Cliente.Ford_GSDB <> "" Then - - Dim RutaCadena As String = String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML) 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio)) - - Dim FolioFactura As String = "" - If UsuarioActual.CveEmpresa = 8 Then FolioFactura = Ventas.Folio.ToString ' sogo, pordefault manda el folio de la factura - GeneraAddendaFord(RutaCadena, FolioFactura, Ventas.FordASN, Ventas.FordGSDB) - - End If - End If - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Complemento Detallista" - Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Complemento Detallista", New Exception) - End If - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: AddendaFemsa" - Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: AddendaFemsa", New Exception) - End If - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: AddendaFemsa" - Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: AdendaFEMSA", New Exception) - End If - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: RetencionesLocales" - Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: RetencionesLocales", New Exception) - End If - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ImpuestosTrasladoCfd" - Me.OnError("El SAT regresó el siguieente mensaje: " & Msg & ". Objeto: ImpuestosTrasladoCfd", New Exception) - End If - - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ImpuestosRetencionesCfd " - Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ImpuestosRetencionesCfd ", New Exception) - End If - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ImpuestosCfd" - Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ImpuestosCfd", New Exception) - End If - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ConceptosCfd" - Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ConceptosCfd", New Exception) - End If - - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ReceptorCfd" - Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: ReceptorCfd", New Exception) - End If - - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: EmisorCfd" - Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: EmisorCfd", New Exception) - End If - Else - Retorno = "El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Comprobante" - Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Comprobante", New Exception) - End If - MensajeErrorCFDI = Retorno - Return Retorno - End Function - Public Function TimbrarFacturaRealVirtualv33(Ventas As Modelos.Factura, UsuarioActual As Usuario) As String - Dim sw As New Diagnostics.Stopwatch - Dim swmili As Long = 0 - Dim swTiempo As New StringBuilder - sw.Start() - Dim Retorno As String = "" - Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre - ' 'Sucursal matriz de la empresa - Dim ArchivoLLave As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoKey) - Dim ArchivoCertificado As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoCer) - Dim UsuarioServicio As String = If(UsuarioActual.Empresa.CvePAC = 2, UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx") - Dim ClaveServicio As String = If(UsuarioActual.Empresa.CvePAC = 2, UsuarioActual.Empresa.RFC.ToLower, "rene2018") - Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey - Dim EmisorRFC As String = UsuarioActual.Empresa.RFC - Dim UrlServicio As String = "" ' Produccion - Dim RutaArchivo As String = String.Format("{0}XML\{1}\", UsuarioActual.Empresa.Ruta, Ventas.TipoDocto) - Dim NombreArchivoXML As String = ObjCFDITimbre.Comprobante.SerieFolio - Dim SubTotal As Decimal = 0 - Dim TimbraProduccion As Boolean = True - If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo) - - Select Case UsuarioActual.Empresa.CvePAC - Case 2 - UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" - Case 4 - UrlServicio = "http://192.168.0.2:8080/ADSistemas/Timbrado.asmx?WSDL" - End Select - - If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then - - 'EmisorRFC = "AAA010101AAA" - 'ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.key" - 'ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.cer" - - EmisorRFC = "ZUÑ920208KL4" - ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key" - ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer" - - Clave = "12345678a" - TimbraProduccion = False - Select Case UsuarioActual.Empresa.CvePAC - Case 2 - UsuarioServicio = "fgomez" - ClaveServicio = "12121212" - UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" '"http://108.60.211.43/rvltimbrado/service1.asmx" - Case 4 - UsuarioServicio = "UserTest" - ClaveServicio = "1234567890" - UrlServicio = "http://192.168.0.2:8080/ADSistemas/Timbrado.asmx?WSDLL" - End Select - End If - -#Region "Valida" - If Not File.Exists(ArchivoCertificado) Then - Alert("El archivo de certificado no existe", TipoMensaje.MsgError) - Return "" - End If - If Not File.Exists(ArchivoLLave) Then - Alert("El archivo de llave privada no existe", TipoMensaje.MsgError) - Return "" - End If - If UsuarioActual.Empresa.ContraseñaKey = "" Then - Alert("La clave no puede ser vacía", TipoMensaje.MsgError) - Return "" - End If -#End Region - -#Region "Variables" - Dim llaveByte As Byte(), certByte As Byte() - Dim llaveBase64 As String, certBase64 As String - Dim cfdi As New RVCFDI33.GeneraCFDI() - Dim complemento As String = "" - Dim complementoConcepto As String = "" - -#End Region - -#Region "Verifica" - Try - llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave) - llaveBase64 = Convert.ToBase64String(llaveByte) - Catch ex As Exception - Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError) - Return "" - End Try - - - Try - certByte = System.IO.File.ReadAllBytes(ArchivoCertificado) - certBase64 = Convert.ToBase64String(certByte) - Catch ex As Exception - Alert($"Error al leer el certificado: {ex.Message}", TipoMensaje.MsgError) - Return "" - - End Try -#End Region - - - sw.Stop() - swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - - ' cfdi.saltarValidacion("bNtMuvZockPVhEjaPj0E") - cfdi.Decimales = 4 -#Region "Certificado" - cfdi.agregarCertificado(ArchivoCertificado) -#End Region - - -#Region "Comprobante" - - cfdi.agregarComprobante33( - ObjCFDITimbre.Comprobante.Serie, - ObjCFDITimbre.Comprobante.Folio, - ObjCFDITimbre.Comprobante.Fecha.ToString("yyyy-MM-ddTHH:mm:ss"), - ObjCFDITimbre.Comprobante.FormadePago, - ObjCFDITimbre.Comprobante.CondicionesdePago, - ObjCFDITimbre.Comprobante.SubTotal, - ObjCFDITimbre.Comprobante.Descuentos, - ObjCFDITimbre.Comprobante.Moneda, - ObjCFDITimbre.Comprobante.TipoCambio.ToString, - ObjCFDITimbre.Comprobante.Total, - ObjCFDITimbre.Comprobante.TipoComprobante, - ObjCFDITimbre.Comprobante.MetodoPago, - ObjCFDITimbre.Comprobante.LugarExpedicion, - ObjCFDITimbre.Comprobante.Confirmacion) - - If ObjCFDITimbre.CFDIRelacionados.TipoRelacion <> "" Then - cfdi.agregarCfdiRelacionados(ObjCFDITimbre.CFDIRelacionados.TipoRelacion) - For Each uid As String In ObjCFDITimbre.CFDIRelacionados.UUID - cfdi.agregarCfdiRelacionado(uid) - Next - End If -#Region "Emisor" - ' cfdi.agregarCfdiRelacionados() - cfdi.agregarEmisor(EmisorRFC, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal) - -#End Region - -#Region "Receptor" - - cfdi.agregarReceptor(ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Receptor.Nombre, ObjCFDITimbre.Receptor.ResidenciaFiscal, ObjCFDITimbre.Receptor.NumeroRegistroTributario, ObjCFDITimbre.Receptor.UsoCFDI) - -#End Region - -#End Region - -#Region "Conceptos" - - 'Nodo conceptos, se agregan los PS - - If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then - For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos - cfdi.agregarConcepto(concep.ClaveProdServ, concep.Noidentificacion, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Descripcion, concep.ValorUnitario, concep.Importe, concep.Descuento) - For Each imp As CFDIConceptosImpuestos In concep.Impuestos - If imp.TrasladooRetencion = "T" Then - cfdi.agregarImpuestoConceptoTraslado(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe) - Else - cfdi.agregarImpuestoConceptoRetenido(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe) - End If - Next - If concep.CuentaPredial <> "" Then cfdi.agregarCuentaPredial(concep.CuentaPredial) - If concep.NumeroPedimento <> "" Then cfdi.agregarInformacionAduanera(concep.NumeroPedimento) - Next - End If - -#End Region - - If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E") Then - -#Region "Impuestos" - - cfdi.agregarImpuestos(ObjCFDITimbre.TotalImpuestosRetenidos, ObjCFDITimbre.TotalImpuestosTrasladados) - -#End Region -#Region " Traslados y Retenciones" - - - If ObjCFDITimbre.Retenciones.Sum(Function(x) x.Importe) > 0 Then - ''se acumulan los importes - For Each Ret In ObjCFDITimbre.Retenciones - cfdi.agregarRetencion(Ret.Impuesto, Ret.Importe) - Next - End If - - ''se acumulan los importes - For Each Tras In ObjCFDITimbre.Traslados - cfdi.agregarTraslado(Tras.Impuesto, Tras.TipoFactor, Tras.TasaOCuota, Tras.Importe) - Next -#End Region - -#Region "Impuestos Locales" - - If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 Then - cfdi.agregarImpuestosLocales("1.0", ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe), 0) - For Each ret As CFDIRetencionesLocales In ObjCFDITimbre.RetencionesLocales - If ret.Importe > 0 Then - cfdi.agregarRetencionesLocales(ret.ImpuestoLocalRetenido, ret.TasaRetencion, ret.Importe) - End If - Next - End If - - If Ventas.CveComplementoTimbrado > 0 Then - - Select Case Ventas.CveComplementoTimbrado - Case 5 'INE Proceso Ordinario Directivo Estatal" - cfdi.agregarIne11("Ordinario", "Directivo Estatal", "0") - - cfdi.agregarEntidad(Ventas.ComplementoINE.INEEntidad, "") - cfdi.agregarIneContabilidad(Ventas.ComplementoINE.INEIdContabilidad) - Case 6 'INE Proceso Ordinario Ejecutivo Estatal" - cfdi.agregarIne11("Ordinario", "Ejecutivo Estatal", "0") - - cfdi.agregarEntidad(Ventas.ComplementoINE.INEEntidad, "") - cfdi.agregarIneContabilidad(Ventas.ComplementoINE.INEIdContabilidad) - Case 7 'INE Proceso Ordinario Ejecutivo Nacional" - - cfdi.agregarIne11("Ordinario", "Ejecutivo Nacional", Ventas.ComplementoINE.INEIdContabilidad.ToString) - Case 8 'INE PreCampaña - cfdi.agregarIne11(Ventas.ComplementoINE.INETipoProceso, "", "0") - - cfdi.agregarEntidad(Ventas.ComplementoINE.INEEntidad, Ventas.ComplementoINE.INETipoComite) - cfdi.agregarIneContabilidad(Ventas.ComplementoINE.INEIdContabilidad) - End Select - - End If - - - -#End Region - - -#Region "Comercio Exterior" - - If Ventas.Cliente.AplicaComercioExterior And ObjCFDITimbre.Complementos.ComercioExterior11.AplicaComercioExteriorSubProyecto Then - If ObjCFDITimbre.Complementos.ComercioExterior11 IsNot Nothing Then - - 'DATOS GENERALES - cfdi.agregarComercioExterior11(ObjCFDITimbre.Complementos.ComercioExterior11.MotivoTraslado, - ObjCFDITimbre.Complementos.ComercioExterior11.TipoOperacion, - ObjCFDITimbre.Complementos.ComercioExterior11.ClavedePedimento, - ObjCFDITimbre.Complementos.ComercioExterior11.CertificadoOrigen, - ObjCFDITimbre.Complementos.ComercioExterior11.NumCertificadoOrigen, - ObjCFDITimbre.Complementos.ComercioExterior11.NumeroExportadorConfiable, - ObjCFDITimbre.Complementos.ComercioExterior11.Incoterm, - ObjCFDITimbre.Complementos.ComercioExterior11.Subdivision, - ObjCFDITimbre.Complementos.ComercioExterior11.Observaciones, - ObjCFDITimbre.Complementos.ComercioExterior11.TipoCambioUSD, - ObjCFDITimbre.Complementos.ComercioExterior11.TotalUSD) - 'EMISOR - cfdi.agregarComercioExterior11Emisor(If(EmisorRFC.Length >= 12, "", ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CURP)) - cfdi.agregarComercioExterior11Domicilio(ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Calle, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroExterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroInterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Colonia, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Localidad, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Referencia, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Municipio, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Estado, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Pais, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CP) - 'RECEPTOR - cfdi.agregarComercioExterior11Receptor(ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Calle, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroExterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroInterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Colonia, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Localidad, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Referencia, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Municipio, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Estado, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Pais, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.CP) - cfdi.agregarComercioExterior11Destinatario(ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumRegIdTrib, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Nombre, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Calle, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroExterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroInterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Colonia, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Localidad, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Referencia, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Municipio, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Estado, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Pais, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.CP) - 'MERCANCIAS - If ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias IsNot Nothing AndAlso ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias.Count > 0 Then - For Each concep As CFDIComercioExterior11Mercancias In ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias - cfdi.agregarComercioExterior11Mercancia(concep.NoIdentificacion, concep.FraccionArancelaria, concep.CantidadAduana, concep.UnidadAduana, concep.ValorUnitarioAduana, concep.ValorDolares) - If concep.DescripcionesEspecificas.Marca <> "" Then - cfdi.agregarComercioExterior11MercanciaDescripcionesEspeciales(concep.DescripcionesEspecificas.Marca, - concep.DescripcionesEspecificas.Modelo, - concep.DescripcionesEspecificas.SubModelo, - concep.DescripcionesEspecificas.NumeroSerie) - End If - Next - - End If - - - End If - End If - -#End Region - - - End If - -#Region "Complemento Pago" - - If ObjCFDITimbre.Comprobante.TipoComprobante = "P" Then - - cfdi.agregarPago10(ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss"), - ObjCFDITimbre.ComplementoPagos.FormaDePagoP, - ObjCFDITimbre.ComplementoPagos.MonedaP, - ObjCFDITimbre.ComplementoPagos.TipoCambioP, - ObjCFDITimbre.ComplementoPagos.Monto, - ObjCFDITimbre.ComplementoPagos.NumOperacion, - ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaOrd, - ObjCFDITimbre.ComplementoPagos.NomBancoOrdExt, - ObjCFDITimbre.ComplementoPagos.CtaOrdenante, - ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaBen, - ObjCFDITimbre.ComplementoPagos.CtaBeneficiario, - ObjCFDITimbre.ComplementoPagos.TipoCadPago, - ObjCFDITimbre.ComplementoPagos.CertPago, - ObjCFDITimbre.ComplementoPagos.CadPago, - ObjCFDITimbre.ComplementoPagos.SelloPago) - - - If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then - - - For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados - cfdi.agregarPago10DoctoRelacionado(doc.IdDocumento, - doc.Serie, - doc.Folio, - doc.MonedaDR, - doc.TipoCambioDR, - doc.MetodoDePagoDR, - doc.NumParcialidad, - doc.ImpSaldoAnt, - doc.ImpPagado, - doc.ImpSaldoInsoluto) - - Next - - 'Estos impuestos aplicarían para anticipos - If ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then - - cfdi.agregarPago10Impuestos(ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos, ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados) - If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then - For Each Ret As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R") - cfdi.agregarPago10Retencion(Ret.Impuesto, Ret.Importe) - Next - End If - If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then - For Each Tra As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T") - cfdi.agregarPago10Traslado(Tra.Impuesto, Tra.TipoFactor, Tra.TasaOCuota, Tra.Importe) - Next - End If - - End If - - - - End If - - End If -#End Region - - - -#Region "Nomina12" - If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then - - cfdi.Esquema.AgregarEsquema("http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd") - cfdi.agregarNomina12(ObjCFDITimbre.Nomina.Version, ObjCFDITimbre.Nomina.TipoNomina, ObjCFDITimbre.Nomina.FechaPago.ToString, ObjCFDITimbre.Nomina.FechaInicio, ObjCFDITimbre.Nomina.FechaFin, ObjCFDITimbre.Nomina.NumDiasPagados.ToString, If(ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0, ObjCFDITimbre.Nomina.TotalPercepciones.ToString, ""), If(ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0, ObjCFDITimbre.Nomina.TotalDeducciones.ToString, ""), If(ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0, ObjCFDITimbre.Nomina.TotalOtrosPagos.ToString, "")) - - cfdi.agregarNominaEmisor12(ObjCFDITimbre.Emisor.CURP, If(ObjCFDITimbre.Nomina.Receptor.TipoContrato = "99", "", ObjCFDITimbre.Emisor.RegistroPatronal), ObjCFDITimbre.Emisor.RFC) - - If UsuarioActual.Empresa.UsaAC Then cfdi.agregarNominaEmisorEntidadSNCF12("IF", "90") - - If ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0 Then - Dim TotalIndemnizacion As String = If(ObjCFDITimbre.Nomina.TotalIndemnizacion > 0, ObjCFDITimbre.Nomina.TotalIndemnizacion.ToString, "") - Dim TotalJubilacion As String = If(ObjCFDITimbre.Nomina.TotalJubilacion > 0, ObjCFDITimbre.Nomina.TotalJubilacion.ToString, "") - cfdi.agregarNominaPercepciones12(ObjCFDITimbre.Nomina.TotalSueldos.ToString, TotalIndemnizacion, TotalJubilacion, ObjCFDITimbre.Nomina.TotalPercepcionesGravado.ToString, ObjCFDITimbre.Nomina.TotalPercepcionesExento.ToString) - For Each percep As CFDINominaPercepciones In ObjCFDITimbre.Nomina.Percepciones - cfdi.agregarNominaPercepcionesPercepcion12(percep.TipoPercepcion, percep.Clave, percep.Concepto, Math.Round(percep.ImporteGravado, 2).ToString, Math.Round(percep.ImporteExento, 2).ToString) - Next - End If - 'cfdi.agregarNominaReceptorSubContratacion12("AAD990814BP6", "50") - 'cfdi.agregarNominaPercepcionesPercepcionAccionesOTitulos12("100", "200"); - 'cfdi.agregarNominaPercepcionesSeparacionIndemnizacion12("100", "10", "1000", "100", "50"); - 'cfdi.agregarNominaPercepcionesJubilacionPensionRetiro12("50", "100", "10", "100", "0"); - - If ObjCFDITimbre.Nomina.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then - For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras - cfdi.agregarNominaPercepcionesPercepcionHorasExtra12(HoraExtra.Dias, HoraExtra.TipoHoras, HoraExtra.HorasExtra.ToString, HoraExtra.ImportePagado.ToString) - Next - End If - - If ObjCFDITimbre.Nomina.Incapacidades IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Incapacidades.Count > 0 Then - For Each Incap As CFDINominaIncapacidades In ObjCFDITimbre.Nomina.Incapacidades - cfdi.agregarNominaIncapacidadesIncapacidad12(Incap.DiasIncapacidad, Incap.TipoIncapacidad, Incap.Importe.ToString) - Next - End If - - If ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0 Then - cfdi.agregarNominaDeducciones12(If(Not ObjCFDITimbre.Nomina.TotalDeduccionesOtras.ToString.ToDecimal > 0, "", ObjCFDITimbre.Nomina.TotalDeduccionesOtras.ToString), If(Not ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos.ToString.ToDecimal > 0, "", Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos, 2).ToString)) - For Each deduc As CFDINominaDeducciones In ObjCFDITimbre.Nomina.Deducciones - cfdi.agregarNominaDeduccionesDeduccion12(deduc.TipoDeduccion, deduc.Clave, deduc.Concepto, Math.Round(deduc.Importe, 2).ToString) - Next - End If - - If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing Then - ' cfdi.agregarNominaOtrosPagosOtroPago12("002", "002", "Subsidio", "10.00"); - ' cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12("10.00"); - If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0 Then - For Each otpag As CFDINominaOtrosPagos In ObjCFDITimbre.Nomina.OtrosPagos - cfdi.agregarNominaOtrosPagosOtroPago12(otpag.TipoOtroPago, otpag.Clave, otpag.Concepto, otpag.Importe.ToString) - If otpag.TipoOtroPago = "002" Then - cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12(otpag.Importe.ToString) - End If - - Next - End If - End If - - -#Region "Receptor" - - cfdi.agregarNominaReceptor12(ObjCFDITimbre.Nomina.Receptor.CURP, - ObjCFDITimbre.Nomina.Receptor.NSS, - ObjCFDITimbre.Nomina.Receptor.FechaInicioContrato, - ObjCFDITimbre.Nomina.Receptor.Antiguedad, - ObjCFDITimbre.Nomina.Receptor.TipoContrato, - ObjCFDITimbre.Nomina.Receptor.Sindicalizado, - ObjCFDITimbre.Nomina.Receptor.CodigoTipoJornada, - ObjCFDITimbre.Nomina.Receptor.CodigoRegimenContratacion, - ObjCFDITimbre.Nomina.Receptor.CodigoEmpleado, - ObjCFDITimbre.Nomina.Receptor.Departamento, - ObjCFDITimbre.Nomina.Receptor.Puesto, - ObjCFDITimbre.Nomina.Receptor.CodigoRiesgoPuesto, - If(ObjCFDITimbre.Nomina.TipoNomina = "E", "99", ObjCFDITimbre.Nomina.Receptor.TipoPeriodo), - ObjCFDITimbre.Nomina.Receptor.CodigoBanco, - ObjCFDITimbre.Nomina.Receptor.NumeroCuenta, - ObjCFDITimbre.Nomina.Receptor.SBC.ToString, - ObjCFDITimbre.Nomina.Receptor.SDI.ToString, - ObjCFDITimbre.Nomina.Receptor.CodigoEntidadFederativa) - - - End If -#End Region - -#End Region - - sw.Stop() - swTiempo.AppendFormat("Armado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() -#Region "Genera XML" - Dim ArchivoGenerado As Boolean = False - Try - cfdi.GenerarXMLBase64(llaveBase64, Clave) - cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML) - ArchivoGenerado = True - Catch ex As Exception - Retorno = cfdi.MensajeError - MensajeErrorCFDI = cfdi.MensajeError - End Try - -#End Region - sw.Stop() - swTiempo.AppendFormat("Guardado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - -#Region "Timbra" - If ArchivoGenerado Then - - cfdi.TimbrarCfdi(UsuarioServicio, ClaveServicio, UrlServicio, TimbraProduccion) - - sw.Stop() - swTiempo.AppendFormat("Timbrado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - 'Verifica el error - If cfdi.CodigoError = 0 Then - - 'Dim FechaCertificacion As DateTime - Dim FolioFiscal As String - - UUID = cfdi.UUID - FolioFiscal = cfdi.UUID 'obtenerAtributo(cfdi.XmlTimbrado, "TimbreFiscalDigital", "UUID") 'XmlDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText - - If FolioFiscal <> "" Then - - File.WriteAllText(String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML), cfdi.XmlTimbrado, System.Text.UTF8Encoding.UTF8) - - - If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then - - 'Actualiza Estatus Factura - If Ventas.CveVenta > 0 Then - - Dim ObjVentas As New ClsVentas() - If ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", ObjCFDITimbre.Comprobante.Fecha, Ventas.CveVenta, CvePAC:=UsuarioActual.Empresa.CvePAC, RFCReceptor:=ObjCFDITimbre.Receptor.RFC, CFDIVersion:="3.3") Then - Retorno = "" - Else - Retorno = "Error" - End If - ObjVentas.Dispose() - - - ''Actualiza Cliente (NumeroCuenta) - 'If Not UsuarioActual.CveEmpresa.Contiene(72, 80, 119) Then - ' Dim Hilo2 As New System.Threading.Thread(Sub() ActualizaCliente(UsuarioActual.CveUsuario, Ventas.Cliente.NumCtaPago, Ventas.CveMetodoPago, Ventas.CveCliente)) - ' Hilo2.Start() - 'End If - - 'Genero la addenda Ford - If Ventas.Cliente.Ford_GSDB <> "" Then - - Dim RutaCadena As String = String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML) 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio)) - - Dim FolioFactura As String = "" - If UsuarioActual.CveEmpresa = 8 Then FolioFactura = Ventas.Folio.ToString ' sogo, pordefault manda el folio de la factura - GeneraAddendaFord(RutaCadena, FolioFactura, Ventas.FordASN, Ventas.FordGSDB) - - End If - - End If - - If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then - Using ObjNomina2 As New ClsNominas() - - If ObjNomina2.UpdateEstatusNomNominas(3, UsuarioActual.Empresa.CvePAC, FolioFiscal, ObjCFDITimbre.Comprobante.Fecha, ObjCFDITimbre.Comprobante.Fecha, ObjCFDITimbre.Nomina.CveNomina, 0, 0, 0, 0, 0) Then - Retorno = "" - Else - Retorno = "Error" - End If - End Using - End If - - If ObjCFDITimbre.Comprobante.TipoComprobante = "T" Then - Using ObjInv As New ClsInventarios() - - If ObjInv.UpdateMovimientoTimbrado(Ventas.Inv_CveMovimiento, 1, FolioFiscal, MinFecha) Then - Retorno = "" - Else - Retorno = "Error" - End If - End Using - End If - - End If - - If Not IO.Directory.Exists($"{UsuarioActual.Empresa.Ruta}CBB\") Then IO.Directory.CreateDirectory($"{UsuarioActual.Empresa.Ruta}CBB\") - - Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\{ObjCFDITimbre.Comprobante.SerieFolio}.jpg" - Dim CBB As New ClbNegBICFDv3_2.ClsNegCBBGenerar() - CBB.GenerarCBB(UsuarioActual.Empresa.RFC, ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Comprobante.Total, FolioFiscal, RutaCBB) - CBB = Nothing - - Retorno = "" - Else - Retorno = "No se pudo timbrar ante el SAT. UUID no generado." - End If - sw.Stop() - swTiempo.AppendFormat("Actualizado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - - Else - Retorno = cfdi.MensajeError - MensajeErrorCFDI = cfdi.MensajeError - End If - End If - - GuardaLogTimbrado(swTiempo.ToString, UsuarioActual.Empresa.CvePAC) -#End Region - 'GC.Collect() - Return Retorno - End Function - Public Function TimbrarFacturaGoCFDIv33(Ventas As Modelos.Factura, UsuarioActual As Usuario, Optional CvePACEspecial As Integer = -1) As String - If CvePACEspecial = -1 Then - CvePACEspecial = UsuarioActual.Empresa.CvePAC - End If - Dim sw As New Diagnostics.Stopwatch - Dim swmili As Long = 0 - Dim swTiempo As New StringBuilder - sw.Start() - Dim Retorno As String = "" - Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre - ' 'Sucursal matriz de la empresa - Dim ArchivoLLave As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoKey) - Dim ArchivoCertificado As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoCer) - Dim UsuarioServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx") - Dim ClaveServicio As String = If(CvePACEspecial = 2, UsuarioActual.Empresa.RFC.ToLower, "rene2018") - Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey - Dim EmisorRFC As String = UsuarioActual.Empresa.RFC - Dim UrlServicio As String = "" ' Produccion - Dim RutaArchivo As String = String.Format("{0}XML\{1}\", UsuarioActual.Empresa.Ruta, Ventas.TipoDocto) - Dim NombreArchivoXML As String = ObjCFDITimbre.Comprobante.SerieFolio - Dim SubTotal As Decimal = 0 - Dim TimbraProduccion As Boolean = True - If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo) - Select Case CvePACEspecial - Case 2 - UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" 'productivo - Case 4 - 'UrlServicio = "http://alterno.gofac.com.mx/cfdi/timbrado.asmx?WSDL" ' alterno - UrlServicio = "https://cfdi.gofac.com.mx/timbrado.asmx?WSDL" - End Select - - If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then - - 'EmisorRFC = "AAA010101AAA" - 'ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.key" - 'ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.cer" - - EmisorRFC = "ZUÑ920208KL4" - ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key" - ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer" - - Clave = "12345678a" - TimbraProduccion = False - Select Case CvePACEspecial - Case 2 - UsuarioServicio = "fgomez" - ClaveServicio = "12121212" - UrlServicio = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" '"http://108.60.211.43/rvltimbrado/service1.asmx" - Case 4 - UsuarioServicio = "UserTest" - ClaveServicio = "1234567890" - UrlServicio = "https://cfdi.gofac.com.mx/timbrado.asmx" - End Select - End If - -#Region "Valida" - If Not File.Exists(ArchivoCertificado) Then - Alert("El archivo de certificado no existe", TipoMensaje.MsgError) - Return "El archivo de certificado no existe" - End If - If Not File.Exists(ArchivoLLave) Then - Alert("El archivo de llave privada no existe", TipoMensaje.MsgError) - Return "El archivo de llave privada no existe" - End If - If UsuarioActual.Empresa.ContraseñaKey = "" Then - Alert("La clave no puede ser vacía", TipoMensaje.MsgError) - Return "La clave no puede ser vacía" - End If -#End Region - -#Region "Variables" - Dim llaveByte As Byte(), certByte As Byte() - Dim llaveBase64 As String, certBase64 As String - Dim cfdi As New GoFac.GoCfdi() - Dim complemento As String = "" - Dim complementoConcepto As String = "" - -#End Region - -#Region "Verifica" - Try - llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave) - llaveBase64 = Convert.ToBase64String(llaveByte) - Catch ex As Exception - Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError) - Return "Error al leer la llave privada" - End Try - - - Try - certByte = System.IO.File.ReadAllBytes(ArchivoCertificado) - certBase64 = Convert.ToBase64String(certByte) - Catch ex As Exception - Alert($"Error al leer el certificado: {ex.Message}", TipoMensaje.MsgError) - Return "Error al leer el certificado" - - End Try -#End Region - - - sw.Stop() - swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - - ' cfdi.saltarValidacion("bNtMuvZockPVhEjaPj0E") - 'cfdi.Decimales = 4 - cfdi.QuitarCerosDecimalDerecha = True ' no limita a 2 decimales, el atributo, de cantidad y precio unitario -#Region "Certificado" - cfdi.CertificadoArchivo(ArchivoCertificado) -#End Region - - - sw.Stop() - swTiempo.AppendFormat("Certificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - -#Region "Comprobante" - - cfdi.Comprobante33( - ObjCFDITimbre.Comprobante.Serie, - ObjCFDITimbre.Comprobante.Folio, - ObjCFDITimbre.Comprobante.Fecha.ToString("yyyy-MM-ddTHH:mm:ss"), - ObjCFDITimbre.Comprobante.FormadePago, - ObjCFDITimbre.Comprobante.CondicionesdePago, - ObjCFDITimbre.Comprobante.SubTotal, - ObjCFDITimbre.Comprobante.Descuentos, - ObjCFDITimbre.Comprobante.Moneda, - ObjCFDITimbre.Comprobante.TipoCambio.ToString, - ObjCFDITimbre.Comprobante.Total, - ObjCFDITimbre.Comprobante.TipoComprobante, - ObjCFDITimbre.Comprobante.MetodoPago, - ObjCFDITimbre.Comprobante.LugarExpedicion, - ObjCFDITimbre.Comprobante.Confirmacion) - - If ObjCFDITimbre.CFDIRelacionados.TipoRelacion <> "" Then - cfdi.CfdiRelacionados(ObjCFDITimbre.CFDIRelacionados.TipoRelacion) - For Each uid As String In ObjCFDITimbre.CFDIRelacionados.UUID - cfdi.CfdiRelacionado(uid) - Next - End If -#Region "Emisor" - ' cfdi.agregarCfdiRelacionados() - cfdi.Emisor(EmisorRFC, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal) - -#End Region - -#Region "Receptor" - - cfdi.Receptor(ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Receptor.Nombre, ObjCFDITimbre.Receptor.ResidenciaFiscal, ObjCFDITimbre.Receptor.NumeroRegistroTributario, ObjCFDITimbre.Receptor.UsoCFDI) - -#End Region - -#End Region - -#Region "Conceptos" - - 'Nodo conceptos, se agregan los PS - - If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then - For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos - cfdi.Concepto(concep.ClaveProdServ, concep.Noidentificacion, concep.Cantidad.ToString("0.00####"), concep.ClaveUnidad, concep.Unidad, concep.Descripcion, concep.ValorUnitario.ToString("0.00####"), concep.Importe, concep.Descuento) - For Each imp As CFDIConceptosImpuestos In concep.Impuestos - If imp.TrasladooRetencion = "T" Then - cfdi.ImpuestoConceptoTraslado(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe) - Else - cfdi.ImpuestoConceptoRetenido(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe) - End If - Next - If concep.CuentaPredial <> "" Then cfdi.CuentaPredial(concep.CuentaPredial) - If concep.NumeroPedimento <> "" Then cfdi.InformacionAduanera(concep.NumeroPedimento) - Next - End If - -#End Region - - If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E") Then - -#Region "Impuestos" - 'SI NO ES FACTURA EN 0 AGREGA LOS IMPUESTOS - If Ventas.Total <> 0 And (ObjCFDITimbre.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.AplicaImpuestosTraslados) Then - cfdi.Impuestos(ObjCFDITimbre.TotalImpuestosRetenidos, ObjCFDITimbre.TotalImpuestosTrasladados) - End If -#End Region -#Region " Traslados y Retenciones" - - - If ObjCFDITimbre.Retenciones.Sum(Function(x) x.Importe) > 0 Then - ''se acumulan los importes - For Each Ret In ObjCFDITimbre.Retenciones - cfdi.Retencion(Ret.Impuesto, Ret.Importe) - Next - End If - - '' si el importe de impuestos es mayor a cero o si es tasa con importe = 0, debe de ir el atributo - If ObjCFDITimbre.AplicaImpuestosTraslados Then - ''se acumulan los importes - For Each Tras In ObjCFDITimbre.Traslados - cfdi.Traslado(Tras.Impuesto, Tras.TipoFactor, Tras.TasaOCuota, Tras.Importe) - Next - End If - -#End Region - -#Region "Impuestos Locales" - - If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 OrElse ObjCFDITimbre.TrasladosLocales.Sum(Function(x) x.Importe) > 0 Then - - cfdi.ImpuestosLocales(ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe), ObjCFDITimbre.TrasladosLocales.Sum(Function(x) x.Importe)) - - For Each ret As CFDIRetencionesLocales In ObjCFDITimbre.RetencionesLocales - If ret.Importe > 0 Then - cfdi.RetencionLocal(ret.ImpuestoLocalRetenido, ret.TasaRetencion, ret.Importe) - End If - Next - - For Each ret As CFDITrasladosLocales In ObjCFDITimbre.TrasladosLocales - If ret.Importe > 0 Then - cfdi.TrasladoLocal(ret.ImpuestoLocalTraslado, ret.TasaTraslado, ret.Importe) - End If - Next - End If - - If Ventas.CveComplementoTimbrado > 0 Then - - Select Case Ventas.CveComplementoTimbrado - Case 5 'INE Proceso Ordinario Directivo Estatal" - cfdi.Ine11("Ordinario", "Directivo Estatal", "0") - - cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, "") - cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad) - Case 6 'INE Proceso Ordinario Ejecutivo Estatal" - cfdi.Ine11("Ordinario", "Ejecutivo Estatal", "0") - - cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, "") - cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad) - Case 7 'INE Proceso Ordinario Ejecutivo Nacional" - - cfdi.Ine11("Ordinario", "Ejecutivo Nacional", Ventas.ComplementoINE.INEIdContabilidad.ToString) - Case 8 'INE PreCampaña - cfdi.Ine11(Ventas.ComplementoINE.INETipoProceso, "", "0") - - cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, Ventas.ComplementoINE.INETipoComite) - cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad) - End Select - - End If - - - -#End Region - - -#Region "Comercio Exterior" - - If Ventas.Cliente.AplicaComercioExterior And ObjCFDITimbre.Complementos.ComercioExterior11.AplicaComercioExteriorSubProyecto Then - If ObjCFDITimbre.Complementos.ComercioExterior11 IsNot Nothing Then - - 'DATOS GENERALES - cfdi.ComercioExterior11(ObjCFDITimbre.Complementos.ComercioExterior11.MotivoTraslado, - ObjCFDITimbre.Complementos.ComercioExterior11.TipoOperacion, - ObjCFDITimbre.Complementos.ComercioExterior11.ClavedePedimento, - ObjCFDITimbre.Complementos.ComercioExterior11.CertificadoOrigen, - ObjCFDITimbre.Complementos.ComercioExterior11.NumCertificadoOrigen, - ObjCFDITimbre.Complementos.ComercioExterior11.NumeroExportadorConfiable, - ObjCFDITimbre.Complementos.ComercioExterior11.Incoterm, - ObjCFDITimbre.Complementos.ComercioExterior11.Subdivision, - ObjCFDITimbre.Complementos.ComercioExterior11.Observaciones, - ObjCFDITimbre.Complementos.ComercioExterior11.TipoCambioUSD, - ObjCFDITimbre.Complementos.ComercioExterior11.TotalUSD) - 'EMISOR - cfdi.ComercioExterior11Emisor(If(EmisorRFC.Length >= 12, "", ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CURP)) - cfdi.ComercioExterior11Domicilio(ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Calle, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroExterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroInterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Colonia, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Localidad, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Referencia, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Municipio, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Estado, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Pais, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CP) - 'RECEPTOR - cfdi.ComercioExterior11Receptor(ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib) - cfdi.ComercioExterior11DomicilioReceptor(ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Calle, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroExterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroInterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Colonia, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Localidad, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Referencia, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Municipio, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Estado, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Pais, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.CP) - cfdi.ComercioExterior11Destinatario(ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumRegIdTrib, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Nombre, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Calle, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroExterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroInterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Colonia, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Localidad, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Referencia, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Municipio, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Estado, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Pais, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.CP) - 'MERCANCIAS - If ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias IsNot Nothing AndAlso ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias.Count > 0 Then - For Each concep As CFDIComercioExterior11Mercancias In ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias - cfdi.ComercioExterior11Mercancia(concep.NoIdentificacion, concep.FraccionArancelaria, concep.CantidadAduana, concep.UnidadAduana, concep.ValorUnitarioAduana, concep.ValorDolares) - If concep.DescripcionesEspecificas.Marca <> "" Then - cfdi.ComercioExterior11MercanciaDescripcionesEspeciales(concep.DescripcionesEspecificas.Marca, - concep.DescripcionesEspecificas.Modelo, - concep.DescripcionesEspecificas.SubModelo, - concep.DescripcionesEspecificas.NumeroSerie) - End If - Next - - End If - - - End If - End If - -#End Region - - - End If - - - -#Region "C O M P L E M E N T O C A R T A P O R T E" - - - If ObjCFDITimbre.Complementos.CartaPorte IsNot Nothing Then - - Dim Carta As CFDICartaPorte = ObjCFDITimbre.Complementos.CartaPorte - - ''DATOS GENERALES - cfdi.CartaPorte(Carta.TranspInternac, Carta.EntradaSalidaMercancia, "", Carta.ViaEntradaSalida, Carta.TotalDistanciaRecorrida) - - 'UBICACIONES - If Carta.Ubicaciones IsNot Nothing AndAlso Carta.Ubicaciones.Count > 0 Then - For Each ubica As CFDICartaPorteUbicacion In Carta.Ubicaciones - 'origen - cfdi.CartaPorteUbicacion(ubica.TipoUbicacion, ubica.IDUbicacion, ubica.RFCRemitenteDestinatario, ubica.NombreRemitenteDestinatario, ubica.NumRegIdTrib, ubica.ResidenciaFiscal, ubica.NumEstacion, ubica.NombreEstacion, ubica.NavegacionTrafico, ubica.FechaHoraSalidaLlegada, ubica.TipoEstacion, ubica.DistanciaRecorrida) - 'cfdi.CartaPorteOrigen(ubica.Origen.IDOrigen, ubica.Origen.RFCRemitente, ubica.Origen.NombreRemitente, ubica.NumRegIdTrib, ubica.Origen.ResidenciaFiscal, ubica.Origen.NumEstacion, ubica.Origen.NombreEstacion, ubica.Origen.NavegacionTrafico, ubica.Origen.FechaHoraSalida) - cfdi.CartaPorteDomicilio(ubica.Domicilio.Calle, ubica.Domicilio.NumeroExterior, ubica.Domicilio.NumeroInterior, ubica.Domicilio.Colonia, ubica.Domicilio.Localidad, ubica.Domicilio.Referencia, ubica.Domicilio.Municipio, ubica.Domicilio.Estado, ubica.Domicilio.Pais, ubica.Domicilio.CP) - ''''destino - 'cfdi.CartaPorteUbicacion(ubica.TipoEstacion, ubica.DistanciaRecorridaDestino) - 'cfdi.CartaPorteDestino(ubica.Destino.IDDestino, ubica.Destino.RFCDestinatario, ubica.Destino.NombreDestinatario, ubica.Destino.NumRegIdTrib, ubica.Destino.ResidenciaFiscal, ubica.Destino.NumEstacion, ubica.Destino.NombreEstacion, ubica.Destino.NavegacionTrafico, ubica.Destino.FechaHoraProgLlegada) - ' cfdi.CartaPorteDomicilio(ubica.Destino.Domicilio.Calle, ubica.Destino.Domicilio.NumeroExterior, ubica.Destino.Domicilio.NumeroInterior, ubica.Destino.Domicilio.Colonia, ubica.Destino.Domicilio.Localidad, ubica.Destino.Domicilio.Referencia, ubica.Destino.Domicilio.Municipio, ubica.Destino.Domicilio.Estado, ubica.Destino.Domicilio.Pais, ubica.Destino.Domicilio.CP) - Next - - End If - - 'MERCANCIAS - If Carta.Mercancias IsNot Nothing Then - cfdi.CartaPorteMercancias(Carta.Mercancias.PesoBrutoTotal, Carta.Mercancias.UnidadPeso, Carta.Mercancias.PesoNetoTotal, Carta.Mercancias.NumTotalMercancias, Carta.Mercancias.CargoporTasacion) - If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then - For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias - cfdi.CartaPorteMercancia(concep.BienesTransp, concep.ClaveSTCC, concep.Descripción, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Dimensiones, concep.MaterialPeligroso, concep.ClaveMaterialPeligroso, If(concep.ClaveMaterialPeligroso <> "", concep.Embalaje, ""), If(concep.ClaveMaterialPeligroso <> "", concep.DescripEmbalaje, ""), concep.PesoenKg, concep.ValorMercancia, concep.Moneda, concep.FraccionArrancelaria, concep.UUIDComercioExt) - For Each transp In concep.MercanciasCantidadTransporta - cfdi.CartaPorteCantidadTransporta(transp.Cantidad, transp.IDOrigen, transp.IDDestino, transp.CvesTransportes) - Next - Next - End If - End If - ' - If Carta.FiguraTransporte IsNot Nothing Then - - If Carta.FiguraTransporte.AutoTransporte IsNot Nothing Then - - cfdi.CartaPorteAutotransporte(Carta.FiguraTransporte.AutoTransporte.PermisoSCT, Carta.FiguraTransporte.AutoTransporte.NumPermisoSCT) - - cfdi.CartaPorteIdentificacionVehicular(Carta.FiguraTransporte.AutoTransporte.Vehiculo.ConfigVehicular, Carta.FiguraTransporte.AutoTransporte.Vehiculo.PlacaVM, Carta.FiguraTransporte.AutoTransporte.Vehiculo.AnioModeloVM) - - cfdi.CartaPorteSeguros(Carta.FiguraTransporte.AutoTransporte.NombreSeguroResponsabilidadCivil, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroResponsabilidadCivil, - Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente, - Carta.FiguraTransporte.AutoTransporte.NombreSeguroCarga, Carta.FiguraTransporte.AutoTransporte.PolizaSeguroCarga, - Carta.FiguraTransporte.AutoTransporte.PrimaSeguro) - - If Carta.FiguraTransporte.AutoTransporte.Remolques IsNot Nothing AndAlso Carta.FiguraTransporte.AutoTransporte.Remolques.Count > 0 Then - For Each concep As CFDICartaPorteRemolque In Carta.FiguraTransporte.AutoTransporte.Remolques - cfdi.CartaPorteRemolque(concep.SubTipoRemolque, concep.Placa) - Next - - End If - End If - - If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then - For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores - cfdi.CartaPorteTiposFigura(concep.TipoFigura, concep.RFCFigura, concep.NumLicencia, concep.NombreFigura, concep.NumRegidTribFigura, If(concep.ResidenciaFiscalFigura <> "MEX", concep.ResidenciaFiscalFigura, "")) - If concep.TipoFigura.Contiene("02", "03") Then ' “02”- Propietario o “03” -Arrendador - cfdi.CartaPortePartesTransporte("PT01") - cfdi.CartaPortePartesTransporteDomicilio(concep.Domicilio.Calle, concep.Domicilio.NumeroExterior, concep.Domicilio.NumeroInterior, concep.Domicilio.Colonia, concep.Domicilio.Localidad, concep.Domicilio.Referencia, concep.Domicilio.Municipio, concep.Domicilio.Estado, concep.Domicilio.Pais, concep.Domicilio.CP) - End If - Next - End If - - End If - - End If - - -#End Region - - -#Region "Complemento Pago" - - If ObjCFDITimbre.Comprobante.TipoComprobante = "P" Then - - cfdi.Pago(ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss"), - ObjCFDITimbre.ComplementoPagos.FormaDePagoP, - ObjCFDITimbre.ComplementoPagos.MonedaP, - ObjCFDITimbre.ComplementoPagos.TipoCambioP, - ObjCFDITimbre.ComplementoPagos.Monto, - ObjCFDITimbre.ComplementoPagos.NumOperacion, - ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaOrd, - ObjCFDITimbre.ComplementoPagos.NomBancoOrdExt, - ObjCFDITimbre.ComplementoPagos.CtaOrdenante, - ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaBen, - ObjCFDITimbre.ComplementoPagos.CtaBeneficiario, - ObjCFDITimbre.ComplementoPagos.TipoCadPago, - ObjCFDITimbre.ComplementoPagos.CertPago, - ObjCFDITimbre.ComplementoPagos.CadPago, - ObjCFDITimbre.ComplementoPagos.SelloPago) - - - If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then - - - For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados - cfdi.PagoDoctoRelacionado(doc.IdDocumento, - doc.Serie, - doc.Folio, - doc.MonedaDR, - doc.TipoCambioDR, - doc.MetodoDePagoDR, - doc.NumParcialidad, - doc.ImpSaldoAnt, - doc.ImpPagado, - doc.ImpSaldoInsoluto) - - Next - - 'Estos impuestos aplicarían para anticipos - If ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then - - cfdi.PagoImpuestos(ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos, ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados) - If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then - For Each Ret As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R") - cfdi.PagoRetencion(Ret.Impuesto, Ret.Importe) - Next - End If - If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then - For Each Tra As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T") - cfdi.PagoTraslado(Tra.Impuesto, Tra.TipoFactor, Tra.TasaOCuota, Tra.Importe) - Next - End If - - End If - - - - End If - - End If -#End Region - - - -#Region "Nomina12" - If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then - - 'cfdi.Esquema.AgregarEsquema("http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd") - cfdi.Nomina12(ObjCFDITimbre.Nomina.TipoNomina, ObjCFDITimbre.Nomina.FechaPago.ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.FechaInicio.ToDate().ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.FechaFin.ToDate().ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.NumDiasPagados, If(ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0, ObjCFDITimbre.Nomina.TotalPercepciones, 0), If(ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0, ObjCFDITimbre.Nomina.TotalDeducciones, 0), If(ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0, ObjCFDITimbre.Nomina.TotalOtrosPagos, 0)) - - cfdi.Nomina12Emisor(ObjCFDITimbre.Emisor.CURP, If(ObjCFDITimbre.Nomina.Receptor.TipoContrato.Contiene("09", "10", "99"), "", ObjCFDITimbre.Emisor.RegistroPatronal), ObjCFDITimbre.Emisor.RFC) - - If UsuarioActual.Empresa.UsaAC Then cfdi.Nomina12EntidadSNCF("IF", 90) - - -#Region "Receptor" - - cfdi.Nomina12Receptor(ObjCFDITimbre.Nomina.Receptor.CURP, - ObjCFDITimbre.Nomina.Receptor.NSS, - ObjCFDITimbre.Nomina.Receptor.FechaInicioContrato.ToDate().ToString("yyyy-MM-dd"), - ObjCFDITimbre.Nomina.Receptor.Antiguedad, - ObjCFDITimbre.Nomina.Receptor.TipoContrato, - ObjCFDITimbre.Nomina.Receptor.Sindicalizado, - ObjCFDITimbre.Nomina.Receptor.CodigoTipoJornada, - ObjCFDITimbre.Nomina.Receptor.CodigoRegimenContratacion, - ObjCFDITimbre.Nomina.Receptor.CodigoEmpleado, - ObjCFDITimbre.Nomina.Receptor.Departamento, - ObjCFDITimbre.Nomina.Receptor.Puesto, - ObjCFDITimbre.Nomina.Receptor.CodigoRiesgoPuesto, - If(ObjCFDITimbre.Nomina.TipoNomina = "E", "99", ObjCFDITimbre.Nomina.Receptor.TipoPeriodo), - ObjCFDITimbre.Nomina.Receptor.CodigoBanco, - ObjCFDITimbre.Nomina.Receptor.NumeroCuenta, - ObjCFDITimbre.Nomina.Receptor.SBC, - ObjCFDITimbre.Nomina.Receptor.SDI, - ObjCFDITimbre.Nomina.Receptor.CodigoEntidadFederativa) - 'cfdi.Nomina12SubContratacion("", "0") - 'cfdi.agregarNominaPercepcionesPercepcionAccionesOTitulos12("100", "200"); - 'cfdi.agregarNominaPercepcionesSeparacionIndemnizacion12("100", "10", "1000", "100", "50"); - 'cfdi.agregarNominaPercepcionesJubilacionPensionRetiro12("50", "100", "10", "100", "0"); - - - End If -#End Region - If ObjCFDITimbre.Nomina IsNot Nothing Then - 'If cfdi.Nomina12SeparacionIndemnizacion Then - If ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0 Then - cfdi.Nomina12Percepciones(ObjCFDITimbre.Nomina.TotalSueldos, ObjCFDITimbre.Nomina.TotalIndemnizacion, ObjCFDITimbre.Nomina.TotalJubilacion, ObjCFDITimbre.Nomina.TotalPercepcionesGravado, ObjCFDITimbre.Nomina.TotalPercepcionesExento) - For Each percep As CFDINominaPercepciones In ObjCFDITimbre.Nomina.Percepciones - cfdi.Nomina12Percepcion(percep.TipoPercepcion, percep.Clave, percep.Concepto, Math.Round(percep.ImporteGravado, 2), Math.Round(percep.ImporteExento, 2)) - If percep.TipoPercepcion.ToEntero() = 19 Then - - If ObjCFDITimbre.Nomina.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then - For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras - cfdi.Nomina12HorasExtra(HoraExtra.Dias.ToEntero, HoraExtra.TipoHoras, HoraExtra.HorasExtra, HoraExtra.ImportePagado) - Next - End If - End If - Next - End If - - If ObjCFDITimbre.IStimbreFiniquito Then - 'ObjCFDITimbre.Nomina. - Dim UltimoSueldoOrdinario As Double = ObjCFDITimbre.Nomina.UltimoSueldoOrdinario.ToString().ToDouble() - Dim TotalIndemnizacion As Double = ObjCFDITimbre.Nomina.TotalIndemnizacion - Dim t1 As Double = If(UltimoSueldoOrdinario < TotalIndemnizacion, UltimoSueldoOrdinario, TotalIndemnizacion) - Dim t2 As Double = If(UltimoSueldoOrdinario < TotalIndemnizacion, TotalIndemnizacion, UltimoSueldoOrdinario) - cfdi.Nomina12SeparacionIndemnizacion(TotalIndemnizacion, ObjCFDITimbre.Nomina.Antiguedad, UltimoSueldoOrdinario, t1, t2 - t1) - - End If - 'deducciones al final - If ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0 Then - cfdi.Nomina12Deducciones(ObjCFDITimbre.Nomina.TotalDeduccionesOtras, Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos, 2)) - For Each deduc As CFDINominaDeducciones In ObjCFDITimbre.Nomina.Deducciones - cfdi.Nomina12Deduccion(deduc.TipoDeduccion, deduc.Clave, deduc.Concepto, Math.Round(deduc.Importe, 2)) - Next - End If - If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing Then - ' cfdi.agregarNominaOtrosPagosOtroPago12("002", "002", "Subsidio", "10.00"); - ' cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12("10.00"); - If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0 Then - For Each otpag As CFDINominaOtrosPagos In ObjCFDITimbre.Nomina.OtrosPagos - cfdi.Nomina12OtroPago(otpag.TipoOtroPago, otpag.Clave, otpag.Concepto, otpag.Importe) - If otpag.TipoOtroPago = "002" Then - cfdi.Nomina12SubsidioAlEmpleo(otpag.Subsidiocausado) - End If - - If otpag.TipoOtroPago = "004" AndAlso otpag.Importe > 0 Then - If otpag.ejercicio > 0 Then - cfdi.CompensacionSaldosAFavor(otpag.SaldoAFavor, otpag.ejercicio, otpag.RemanenteSalFav) 'otpag.SaldoAFavor - End If - End If - - Next - End If - End If - If ObjCFDITimbre.Nomina.Incapacidades IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Incapacidades.Count > 0 Then - For Each Incap As CFDINominaIncapacidades In ObjCFDITimbre.Nomina.Incapacidades - cfdi.Nomina12Incapacidad(Incap.DiasIncapacidad.ToEntero, Incap.TipoIncapacidad, Incap.Importe) - Next - End If - End If -#End Region - - sw.Stop() - swTiempo.AppendFormat("Armado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() -#Region "Genera XML" - Dim ArchivoGenerado As Boolean = False - Try - cfdi.GenerarXMLB64(llaveBase64, Clave) - ArchivoGenerado = True - Catch ex As Exception - Retorno = cfdi.MensajeError - If Retorno = "" OrElse IsNothing(Retorno) Then - Retorno = $"llaveBase64 ={llaveBase64}
Clave ={Clave}
{ex.ToString()}" - End If - MensajeErrorCFDI = Retorno - End Try - -#End Region - sw.Stop() - swTiempo.AppendFormat("Genera: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - -#Region "Timbra" - If ArchivoGenerado Then - - cfdi.TimbrarCfdi(UsuarioServicio, ClaveServicio, UrlServicio, TimbraProduccion) - - sw.Stop() - swTiempo.AppendFormat("Timbrado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - 'Verifica el error - If cfdi.CodigoError = 0 Then - - Dim FolioFiscal As String - - UUID = cfdi.UUID - FolioFiscal = cfdi.UUID 'obtenerAtributo(cfdi.XmlTimbrado, "TimbreFiscalDigital", "UUID") 'XmlDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText - - If FolioFiscal <> "" Then - - cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML) - - sw.Stop() - swTiempo.AppendFormat("Guardado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - - Select Case ObjCFDITimbre.Comprobante.TipoComprobante - Case "N" - - Using ObjNomina2 As New ClsNominas() - - If ObjNomina2.UpdateEstatusNomNominas(3, CvePACEspecial, FolioFiscal, ObjCFDITimbre.Comprobante.Fecha, ("01/01/2000").ToDate, ObjCFDITimbre.Nomina.CveNomina, 0, 0, 0, 0, 0, isFiniquito:=Ventas.Timbre.IStimbreFiniquito) Then - Retorno = "" - Else - Retorno = "Error" - End If - End Using - - Case "T" - - Dim objGrales As New ClsGenerales - If objGrales.UpdateTimbreTimbrado(Ventas.CveTimbre, FolioFiscal, ObjCFDITimbre.Comprobante.Fecha, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, UsuarioActual.Empresa.CvePAC, "3.3") Then - Retorno = "" - Else - Retorno = "Error" - End If - objGrales.Dispose() - - Using ObjInv As New ClsInventarios() - If ObjInv.UpdateMovimientoTimbrado(Ventas.Inv_CveMovimiento, 1, FolioFiscal, MinFecha) Then - Retorno = "" - Else - Retorno = "Error" - End If - End Using - - - Case Else - - 'Actualiza Estatus Factura - If Ventas.CveVenta > 0 Then - - Using ObjVentas As New ClsVentas() - - If ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", ObjCFDITimbre.Comprobante.Fecha, Ventas.CveVenta, CvePAC:=CvePACEspecial, RFCReceptor:=ObjCFDITimbre.Receptor.RFC, CFDIVersion:="3.3") Then - Retorno = "" - Else - Retorno = "Error" - End If - End Using - - 'Genero la addenda Ford - If Ventas.Cliente.Ford_GSDB <> "" Then - - Dim RutaCadena As String = String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML) 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio)) - - Dim FolioFactura As String = "" - If UsuarioActual.CveEmpresa = 8 Then FolioFactura = Ventas.Folio.ToString ' sogo, pordefault manda el folio de la factura - GeneraAddendaFord(RutaCadena, FolioFactura, Ventas.FordASN, Ventas.FordGSDB) - - End If - - End If - End Select - - - If Not IO.Directory.Exists($"{UsuarioActual.Empresa.Ruta}CBB\") Then IO.Directory.CreateDirectory($"{UsuarioActual.Empresa.Ruta}CBB\") - - Try - Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\{ObjCFDITimbre.Comprobante.SerieFolio}.jpg" - Dim bCBB As Byte() = cfdi.QrCode($"{LigaVerificacionSAT}?re={UsuarioActual.Empresa.RFC}&rr={ObjCFDITimbre.Receptor.RFC}&tt={String.Format("{0,12:F6}", ObjCFDITimbre.Comprobante.Total).Trim()}&id={FolioFiscal}&fe=ELleDg==") - File.WriteAllBytes(RutaCBB, bCBB) - bCBB = Nothing - Catch ex As Exception - OnError("Ocurrió un error al generar el QR", ex) - End Try - Retorno = "" - Else - Retorno = "No se pudo timbrar ante el SAT. UUID no generado." - End If - sw.Stop() - swTiempo.AppendFormat("Actualizado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - - Else - Retorno = cfdi.MensajeError - MensajeErrorCFDI = cfdi.MensajeError - If cfdi.Xml <> "" Then cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML) - - End If - End If - -#End Region - GuardaLogTimbrado(swTiempo.ToString, CvePACEspecial) - Return Retorno - End Function - - Public Function TimbrarFacturaPADEv33(Ventas As Modelos.Factura, UsuarioActual As Usuario, Optional CvePACEspecial As Integer = -1) As String - If CvePACEspecial = -1 Then - CvePACEspecial = UsuarioActual.Empresa.CvePAC - End If - Dim sw As New Diagnostics.Stopwatch - Dim swmili As Long = 0 - Dim swTiempo As New StringBuilder - sw.Start() - Dim Retorno As String = "" - Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre - ' 'Sucursal matriz de la empresa - Dim ArchivoLLave As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoKey) - Dim ArchivoCertificado As String = String.Format("{0}Certificados\{1}", UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.ArchivoCer) - - Dim UsuarioServicio As String = "rene.molina@adssistemas.mx" - Dim ClaveServicio As String = "Facturacion2021#" - - Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey - Dim EmisorRFC As String = UsuarioActual.Empresa.RFC - - Dim RutaArchivo As String = String.Format("{0}XML\{1}\", UsuarioActual.Empresa.Ruta, Ventas.TipoDocto) - Dim NombreArchivoXML As String = ObjCFDITimbre.Comprobante.SerieFolio - Dim SubTotal As Decimal = 0 - Dim TimbraProduccion As Boolean = True - If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo) - - - If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then - EmisorRFC = "ZUÑ920208KL4" - ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key" - ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer" - Clave = "12345678a" - TimbraProduccion = False - End If - -#Region "Valida" - If Not File.Exists(ArchivoCertificado) Then - Alert("El archivo de certificado no existe", TipoMensaje.MsgError) - Return "El archivo de certificado no existe" - End If - If Not File.Exists(ArchivoLLave) Then - Alert("El archivo de llave privada no existe", TipoMensaje.MsgError) - Return "El archivo de llave privada no existe" - End If - If UsuarioActual.Empresa.ContraseñaKey = "" Then - Alert("La clave no puede ser vacía", TipoMensaje.MsgError) - Return "La clave no puede ser vacía" - End If -#End Region - -#Region "Variables" - Dim llaveByte As Byte(), certByte As Byte() - Dim llaveBase64 As String, certBase64 As String - Dim cfdi As New GoFac.GoCfdi() - Dim complemento As String = "" - Dim complementoConcepto As String = "" - -#End Region - -#Region "Verifica" - Try - llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave) - llaveBase64 = Convert.ToBase64String(llaveByte) - Catch ex As Exception - Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError) - Return "Error al leer la llave privada" - End Try - - - Try - certByte = System.IO.File.ReadAllBytes(ArchivoCertificado) - certBase64 = Convert.ToBase64String(certByte) - Catch ex As Exception - Alert($"Error al leer el certificado: {ex.Message}", TipoMensaje.MsgError) - Return "Error al leer el certificado" - - End Try -#End Region - - sw.Stop() - swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - -#Region "Certificado" - cfdi.CertificadoArchivo(ArchivoCertificado) -#End Region - - sw.Stop() - swTiempo.AppendFormat("Certificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - -#Region "Comprobante" - - cfdi.Comprobante33( - ObjCFDITimbre.Comprobante.Serie, - ObjCFDITimbre.Comprobante.Folio, - ObjCFDITimbre.Comprobante.Fecha.ToString("yyyy-MM-ddTHH:mm:ss"), - ObjCFDITimbre.Comprobante.FormadePago, - ObjCFDITimbre.Comprobante.CondicionesdePago, - ObjCFDITimbre.Comprobante.SubTotal, - ObjCFDITimbre.Comprobante.Descuentos, - ObjCFDITimbre.Comprobante.Moneda, - ObjCFDITimbre.Comprobante.TipoCambio.ToString, - ObjCFDITimbre.Comprobante.Total, - ObjCFDITimbre.Comprobante.TipoComprobante, - ObjCFDITimbre.Comprobante.MetodoPago, - ObjCFDITimbre.Comprobante.LugarExpedicion, - ObjCFDITimbre.Comprobante.Confirmacion) - - If ObjCFDITimbre.CFDIRelacionados.TipoRelacion <> "" Then - cfdi.CfdiRelacionados(ObjCFDITimbre.CFDIRelacionados.TipoRelacion) - For Each uid As String In ObjCFDITimbre.CFDIRelacionados.UUID - cfdi.CfdiRelacionado(uid) - Next - End If -#Region "Emisor" - ' cfdi.agregarCfdiRelacionados() - cfdi.Emisor(EmisorRFC, UsuarioActual.Empresa.Empresa, UsuarioActual.Empresa.CodigoRegimenFiscal) - -#End Region - -#Region "Receptor" - - cfdi.Receptor(ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Receptor.Nombre, ObjCFDITimbre.Receptor.ResidenciaFiscal, ObjCFDITimbre.Receptor.NumeroRegistroTributario, ObjCFDITimbre.Receptor.UsoCFDI) - -#End Region - -#End Region - -#Region "Conceptos" - - 'Nodo conceptos, se agregan los PS - - If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then - For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos - cfdi.Concepto(concep.ClaveProdServ, concep.Noidentificacion, concep.Cantidad, concep.ClaveUnidad, concep.Unidad, concep.Descripcion, concep.ValorUnitario, concep.Importe, concep.Descuento) - For Each imp As CFDIConceptosImpuestos In concep.Impuestos - If imp.TrasladooRetencion = "T" Then - cfdi.ImpuestoConceptoTraslado(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe) - Else - cfdi.ImpuestoConceptoRetenido(imp.Base, imp.Impuesto, imp.TipoFactor, imp.TasaOCuota, imp.Importe) - End If - Next - If concep.CuentaPredial <> "" Then cfdi.CuentaPredial(concep.CuentaPredial) - If concep.NumeroPedimento <> "" Then cfdi.InformacionAduanera(concep.NumeroPedimento) - Next - End If - -#End Region - - If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E") Then - -#Region "Impuestos" - 'SI NO ES FACTURA EN 0 AGREGA LOS IMPUESTOS - If Ventas.Total <> 0 OrElse (ObjCFDITimbre.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.TotalImpuestosTrasladados > 0) Then - cfdi.Impuestos(ObjCFDITimbre.TotalImpuestosRetenidos, ObjCFDITimbre.TotalImpuestosTrasladados) - End If -#End Region - -#Region " Traslados y Retenciones" - - - If ObjCFDITimbre.Retenciones.Sum(Function(x) x.Importe) > 0 Then - ''se acumulan los importes - For Each Ret In ObjCFDITimbre.Retenciones - cfdi.Retencion(Ret.Impuesto, Ret.Importe) - Next - End If - - ''se acumulan los importes - For Each Tras In ObjCFDITimbre.Traslados - cfdi.Traslado(Tras.Impuesto, Tras.TipoFactor, Tras.TasaOCuota, Tras.Importe) - Next -#End Region - -#Region "Impuestos Locales" - - If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 OrElse ObjCFDITimbre.TrasladosLocales.Sum(Function(x) x.Importe) > 0 Then - - cfdi.ImpuestosLocales(ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe), ObjCFDITimbre.TrasladosLocales.Sum(Function(x) x.Importe)) - - For Each ret As CFDIRetencionesLocales In ObjCFDITimbre.RetencionesLocales - If ret.Importe > 0 Then - cfdi.RetencionLocal(ret.ImpuestoLocalRetenido, ret.TasaRetencion, ret.Importe) - End If - Next - - For Each ret As CFDITrasladosLocales In ObjCFDITimbre.TrasladosLocales - If ret.Importe > 0 Then - cfdi.TrasladoLocal(ret.ImpuestoLocalTraslado, ret.TasaTraslado, ret.Importe) - End If - Next - End If - - If Ventas.CveComplementoTimbrado > 0 Then - - Select Case Ventas.CveComplementoTimbrado - Case 5 'INE Proceso Ordinario Directivo Estatal" - cfdi.Ine11("Ordinario", "Directivo Estatal", "0") - - cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, "") - cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad) - Case 6 'INE Proceso Ordinario Ejecutivo Estatal" - cfdi.Ine11("Ordinario", "Ejecutivo Estatal", "0") - - cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, "") - cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad) - Case 7 'INE Proceso Ordinario Ejecutivo Nacional" - - cfdi.Ine11("Ordinario", "Ejecutivo Nacional", Ventas.ComplementoINE.INEIdContabilidad.ToString) - Case 8 'INE PreCampaña - cfdi.Ine11(Ventas.ComplementoINE.INETipoProceso, "", "0") - - cfdi.IneEntidad(Ventas.ComplementoINE.INEEntidad, Ventas.ComplementoINE.INETipoComite) - cfdi.IneContabilidad(Ventas.ComplementoINE.INEIdContabilidad) - End Select - - End If - - - -#End Region - - -#Region "Comercio Exterior" - - If Ventas.Cliente.AplicaComercioExterior And ObjCFDITimbre.Complementos.ComercioExterior11.AplicaComercioExteriorSubProyecto Then - If ObjCFDITimbre.Complementos.ComercioExterior11 IsNot Nothing Then - - 'DATOS GENERALES - cfdi.ComercioExterior11(ObjCFDITimbre.Complementos.ComercioExterior11.MotivoTraslado, - ObjCFDITimbre.Complementos.ComercioExterior11.TipoOperacion, - ObjCFDITimbre.Complementos.ComercioExterior11.ClavedePedimento, - ObjCFDITimbre.Complementos.ComercioExterior11.CertificadoOrigen, - ObjCFDITimbre.Complementos.ComercioExterior11.NumCertificadoOrigen, - ObjCFDITimbre.Complementos.ComercioExterior11.NumeroExportadorConfiable, - ObjCFDITimbre.Complementos.ComercioExterior11.Incoterm, - ObjCFDITimbre.Complementos.ComercioExterior11.Subdivision, - ObjCFDITimbre.Complementos.ComercioExterior11.Observaciones, - ObjCFDITimbre.Complementos.ComercioExterior11.TipoCambioUSD, - ObjCFDITimbre.Complementos.ComercioExterior11.TotalUSD) - 'EMISOR - cfdi.ComercioExterior11Emisor(If(EmisorRFC.Length >= 12, "", ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CURP)) - cfdi.ComercioExterior11Domicilio(ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Calle, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroExterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroInterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Colonia, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Localidad, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Referencia, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Municipio, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Estado, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Pais, - ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CP) - 'RECEPTOR - cfdi.ComercioExterior11Receptor(ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib) - cfdi.ComercioExterior11DomicilioReceptor(ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Calle, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroExterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroInterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Colonia, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Localidad, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Referencia, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Municipio, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Estado, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Pais, - ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.CP) - cfdi.ComercioExterior11Destinatario(ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumRegIdTrib, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Nombre, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Calle, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroExterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroInterior, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Colonia, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Localidad, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Referencia, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Municipio, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Estado, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Pais, - ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.CP) - 'MERCANCIAS - If ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias IsNot Nothing AndAlso ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias.Count > 0 Then - For Each concep As CFDIComercioExterior11Mercancias In ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias - cfdi.ComercioExterior11Mercancia(concep.NoIdentificacion, concep.FraccionArancelaria, concep.CantidadAduana, concep.UnidadAduana, concep.ValorUnitarioAduana, concep.ValorDolares) - If concep.DescripcionesEspecificas.Marca <> "" Then - cfdi.ComercioExterior11MercanciaDescripcionesEspeciales(concep.DescripcionesEspecificas.Marca, - concep.DescripcionesEspecificas.Modelo, - concep.DescripcionesEspecificas.SubModelo, - concep.DescripcionesEspecificas.NumeroSerie) - End If - Next - - End If - - - End If - End If - -#End Region - - - End If - -#Region "Complemento Pago" - - If ObjCFDITimbre.Comprobante.TipoComprobante = "P" Then - - cfdi.Pago(ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss"), - ObjCFDITimbre.ComplementoPagos.FormaDePagoP, - ObjCFDITimbre.ComplementoPagos.MonedaP, - ObjCFDITimbre.ComplementoPagos.TipoCambioP, - ObjCFDITimbre.ComplementoPagos.Monto, - ObjCFDITimbre.ComplementoPagos.NumOperacion, - ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaOrd, - ObjCFDITimbre.ComplementoPagos.NomBancoOrdExt, - ObjCFDITimbre.ComplementoPagos.CtaOrdenante, - ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaBen, - ObjCFDITimbre.ComplementoPagos.CtaBeneficiario, - ObjCFDITimbre.ComplementoPagos.TipoCadPago, - ObjCFDITimbre.ComplementoPagos.CertPago, - ObjCFDITimbre.ComplementoPagos.CadPago, - ObjCFDITimbre.ComplementoPagos.SelloPago) - - - If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then - - - For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados - cfdi.PagoDoctoRelacionado(doc.IdDocumento, - doc.Serie, - doc.Folio, - doc.MonedaDR, - doc.TipoCambioDR, - doc.MetodoDePagoDR, - doc.NumParcialidad, - doc.ImpSaldoAnt, - doc.ImpPagado, - doc.ImpSaldoInsoluto) - - Next - - 'Estos impuestos aplicarían para anticipos - If ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then - - cfdi.PagoImpuestos(ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos, ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados) - If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then - For Each Ret As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R") - cfdi.PagoRetencion(Ret.Impuesto, Ret.Importe) - Next - End If - If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then - For Each Tra As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T") - cfdi.PagoTraslado(Tra.Impuesto, Tra.TipoFactor, Tra.TasaOCuota, Tra.Importe) - Next - End If - - End If - - - - End If - - End If -#End Region - -#Region "Nomina12" - If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then - - 'cfdi.Esquema.AgregarEsquema("http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd") - cfdi.Nomina12(ObjCFDITimbre.Nomina.TipoNomina, ObjCFDITimbre.Nomina.FechaPago.ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.FechaInicio.ToDate().ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.FechaFin.ToDate().ToString("yyyy-MM-dd"), ObjCFDITimbre.Nomina.NumDiasPagados, If(ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0, ObjCFDITimbre.Nomina.TotalPercepciones, 0), If(ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0, ObjCFDITimbre.Nomina.TotalDeducciones, 0), If(ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0, ObjCFDITimbre.Nomina.TotalOtrosPagos, 0)) - - cfdi.Nomina12Emisor(ObjCFDITimbre.Emisor.CURP, If(ObjCFDITimbre.Nomina.Receptor.TipoContrato = "99", "", ObjCFDITimbre.Emisor.RegistroPatronal), ObjCFDITimbre.Emisor.RFC) - - If UsuarioActual.Empresa.UsaAC Then cfdi.Nomina12EntidadSNCF("IF", 90) - - -#Region "Receptor" - - cfdi.Nomina12Receptor(ObjCFDITimbre.Nomina.Receptor.CURP, - ObjCFDITimbre.Nomina.Receptor.NSS, - ObjCFDITimbre.Nomina.Receptor.FechaInicioContrato.ToDate().ToString("yyyy-MM-dd"), - ObjCFDITimbre.Nomina.Receptor.Antiguedad, - ObjCFDITimbre.Nomina.Receptor.TipoContrato, - ObjCFDITimbre.Nomina.Receptor.Sindicalizado, - ObjCFDITimbre.Nomina.Receptor.CodigoTipoJornada, - ObjCFDITimbre.Nomina.Receptor.CodigoRegimenContratacion, - ObjCFDITimbre.Nomina.Receptor.CodigoEmpleado, - ObjCFDITimbre.Nomina.Receptor.Departamento, - ObjCFDITimbre.Nomina.Receptor.Puesto, - ObjCFDITimbre.Nomina.Receptor.CodigoRiesgoPuesto, - If(ObjCFDITimbre.Nomina.TipoNomina = "E", "99", ObjCFDITimbre.Nomina.Receptor.TipoPeriodo), - ObjCFDITimbre.Nomina.Receptor.CodigoBanco, - ObjCFDITimbre.Nomina.Receptor.NumeroCuenta, - ObjCFDITimbre.Nomina.Receptor.SBC, - ObjCFDITimbre.Nomina.Receptor.SDI, - ObjCFDITimbre.Nomina.Receptor.CodigoEntidadFederativa) - 'cfdi.Nomina12SubContratacion("", "0") - 'cfdi.agregarNominaPercepcionesPercepcionAccionesOTitulos12("100", "200"); - 'cfdi.agregarNominaPercepcionesSeparacionIndemnizacion12("100", "10", "1000", "100", "50"); - 'cfdi.agregarNominaPercepcionesJubilacionPensionRetiro12("50", "100", "10", "100", "0"); - - - End If -#End Region - If ObjCFDITimbre.Nomina IsNot Nothing Then - - If ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0 Then - cfdi.Nomina12Percepciones(ObjCFDITimbre.Nomina.TotalSueldos, ObjCFDITimbre.Nomina.TotalIndemnizacion, ObjCFDITimbre.Nomina.TotalJubilacion, ObjCFDITimbre.Nomina.TotalPercepcionesGravado, ObjCFDITimbre.Nomina.TotalPercepcionesExento) - For Each percep As CFDINominaPercepciones In ObjCFDITimbre.Nomina.Percepciones - cfdi.Nomina12Percepcion(percep.TipoPercepcion, percep.Clave, percep.Concepto, Math.Round(percep.ImporteGravado, 2), Math.Round(percep.ImporteExento, 2)) - Next - End If - - 'deducciones al final - If ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0 Then - cfdi.Nomina12Deducciones(ObjCFDITimbre.Nomina.TotalDeduccionesOtras, Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos, 2)) - For Each deduc As CFDINominaDeducciones In ObjCFDITimbre.Nomina.Deducciones - cfdi.Nomina12Deduccion(deduc.TipoDeduccion, deduc.Clave, deduc.Concepto, Math.Round(deduc.Importe, 2)) - Next - End If - - If ObjCFDITimbre.Nomina.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then - For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras - cfdi.Nomina12HorasExtra(HoraExtra.Dias.ToEntero, HoraExtra.TipoHoras, HoraExtra.HorasExtra, HoraExtra.ImportePagado) - Next - End If - - If ObjCFDITimbre.Nomina.Incapacidades IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Incapacidades.Count > 0 Then - For Each Incap As CFDINominaIncapacidades In ObjCFDITimbre.Nomina.Incapacidades - cfdi.Nomina12Incapacidad(Incap.DiasIncapacidad.ToEntero, Incap.TipoIncapacidad, Incap.Importe) - Next - End If - - If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing Then - ' cfdi.agregarNominaOtrosPagosOtroPago12("002", "002", "Subsidio", "10.00"); - ' cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12("10.00"); - If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0 Then - For Each otpag As CFDINominaOtrosPagos In ObjCFDITimbre.Nomina.OtrosPagos - cfdi.Nomina12OtroPago(otpag.TipoOtroPago, otpag.Clave, otpag.Concepto, otpag.Importe) - If otpag.TipoOtroPago = "002" Then - cfdi.Nomina12SubsidioAlEmpleo(otpag.Subsidiocausado) - End If - - Next - End If - End If - End If -#End Region - - sw.Stop() - swTiempo.AppendFormat("Armado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() -#Region "Genera XML" - Dim ArchivoGenerado As Boolean = False - Try - cfdi.GenerarXMLB64(llaveBase64, Clave) - If cfdi.Xml <> "" Then ArchivoGenerado = True - Catch ex As Exception - Retorno = cfdi.MensajeError - If Retorno = "" OrElse IsNothing(Retorno) Then - Retorno = $"llaveBase64 ={llaveBase64}
Clave ={Clave}
{ex.ToString()}" - End If - MensajeErrorCFDI = Retorno - End Try - -#End Region - sw.Stop() - swTiempo.AppendFormat("Genera: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - - Dim msgErrorGeneracion As String = If(String.IsNullOrEmpty(cfdi.MensajeError), "", cfdi.MensajeError) - -#Region "Timbra" - If ArchivoGenerado Then - - Dim Respuesta As String = "" - - If String.IsNullOrEmpty(msgErrorGeneracion) Then - Dim TokenAuth As String = $"{UsuarioServicio}:{ClaveServicio}".ToBase64Encode() - - Dim payload As New JObject( - New JProperty("contrato", "72330711-cac6-4106-8051-cbcda1aef495"), - New JProperty("certBase64", certBase64), - New JProperty("keyBase64", llaveBase64), - New JProperty("keyPass", Clave), - New JProperty("xmlBase64", cfdi.Xml.ToBase64Encode()), - New JProperty("prueba", (Not TimbraProduccion).ToString().ToLower), - New JProperty("opciones", New String(0) {""}) - ) - Respuesta = EnviarInformacionPADE("https://timbrado.pade.mx/servicio/rest/timbrado/timbrarConCSD", payload.ToString(), TokenAuth) - End If - - ' Aumentamos el timeout de la operación - If Not String.IsNullOrEmpty(Respuesta) Then - - Dim result As PADEServicioTimbradoResp = Nothing - Dim serializer As XmlSerializer = New XmlSerializer(GetType(PADEServicioTimbradoResp)) - - Try - Using reader As TextReader = New StringReader(Respuesta) - result = CType(serializer.Deserialize(reader), PADEServicioTimbradoResp) - End Using - Catch ex As Exception - OnError("Ocurrió un error al obtener los resultados", ex) - End Try - - sw.Stop() - swTiempo.AppendFormat("Timbrado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - - If result IsNot Nothing Then - If result.timbradoOk Then - Dim FolioFiscal As String = result.UUID - 'GUARDA EL XML RETORNADO POR EL PAC - cfdi.EscribirXML(result.xmlBase64.ToBase64Decode(), RutaArchivo, NombreArchivoXML) - - sw.Stop() - swTiempo.AppendFormat("Guardado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - - Me.UUID = FolioFiscal - If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then - - 'Actualiza Estatus Factura - If Ventas.CveVenta > 0 Then - - Using ObjVentas As New ClsVentas() - - If ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", ObjCFDITimbre.Comprobante.Fecha, Ventas.CveVenta, CvePAC:=CvePACEspecial, RFCReceptor:=ObjCFDITimbre.Receptor.RFC, CFDIVersion:="3.3") Then - Retorno = "" - Else - Retorno = "Error" - End If - End Using - - 'Genero la addenda Ford - If Ventas.Cliente.Ford_GSDB <> "" Then - - Dim RutaCadena As String = String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML) 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio)) - - Dim FolioFactura As String = "" - If UsuarioActual.CveEmpresa = 8 Then FolioFactura = Ventas.Folio.ToString ' sogo, pordefault manda el folio de la factura - GeneraAddendaFord(RutaCadena, FolioFactura, Ventas.FordASN, Ventas.FordGSDB) - - End If - - End If - - If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then - Using ObjNomina2 As New ClsNominas() - - If ObjNomina2.UpdateEstatusNomNominas(3, CvePACEspecial, FolioFiscal, ObjCFDITimbre.Comprobante.Fecha, ObjCFDITimbre.Comprobante.Fecha, ObjCFDITimbre.Nomina.CveNomina, 0, 0, 0, 0, 0) Then - Retorno = "" - Else - Retorno = "Error" - End If - End Using - End If - - If ObjCFDITimbre.Comprobante.TipoComprobante = "T" Then - Dim objGrales As New ClsGenerales - If objGrales.UpdateTimbreTimbrado(Ventas.CveTimbre, FolioFiscal, ObjCFDITimbre.Comprobante.Fecha, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, UsuarioActual.Empresa.CvePAC, "3.3") Then - Retorno = "" - Else - Retorno = "Error" - End If - objGrales.Dispose() - - Using ObjInv As New ClsInventarios() - If ObjInv.UpdateMovimientoTimbrado(Ventas.Inv_CveMovimiento, 1, FolioFiscal, MinFecha) Then - Retorno = "" - Else - Retorno = "Error" - End If - End Using - End If - End If - - If Not IO.Directory.Exists($"{UsuarioActual.Empresa.Ruta}CBB\") Then IO.Directory.CreateDirectory($"{UsuarioActual.Empresa.Ruta}CBB\") - - Try - Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\{ObjCFDITimbre.Comprobante.SerieFolio}.jpg" - 'Dim CBB As New ClbNegBICFDv3_2.ClsNegCBBGenerar() - 'CBB.GenerarCBB(UsuarioActual.Empresa.RFC, ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Comprobante.Total, FolioFiscal, RutaCBB) - 'CBB = Nothing - - Dim qrCode As New GoFac.QrCode() - 'String cadenaqrCode = qrCode.GenerarCadenaQrCode(txtXml.Text) - - Dim bCBB As Byte() = qrCode.GenerarQrCode($"{LigaVerificacionSAT}?re={UsuarioActual.Empresa.RFC}&rr={ObjCFDITimbre.Receptor.RFC}&tt={String.Format("{0,12:F6}", ObjCFDITimbre.Comprobante.Total).Trim()}&id={FolioFiscal}&fe=ELleDg==") - File.WriteAllBytes(RutaCBB, bCBB) - bCBB = Nothing - - Catch ex As Exception - OnError("Ocurrió un error al generar el QR", ex) - End Try - Retorno = "" - sw.Stop() - swTiempo.AppendFormat("Actualizado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - Else - If String.IsNullOrEmpty(result.mensaje) Then - Retorno = Respuesta + msgErrorGeneracion - MensajeErrorCFDI = "" - Else - Retorno = result.mensaje - MensajeErrorCFDI = result.codigo - If cfdi.Xml <> "" Then cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML) - End If - End If - Else - If String.IsNullOrEmpty(Respuesta) Then - Retorno = "Ocurrió un error al obtener la respuesta" - MensajeErrorCFDI = "" - Else - Retorno = Respuesta - MensajeErrorCFDI = "" - End If - End If - Else - If String.IsNullOrEmpty(msgErrorGeneracion) Then - Retorno = "Ocurrió un error al obtener la respuesta" - MensajeErrorCFDI = "" - Else - Retorno = msgErrorGeneracion - MensajeErrorCFDI = "" - End If - End If - Else - If String.IsNullOrEmpty(msgErrorGeneracion) Then - Retorno = "Ocurrió un error al generar el xml" - MensajeErrorCFDI = "" - Else - Retorno = msgErrorGeneracion - MensajeErrorCFDI = "" - End If - End If - -#End Region - GuardaLogTimbrado(swTiempo.ToString, CvePACEspecial) - Return Retorno - End Function Private Function EnviarInformacionPADE(url As String, payload As String, tokenAuth As String) As String Dim Retorno As String = "" @@ -3873,11 +1552,13 @@ Public Class Timbrado For Each Tras In ObjCFDITimbre.Traslados comprobante.Impuestos.Traslados(y) = New Profact.TimbraCFDI40.ComprobanteImpuestosTraslado() - comprobante.Impuestos.Traslados(y).Base = Tras.Base + comprobante.Impuestos.Traslados(y).Base = Tras.Base.RoundSQL(NumDecimalesImporte) comprobante.Impuestos.Traslados(y).Impuesto = Tras.Impuesto comprobante.Impuestos.Traslados(y).TipoFactor = Tras.TipoFactor comprobante.Impuestos.Traslados(y).TasaOCuota = Tras.TasaOCuota.FormatoNumero(6) - comprobante.Impuestos.Traslados(y).Importe = Tras.Importe.RoundSQL(6) + comprobante.Impuestos.Traslados(y).TasaOCuotaSpecified = True + comprobante.Impuestos.Traslados(y).Importe = Tras.Importe.RoundSQL(NumDecimalesImporte) + comprobante.Impuestos.Traslados(y).ImporteSpecified = True y += 1 Next @@ -5876,1292 +3557,7 @@ Public Class Timbrado ArchivoW.Close() ArchivoW.Dispose() End Sub - Public Function TimbrarFacturaProFactv33(Ventas As Modelos.Factura, UsuarioActual As Usuario) As String - Dim sw As New Diagnostics.Stopwatch - Dim swTiempo As New StringBuilder - Dim swmili As Long = 0 - sw.Start() - Dim Retorno As String = "" - Dim ObjCFDITimbre As CFDITimbre = Ventas.Timbre - ' 'Sucursal matriz de la empresa - Dim ArchivoLLave As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoKey}" - Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoCer}" - Dim UsuarioServicio As String = UsuarioActual.Empresa.RFC - Dim ClaveServicio As String = UsuarioActual.Empresa.RFC.ToLower - Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey - Dim EmisorRFC As String = UsuarioActual.Empresa.RFC - Dim UrlServicio As String = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" ' Produccion - Dim RutaArchivo As String = $"{UsuarioActual.Empresa.Ruta}XML\{Ventas.TipoDocto}\" - Dim NombreArchivoXML As String = $"{ObjCFDITimbre.Comprobante.SerieFolio}" - Dim SubTotal As Decimal = 0 - Dim AmbienteProductivo As Boolean = True - Dim NumDecimalesImporte As Integer = 2 - If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo) - - If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then - AmbienteProductivo = False - UsuarioServicio = "fgomez" - ClaveServicio = "12121212" - Clave = "12345678a" - - 'EmisorRFC = "AAA010101AAA" - 'ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.key" - 'ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_AAA010101AAA.cer" - - EmisorRFC = "ZUÑ920208KL4" - ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.key" - ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\CSD01_ZUÑ920208KL4.cer" - - UrlServicio = "https://pruebas.timbracfdi33.mx/Timbrado.asmx" - End If - - -#Region "Valida" - If Not File.Exists(ArchivoCertificado) Then - Alert("El archivo de certificado no existe", TipoMensaje.MsgError) - Return "" - End If - If Not File.Exists(ArchivoLLave) Then - Alert("El archivo de llave privada no existe", TipoMensaje.MsgError) - Return "" - End If - If UsuarioActual.Empresa.ContraseñaKey = "" Then - Alert("La clave no puede ser vacía", TipoMensaje.MsgError) - Return "" - End If -#End Region - -#Region "Variables" - Dim llaveByte As Byte(), certByte As Byte() - Dim llaveBase64 As String, certBase64 As String - - Dim complemento As String = "" - Dim complementoConcepto As String = "" - '//Inicializamos el conector el parámetro indica el ambiente en el que se utilizará - '//Fasle = Ambiente de pruebas - '//True = Ambiente de producción - Dim cfdi As New Profact.TimbraCFDI33.Conector(AmbienteProductivo) - Dim comprobante As New Profact.TimbraCFDI33.Comprobante() - - If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 Then - cfdi.EstableceCredenciales("mvpNUXmQfK8=") - Else - cfdi.EstableceCredenciales($"vSGxMFWnNRy/nDoowxqrqw==|Sia123654") - End If - -#End Region - -#Region "Verifica" - Try - llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave) - llaveBase64 = Convert.ToBase64String(llaveByte) - Catch ex As Exception - Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError) - Return "" - End Try - - - Try - certByte = System.IO.File.ReadAllBytes(ArchivoCertificado) - certBase64 = Convert.ToBase64String(certByte) - Catch ex As Exception - Alert($"Error al leer el certificado: {ex.Message}", TipoMensaje.MsgError) - Return "" - - End Try - sw.Stop() - swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() -#End Region - - -#Region "Comprobante" - - - If ObjCFDITimbre.Comprobante.Serie <> "" Then comprobante.Serie = ObjCFDITimbre.Comprobante.Serie - comprobante.Folio = ObjCFDITimbre.Comprobante.Folio - comprobante.Version = "3.3" - comprobante.Fecha = ObjCFDITimbre.Comprobante.Fecha - comprobante.FormaPago = ObjCFDITimbre.Comprobante.FormadePago - If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E", "N") Then comprobante.CondicionesDePago = ObjCFDITimbre.Comprobante.CondicionesdePago - - comprobante.SubTotal = ObjCFDITimbre.Comprobante.SubTotal.RoundSQL(NumDecimalesImporte) - If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E", "N") Then - If ObjCFDITimbre.Comprobante.Descuentos > 0 Then - comprobante.DescuentoSpecified = True - comprobante.Descuento = ObjCFDITimbre.Comprobante.Descuentos.RoundSQL(NumDecimalesImporte) - End If - End If - comprobante.Moneda = ObjCFDITimbre.Comprobante.Moneda - comprobante.TipoCambio = ObjCFDITimbre.Comprobante.TipoCambio.ToDecimal - comprobante.TipoCambioSpecified = If(ObjCFDITimbre.Comprobante.Moneda <> "XXX", True, False) - comprobante.Total = ObjCFDITimbre.Comprobante.Total.RoundSQL(NumDecimalesImporte) - comprobante.TipoDeComprobante = ObjCFDITimbre.Comprobante.TipoComprobante - comprobante.FormaPagoSpecified = If(ObjCFDITimbre.Comprobante.FormadePago <> "", True, False) - comprobante.MetodoPago = ObjCFDITimbre.Comprobante.MetodoPago - comprobante.MetodoPagoSpecified = If(ObjCFDITimbre.Comprobante.MetodoPago <> "", True, False) - comprobante.LugarExpedicion = ObjCFDITimbre.Comprobante.LugarExpedicion - - If ObjCFDITimbre.CFDIRelacionados.TipoRelacion <> "" Then - Dim CfdiRelacionados As New Profact.TimbraCFDI33.ComprobanteCfdiRelacionados - CfdiRelacionados.CfdiRelacionado = New Profact.TimbraCFDI33.ComprobanteCfdiRelacionadosCfdiRelacionado(ObjCFDITimbre.CFDIRelacionados.UUID.Count - 1) {} - Dim i As Integer = 0 - For Each uid As String In ObjCFDITimbre.CFDIRelacionados.UUID - CfdiRelacionados.CfdiRelacionado(i) = New Profact.TimbraCFDI33.ComprobanteCfdiRelacionadosCfdiRelacionado With {.UUID = uid} - i += 1 - Next - CfdiRelacionados.TipoRelacion = ObjCFDITimbre.CFDIRelacionados.TipoRelacion - comprobante.CfdiRelacionados = CfdiRelacionados - End If - -#Region "Emisor" - comprobante.Emisor = New Profact.TimbraCFDI33.ComprobanteEmisor() - comprobante.Emisor.Rfc = EmisorRFC - comprobante.Emisor.Nombre = UsuarioActual.Empresa.Empresa - comprobante.Emisor.RegimenFiscal = UsuarioActual.Empresa.CodigoRegimenFiscal - -#End Region - -#Region "Receptor" - comprobante.Receptor = New Profact.TimbraCFDI33.ComprobanteReceptor() - comprobante.Receptor.Rfc = ObjCFDITimbre.Receptor.RFC - comprobante.Receptor.Nombre = ObjCFDITimbre.Receptor.Nombre - comprobante.Receptor.UsoCFDI = ObjCFDITimbre.Receptor.UsoCFDI - -#End Region - -#End Region - -#Region "Conceptos" - - 'Nodo conceptos, se agregan los PS - comprobante.Conceptos = New Profact.TimbraCFDI33.ComprobanteConcepto(ObjCFDITimbre.Conceptos.Count - 1) {} - - If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then - Dim i As Integer = 0 - Dim j As Integer = 0 - Dim k As Integer = 0 - For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos - comprobante.Conceptos(i) = New Profact.TimbraCFDI33.ComprobanteConcepto() - comprobante.Conceptos(i).Cantidad = concep.Cantidad - - If concep.Unidad <> "" Then comprobante.Conceptos(i).Unidad = concep.Unidad - comprobante.Conceptos(i).ClaveUnidad = concep.ClaveUnidad - comprobante.Conceptos(i).Descripcion = concep.Descripcion - comprobante.Conceptos(i).ValorUnitario = concep.ValorUnitario - comprobante.Conceptos(i).Importe = concep.Importe.RoundSQL(NumDecimalesImporte) - comprobante.Conceptos(i).ClaveProdServ = concep.ClaveProdServ - - If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then - If concep.Descuento > 0 Then - comprobante.Conceptos(i).Descuento = concep.Descuento - comprobante.Conceptos(i).DescuentoSpecified = True - End If - End If - - If concep.Noidentificacion <> "" Then comprobante.Conceptos(i).NoIdentificacion = concep.Noidentificacion - If concep.CuentaPredial <> "" Then comprobante.Conceptos(i).CuentaPredial = New Profact.TimbraCFDI33.ComprobanteConceptoCuentaPredial() With {.Numero = concep.CuentaPredial} - If concep.NumeroPedimento <> "" Then - comprobante.Conceptos(i).InformacionAduanera = New Profact.TimbraCFDI33.ComprobanteConceptoInformacionAduanera(1) {} 'solo un codigo por el momento - comprobante.Conceptos(i).InformacionAduanera(0) = New Profact.TimbraCFDI33.ComprobanteConceptoInformacionAduanera() With {.NumeroPedimento = concep.NumeroPedimento} - End If - - j = 0 - k = 0 - 'SI NO ES FACTURA EN 0 AGREGA LOS IMPUESTOS - If Not ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("P", "N") AndAlso (Ventas.Total <> 0 OrElse (ObjCFDITimbre.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.TotalImpuestosTrasladados > 0)) Then - - If concep.Impuestos.Count > 0 Then - - comprobante.Conceptos(i).Impuestos = New Profact.TimbraCFDI33.ComprobanteConceptoImpuestos() - comprobante.Conceptos(i).Impuestos.Traslados = New Profact.TimbraCFDI33.ComprobanteConceptoImpuestosTraslado(concep.Impuestos.FindAll(Function(p As CFDIConceptosImpuestos) p.TrasladooRetencion = "T").Count - 1) {} - If concep.Impuestos.FindAll(Function(p As CFDIConceptosImpuestos) p.TrasladooRetencion <> "T").Count > 0 Then - comprobante.Conceptos(i).Impuestos.Retenciones = New Profact.TimbraCFDI33.ComprobanteConceptoImpuestosRetencion(concep.Impuestos.FindAll(Function(p As CFDIConceptosImpuestos) p.TrasladooRetencion <> "T").Count - 1) {} - End If - - For Each imp As CFDIConceptosImpuestos In concep.Impuestos - If imp.TrasladooRetencion = "T" Then - comprobante.Conceptos(i).Impuestos.Traslados(j) = New Profact.TimbraCFDI33.ComprobanteConceptoImpuestosTraslado() - comprobante.Conceptos(i).Impuestos.Traslados(j).Base = imp.Base - comprobante.Conceptos(i).Impuestos.Traslados(j).Impuesto = imp.Impuesto - comprobante.Conceptos(i).Impuestos.Traslados(j).TipoFactor = imp.TipoFactor - comprobante.Conceptos(i).Impuestos.Traslados(j).Importe = imp.Importe.RoundSQL(NumDecimalesImporte) - comprobante.Conceptos(i).Impuestos.Traslados(j).ImporteSpecified = True - comprobante.Conceptos(i).Impuestos.Traslados(j).TasaOCuota = imp.TasaOCuota.FormatoNumero(6) - comprobante.Conceptos(i).Impuestos.Traslados(j).TasaOCuotaSpecified = True - j += 1 - Else - comprobante.Conceptos(i).Impuestos.Retenciones(k) = New Profact.TimbraCFDI33.ComprobanteConceptoImpuestosRetencion() - comprobante.Conceptos(i).Impuestos.Retenciones(k).Base = imp.Base - comprobante.Conceptos(i).Impuestos.Retenciones(k).Impuesto = imp.Impuesto - comprobante.Conceptos(i).Impuestos.Retenciones(k).TipoFactor = imp.TipoFactor - comprobante.Conceptos(i).Impuestos.Retenciones(k).Importe = imp.Importe.RoundSQL(NumDecimalesImporte) - comprobante.Conceptos(i).Impuestos.Retenciones(k).TasaOCuota = imp.TasaOCuota.ToString.ToDecimal - k += 1 - End If - Next - - End If - - End If - i += 1 - Next - End If - -#End Region - - - Dim LXmlComplementos As New List(Of XmlElement)() - Dim TieneComplemento As Boolean = False - - If ObjCFDITimbre.Comprobante.TipoComprobante.Contiene("I", "E") Then - -#Region " Impuestos" - 'SI NO ES FACTURA EN 0 AGREGA LOS IMPUESTOS - If Ventas.Total <> 0 OrElse (ObjCFDITimbre.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.TotalImpuestosTrasladados > 0) Then - comprobante.Impuestos = New Profact.TimbraCFDI33.ComprobanteImpuestos() - comprobante.Impuestos.Traslados = New Profact.TimbraCFDI33.ComprobanteImpuestosTraslado(ObjCFDITimbre.Traslados.Count - 1) {} - - Dim y As Integer = 0 - - For Each Tras In ObjCFDITimbre.Traslados - comprobante.Impuestos.Traslados(y) = New Profact.TimbraCFDI33.ComprobanteImpuestosTraslado() - comprobante.Impuestos.Traslados(y).Impuesto = Tras.Impuesto - comprobante.Impuestos.Traslados(y).TipoFactor = Tras.TipoFactor - comprobante.Impuestos.Traslados(y).TasaOCuota = Tras.TasaOCuota.FormatoNumero(6) - comprobante.Impuestos.Traslados(y).Importe = Tras.Importe - y += 1 - Next - - comprobante.Impuestos.TotalImpuestosTrasladados = ObjCFDITimbre.TotalImpuestosTrasladados - comprobante.Impuestos.TotalImpuestosTrasladadosSpecified = True - - If ObjCFDITimbre.TotalImpuestosRetenidos > 0 Then - comprobante.Impuestos.Retenciones = New Profact.TimbraCFDI33.ComprobanteImpuestosRetencion(ObjCFDITimbre.Retenciones.Count - 1) {} - - Dim w As Integer = 0 - - For Each Ret In ObjCFDITimbre.Retenciones - comprobante.Impuestos.Retenciones(w) = New Profact.TimbraCFDI33.ComprobanteImpuestosRetencion() - comprobante.Impuestos.Retenciones(w).Impuesto = Ret.Impuesto - comprobante.Impuestos.Retenciones(w).Importe = Ret.Importe - w += 1 - Next - - comprobante.Impuestos.TotalImpuestosRetenidos = ObjCFDITimbre.TotalImpuestosRetenidos - comprobante.Impuestos.TotalImpuestosRetenidosSpecified = True - End If - End If - -#End Region - - -#Region " Impuestos Locales" - - - If ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe) > 0 Then - Dim Imp = New Profact.TimbraCFDI.Complementos.ImpuestoLocal.ImpuestosLocales() - Imp.version = "1.0" - Imp.TotaldeRetenciones = ObjCFDITimbre.RetencionesLocales.Sum(Function(x) x.Importe).FormatoNumero().ToDecimal - Imp.TotaldeTraslados = 0 - Imp.RetencionesLocales = New Profact.TimbraCFDI.Complementos.ImpuestoLocal.ImpuestosLocalesRetencionesLocales(ObjCFDITimbre.RetencionesLocales.Count - 1) {} - Dim i As Integer = 0 - For Each ret As CFDIRetencionesLocales In ObjCFDITimbre.RetencionesLocales - If ret.Importe > 0 Then - Imp.RetencionesLocales(i) = New Profact.TimbraCFDI.Complementos.ImpuestoLocal.ImpuestosLocalesRetencionesLocales() - Imp.RetencionesLocales(i).ImpLocRetenido = ret.ImpuestoLocalRetenido - Imp.RetencionesLocales(i).TasadeRetencion = ret.TasaRetencion.FormatoNumero().ToDecimal - Imp.RetencionesLocales(i).Importe = ret.Importe.FormatoNumero().ToDecimal - i += 1 - End If - Next - - Dim nsImpLocal As New System.Xml.Serialization.XmlSerializerNamespaces() - nsImpLocal.Add("implocal", "http://www.sat.gob.mx/implocal") - Dim xmlImpLocal As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(Imp, GetType(Profact.TimbraCFDI.Complementos.ImpuestoLocal.ImpuestosLocales), nsImpLocal) - Dim docImpLocal As New XmlDocument() - docImpLocal.LoadXml(xmlImpLocal) - LXmlComplementos.Add(docImpLocal.DocumentElement) - comprobante.ImpLocalSpecified = True - TieneComplemento = True - End If - - - - -#End Region -#Region " Comercio Exterior" - - If Ventas.Cliente.AplicaComercioExterior And ObjCFDITimbre.Complementos.ComercioExterior11.AplicaComercioExteriorSubProyecto Then - If ObjCFDITimbre.Complementos.ComercioExterior11 IsNot Nothing Then - - 'DATOS GENERALES - Dim ComExt = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExterior() - ComExt.Version = "1.1" - ComExt.MotivoTrasladoSpecified = True - ComExt.MotivoTraslado = ObjCFDITimbre.Complementos.ComercioExterior11.MotivoTraslado - ComExt.TipoOperacion = ObjCFDITimbre.Complementos.ComercioExterior11.TipoOperacion - ComExt.ClaveDePedimentoSpecified = True - ComExt.ClaveDePedimento = ObjCFDITimbre.Complementos.ComercioExterior11.ClavedePedimento - ComExt.CertificadoOrigenSpecified = True - ComExt.CertificadoOrigen = ObjCFDITimbre.Complementos.ComercioExterior11.CertificadoOrigen.ToEntero - If ObjCFDITimbre.Complementos.ComercioExterior11.NumCertificadoOrigen <> "" Then - ComExt.NumCertificadoOrigen = ObjCFDITimbre.Complementos.ComercioExterior11.NumCertificadoOrigen - End If - If ObjCFDITimbre.Complementos.ComercioExterior11.NumeroExportadorConfiable <> "" Then - ComExt.NumeroExportadorConfiable = ObjCFDITimbre.Complementos.ComercioExterior11.NumeroExportadorConfiable - End If - ComExt.IncotermSpecified = True - ComExt.Incoterm = ObjCFDITimbre.Complementos.ComercioExterior11.Incoterm - ComExt.SubdivisionSpecified = True - ComExt.Subdivision = ObjCFDITimbre.Complementos.ComercioExterior11.Subdivision.ToEntero - If ObjCFDITimbre.Complementos.ComercioExterior11.Observaciones <> "" Then - ComExt.Observaciones = ObjCFDITimbre.Complementos.ComercioExterior11.Observaciones - End If - ComExt.TipoCambioUSDSpecified = True - ComExt.TipoCambioUSD = ObjCFDITimbre.Complementos.ComercioExterior11.TipoCambioUSD - ComExt.TotalUSDSpecified = True - ComExt.TotalUSD = ObjCFDITimbre.Complementos.ComercioExterior11.TotalUSD - - 'EMISOR - ComExt.Emisor = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorEmisor() - If EmisorRFC.Length < 12 Then - ComExt.Emisor.Curp = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CURP - End If - ComExt.Emisor.Domicilio = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorEmisorDomicilio - ComExt.Emisor.Domicilio.Calle = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Calle - ComExt.Emisor.Domicilio.CodigoPostal = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.CP - ComExt.Emisor.Domicilio.ColoniaSpecified = True - ComExt.Emisor.Domicilio.Colonia = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Colonia - ComExt.Emisor.Domicilio.Estado = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Estado - If ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Localidad <> "" Then - ComExt.Emisor.Domicilio.LocalidadSpecified = False - ComExt.Emisor.Domicilio.Localidad = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Localidad - End If - ComExt.Emisor.Domicilio.MunicipioSpecified = True - ComExt.Emisor.Domicilio.Municipio = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Municipio - ComExt.Emisor.Domicilio.NumeroExterior = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroExterior - ComExt.Emisor.Domicilio.NumeroInterior = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.NumeroInterior - ComExt.Emisor.Domicilio.Pais = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Pais - If ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Referencia <> "" Then - ComExt.Emisor.Domicilio.Referencia = ObjCFDITimbre.Complementos.ComercioExterior11.Emisor.Referencia - End If - - 'RECEPTOR - ComExt.Receptor = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorReceptor - If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib <> "" Then - ComExt.Receptor.NumRegIdTrib = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumRegIdTrib - End If - ComExt.Receptor.Domicilio = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorReceptorDomicilio - ComExt.Receptor.Domicilio.Calle = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Calle - ComExt.Receptor.Domicilio.CodigoPostal = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.CP - If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Colonia <> "" Then - ComExt.Receptor.Domicilio.Colonia = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Colonia - End If - ComExt.Receptor.Domicilio.Estado = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Estado - If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Localidad <> "" Then - ComExt.Receptor.Domicilio.Localidad = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Localidad - End If - If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Municipio <> "" Then - ComExt.Receptor.Domicilio.Municipio = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Municipio - End If - If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroExterior <> "" Then - ComExt.Receptor.Domicilio.NumeroExterior = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroExterior - End If - If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroInterior <> "" Then - ComExt.Receptor.Domicilio.NumeroInterior = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.NumeroInterior - End If - ComExt.Receptor.Domicilio.Pais = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Pais - If ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Referencia <> "" Then - ComExt.Receptor.Domicilio.Referencia = ObjCFDITimbre.Complementos.ComercioExterior11.Receptor.Referencia - End If - - 'DESTINATARIO - ComExt.Destinatario = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorDestinatario(0) {} - ComExt.Destinatario(0) = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorDestinatario() - ComExt.Destinatario(0).Nombre = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Nombre - If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumRegIdTrib <> "" Then - ComExt.Destinatario(0).NumRegIdTrib = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumRegIdTrib - End If - ComExt.Destinatario(0).Domicilio = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorDestinatarioDomicilio(0) {} - ComExt.Destinatario(0).Domicilio(0) = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorDestinatarioDomicilio() - ComExt.Destinatario(0).Domicilio(0).Calle = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Calle - ComExt.Destinatario(0).Domicilio(0).CodigoPostal = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.CP - If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Colonia <> "" Then - ComExt.Destinatario(0).Domicilio(0).Colonia = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Colonia - End If - ComExt.Destinatario(0).Domicilio(0).Estado = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Estado - If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Localidad <> "" Then - ComExt.Destinatario(0).Domicilio(0).Localidad = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Localidad - End If - If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Municipio <> "" Then - ComExt.Destinatario(0).Domicilio(0).Municipio = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Municipio - End If - If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroExterior <> "" Then - ComExt.Destinatario(0).Domicilio(0).NumeroExterior = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroExterior - End If - If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroInterior <> "" Then - ComExt.Destinatario(0).Domicilio(0).NumeroInterior = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.NumeroInterior - End If - ComExt.Destinatario(0).Domicilio(0).Pais = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Pais - If ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Referencia <> "" Then - ComExt.Destinatario(0).Domicilio(0).Referencia = ObjCFDITimbre.Complementos.ComercioExterior11.Destinatario.Referencia - End If - - 'MERCANCIAS - If ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias IsNot Nothing AndAlso ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias.Count > 0 Then - ComExt.Mercancias = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorMercancia(ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias.Count - 1) {} - Dim i As Integer - For Each concep As CFDIComercioExterior11Mercancias In ObjCFDITimbre.Complementos.ComercioExterior11.Mercancias - ComExt.Mercancias(i) = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorMercancia() - ComExt.Mercancias(i).NoIdentificacion = concep.NoIdentificacion - ComExt.Mercancias(i).FraccionArancelariaSpecified = True - ComExt.Mercancias(i).FraccionArancelaria = concep.FraccionArancelaria - ComExt.Mercancias(i).CantidadAduanaSpecified = True - ComExt.Mercancias(i).CantidadAduana = concep.CantidadAduana - ComExt.Mercancias(i).UnidadAduanaSpecified = True - ComExt.Mercancias(i).UnidadAduana = concep.UnidadAduana - ComExt.Mercancias(i).ValorUnitarioAduanaSpecified = True - ComExt.Mercancias(i).ValorUnitarioAduana = concep.ValorUnitarioAduana - ComExt.Mercancias(i).ValorDolares = concep.ValorDolares - If concep.DescripcionesEspecificas.Marca <> "" Then - ComExt.Mercancias(i).DescripcionesEspecificas = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorMercanciaDescripcionesEspecificas(0) {} - ComExt.Mercancias(i).DescripcionesEspecificas(0) = New Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExteriorMercanciaDescripcionesEspecificas() - If concep.DescripcionesEspecificas.Marca <> "" Then - ComExt.Mercancias(i).DescripcionesEspecificas(0).Marca = concep.DescripcionesEspecificas.Marca - End If - If concep.DescripcionesEspecificas.Modelo <> "" Then - ComExt.Mercancias(i).DescripcionesEspecificas(0).Modelo = concep.DescripcionesEspecificas.Modelo - End If - If concep.DescripcionesEspecificas.SubModelo <> "" Then - ComExt.Mercancias(i).DescripcionesEspecificas(0).SubModelo = concep.DescripcionesEspecificas.SubModelo - End If - If concep.DescripcionesEspecificas.NumeroSerie <> "" Then - ComExt.Mercancias(i).DescripcionesEspecificas(0).NumeroSerie = concep.DescripcionesEspecificas.NumeroSerie - End If - End If - i += 1 - Next - End If - Dim nsComer As New System.Xml.Serialization.XmlSerializerNamespaces() - nsComer.Add("cce11", "http://www.sat.gob.mx/ComercioExterior11") - Dim xmlComer As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComExt, GetType(Profact.TimbraCFDI33.Complementos.ComercioExterior11.ComercioExterior), nsComer) - Dim docComer As New XmlDocument() - docComer.LoadXml(xmlComer) - LXmlComplementos.Add(docComer.DocumentElement) - comprobante.ComercioExterior11Specified = True - TieneComplemento = True - End If - End If - -#End Region - - End If - -#Region " Complemento Pago" - - If ObjCFDITimbre.Comprobante.TipoComprobante = "P" Then - Dim ComPag = New Profact.TimbraCFDI33.Complementos.Pagos10.Pagos() - ComPag.Pago = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPago(0) {} - ComPag.Pago(0) = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPago() - ComPag.Pago(0).FechaPago = ObjCFDITimbre.ComplementoPagos.FechaPago.ToString("yyyy-MM-ddTHH:mm:ss").ToDate() - ComPag.Pago(0).FormaDePagoP = ObjCFDITimbre.ComplementoPagos.FormaDePagoP - ComPag.Pago(0).MonedaP = ObjCFDITimbre.ComplementoPagos.MonedaP - ComPag.Pago(0).TipoCambioPSpecified = If(ObjCFDITimbre.ComplementoPagos.MonedaP = "MXN", False, True) - ComPag.Pago(0).TipoCambioP = ObjCFDITimbre.ComplementoPagos.TipoCambioP - ComPag.Pago(0).Monto = ObjCFDITimbre.ComplementoPagos.Monto - If ObjCFDITimbre.ComplementoPagos.NumOperacion <> "" Then - ComPag.Pago(0).NumOperacion = ObjCFDITimbre.ComplementoPagos.NumOperacion - End If - If ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaOrd <> "" Then - ComPag.Pago(0).RfcEmisorCtaOrd = ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaOrd - End If - If ObjCFDITimbre.ComplementoPagos.NomBancoOrdExt <> "" Then - ComPag.Pago(0).NomBancoOrdExt = ObjCFDITimbre.ComplementoPagos.NomBancoOrdExt - End If - If ObjCFDITimbre.ComplementoPagos.CtaOrdenante <> "" Then - ComPag.Pago(0).CtaOrdenante = ObjCFDITimbre.ComplementoPagos.CtaOrdenante - End If - If ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaBen <> "" Then - ComPag.Pago(0).RfcEmisorCtaBen = ObjCFDITimbre.ComplementoPagos.RfcEmisorCtaBen - End If - If ObjCFDITimbre.ComplementoPagos.CtaBeneficiario <> "" Then - ComPag.Pago(0).CtaBeneficiario = ObjCFDITimbre.ComplementoPagos.CtaBeneficiario - End If - If ObjCFDITimbre.ComplementoPagos.TipoCadPago <> "" Then - ComPag.Pago(0).TipoCadPagoSpecified = True - ComPag.Pago(0).TipoCadPago = ObjCFDITimbre.ComplementoPagos.TipoCadPago - End If - - If ObjCFDITimbre.ComplementoPagos.CertPago <> "" Then - ComPag.Pago(0).CertPago = System.Text.Encoding.Default.GetBytes(ObjCFDITimbre.ComplementoPagos.CertPago).ToString - End If - If ObjCFDITimbre.ComplementoPagos.CadPago <> "" Then - ComPag.Pago(0).CadPago = ObjCFDITimbre.ComplementoPagos.CadPago - End If - If ObjCFDITimbre.ComplementoPagos.SelloPago <> "" Then - ComPag.Pago(0).SelloPago = System.Text.Encoding.Default.GetBytes(ObjCFDITimbre.ComplementoPagos.SelloPago).ToString - End If - - If ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count > 0 Then - ComPag.Pago(0).DoctoRelacionado = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoDoctoRelacionado(ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados.Count - 1) {} - Dim i As Integer - For Each doc As CFDIComplementoPagosDocsRelacionados In ObjCFDITimbre.ComplementoPagos.DocumentosRelacionados - ComPag.Pago(0).DoctoRelacionado(i) = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoDoctoRelacionado() - ComPag.Pago(0).DoctoRelacionado(i).IdDocumento = doc.IdDocumento - If Not String.IsNullOrEmpty(doc.Serie) Then - ComPag.Pago(0).DoctoRelacionado(i).Serie = doc.Serie - End If - ComPag.Pago(0).DoctoRelacionado(i).Folio = doc.Folio - ComPag.Pago(0).DoctoRelacionado(i).MonedaDR = doc.MonedaDR - ComPag.Pago(0).DoctoRelacionado(i).TipoCambioDRSpecified = If(doc.TipoCambioDR = 0, False, True) - ComPag.Pago(0).DoctoRelacionado(i).TipoCambioDR = doc.TipoCambioDR - ComPag.Pago(0).DoctoRelacionado(i).MetodoDePagoDR = doc.MetodoDePagoDR - ComPag.Pago(0).DoctoRelacionado(i).NumParcialidad = doc.NumParcialidad.ToString - - ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAntSpecified = True - ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt - - ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True - ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado - - ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsolutoSpecified = True - ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto - i += 1 - Next - - 'Estos impuestos aplicarían para anticipos - If ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then - ComPag.Pago(0).Impuestos = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestos(0) {} - ComPag.Pago(0).Impuestos(0) = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestos() - ComPag.Pago(0).Impuestos(0).TotalImpuestosRetenidosSpecified = True - ComPag.Pago(0).Impuestos(0).TotalImpuestosRetenidos = ObjCFDITimbre.ComplementoPagos.TotalImpuestosRetenidos - ComPag.Pago(0).Impuestos(0).TotalImpuestosTrasladadosSpecified = True - ComPag.Pago(0).Impuestos(0).TotalImpuestosTrasladados = ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados - - If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then - Dim x As Integer - ComPag.Pago(0).Impuestos(0).Retenciones = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestosRetencion((ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "R").Count - 1) {} - For Each Ret As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "R") - ComPag.Pago(0).Impuestos(0).Retenciones(x) = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestosRetencion() - ComPag.Pago(0).Impuestos(0).Retenciones(x).Impuesto = Ret.Impuesto - ComPag.Pago(0).Impuestos(0).Retenciones(x).Importe = Ret.Importe - x += 1 - Next - End If - If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then - Dim x As Integer - ComPag.Pago(0).Impuestos(0).Traslados = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestosTraslado((ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "T").Count - 1) {} - For Each Tra As CFDIConceptosImpuestos In (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(w) w.TrasladooRetencion = "T") - ComPag.Pago(0).Impuestos(0).Traslados(x) = New Profact.TimbraCFDI33.Complementos.Pagos10.PagosPagoImpuestosTraslado() - ComPag.Pago(0).Impuestos(0).Traslados(x).Impuesto = Tra.Impuesto - ComPag.Pago(0).Impuestos(0).Traslados(x).TipoFactor = Tra.TipoFactor - ComPag.Pago(0).Impuestos(0).Traslados(x).TasaOCuota = Tra.TasaOCuota.ToString - ComPag.Pago(0).Impuestos(0).Traslados(x).Importe = Tra.Importe - x += 1 - Next - End If - - End If - - - Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces() - nsComp.Add("pago10", "http://www.sat.gob.mx/Pagos") - Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComPag, GetType(Profact.TimbraCFDI33.Complementos.Pagos10.Pagos), nsComp) - Dim docComp As New XmlDocument() - docComp.LoadXml(xmlComp) - comprobante.PagosSpecified = True - LXmlComplementos.Add(docComp.DocumentElement) - TieneComplemento = True - End If - - End If -#End Region - - -#Region " C O M P L E M E N T O C A R T A P O R T E" - - If ObjCFDITimbre.Complementos.CartaPorte IsNot Nothing Then - - ''DATOS GENERALES - Dim Carta As CFDICartaPorte = ObjCFDITimbre.Complementos.CartaPorte - Dim ComCartaPorte = New ProfactCartaPorte.CartaPorte() - ComCartaPorte.TranspInternac = CType([Enum].Parse(GetType(ProfactCartaPorte.CartaPorteTranspInternac), Carta.TranspInternac), ProfactCartaPorte.CartaPorteTranspInternac) - ComCartaPorte.EntradaSalidaMercSpecified = False - ComCartaPorte.ViaEntradaSalidaSpecified = False - ComCartaPorte.TotalDistRecSpecified = False - - 'UBICACIONES - If Carta.Ubicaciones IsNot Nothing AndAlso Carta.Ubicaciones.Count > 0 Then - - Dim i As Integer = 0 - ComCartaPorte.Ubicaciones = New ProfactCartaPorte.CartaPorteUbicacion(Carta.Ubicaciones.Count - 1) {} - For Each ubica As CFDICartaPorteUbicacion In Carta.Ubicaciones - 'origen - - ComCartaPorte.Ubicaciones(i) = New ProfactCartaPorte.CartaPorteUbicacion - ComCartaPorte.Ubicaciones(i).TipoUbicacion = CType([Enum].Parse(GetType(ProfactCartaPorte.CartaPorteUbicacionTipoUbicacion), ubica.TipoUbicacion), ProfactCartaPorte.CartaPorteUbicacionTipoUbicacion) - ComCartaPorte.Ubicaciones(i).TipoEstacionSpecified = False - ComCartaPorte.Ubicaciones(i).IDUbicacion = ubica.IDUbicacion - ComCartaPorte.Ubicaciones(i).RFCRemitenteDestinatario = ubica.RFCRemitenteDestinatario - ComCartaPorte.Ubicaciones(i).NombreRemitenteDestinatario = ubica.NombreRemitenteDestinatario - ComCartaPorte.Ubicaciones(i).NumRegIdTrib = ubica.NumRegIdTrib - 'ComCartaPorte.Ubicaciones(i).ResidenciaFiscal = ubica.ResidenciaFiscal - 'ComCartaPorte.Ubicaciones(i).NumEstacion = ubica.NumEstacion - 'ComCartaPorte.Ubicaciones(i).NavegacionTrafico = ubica.NavegacionTrafico - ComCartaPorte.Ubicaciones(i).FechaHoraSalidaLlegada = ubica.FechaHoraSalidaLlegada.ToDate - ComCartaPorte.Ubicaciones(i).DistanciaRecorrida = ubica.DistanciaRecorrida - - ComCartaPorte.Ubicaciones(i).Domicilio = New ProfactCartaPorte.CartaPorteUbicacionDomicilio With {.Calle = ubica.Domicilio.Calle, - .NumeroExterior = ubica.Domicilio.NumeroExterior, - .NumeroInterior = ubica.Domicilio.NumeroInterior, - .Colonia = ubica.Domicilio.Colonia, - .Localidad = ubica.Domicilio.Localidad, - .Referencia = ubica.Domicilio.Referencia, - .Municipio = ubica.Domicilio.Municipio, - .Estado = ubica.Domicilio.Estado, - .CodigoPostal = ubica.Domicilio.CP, - .Pais = CType([Enum].Parse(GetType(ProfactCartaPorte.c_Pais), ubica.Domicilio.Pais), ProfactCartaPorte.c_Pais)} - - Next - - End If - - 'MERCANCIAS - If Carta.Mercancias IsNot Nothing Then - ComCartaPorte.Mercancias = New ProfactCartaPorte.CartaPorteMercancias - ComCartaPorte.Mercancias.PesoBrutoTotal = Carta.Mercancias.PesoBrutoTotal.ToDecimal - ComCartaPorte.Mercancias.PesoNetoTotal = Carta.Mercancias.PesoNetoTotal.ToDecimal - ComCartaPorte.Mercancias.NumTotalMercancias = Carta.Mercancias.NumTotalMercancias - ComCartaPorte.Mercancias.CargoPorTasacion = Carta.Mercancias.CargoporTasacion.ToDecimal - ' ComCartaPorte.Mercancias.UnidadPeso = Carta.Mercancias.UnidadPeso - - If Carta.Mercancias IsNot Nothing AndAlso Carta.Mercancias.Mercancias.Count > 0 Then - Dim i As Integer = 0 - ComCartaPorte.Mercancias.Mercancia = New ProfactCartaPorte.CartaPorteMercanciasMercancia(Carta.Mercancias.Mercancias.Count - 1) {} - For Each concep As CFDICartaPorteMercancia In Carta.Mercancias.Mercancias - ComCartaPorte.Mercancias.Mercancia(i) = New ProfactCartaPorte.CartaPorteMercanciasMercancia - - If concep.BienesTransp <> "" Then - ComCartaPorte.Mercancias.Mercancia(i).BienesTransp = concep.BienesTransp - End If - - ComCartaPorte.Mercancias.Mercancia(i).Descripcion = concep.Descripción - ComCartaPorte.Mercancias.Mercancia(i).Cantidad = concep.Cantidad - ComCartaPorte.Mercancias.Mercancia(i).Unidad = concep.Unidad - ComCartaPorte.Mercancias.Mercancia(i).Dimensiones = concep.Dimensiones - If concep.ClaveMaterialPeligroso <> "" Then - ComCartaPorte.Mercancias.Mercancia(i).MaterialPeligrosoSpecified = True - ComCartaPorte.Mercancias.Mercancia(i).CveMaterialPeligrosoSpecified = True - 'si lleva material pelgroso, debe llevar embalaje - ComCartaPorte.Mercancias.Mercancia(i).EmbalajeSpecified = True - ComCartaPorte.Mercancias.Mercancia(i).Embalaje = concep.Embalaje - - End If - - If concep.DescripEmbalaje <> "" Then ComCartaPorte.Mercancias.Mercancia(i).DescripEmbalaje = concep.DescripEmbalaje - ComCartaPorte.Mercancias.Mercancia(i).PesoEnKg = concep.PesoenKg - ComCartaPorte.Mercancias.Mercancia(i).ValorMercanciaSpecified = False - ComCartaPorte.Mercancias.Mercancia(i).MonedaSpecified = False - ComCartaPorte.Mercancias.Mercancia(i).FraccionArancelariaSpecified = False - If concep.UUIDComercioExt <> "" Then ComCartaPorte.Mercancias.Mercancia(i).UUIDComercioExt = concep.UUIDComercioExt - - Dim j As Integer = 0 - ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta = New ProfactCartaPorte.CartaPorteMercanciasMercanciaCantidadTransporta(Carta.Mercancias.Mercancias.Count - 1) {} - For Each transp In concep.MercanciasCantidadTransporta - ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j) = New ProfactCartaPorte.CartaPorteMercanciasMercanciaCantidadTransporta - ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j).Cantidad = transp.Cantidad - ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j).IDOrigen = transp.IDOrigen - ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(j).IDDestino = transp.IDDestino - 'ComCartaPorte.Mercancias.Mercancia(i).CantidadTransporta(1).CvesTransporte = transp.CvesTransportes - Next - - i += 1 - Next - End If - End If - - - If Carta.FiguraTransporte IsNot Nothing Then - - If Carta.FiguraTransporte.AutoTransporte IsNot Nothing Then - - - 'ComCartaPorte.FiguraTransporte(1). = ProfactCartaPorte.c_CveTransporte.Item02 - ComCartaPorte.Mercancias.Autotransporte = New ProfactCartaPorte.CartaPorteMercanciasAutotransporte - If Carta.FiguraTransporte.AutoTransporte.PermisoSCT <> "" Then - ComCartaPorte.Mercancias.Autotransporte.PermSCT = CType([Enum].Parse(GetType(ProfactCartaPorte.c_TipoPermiso), Carta.FiguraTransporte.AutoTransporte.PermisoSCT), ProfactCartaPorte.c_TipoPermiso) - End If - ComCartaPorte.Mercancias.Autotransporte.NumPermisoSCT = Carta.FiguraTransporte.AutoTransporte.NumPermisoSCT - 'pendiente RMF - 'ComCartaPorte.Mercancias.AutotransporteFederal.NombreAseg = Carta.FiguraTransporte.AutoTransporte.NombreAseg - 'ComCartaPorte.Mercancias.AutotransporteFederal.NumPolizaSeguro = Carta.FiguraTransporte.AutoTransporte.NumPolizaSeguro - - Dim ConfigVehicular As New ProfactCartaPorte.CartaPorteMercanciasAutotransporteIdentificacionVehicular - ConfigVehicular.ConfigVehicular = CType([Enum].Parse(GetType(ProfactCartaPorte.c_ConfigAutotransporte), Carta.FiguraTransporte.AutoTransporte.Vehiculo.ConfigVehicular), ProfactCartaPorte.c_ConfigAutotransporte) - ConfigVehicular.AnioModeloVM = Carta.FiguraTransporte.AutoTransporte.Vehiculo.AnioModeloVM - ConfigVehicular.PlacaVM = Carta.FiguraTransporte.AutoTransporte.Vehiculo.PlacaVM - - ComCartaPorte.Mercancias.Autotransporte.IdentificacionVehicular = ConfigVehicular - - Dim ConfigVehicularSeguros As New ProfactCartaPorte.CartaPorteMercanciasAutotransporteSeguros - ConfigVehicularSeguros.AseguraRespCivil = Carta.FiguraTransporte.AutoTransporte.NombreSeguroResponsabilidadCivil - ConfigVehicularSeguros.PolizaRespCivil = Carta.FiguraTransporte.AutoTransporte.PolizaSeguroResponsabilidadCivil - ConfigVehicularSeguros.AseguraMedAmbiente = Carta.FiguraTransporte.AutoTransporte.NombreSeguroMedioAmbiente - ConfigVehicularSeguros.PolizaMedAmbiente = Carta.FiguraTransporte.AutoTransporte.PolizaSeguroMedioAmbiente - ConfigVehicularSeguros.AseguraCarga = Carta.FiguraTransporte.AutoTransporte.NombreSeguroCarga - ConfigVehicularSeguros.PolizaCarga = Carta.FiguraTransporte.AutoTransporte.PolizaSeguroCarga - - If Carta.FiguraTransporte.AutoTransporte.PrimaSeguro > 0 Then - ConfigVehicularSeguros.PrimaSeguro = Carta.FiguraTransporte.AutoTransporte.PrimaSeguro - ConfigVehicularSeguros.PrimaSeguroSpecified = True - End If - - If Carta.FiguraTransporte.AutoTransporte.Remolques IsNot Nothing AndAlso Carta.FiguraTransporte.AutoTransporte.Remolques.Count > 0 Then - Dim i As Integer = 0 - ComCartaPorte.Mercancias.Autotransporte.Remolques = New ProfactCartaPorte.CartaPorteMercanciasAutotransporteRemolque(Carta.FiguraTransporte.AutoTransporte.Remolques.Count - 1) {} - For Each concep As CFDICartaPorteRemolque In Carta.FiguraTransporte.AutoTransporte.Remolques - ComCartaPorte.Mercancias.Autotransporte.Remolques(i) = New ProfactCartaPorte.CartaPorteMercanciasAutotransporteRemolque - ComCartaPorte.Mercancias.Autotransporte.Remolques(i).SubTipoRem = CType([Enum].Parse(GetType(ProfactCartaPorte.c_SubTipoRem), concep.SubTipoRemolque), ProfactCartaPorte.c_SubTipoRem) - ComCartaPorte.Mercancias.Autotransporte.Remolques(i).Placa = concep.Placa - i += 1 - Next - ' - End If - End If - - If Carta.FiguraTransporte.Operadores IsNot Nothing AndAlso Carta.FiguraTransporte.Operadores.Count > 0 Then - Dim i As Integer = 0 - ComCartaPorte.FiguraTransporte = New ProfactCartaPorte.CartaPorteTiposFigura(Carta.FiguraTransporte.Operadores.Count - 1) {} - For Each concep As CFDICartaPorteOperador In Carta.FiguraTransporte.Operadores - - ComCartaPorte.FiguraTransporte(i) = New ProfactCartaPorte.CartaPorteTiposFigura - ComCartaPorte.FiguraTransporte(i).RFCFigura = concep.RFCFigura - ComCartaPorte.FiguraTransporte(i).NumLicencia = concep.NumLicencia - ComCartaPorte.FiguraTransporte(i).NombreFigura = concep.NombreFigura - ComCartaPorte.FiguraTransporte(i).NumRegIdTribFigura = concep.NumRegidTribFigura - 'OComCartaPorte.FiguraTransporte.Operadores(i)(0) = concep.ResidenciaFiscalOperador 'falta - - ComCartaPorte.FiguraTransporte(i).Domicilio = New ProfactCartaPorte.CartaPorteTiposFiguraDomicilio() - ComCartaPorte.FiguraTransporte(i).Domicilio.Calle = concep.Domicilio.Calle - ComCartaPorte.FiguraTransporte(i).Domicilio.CodigoPostal = concep.Domicilio.CP - ComCartaPorte.FiguraTransporte(i).Domicilio.Colonia = concep.Domicilio.Colonia - ComCartaPorte.FiguraTransporte(i).Domicilio.Estado = concep.Domicilio.Estado - ComCartaPorte.FiguraTransporte(i).Domicilio.Localidad = concep.Domicilio.Localidad - ComCartaPorte.FiguraTransporte(i).Domicilio.Municipio = concep.Domicilio.Municipio - ComCartaPorte.FiguraTransporte(i).Domicilio.NumeroExterior = concep.Domicilio.NumeroExterior - ComCartaPorte.FiguraTransporte(i).Domicilio.Pais = ProfactCartaPorte.c_Pais.MEX - - i += 1 - Next - End If - - End If - - Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces() - nsComp.Add("CartaPorte", "http://www.sat.gob.mx/CartaPorte") - Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComCartaPorte, GetType(ProfactCartaPorte.CartaPorte), nsComp) - Dim docComp As New XmlDocument() - docComp.LoadXml(xmlComp) - comprobante.CartaPorteSpecified = True - LXmlComplementos.Add(docComp.DocumentElement) - TieneComplemento = True - - End If - -#End Region - - -#Region " Nomina12" - If ObjCFDITimbre.Comprobante.TipoComprobante = "N" Then - Dim Nom = New Profact.TimbraCFDI33.Complementos.Nomina12.Nomina() - 'cfdi.Esquema.AgregarEsquema("http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd") - Nom.Version = ObjCFDITimbre.Nomina.Version - Nom.TipoNomina = ObjCFDITimbre.Nomina.TipoNomina - Nom.FechaPago = ObjCFDITimbre.Nomina.FechaPago - Nom.FechaInicialPago = ObjCFDITimbre.Nomina.FechaInicio.ToDate - Nom.FechaFinalPago = ObjCFDITimbre.Nomina.FechaFin.ToDate - Nom.NumDiasPagados = ObjCFDITimbre.Nomina.NumDiasPagados.ToString - Nom.TotalPercepcionesSpecified = True - Nom.TotalPercepciones = ObjCFDITimbre.Nomina.TotalPercepciones.ToDecimal - Nom.TotalDeduccionesSpecified = True - Nom.TotalDeducciones = ObjCFDITimbre.Nomina.TotalDeducciones.ToDecimal - Nom.TotalOtrosPagosSpecified = True - Nom.TotalOtrosPagos = ObjCFDITimbre.Nomina.TotalOtrosPagos.ToDecimal - - Nom.Emisor = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaEmisor - Nom.Emisor.Curp = ObjCFDITimbre.Emisor.CURP - Nom.Emisor.RegistroPatronal = ObjCFDITimbre.Emisor.RegistroPatronal - Nom.Emisor.RfcPatronOrigen = ObjCFDITimbre.Emisor.RFC - - If UsuarioActual.Empresa.UsaAC Then Nom.Emisor.EntidadSNCF.OrigenRecurso = "IF" : Nom.Emisor.EntidadSNCF.MontoRecursoPropio = 90 - - If ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0 Then - Dim TotalIndemnizacion As String = If(ObjCFDITimbre.Nomina.TotalIndemnizacion > 0, ObjCFDITimbre.Nomina.TotalIndemnizacion.ToString, "") - Dim TotalJubilacion As String = If(ObjCFDITimbre.Nomina.TotalJubilacion > 0, ObjCFDITimbre.Nomina.TotalJubilacion.ToString, "") - Nom.Percepciones = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaPercepciones - Nom.Percepciones.TotalSueldosSpecified = True - Nom.Percepciones.TotalSueldos = ObjCFDITimbre.Nomina.TotalSueldos.ToDecimal - Nom.Percepciones.TotalSeparacionIndemnizacionSpecified = True - Nom.Percepciones.TotalSeparacionIndemnizacion = TotalIndemnizacion.ToDecimal - Nom.Percepciones.TotalJubilacionPensionRetiroSpecified = True - Nom.Percepciones.TotalJubilacionPensionRetiro = TotalJubilacion.ToDecimal - Nom.Percepciones.TotalGravado = ObjCFDITimbre.Nomina.TotalPercepcionesGravado.ToDecimal - Nom.Percepciones.TotalExento = ObjCFDITimbre.Nomina.TotalPercepcionesExento.ToDecimal - Nom.Percepciones.Percepcion = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaPercepcionesPercepcion(ObjCFDITimbre.Nomina.Percepciones.Count - 1) {} - Dim i As Integer = 0 - For Each percep As CFDINominaPercepciones In ObjCFDITimbre.Nomina.Percepciones - Nom.Percepciones.Percepcion(i) = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaPercepcionesPercepcion() - Nom.Percepciones.Percepcion(i).TipoPercepcion = percep.TipoPercepcion - Nom.Percepciones.Percepcion(i).Clave = percep.Clave - Nom.Percepciones.Percepcion(i).Concepto = percep.Concepto - Nom.Percepciones.Percepcion(i).ImporteGravado = Math.Round(percep.ImporteGravado, 2).ToString.ToDecimal - Nom.Percepciones.Percepcion(i).ImporteExento = Math.Round(percep.ImporteExento, 2).ToString.ToDecimal - - If ObjCFDITimbre.Nomina.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then - Nom.Percepciones.Percepcion(i).HorasExtra = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaPercepcionesPercepcionHorasExtra(ObjCFDITimbre.Nomina.HorasExtras.Count - 1) {} - Dim x As Integer = 0 - For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras - Nom.Percepciones.Percepcion(i).HorasExtra(x) = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaPercepcionesPercepcionHorasExtra() - Nom.Percepciones.Percepcion(i).HorasExtra(x).Dias = HoraExtra.Dias.ToEntero - Nom.Percepciones.Percepcion(i).HorasExtra(x).TipoHoras = HoraExtra.TipoHoras - Nom.Percepciones.Percepcion(i).HorasExtra(x).HorasExtra = HoraExtra.HorasExtra.ToEntero - Nom.Percepciones.Percepcion(i).HorasExtra(x).ImportePagado = HoraExtra.ImportePagado.ToDecimal - x += 1 - Next - End If - - i += 1 - Next - End If - 'cfdi.agregarNominaReceptorSubContratacion12("AAD990814BP6", "50") - 'cfdi.agregarNominaPercepcionesPercepcionAccionesOTitulos12("100", "200"); - 'cfdi.agregarNominaPercepcionesSeparacionIndemnizacion12("100", "10", "1000", "100", "50"); - 'cfdi.agregarNominaPercepcionesJubilacionPensionRetiro12("50", "100", "10", "100", "0"); - - - - If ObjCFDITimbre.Nomina.Incapacidades IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Incapacidades.Count > 0 Then - Nom.Incapacidades = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaIncapacidad(ObjCFDITimbre.Nomina.Incapacidades.Count - 1) {} - Dim i As Integer = 0 - For Each Incap As CFDINominaIncapacidades In ObjCFDITimbre.Nomina.Incapacidades - Nom.Incapacidades(i) = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaIncapacidad() - Nom.Incapacidades(i).DiasIncapacidad = Incap.DiasIncapacidad.ToEntero - Nom.Incapacidades(i).TipoIncapacidad = Incap.TipoIncapacidad - Nom.Incapacidades(i).ImporteMonetarioSpecified = True - Nom.Incapacidades(i).ImporteMonetario = Incap.Importe.ToDecimal - i += 1 - Next - End If - - If ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0 Then - Nom.Deducciones = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaDeducciones() - Nom.Deducciones.TotalOtrasDeduccionesSpecified = True - Nom.Deducciones.TotalOtrasDeducciones = Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesOtras, 2) - Nom.Deducciones.TotalImpuestosRetenidosSpecified = True - Nom.Deducciones.TotalImpuestosRetenidos = Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos, 2) - Nom.Deducciones.Deduccion = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaDeduccionesDeduccion(ObjCFDITimbre.Nomina.Deducciones.Count - 1) {} - Dim i As Integer = 0 - For Each deduc As CFDINominaDeducciones In ObjCFDITimbre.Nomina.Deducciones - Nom.Deducciones.Deduccion(i) = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaDeduccionesDeduccion() - Nom.Deducciones.Deduccion(i).TipoDeduccion = deduc.TipoDeduccion - Nom.Deducciones.Deduccion(i).Clave = deduc.Clave - Nom.Deducciones.Deduccion(i).Concepto = deduc.Concepto - Nom.Deducciones.Deduccion(i).Importe = Math.Round(deduc.Importe, 2) - i += 1 - Next - End If - - If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing Then - ' cfdi.agregarNominaOtrosPagosOtroPago12("002", "002", "Subsidio", "10.00"); - ' cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12("10.00"); - If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0 Then - Nom.OtrosPagos = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaOtroPago(ObjCFDITimbre.Nomina.OtrosPagos.Count - 1) {} - Dim i As Integer = 0 - For Each otpag As CFDINominaOtrosPagos In ObjCFDITimbre.Nomina.OtrosPagos - Nom.OtrosPagos(i) = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaOtroPago() - Nom.OtrosPagos(i).TipoOtroPago = otpag.TipoOtroPago - Nom.OtrosPagos(i).Clave = otpag.Clave - Nom.OtrosPagos(i).Concepto = otpag.Concepto - Nom.OtrosPagos(i).Importe = otpag.Importe - If otpag.TipoOtroPago = "002" Then - Nom.OtrosPagos(i).SubsidioAlEmpleo = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaOtroPagoSubsidioAlEmpleo() - Nom.OtrosPagos(i).SubsidioAlEmpleo.SubsidioCausado = otpag.Importe - End If - i += 1 - Next - End If - End If - - -#Region "Receptor" - Nom.Receptor = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaReceptor() - Nom.Receptor.Curp = ObjCFDITimbre.Nomina.Receptor.CURP - Nom.Receptor.NumSeguridadSocial = ObjCFDITimbre.Nomina.Receptor.NSS - Nom.Receptor.FechaInicioRelLaboralSpecified = True - Nom.Receptor.FechaInicioRelLaboral = ObjCFDITimbre.Nomina.Receptor.FechaInicioContrato.ToDate - Nom.Receptor.Antigüedad = ObjCFDITimbre.Nomina.Receptor.Antiguedad - Nom.Receptor.TipoContrato = ObjCFDITimbre.Nomina.Receptor.TipoContrato - 'Nom.Receptor.Sindicalizado = New Profact.TimbraCFDI33.Complementos.Nomina12.NominaReceptorSindicalizado() - 'Nom.Receptor.Sindicalizado = ObjCFDITimbre.Nomina.Receptor.Sindicalizado - Nom.Receptor.TipoJornadaSpecified = True - Nom.Receptor.TipoJornada = ObjCFDITimbre.Nomina.Receptor.CodigoTipoJornada - Nom.Receptor.TipoRegimen = ObjCFDITimbre.Nomina.Receptor.CodigoRegimenContratacion - Nom.Receptor.NumEmpleado = ObjCFDITimbre.Nomina.Receptor.CodigoEmpleado - Nom.Receptor.Departamento = ObjCFDITimbre.Nomina.Receptor.Departamento - Nom.Receptor.Puesto = ObjCFDITimbre.Nomina.Receptor.Puesto - Nom.Receptor.RiesgoPuestoSpecified = True - Nom.Receptor.RiesgoPuesto = ObjCFDITimbre.Nomina.Receptor.CodigoRiesgoPuesto - Nom.Receptor.PeriodicidadPago = ObjCFDITimbre.Nomina.Receptor.TipoPeriodo - Nom.Receptor.BancoSpecified = True - Nom.Receptor.Banco = ObjCFDITimbre.Nomina.Receptor.CodigoBanco - Nom.Receptor.CuentaBancaria = ObjCFDITimbre.Nomina.Receptor.NumeroCuenta - Nom.Receptor.SalarioBaseCotAporSpecified = True - Nom.Receptor.SalarioBaseCotApor = ObjCFDITimbre.Nomina.Receptor.SBC.ToDecimal - Nom.Receptor.SalarioDiarioIntegradoSpecified = True - Nom.Receptor.SalarioDiarioIntegrado = ObjCFDITimbre.Nomina.Receptor.SDI.ToDecimal - Nom.Receptor.ClaveEntFed = ObjCFDITimbre.Nomina.Receptor.CodigoEntidadFederativa - - Dim nsNom As New System.Xml.Serialization.XmlSerializerNamespaces() - nsNom.Add("nomina12", "http://www.sat.gob.mx/nomina12") - Dim xmlNom As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(Nom, GetType(Profact.TimbraCFDI33.Complementos.Nomina12.Nomina), nsNom) - Dim docNom As New XmlDocument() - docNom.LoadXml(xmlNom) - LXmlComplementos.Add(docNom.DocumentElement) - TieneComplemento = True - - - End If -#End Region - -#End Region - - '#Region "Detallista" - ' If Ventas.Cliente.AplicaDetallista Then - ' Dim detallista As Profact.TimbraCFDI33.Complementos.Detallista.detallista = New Profact.TimbraCFDI33.Complementos.Detallista.detallista - ' detallista.type = "SimpleInvoiceType" - ' detallista.contentVersion = "1.3.1" - ' detallista.documentStructureVersion = "AMC8.1" - ' detallista.documentStatus = Profact.TimbraCFDI33.Complementos.Detallista.detallistaDocumentStatus.ORIGINAL - - ' detallista.DeliveryNote = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaDeliveryNote - ' detallista.DeliveryNote.referenceIdentification = New String((1)) {} - ' detallista.DeliveryNote.referenceIdentification(0) = "1" - ' detallista.DeliveryNote.ReferenceDate = New DateTime - ' detallista.DeliveryNote.ReferenceDate = comprobante.Fecha - ' detallista.DeliveryNote.ReferenceDateSpecified = True - - ' detallista.requestForPaymentIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaRequestForPaymentIdentification - ' detallista.requestForPaymentIdentification.entityType = Profact.TimbraCFDI33.Complementos.Detallista.detallistaRequestForPaymentIdentificationEntityType.INVOICE - - ' detallista.specialInstruction = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaSpecialInstruction((1)) {} - ' detallista.specialInstruction(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaSpecialInstruction - ' detallista.specialInstruction(0).code = Profact.TimbraCFDI33.Complementos.Detallista.detallistaSpecialInstructionCode.ZZZ - ' Dim TotalTexto = New String() {Ventas.TotalTC.ToString.ToDouble.Texto2Letras.ToUpper()} - ' Dim propertyInfo = detallista.specialInstruction(0).GetType().GetProperty("text") - ' propertyInfo.SetValue(detallista.specialInstruction(0), Convert.ChangeType(TotalTexto, propertyInfo.PropertyType), Nothing) - - ' detallista.orderIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaOrderIdentification - ' detallista.orderIdentification.referenceIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaOrderIdentificationReferenceIdentification((1)) {} - ' detallista.orderIdentification.referenceIdentification(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaOrderIdentificationReferenceIdentification - ' detallista.orderIdentification.referenceIdentification(0).type = Profact.TimbraCFDI33.Complementos.Detallista.detallistaOrderIdentificationReferenceIdentificationType.ON - ' detallista.orderIdentification.referenceIdentification(0).Value = Ventas.Det_OrdenCompra - ' detallista.orderIdentification.ReferenceDateSpecified = True - ' detallista.orderIdentification.ReferenceDate = Ventas.Det_FechaOrdenCompra.ToDate() - - ' detallista.AdditionalInformation = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaReferenceIdentification((1)) {} - ' detallista.AdditionalInformation(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaReferenceIdentification - ' detallista.AdditionalInformation(0).type = Profact.TimbraCFDI33.Complementos.Detallista.detallistaReferenceIdentificationType.ATZ - ' detallista.AdditionalInformation(0).Value = Ventas.Det_ContraRecibo - - ' detallista.DeliveryNote = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaDeliveryNote - ' detallista.DeliveryNote.ReferenceDate = Ventas.Det_FechaOrdenCompra.ToDate - ' detallista.DeliveryNote.referenceIdentification = New String((1)) {} - ' detallista.DeliveryNote.referenceIdentification(0) = Ventas.Det_ContraRecibo - - ' detallista.buyer = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaBuyer - ' detallista.buyer.gln = Ventas.Cliente.Detallista_GLNComprador - ' detallista.buyer.contactInformation = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaBuyerContactInformation - ' detallista.buyer.contactInformation.personOrDepartmentName = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaBuyerContactInformationPersonOrDepartmentName - ' detallista.buyer.contactInformation.personOrDepartmentName.text = Ventas.Cliente.Detallista_Departamento - - ' detallista.seller = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaSeller - ' detallista.seller.gln = Ventas.Cliente.Detallista_GLNVendedor - ' detallista.seller.alternatePartyIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaSellerAlternatePartyIdentification - ' detallista.seller.alternatePartyIdentification.type = Profact.TimbraCFDI33.Complementos.Detallista.detallistaSellerAlternatePartyIdentificationType.SELLER_ASSIGNED_IDENTIFIER_FOR_A_PARTY - ' detallista.seller.alternatePartyIdentification.Value = Ventas.Cliente.Detallista_NumProveedor - - ' 'detallista.shipTo = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaShipTo - ' 'detallista.shipTo.gln = "0000000000000" - ' 'detallista.shipTo.nameAndAddress = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaShipToNameAndAddress - ' 'detallista.shipTo.nameAndAddress.name = New String((1)) {} - ' 'detallista.shipTo.nameAndAddress.name(0) = Ventas.Cliente.Direccion - ' 'detallista.shipTo.nameAndAddress.streetAddressOne = New String((1)) {} - ' 'detallista.shipTo.nameAndAddress.streetAddressOne(0) = Ventas.Cliente.NoInt - ' 'detallista.shipTo.nameAndAddress.city = New String((1)) {} - ' 'detallista.shipTo.nameAndAddress.city(0) = Ventas.Cliente.Ciudad - ' 'detallista.shipTo.nameAndAddress.postalCode = New String((1)) {} - ' 'detallista.shipTo.nameAndAddress.postalCode(0) = Ventas.Cliente.CP - - ' detallista.paymentTerms = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTerms - ' detallista.paymentTerms.netPayment = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTermsNetPayment - ' detallista.paymentTerms.netPayment.paymentTimePeriod = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriod - ' detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriodTimePeriodDue - ' detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue.timePeriod = Profact.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTermsNetPaymentPaymentTimePeriodTimePeriodDueTimePeriod.DAYS - ' detallista.paymentTerms.netPayment.paymentTimePeriod.timePeriodDue.value = "0" - - ' detallista.paymentTerms.discountPayment = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaPaymentTermsDiscountPayment - ' detallista.paymentTerms.discountPayment.percentage = If(Ventas.DescuentoTC > 0 AndAlso Ventas.SubTotalTC > 0, (Ventas.DescuentoTC * 100) / Ventas.SubTotalTC, 0).ToString().FormatoNumero() - - ' detallista.currency = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrency((1)) {} - ' detallista.currency(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrency - ' detallista.currency(0).currencyISOCode = If(Ventas.CveMoneda = 1, Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrencyCurrencyISOCode.MXN, Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrencyCurrencyISOCode.USD) - ' detallista.currency(0).currencyFunction = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrencyCurrencyFunction((1)) {} - ' detallista.currency(0).currencyFunction(0) = Profact.TimbraCFDI33.Complementos.Detallista.detallistaCurrencyCurrencyFunction.BILLING_CURRENCY - ' detallista.currency(0).rateOfChangeSpecified = True - ' detallista.currency(0).rateOfChange = 1 - - ' detallista.allowanceCharge = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaAllowanceCharge(1) {} - ' detallista.allowanceCharge(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaAllowanceCharge - ' detallista.allowanceCharge(0).monetaryAmountOrPercentage = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentage - ' detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentageRate - ' detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate.base = Profact.TimbraCFDI33.Complementos.Detallista.detallistaAllowanceChargeMonetaryAmountOrPercentageRateBase.INVOICE_VALUE - ' detallista.allowanceCharge(0).monetaryAmountOrPercentage.rate.percentage = If(Ventas.DescuentoTC > 0 AndAlso Ventas.SubTotalTC > 0, (Ventas.DescuentoTC * 100) / Ventas.SubTotalTC, 0) - - ' Dim articuloCounter As Integer = 0 - ' For Each concepto As Profact.TimbraCFDI33.ComprobanteConcepto In comprobante.Conceptos - ' articuloCounter = (articuloCounter + 1) - ' Next - ' detallista.lineItem = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItem((articuloCounter)) {} - ' Dim counter As Integer = 0 - ' For Each concepto As Profact.TimbraCFDI33.ComprobanteConcepto In comprobante.Conceptos - ' detallista.lineItem(counter) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItem - ' detallista.lineItem(counter).type = "SimpleInvoiceLineItemType" - ' detallista.lineItem(counter).number = (counter + 1).ToString - ' detallista.lineItem(counter).tradeItemIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemIdentification - ' detallista.lineItem(counter).tradeItemIdentification.gtin = comprobante.Conceptos(counter).NoIdentificacion - ' detallista.lineItem(counter).alternateTradeItemIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentification(1) {} - ' detallista.lineItem(counter).alternateTradeItemIdentification(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentification - ' detallista.lineItem(counter).alternateTradeItemIdentification(0).type = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentificationType - ' detallista.lineItem(counter).alternateTradeItemIdentification(0).type = Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAlternateTradeItemIdentificationType.BUYER_ASSIGNED - ' detallista.lineItem(counter).tradeItemDescriptionInformation = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemDescriptionInformation - ' If (comprobante.Conceptos(counter).Descripcion.Length > 34) Then - ' detallista.lineItem(counter).tradeItemDescriptionInformation.longText = comprobante.Conceptos(counter).Descripcion.Substring(0, 34) - ' Else - ' detallista.lineItem(counter).tradeItemDescriptionInformation.longText = comprobante.Conceptos(counter).Descripcion - ' End If - ' detallista.lineItem(counter).invoicedQuantity = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemInvoicedQuantity - ' detallista.lineItem(counter).invoicedQuantity.unitOfMeasure = comprobante.Conceptos(counter).Unidad - ' detallista.lineItem(counter).invoicedQuantity.Text = New String((1)) {} - ' detallista.lineItem(counter).invoicedQuantity.Text(0) = comprobante.Conceptos(counter).Cantidad.ToString - - ' detallista.lineItem(counter).aditionalQuantity = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAditionalQuantity(1) {} - ' detallista.lineItem(counter).aditionalQuantity(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAditionalQuantity - ' detallista.lineItem(counter).aditionalQuantity(0).QuantityType = Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAditionalQuantityQuantityType.NUM_CONSUMER_UNITS - ' detallista.lineItem(counter).aditionalQuantity(0).Text = New String((1)) {} - ' detallista.lineItem(counter).aditionalQuantity(0).Text(0) = "1" - - ' detallista.lineItem(counter).grossPrice = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemGrossPrice - ' detallista.lineItem(counter).grossPrice.Amount = comprobante.Conceptos(counter).ValorUnitario - - ' detallista.lineItem(counter).netPrice = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemNetPrice - ' detallista.lineItem(counter).netPrice.Amount = comprobante.Conceptos(counter).ValorUnitario - - ' detallista.lineItem(counter).AdditionalInformation = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAdditionalInformation - ' detallista.lineItem(counter).AdditionalInformation.referenceIdentification = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAdditionalInformationReferenceIdentification - ' detallista.lineItem(counter).AdditionalInformation.referenceIdentification.type = Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemAdditionalInformationReferenceIdentificationType.ON - ' detallista.lineItem(counter).AdditionalInformation.referenceIdentification.Value = "1587" - ' 'Impuestos - ' Dim tasa As Decimal = 0 - ' Dim importeImp As Decimal = 0 - ' Try - ' If (Not (comprobante.Impuestos.Traslados) Is Nothing) Then - ' For Each traslado As Profact.TimbraCFDI33.ComprobanteImpuestosTraslado In comprobante.Impuestos.Traslados - ' tasa = Decimal.Parse(traslado.TasaOCuota) - ' importeImp = (comprobante.Conceptos(counter).Importe * (tasa / 100)) - ' Next - ' End If - - ' Catch ex As System.Exception - - ' End Try - - ' detallista.lineItem(counter).tradeItemTaxInformation = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemTaxInformation(1) {} - ' detallista.lineItem(counter).tradeItemTaxInformation(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemTaxInformation - ' detallista.lineItem(counter).tradeItemTaxInformation(0).taxTypeDescription = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription - ' detallista.lineItem(counter).tradeItemTaxInformation(0).taxTypeDescription = Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemTaxInformationTaxTypeDescription.VAT - ' detallista.lineItem(counter).tradeItemTaxInformation(0).tradeItemTaxAmount = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTradeItemTaxInformationTradeItemTaxAmount - ' detallista.lineItem(counter).tradeItemTaxInformation(0).tradeItemTaxAmount.taxPercentage = tasa - ' detallista.lineItem(counter).tradeItemTaxInformation(0).tradeItemTaxAmount.taxAmount = importeImp - - ' detallista.lineItem(counter).totalLineAmount = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTotalLineAmount - ' detallista.lineItem(counter).totalLineAmount.grossAmount = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTotalLineAmountGrossAmount - ' detallista.lineItem(counter).totalLineAmount.grossAmount.Amount = comprobante.Conceptos(counter).Importe - ' detallista.lineItem(counter).totalLineAmount.netAmount = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaLineItemTotalLineAmountNetAmount - ' detallista.lineItem(counter).totalLineAmount.netAmount.Amount = comprobante.Conceptos(counter).Importe - ' counter = (counter + 1) - ' Next - ' detallista.totalAmount = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaTotalAmount - ' detallista.totalAmount.Amount = comprobante.SubTotal - - ' detallista.TotalAllowanceCharge = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaTotalAllowanceCharge(1) {} - ' detallista.TotalAllowanceCharge(0) = New Profact.TimbraCFDI33.Complementos.Detallista.detallistaTotalAllowanceCharge - ' detallista.TotalAllowanceCharge(0).allowanceOrChargeType = Profact.TimbraCFDI33.Complementos.Detallista.detallistaTotalAllowanceChargeAllowanceOrChargeType.ALLOWANCE - ' detallista.TotalAllowanceCharge(0).Amount = Ventas.DescuentoTC - - ' Dim nombres As System.Xml.Serialization.XmlSerializerNamespaces = New System.Xml.Serialization.XmlSerializerNamespaces - ' nombres.Add("detallista", "http://www.sat.gob.mx/detallista") - ' Dim xmlDetallista As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(detallista, GetType(Profact.TimbraCFDI33.Complementos.Detallista.detallista), nombres) - - ' Dim docDetallista As XmlDocument = New XmlDocument - ' docDetallista.LoadXml(xmlDetallista) - ' comprobante.DetallistaSpecified = True - ' LXmlComplementos.Add(docDetallista.DocumentElement) - - ' TieneComplemento = True - ' End If - '#End Region - - If TieneComplemento Then - comprobante.Complemento = New Profact.TimbraCFDI33.ComprobanteComplemento - comprobante.Complemento.Any = LXmlComplementos.ToArray() - End If - - sw.Stop() - swTiempo.AppendFormat("Armado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - -#Region "Genera XML" - ' Try - ' cfdi.GenerarXMLBase64(llaveBase64, Clave) - ' cfdi.EscribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML) - ' Catch ex As Exception - - ' End Try - '//Timbramos el CFDI por medio del conector y guardamos resultado - Dim resultadoTimbre As Profact.TimbraCFDI.ResultadoTimbre - -#End Region - - sw.Stop() - swTiempo.AppendFormat("Genera: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - -#Region "Timbra" - resultadoTimbre = cfdi.TimbraCFDI(comprobante) -#End Region - - sw.Stop() - swTiempo.AppendFormat("Timbrado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - - 'Verifica el error - If resultadoTimbre.Exitoso Then - - 'Dim FechaCertificacion As DateTime - Dim FolioFiscal As String - - UUID = resultadoTimbre.FolioUUID - FolioFiscal = resultadoTimbre.FolioUUID - If FolioFiscal <> "" Then - resultadoTimbre.GuardaXml(RutaArchivo, NombreArchivoXML) - - - If ObjCFDITimbre.Comprobante.TipoComprobante <> "P" Then - - 'Actualiza Estatus Factura - If Ventas.CveVenta > 0 Then - - - Dim ObjVentas As New ClsVentas() - If ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", Now, Ventas.CveVenta, CvePAC:=UsuarioActual.Empresa.CvePAC, RFCReceptor:=ObjCFDITimbre.Receptor.RFC, CFDIVersion:="3.3") Then - Retorno = "" - Else - Retorno = "Error" - End If - ObjVentas.Dispose() - - - ''Actualiza Cliente (NumeroCuenta) - 'If Not UsuarioActual.CveEmpresa.Contiene(72, 80) Then - ' Dim Hilo2 As New System.Threading.Thread(Sub() ActualizaCliente(UsuarioActual.CveUsuario, Ventas.Cliente.NumCtaPago, Ventas.CveMetodoPago, Ventas.CveCliente)) - ' Hilo2.Start() - 'End If - - End If - End If - - If Not IO.Directory.Exists($"{UsuarioActual.Empresa.Ruta}CBB\") Then IO.Directory.CreateDirectory($"{UsuarioActual.Empresa.Ruta}CBB\") - - Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\" - Dim NombreCBB As String = $"{ObjCFDITimbre.Comprobante.SerieFolio}.jpg" - resultadoTimbre.GuardaCodigoBidimensional(RutaCBB, NombreCBB) - - 'Genero la addenda Ford - If Ventas.Cliente IsNot Nothing AndAlso Ventas.Cliente.Ford_GSDB <> "" Then - - Dim RutaCadena As String = String.Format("{0}{1}.xml", RutaArchivo, NombreArchivoXML) 'If(UsuarioActual.Empresa.FacturaProduccion, String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.SerieFolio), String.Format("{0}XML\{1}\{2}.xml", Ruta, Ventas.TipoDocto, Ventas.SerieFolio)) - - Dim FolioFactura As String = "" - If UsuarioActual.CveEmpresa = 8 Then FolioFactura = Ventas.Folio.ToString ' sogo, pordefault manda el folio de la factura - GeneraAddendaFord(RutaCadena, FolioFactura, Ventas.FordASN, Ventas.FordGSDB) - - End If - - If ObjCFDITimbre.Comprobante.TipoComprobante = "T" Then - Dim ObjInv As New ClsInventarios() - If ObjInv.UpdateMovimientoTimbrado(Ventas.Inv_CveMovimiento, 1, FolioFiscal, MinFecha) Then - Retorno = "" - Else - Retorno = "Error" - End If - ObjInv.Dispose() - End If - - 'Pendiente. Ruta guardar archivos - sw.Stop() - swTiempo.AppendFormat("Actualizado: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) - swmili = sw.ElapsedMilliseconds - sw.Start() - - Retorno = "" - Else - Retorno = "No se pudo timbrar ante el SAT. UUID no generado." - End If - - - Else - - If String.IsNullOrEmpty(resultadoTimbre.Detalle) Then - Dim Resultados = Newtonsoft.Json.Linq.JArray.Parse(resultadoTimbre.Detalle) - - If Resultados.Count > 0 Then - If resultadoTimbre.Descripcion.Contains("RFC del receptor no existe") Then - Retorno = $"El RFC { Resultados(0)("Value").ToString() } no existe en las bases de datos publicadas por el SAT, corrobore este dato con su cliente" - MensajeErrorCFDI = $"El RFC { Resultados(0)("Value").ToString() } no existe en las bases de datos publicadas por el SAT, corrobore este dato con su cliente" - Else - Retorno = Resultados(0)("Value").ToString() - MensajeErrorCFDI = Resultados(0)("Value").ToString() - End If - Else - Retorno = resultadoTimbre.Detalle - MensajeErrorCFDI = resultadoTimbre.Detalle - End If - Else - Retorno = resultadoTimbre.Detalle - MensajeErrorCFDI = resultadoTimbre.Detalle - End If - - End If - - GuardaLogTimbrado(swTiempo.ToString, UsuarioActual.Empresa.CvePAC) - Return Retorno - End Function #Region "F U N C I O N E S" Private Function obtenerAtributo(cadena_xml As String, nodo As String, nombre_atributo As String) As String @@ -7186,12 +3582,7 @@ Public Class Timbrado Return "" End Try End Function - Private Function TimbrarFacturaProFact(UsuarioActual As Usuario, Optional Ventas As Modelos.Factura = Nothing, Optional TmpDTConceptos As DataTable = Nothing, Optional TmpDTImpuestos As DataTable = Nothing, Optional TmpDTComplementos As DataTable = Nothing, Optional Ruta As String = "", Optional LstFordASN As ListBox = Nothing, Optional FordGSDBM As String = "", Optional ObjV As ClsVentas = Nothing) As Boolean - Dim Ret As String = TimbrarFacturaProFactv33(Ventas, UsuarioActual) - Return If(Ret = "", True, False) - - End Function Private Function TimbrarFacturaProFactV40(UsuarioActual As Usuario, Optional Ventas As Modelos.Factura = Nothing, Optional TmpDTConceptos As DataTable = Nothing, Optional TmpDTImpuestos As DataTable = Nothing, Optional TmpDTComplementos As DataTable = Nothing, Optional Ruta As String = "", Optional LstFordASN As ListBox = Nothing, Optional FordGSDBM As String = "", Optional ObjV As ClsVentas = Nothing) As Boolean Dim Ret As String = TimbrarFacturaProFactv40(Ventas, UsuarioActual) diff --git a/Ashx/E119.ashx b/Ashx/E119.ashx index 86dfc5f45..e7e3a11f0 100644 --- a/Ashx/E119.ashx +++ b/Ashx/E119.ashx @@ -100,18 +100,18 @@ Public Class E119 : Implements IHttpHandler Try Dim Metodo = If(context.Request("Metodo") = Nothing, "", context.Request("Metodo").ToString()) 'OBTENER EXISTENCIAS - If Metodo = "BASF_POG40" Then - context.Response.ContentType = "application/json" - Dim Auth = ValidarSolicitud(context) + 'If Metodo = "BASF_POG40" Then + ' context.Response.ContentType = "application/json" + ' Dim Auth = ValidarSolicitud(context) - If Auth.IsSucces Then - retorno = ConsultaDatos(context) - Else - context.Response.StatusCode = Auth.StatusCode - retorno = JsonConvert.SerializeObject(Auth.ErrorMessage) - End If + ' If Auth.IsSucces Then + ' retorno = ConsultaDatos(context) + ' Else + ' context.Response.StatusCode = Auth.StatusCode + ' retorno = JsonConvert.SerializeObject(Auth.ErrorMessage) + ' End If - End If + 'End If context.Response.Write(retorno) diff --git a/Bancos/IE.aspx.vb b/Bancos/IE.aspx.vb index aff25f863..4067c7eb5 100644 --- a/Bancos/IE.aspx.vb +++ b/Bancos/IE.aspx.vb @@ -4778,7 +4778,8 @@ Partial Class Bancos_IE filemove = fileItem.filename Next - If ObjEventoBitacora.AddEventoBitacora(TxtEventoDescripcion.Text.Trim, String.Format("{0}", FileExtension), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveIE:=CveIE) Then + + If ObjEventoBitacora.AddEventoBitacora(TxtEventoDescripcion.Text.Trim, String.Format(".{0}", FileExtension), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveIE:=CveIE) Then If filemove <> "" Then filemove.FilesMove(String.Format("OI{0}", ObjEventoBitacora.CveEvento.ToString), String.Format("{0}OI", UsuarioActual.Empresa.Ruta), ConcatenarDirectorioBase:=False) End If diff --git a/Bancos/RepEgresosSinComprobante.aspx b/Bancos/RepEgresosSinComprobante.aspx index 7091a53bf..54ffdee63 100644 --- a/Bancos/RepEgresosSinComprobante.aspx +++ b/Bancos/RepEgresosSinComprobante.aspx @@ -13,14 +13,11 @@
  • - Otros Egresos + Saldar
  • Viaticos-Personal -
  • -
  • - Saldar Proveedores -
  • +
  • Saldar FyE
  • @@ -143,8 +140,43 @@
    + + + -
    +
    +
    + Concepto: +
    +
    + + +
    +
    + : +
    +
    + + +
    +
    + + + Saldar + + +
    +
    + +
    +
    + + + @@ -153,9 +185,9 @@ - + - + @@ -166,32 +198,28 @@ - - + - - + - + - - + - - + @@ -199,7 +227,7 @@ - + diff --git a/Bancos/RepEgresosSinComprobante.aspx.vb b/Bancos/RepEgresosSinComprobante.aspx.vb index 4b23ae67d..31edbfabc 100644 --- a/Bancos/RepEgresosSinComprobante.aspx.vb +++ b/Bancos/RepEgresosSinComprobante.aspx.vb @@ -2,10 +2,9 @@ Option Strict On Imports System.Data +Imports System.Windows.Forms.VisualStyles.VisualStyleElement Imports Extensiones Imports Microsoft.Reporting.WebForms -Imports System.Linq - Partial Class Bancos_RepEgresosSinComprobante Inherits ClsPaginas @@ -61,6 +60,8 @@ Partial Class Bancos_RepEgresosSinComprobante DdlProveedores.SelectedValue = "-1" CargaDatos() + TxtConcepto.Text = "Saldado de Egresos por comprobar" + CargarCentrosDeCosto(Nothing, DdlSubProyecto, Nothing, LblSubproyecto, AplicaTodos:="Selecione uno") End If End Sub @@ -171,14 +172,19 @@ Partial Class Bancos_RepEgresosSinComprobante End Sub Private Sub LnkHabilitarSaldar_Click(sender As Object, e As EventArgs) Handles LnkHabilitarSaldar.Click + For Each gr As GridViewRow In GvESC.Rows If gr.DataKey("CveIE") <> "" Then gr.FCCheckBox("Chk").Visible = True - LnkSaldar.Visible = True - LnkHabilitarSaldar.Visible = False UPDatos.Update() + End If Next + + TxtConcepto.Text = "Saldo de Egresos por comprobar" + DVSaldar.Visible = True + UpSaldar.Update() + End Sub Private Sub LnkHabilitarSaldoFyE_Click(sender As Object, e As EventArgs) Handles LnkHabilitarSaldarFyE.Click For Each gr As GridViewRow In GvPersonal.Rows @@ -193,85 +199,96 @@ Partial Class Bancos_RepEgresosSinComprobante Protected Sub LnkSaldar_Click(sender As Object, e As EventArgs) + + + Dim Contador As Integer = 0 + For Each gr As GridViewRow In GvESC.Rows + If gr.FCCheckBox("Chk").Checked Then + Contador += 1 + End If + Next + + If Not Contador > 0 Then + Alert("No se hay movimientos seleccionados") + Exit Sub + End If + + Dim ObjConta As New ClsContabilidad Dim ObjProveedor As New ClsCompProveedores(ObjConta.IniciaTransacSQL()) - Dim EsContabilizable As Boolean = If(UsuarioActual.CveEmpresa.Contiene(13, 83), False, True) Dim CvePrePoliza As Integer = 0 Dim MsgError As String = "" Try - For Each gr As GridViewRow In GvESC.Rows - If gr.FCCheckBox("Chk").Checked Then - Dim IdCtaContable As Integer = 0 - Dim TipoMovtoOtIngresos As Boolean = False - Dim TipoMovtoConcepto As Boolean = True - Dim CveConceptoContable As Integer - Select Case gr.DataKey("CveConceptoContable").ToEntero - Case 10 - CveConceptoContable = 21 - Case 28 - CveConceptoContable = 29 - TipoMovtoOtIngresos = False - TipoMovtoConcepto = True - Case 37 - CveConceptoContable = 43 - Case 42 - CveConceptoContable = 41 - Case 43 - CveConceptoContable = 37 - End Select - If ObjProveedor.GetProveedores(ClsCompProveedores.TipoConsulta.ParaUsoEnEmpresa, gr.DataKey("CveProveedor").ToEntero, "-1", "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa) Then - If ObjProveedor.DtResultados.Rows.Count > 0 Then - IdCtaContable = ObjProveedor.IdCtaContProveedores + If Contador > 0 Then + CvePrePoliza = ObjConta.AddPrePolizas("Bancos/RepEgresosSinComprobante", 6, 0, 0, 1, Now, + TxtConcepto.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim ImporteSaldoGral As Decimal = 0 + Dim TipoMovtoConcepto As Boolean = True + For Each gr As GridViewRow In GvESC.Rows + If gr.FCCheckBox("Chk").Checked Then + Dim ImporteSaldo As Decimal = gr.DataKey("Saldo").ToDecimal + + Dim ConPrepAplicacion As ConceptosTipoSaldo = ObtenerCveConceptoPrePoliza(11, gr.DataKey("CveMoneda").ToEntero, True, gr.DataKey("CveTipoProveedor").ToEntero) + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteSaldo, ImporteSaldo, ConPrepAplicacion.CveConcepto, gr.DataKey("Folio"), TxtConcepto.Text, -1, + CveIE:=gr.DataKey("CveIE").ToEntero, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CvePersonal:=gr.DataKey("CvePersonal").ToEntero, + CveSubProyecto:=DdlSubProyecto.SelectedValue.ToEntero, Contabilizable:=EsContabilizable) Then + MsgError = "Ocurrio un error al saldar el movimiento" + Exit For End If - End If + If gr.DataKey("CveMoneda").ToEntero > 1 Then - CvePrePoliza = ObjConta.AddPrePolizas("Bancos/RepEgresosSinComprobante", 6, gr.DataKey("Saldo").ToDecimal, gr.DataKey("Saldo").ToDecimal, gr.DataKey("CveMoneda").ToEntero, Now, - "Saldo de ExC por Sistema", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) - - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovtoConcepto, gr.DataKey("Saldo").ToDecimal, "", CveConceptoContable, "Saldo de ExC por Sistema", Now, IdCtaContable, -1, - gr.DataKey("CveIE").ToEntero, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CvePersonal:=gr.DataKey("CvePersonal").ToEntero, - ImporteMX:=gr.DataKey("Saldo").ToDecimal, Contabilizable:=EsContabilizable) Then - MsgError = "Ocurrio un error al saldar el movimiento" - Exit For - End If - - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovtoOtIngresos, gr.DataKey("Saldo").ToDecimal, "", 78, "Saldo de ExC por Sistema", Now, UsuarioActual.Empresa.IdCuentaOtrosIngresos, -1, gr.DataKey("CveIE").ToEntero, - ImporteMX:=gr.DataKey("Saldo").ToDecimal, CveSubProyecto:=gr.DataKey("CveSubProyecto").ToEntero, Contabilizable:=EsContabilizable) Then - MsgError = "Ocurrio un error al saldar el movimiento" - Exit For - End If - - If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then - If Not ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa) Then - Alert("Ocurrio un Error al contabilizar, pongase en contacto con Soporte Técnico", TipoMensaje.MsgError) + Dim ImporteMN As Decimal = (ImporteSaldo * gr.DataKey("TipoCambio").ToDecimal - ImporteSaldo).RoundSQL + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovtoConcepto, ImporteMN, ImporteMN, ConPrepAplicacion.CveConceptoComplementario, gr.DataKey("Folio"), TxtConcepto.Text, -1, + CveIE:=gr.DataKey("CveIE").ToEntero, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CvePersonal:=gr.DataKey("CvePersonal").ToEntero, + ImporteME:=gr.DataKey("Saldo").ToDecimal, CveSubProyecto:=DdlSubProyecto.SelectedValue.ToEntero, Contabilizable:=EsContabilizable) Then + MsgError = "Ocurrio un error al saldar el movimiento" + Exit For + End If + ImporteSaldo += ImporteMN End If + ImporteSaldoGral += ImporteSaldo + End If + Next + If MsgError = "" Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not TipoMovtoConcepto, ImporteSaldoGral, ImporteSaldoGral, 211, "", TxtConcepto.Text, -1, + CveIE:=-1, CveSubProyecto:=DdlSubProyecto.SelectedValue.ToEntero, Contabilizable:=EsContabilizable) Then + MsgError = "Ocurrio un error al saldar el movimiento" End If + If MsgError = "" AndAlso Not ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual) Then + MsgError = "Error al validar." + End If End If - Next + Else + Alert("No se especificaron") + End If + Catch ex As Exception MsgError = "Ocurrió un error al generar la prepoliza" OnError(MsgError, ex) End Try - If MsgError = "" Then + If MsgError = "" Then + 'LnkSaldar.Visible = False + 'LnkHabilitarSaldar.Visible = True + DVSaldar.Visible = False + ObjConta.Commit() - CargaDatos() - Alert("Los movimientos se saldaron correctamente.") + CargaDatos() + Alert(String.Format("Los movimientos se saldaron correctamente
    Ver Póliza", CvePrePoliza), TipoMensaje.MsgInformacion) + Else ObjConta.RollBack() Alert(MsgError, TipoMensaje.MsgError) - End If - - LnkSaldar.Visible = False - LnkHabilitarSaldar.Visible = True - + End If + ObjConta.Dispose() ObjProveedor.Dispose() End Sub diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 35bab8940..6997b2f53 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -20455,6 +20455,7 @@ Partial Class Compras_Compras nRowAgrupado("PS") = psPSCodigo nRowAgrupado("CveClasificacion") = psCveClasificacion nRowAgrupado("Clasificacion") = psClasificacion + nRowAgrupado("CveTipoPS") = rowPS("CveTipoPS").ToString nRowAgrupado("IVAPorcentaje") = drIva("IVAPorcentaje") nRowAgrupado("RetIVAPorcentaje") = drIva("RetIVAPorcentaje") @@ -20518,6 +20519,7 @@ Partial Class Compras_Compras dRow91_5("PS") = psPSCodigo dRow91_5("CveClasificacion") = psCveClasificacion dRow91_5("Clasificacion") = psClasificacion + dRow91_5("CveTipoPS") = rowPS("CveTipoPS").ToString dRow91_5("Consec") = Consec + 1 dRow91_5("PU") = dRow91_5("PU").ToString.ToDecimal * Mul91_5 @@ -20539,6 +20541,12 @@ Partial Class Compras_Compras Consec = Consec + 2 Next DTProtateo.AcceptChanges() + 'recorrer + If CveCompra > 0 Then + For Each dbrow As DataRow In TmpDT.Rows + ClavesBorradas.Add(dbrow("CveCompraDetalle").ToString.ToEntero) + Next + End If TmpDT = DTProtateo BtnProrateoDeducible.Visible = False diff --git a/Empresas/Grales/Formatos/FlujoDiario.rdlc b/Empresas/Grales/Formatos/FlujoDiario.rdlc index 8e619396e..b1ea1c69a 100644 --- a/Empresas/Grales/Formatos/FlujoDiario.rdlc +++ b/Empresas/Grales/Formatos/FlujoDiario.rdlc @@ -1,2207 +1,5 @@  - - - - - - - - 10.07247cm - - - 3.4525cm - - - 3.69063cm - - - - - 0.6cm - - - - - true - true - - - - - SALDOS INICIALES EN BANCOS - - - - - - - - 1pt - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - Pesos - - - - - - - Textbox6 - - - - - 1pt - - - - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - Dólares - - - - - - - Textbox13 - - - - - 1pt - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - 0.49417cm - - - - - true - true - - - - - =Fields!Banco.Value - - - - - - - - 1pt - - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =IIF(Fields!Moneda.Value = "Pesos", Fields!Saldo.Value, "") - - - - - - - Saldo - - - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =IIF(Fields!Moneda.Value = "Dólares", Fields!Saldo.Value, "") - - - - - - - Saldo1 - - - - - 1pt - - 2pt - 2pt - 2pt - 2pt - - - - - - - - 0.6cm - - - - - true - true - - - - - SALDOS - - - - - - - - 1pt - - - - 1pt - - - - 1pt - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =Fields!Saldo.Value - - - - - - - Saldo2 - - - - - 1pt - - - - 1pt - - - - 1pt - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =SUM(IIF(Fields!Moneda.Value = "Dólares" AND Fields!CveCuenta.Value = "-1", CDbl(Fields!Saldo.Value), 0)) - - - - - - - Saldo3 - - - - - 1pt - - - - 1pt - - - - 1pt - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - - - - - - - - - - - - After - - - - - =IIF(Fields!Banco.Value = "", TRUE,FALSE) - - - - Before - - - - DataSet1 - 0.17639cm - 0.08599cm - 1.69417cm - 17.21559cm - - - - - - - - - 10.07247cm - - - 3.47235cm - - - 3.71048cm - - - - - 0.6cm - - - - - true - true - - - - - INGRESOS DEL DIA - - - - - - - - 1pt - - - - 1pt - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - Pesos - - - - - - - Textbox22 - - - - - 1pt - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - Dólares - - - - - - - Textbox23 - - - - - 1pt - - - - 1pt - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - 0.52062cm - - - - - true - true - - - - - =Fields!PagueseA.Value - - - - - - - - 1pt - - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Pesos", Fields!Importe.Value, "") - - - - - - - Saldo - - - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Dólares", Fields!Importe.Value, "") - - - - - - - Importe - - - - - 1pt - - 2pt - 2pt - 2pt - 2pt - - - - - - - - 0.6cm - - - - - true - true - - - - - TOTAL INGRESOS - - - - - - - - 1pt - - - - 1pt - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =SUM(IIF(Fields!Moneda.Value = "Pesos", CDbl(Fields!Importe.Value), 0)) - - - - - - - Textbox25 - - - - - 1pt - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =SUM(IIF(Fields!Moneda.Value = "Dólares", CDbl(Fields!Importe.Value), 0)) - - - - - - - Textbox26 - - - - - 1pt - - - - 1pt - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - - - - - - - - - - - - After - - - - - - Before - - - - DataSet2 - 2.08222cm - 0.08599cm - 1.72062cm - 17.25529cm - 1 - - - - - - - - - 10.09232cm - - - 3.4525cm - - - 3.71048cm - - - - - 0.6cm - - - - - true - true - - - - - GASTOS DEL DÍA - - - - - - - - 1pt - - - 1pt - - - 1pt - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - Pesos - - - - - - - Textbox6 - - - - - 1pt - - - 1pt - - - - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - Dólares - - - - - - - Textbox13 - - - - - 1pt - - - 1pt - - - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - 0.49417cm - - - - - true - true - - - - - =Fields!PagueseA.Value - - - - - - - - 1pt - - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Pesos", Fields!Importe.Value, "") - - - - - - - Saldo - - - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Dólares", Fields!Importe.Value, "") - - - - - - - Saldo1 - - - - - - 2pt - 2pt - 2pt - 2pt - - - - - - - - 0.6cm - - - - - true - true - - - - - TOTAL GASTOS - - - - - - - 1pt - - - 1pt - - - 1pt - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =SUM(IIF(Fields!Moneda.Value = "Pesos", CDbl(Fields!Importe.Value), 0)) - - - - - - - Saldo2 - - - - - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =SUM(IIF(Fields!Moneda.Value = "Dólares", CDbl(Fields!Importe.Value), 0)) - - - - - - - Saldo3 - - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - - - - - - - - - - - - After - - - - - - Before - - - - DataSet3 - 4.05351cm - 0.06614cm - 1.69417cm - 17.25529cm - 2 - - - - - - - - - 10.09232cm - - - 3.43265cm - - - 3.69063cm - - - - - 0.6cm - - - - - true - true - - - - - SALDO AL CIERRE - - - - - - - 1pt - - - 1pt - - - 1pt - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - Pesos - - - - - - - Textbox6 - - - - 1pt - - - 1pt - - - - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - Dólares - - - - - - - Textbox13 - - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - 0.49417cm - - - - - true - true - - - - - =Fields!Banco.Value - - - - - - - - 1pt - - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Pesos", Fields!Saldo.Value, "") - - - - - - - Saldo - - - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Dólares", Fields!Saldo.Value, "") - - - - - - - Saldo1 - - - - - 1pt - - 2pt - 2pt - 2pt - 2pt - - - - - - - - 0.6cm - - - - - true - true - - - - - SALDOS - - - - - - - 1pt - - - 1pt - - - 1pt - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =Fields!Saldo.Value - - - - - - - Saldo2 - - - - - - - - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - true - true - - - - - =Sum(Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Dólares" And Fields!CveCuenta.Value = "-1", CDbl(Fields!Saldo.Value), 0)) - - - - - - - Saldo3 - - - - 1pt - - - 1pt - - - - - - 1pt - - #e0e3da - 2pt - 2pt - 2pt - 2pt - - - - - - - - - - - - - - - - - - - After - - - - - =Microsoft.VisualBasic.Interaction.IIF(Fields!Banco.Value = "", True, False) - - - - Before - - - - DataSet4 - 6.02637cm - 0.08599cm - 1.69417cm - 17.21559cm - 3 - - - - - - 3.1in - - - - - - - Textbox1 - 0.22833cm - 6.0099cm - 0.6cm - 9.74549cm - - - 2pt - 2pt - 2pt - 2pt - - - - true - true - - - - - FLUJO DIARIO - - - - - - - - - - - - - - - - Textbox2 - 0.86361cm - 6.0099cm - 0.52945cm - 9.74549cm - 1 - - - 2pt - 2pt - 2pt - 2pt - - - - External - =Parameters!LogoPath.Value - FitProportional - 0.22833cm - 0.08599cm - 2.40883cm - 4.0834cm - 2 - - - - - - true - true - - - - - =Parameters!Fecha.Value - - - - Textbox3 - 1.91108cm - 14.00032cm - 0.6cm - 6.2766cm - 3 - - - 2pt - 2pt - 2pt - 2pt - - - - 3.01512cm - 0.04947cm - 0cm - 20.22745cm - 4 - - - - - - - - - - - 1.00188cm - true - true - - - true - true - - - - - ="Página " & Globals.PageNumber & " de " & Globals.TotalPages - - - - - - - Textbox3 - 0.2734cm - 17.14236cm - 0.68085cm - 3.13456cm - - - 2pt - 2pt - 2pt - 2pt - - - - true - true - - - - - Usuario: - - - - - - 2pt - 2pt - 2pt - 2pt - - - - true - true - - - - - =Parameters!UsuarioImprimio.Value - - - - - - 2pt - 2pt - 2pt - 2pt - - - - true - true - - - - - Fecha Impresión: - - - - - - 2pt - 2pt - 2pt - 2pt - - - - true - true - - - - - =Parameters!FechaImpresion.Value - - - - - - 2pt - 2pt - 2pt - 2pt - - - - 0.15874cm - 0.08599cm - 0cm - 20.21078cm - 5 - - - - - - - - - - 27.94cm - 21.59cm - 0.5cm - 0.5cm - 1cm - 1cm - 0.13cm - + + + + + + + 1pt + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Pesos + + + + + + + Textbox6 + + + + + 1pt + + + + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Dólares + + + + + + + Textbox13 + + + + + 1pt + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.49417cm + + + + + true + true + + + + + =Fields!Banco.Value + + + + + + + + 1pt + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =IIF(Fields!Moneda.Value = "Pesos", Fields!Saldo.Value, "") + + + + + + + Saldo + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =IIF(Fields!Moneda.Value = "Dólares", Fields!Saldo.Value, "") + + + + + + + Saldo1 + + + + + 1pt + + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.6cm + + + + + true + true + + + + + SALDOS + + + + + + + + 1pt + + + + 1pt + + + + 1pt + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!Saldo.Value + + + + + + + Saldo2 + + + + + 1pt + + + + 1pt + + + + 1pt + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =SUM(IIF(Fields!Moneda.Value = "Dólares" AND Fields!CveCuenta.Value = "-1", CDbl(Fields!Saldo.Value), 0)) + + + + + + + Saldo3 + + + + + 1pt + + + + 1pt + + + + 1pt + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + + + + + + + + + + + + After + + + + + =IIF(Fields!Banco.Value = "", TRUE,FALSE) + + + + Before + + + + DataSet1 + 0.17639cm + 0.24474cm + 1.69417cm + 19.59685cm + + + + + + + + + 12.45372cm + + + 3.47235cm + + + 3.71048cm + + + + + 0.6cm + + + + + true + true + + + + + INGRESOS DEL DIA + + + + + + + + 1pt + + + + 1pt + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Pesos + + + + + + + Textbox22 + + + + + 1pt + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Dólares + + + + + + + Textbox23 + + + + + 1pt + + + + 1pt + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.52062cm + + + + + true + true + + + + + =Fields!PagueseA.Value + + + + + + + + 1pt + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Pesos", Fields!Importe.Value, "") + + + + + + + Saldo + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Dólares", Fields!Importe.Value, "") + + + + + + + Importe + + + + + 1pt + + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.6cm + + + + + true + true + + + + + TOTAL INGRESOS + + + + + + + + 1pt + + + + 1pt + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =SUM(IIF(Fields!Moneda.Value = "Pesos", CDbl(Fields!Importe.Value), 0)) + + + + + + + Textbox25 + + + + + 1pt + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =SUM(IIF(Fields!Moneda.Value = "Dólares", CDbl(Fields!Importe.Value), 0)) + + + + + + + Textbox26 + + + + + 1pt + + + + 1pt + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + + + + + + + + + + + + After + + + + + + Before + + + + DataSet2 + 2.08222cm + 0.24474cm + 1.72062cm + 19.63655cm + 1 + + + + + + + + + 12.47357cm + + + 3.4525cm + + + 3.71048cm + + + + + 0.6cm + + + + + true + true + + + + + GASTOS DEL DÍA + + + + + + + + 1pt + + + 1pt + + + 1pt + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Pesos + + + + + + + Textbox6 + + + + + 1pt + + + 1pt + + + + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Dólares + + + + + + + Textbox13 + + + + + 1pt + + + 1pt + + + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.49417cm + + + + + true + true + + + + + =Fields!PagueseA.Value + + + + + + + + 1pt + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Pesos", Fields!Importe.Value, "") + + + + + + + Saldo + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Dólares", Fields!Importe.Value, "") + + + + + + + Saldo1 + + + + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.6cm + + + + + true + true + + + + + TOTAL GASTOS + + + + + + + 1pt + + + 1pt + + + 1pt + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =SUM(IIF(Fields!Moneda.Value = "Pesos", CDbl(Fields!Importe.Value), 0)) + + + + + + + Saldo2 + + + + + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =SUM(IIF(Fields!Moneda.Value = "Dólares", CDbl(Fields!Importe.Value), 0)) + + + + + + + Saldo3 + + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + + + + + + + + + + + + After + + + + + + Before + + + + DataSet3 + 4.05351cm + 0.22489cm + 1.69417cm + 19.63655cm + 2 + + + + + + + + + 12.45372cm + + + 3.43265cm + + + 3.69063cm + + + + + 0.6cm + + + + + true + true + + + + + SALDO AL CIERRE + + + + + + + 1pt + + + 1pt + + + 1pt + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Pesos + + + + + + + Textbox6 + + + + 1pt + + + 1pt + + + + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + Dólares + + + + + + + Textbox13 + + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.49417cm + + + + + true + true + + + + + =Fields!Banco.Value + + + + + + + + 1pt + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Pesos", Fields!Saldo.Value, "") + + + + + + + Saldo + + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Dólares", Fields!Saldo.Value, "") + + + + + + + Saldo1 + + + + + 1pt + + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.6cm + + + + + true + true + + + + + SALDOS + + + + + + + 1pt + + + 1pt + + + 1pt + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!Saldo.Value + + + + + + + Saldo2 + + + + + + + + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Sum(Microsoft.VisualBasic.Interaction.IIF(Fields!Moneda.Value = "Dólares" And Fields!CveCuenta.Value = "-1", CDbl(Fields!Saldo.Value), 0)) + + + + + + + Saldo3 + + + + 1pt + + + 1pt + + + + + + 1pt + + #e0e3da + 2pt + 2pt + 2pt + 2pt + + + + + + + + + + + + + + + + + + + After + + + + + =Microsoft.VisualBasic.Interaction.IIF(Fields!Banco.Value = "", True, False) + + + + Before + + + + DataSet4 + 6.02637cm + 0.24474cm + 1.69417cm + 19.577cm + 3 + + + + + + 3.1in + + + + + + + Textbox1 + 0.22833cm + 4.58115cm + 0.6cm + 11.78278cm + + + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + FLUJO DIARIO + + + + + + + + + + + + + + + + Textbox2 + 0.86361cm + 4.58115cm + 0.52945cm + 11.78278cm + 1 + + + 2pt + 2pt + 2pt + 2pt + + + + External + =Parameters!LogoPath.Value + FitProportional + 0.08599cm + 2.40883cm + 4.0834cm + 2 + + + + + + true + true + + + + + Fecha: + + + + Textbox3 + 2.51466cm + 0.08599cm + 0.6cm + 6.2766cm + 3 + + + 2pt + 2pt + 2pt + 2pt + + + + 3.33262cm + 0.04947cm + 0cm + 20.22745cm + 4 + + + + + + + + + + + 1.00188cm + true + true + + + true + true + + + + + ="Página " & Globals.PageNumber & " de " & Globals.TotalPages + + + + + + + Textbox3 + 0.2734cm + 17.14236cm + 0.68085cm + 3.13456cm + + + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + Usuario: + + + + + + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + =Parameters!UsuarioImprimio.Value + + + + + + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + Fecha Impresión: + + + + + + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + =Parameters!FechaImpresion.Value + + + + + + 2pt + 2pt + 2pt + 2pt + + + + 0.15874cm + 0.08599cm + 0cm + 20.21078cm + 5 + + + + + + + + + + 27.94cm + 21.59cm + 0.5cm + 0.5cm + 1cm + 1cm + 0.13cm + @@ -3492,7 +3492,7 @@ First(Fields!MonedaP.Value, "Pago") + " - " + First(Fields!TipoCambioP.Value, "P Textbox31 0.00031cm 0.47652cm - 1.90028cm + 1.72389cm 7 @@ -3521,9 +3521,9 @@ First(Fields!MonedaP.Value, "Pago") + " - " + First(Fields!TipoCambioP.Value, "P Textbox32 - 1.90059cm + 1.75948cm 0.47652cm - 2.86701cm + 3.00812cm 8