From d8d4e7ce6724f77d2e892e411495b9e3efb8d9c4 Mon Sep 17 00:00:00 2001 From: rrene Date: Mon, 6 Jun 2022 12:55:05 -0700 Subject: [PATCH] - mejoras en timbrado 4.0 --- App_Code/CFDITimbre.vb | 2 + App_Code/ClsPaginas.vb | 19 ++++- App_Code/Timbrado.vb | 163 +++++++++++++++++------------------------ Bin/GoCfdi.dll | Bin 551936 -> 552448 bytes 4 files changed, 85 insertions(+), 99 deletions(-) diff --git a/App_Code/CFDITimbre.vb b/App_Code/CFDITimbre.vb index e51b8636f..2ce881836 100644 --- a/App_Code/CFDITimbre.vb +++ b/App_Code/CFDITimbre.vb @@ -466,6 +466,8 @@ Public Class CFDIComplementoPagos tRetorno.TotalTrasladosImpuestoIVA8 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.08 Select c.Importe).Sum() tRetorno.TotalTrasladosImpuestoIVA16 = (From c In Traslados Where c.Impuesto = "002" And c.TasaOCuota = 0.16 Select c.Importe).Sum() + tRetorno.TotalRetencionesIEPS = (From c In Retenciones Where c.Impuesto = "003" Select c.Importe).Sum() + Return tRetorno End Get End Property diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 6ef8dab01..1297e28ae 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -730,7 +730,7 @@ Public Class ClsPaginas End Set End Property - Property GlobalDTRegimenesFiscales() As DataTable + Property GlobalDTRegimenesFiscales(Optional TipoPersona As Integer = -1) As DataTable Get Dim AppNombre As String = String.Format("GlobalDTRegimenesFiscales") 'sino existe, recarga los datos @@ -739,7 +739,18 @@ Public Class ClsPaginas If ObjGral.GetRegimenFiscal(-1) Then Application(AppNombre) = ObjGral.DtResultados ObjGral.Dispose() End If - GlobalDTRegimenesFiscales = DirectCast(Application(AppNombre), DataTable) + If TipoPersona <> -1 Then + Dim Str As New StringBuilder + If TipoPersona = 0 Then Str.Append("AplicaPersonaFisica = 1") '0 - Fisica + If TipoPersona = 1 Then Str.Append("AplicaPersonaMoral = 1") '1 - Moral + Dim Dv As New DataView(DirectCast(Application(AppNombre), DataTable), Str.ToString(), "", DataViewRowState.CurrentRows) + GlobalDTRegimenesFiscales = Dv.ToTable + Dv.Dispose() + Else + GlobalDTRegimenesFiscales = DirectCast(Application(AppNombre), DataTable) + End If + + End Get Set(value As DataTable) Dim AppNombre As String = String.Format("GlobalDTRegimenesFiscales") @@ -8965,7 +8976,7 @@ Public Class ClsPaginas Dim validaElementoPago = XmlDoc.DocumentElement("cfdi:Conceptos") If Version = "3.3" Then cfdVer = "http://www.sat.gob.mx/cfd/3" - namespaces.AddNamespace("pago10", "http://www.sat.gob.mx/Pagos10") + namespaces.AddNamespace("pago10", "http://www.sat.gob.mx/Pagos") PagoVersion = "pago10" Else ' se considera que es la version 4.0 cfdVer = "http://www.sat.gob.mx/cfd/4" @@ -8990,7 +9001,7 @@ Public Class ClsPaginas End If Dim nodePagos As XmlNodeList - nodePagos = XmlDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Complemento/pago20:Pagos/pago20:Pago", Prefijo), namespaces) + nodePagos = XmlDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Complemento/{1}:Pagos/{1}:Pago", Prefijo, PagoVersion), namespaces) For Each Pagos As XmlNode In nodePagos If Version = "4.0" AndAlso Pagos.Name = "pago20:Totales" Then diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 1b4b48413..f9341507e 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -4113,40 +4113,44 @@ Public Class Timbrado Totales.TotalTrasladosBaseIVA16 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA16.RoundSQL Totales.TotalTrasladosBaseIVA16Specified = Totales.TotalTrasladosBaseIVA16 > 0 Totales.TotalTrasladosImpuestoIVA16 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosImpuestoIVA16.RoundSQL - Totales.TotalTrasladosImpuestoIVA16Specified = Totales.TotalTrasladosBaseIVA16 > 0 + Totales.TotalTrasladosImpuestoIVA16Specified = Totales.TotalTrasladosImpuestoIVA16 > 0 Totales.TotalTrasladosBaseIVA8 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA8.RoundSQL Totales.TotalTrasladosBaseIVA8Specified = Totales.TotalTrasladosBaseIVA8 > 0 - Totales.TotalTrasladosImpuestoIVA8 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA8.RoundSQL - Totales.TotalTrasladosImpuestoIVA8Specified = Totales.TotalTrasladosBaseIVA8 > 0 + Totales.TotalTrasladosImpuestoIVA8 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosImpuestoIVA8.RoundSQL + Totales.TotalTrasladosImpuestoIVA8Specified = Totales.TotalTrasladosImpuestoIVA8 > 0 Totales.TotalTrasladosBaseIVA0 = ObjCFDITimbre.ComplementoPagos.Totales.TotalTrasladosBaseIVA0.RoundSQL Totales.TotalTrasladosBaseIVA0Specified = Totales.TotalTrasladosBaseIVA0 > 0 Totales.TotalTrasladosImpuestoIVA0 = 0 - Totales.TotalTrasladosImpuestoIVA0Specified = Totales.TotalTrasladosBaseIVA0 > 0 + Totales.TotalTrasladosImpuestoIVA0Specified = Totales.TotalTrasladosBaseIVA0 > 0 ' si hay base > 0, debe de ponerse aunque sea en cero + If ObjCFDITimbre.ComplementoPagos.Totales.TotalRetencionesIEPS > 0 Then + Totales.TotalRetencionesIEPS = ObjCFDITimbre.ComplementoPagos.Totales.TotalRetencionesIEPS.RoundSQL + Totales.TotalRetencionesIEPSSpecified = True + Else + Totales.TotalRetencionesIEPSSpecified = False + End If - - Totales.TotalRetencionesIEPSSpecified = False ComPag.Totales = Totales - ComPag.Pago(0).DoctoRelacionado = New Profact.TimbraCFDI40.Complementos.Pagos20.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.TimbraCFDI40.Complementos.Pagos20.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).NumParcialidad = doc.NumParcialidad.ToString - ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt.RoundSQL - ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True - ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado.RoundSQL - ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto.RoundSQL - ComPag.Pago(0).DoctoRelacionado(i).EquivalenciaDR = doc.EquivalenciaDR - ComPag.Pago(0).DoctoRelacionado(i).EquivalenciaDRSpecified = True - ComPag.Pago(0).DoctoRelacionado(i).ObjetoImpDR = doc.ObjetoImpuesto + ComPag.Pago(0).DoctoRelacionado = New Profact.TimbraCFDI40.Complementos.Pagos20.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.TimbraCFDI40.Complementos.Pagos20.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).NumParcialidad = doc.NumParcialidad.ToString + ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoAnt = doc.ImpSaldoAnt.RoundSQL + ComPag.Pago(0).DoctoRelacionado(i).ImpPagadoSpecified = True + ComPag.Pago(0).DoctoRelacionado(i).ImpPagado = doc.ImpPagado.RoundSQL + ComPag.Pago(0).DoctoRelacionado(i).ImpSaldoInsoluto = doc.ImpSaldoInsoluto.RoundSQL + ComPag.Pago(0).DoctoRelacionado(i).EquivalenciaDR = doc.EquivalenciaDR.RoundSQL(6) + ComPag.Pago(0).DoctoRelacionado(i).EquivalenciaDRSpecified = True + ComPag.Pago(0).DoctoRelacionado(i).ObjetoImpDR = doc.ObjetoImpuesto If doc.Impuestos IsNot Nothing Then ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDR @@ -4154,8 +4158,9 @@ Public Class Timbrado ''retenciones If (doc.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then Dim j As Integer = 0 + ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.RetencionesDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRRetencionDR(doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "R").Count - 1) {} + For Each docimp As CFDIConceptosImpuestos In doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "R") - ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.RetencionesDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRRetencionDR(doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "R").Count - 1) {} If docimp.TrasladooRetencion = "R" Then Dim Tra As New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRRetencionDR Tra.BaseDR = docimp.Base.RoundSQL(6) @@ -4169,12 +4174,13 @@ Public Class Timbrado Next End If - ''traslados + ''traslados If (doc.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then Dim j As Integer = 0 + ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.TrasladosDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRTrasladoDR(doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "T").Count - 1) {} + For Each docimp As CFDIConceptosImpuestos In doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "T") - ComPag.Pago(0).DoctoRelacionado(i).ImpuestosDR.TrasladosDR = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRTrasladoDR(doc.Impuestos.Where(Function(x) x.TrasladooRetencion = "T").Count - 1) {} If docimp.TrasladooRetencion = "T" Then Dim Tra As New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoDoctoRelacionadoImpuestosDRTrasladoDR Tra.BaseDR = docimp.Base.RoundSQL(6) @@ -4191,83 +4197,50 @@ Public Class Timbrado End If End If i += 1 - Next - - If (ObjCFDITimbre.ComplementoPagos.Retenciones).Count > 0 Then - Dim x As Integer - If ComPag.Pago(0).ImpuestosP(0) Is Nothing Then ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {} - ComPag.Pago(0).ImpuestosP(0).RetencionesP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP((ObjCFDITimbre.ComplementoPagos.Retenciones).Count - 1) {} - For Each Ret As CFDIRetenciones In ObjCFDITimbre.ComplementoPagos.Retenciones - ComPag.Pago(0).ImpuestosP(0).RetencionesP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP() - ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImpuestoP = Ret.Impuesto - ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImporteP = Ret.Importe - x += 1 Next - End If - If ObjCFDITimbre.ComplementoPagos.Traslados.Count > 0 Then - Dim x As Integer + If (ObjCFDITimbre.ComplementoPagos.Retenciones).Count > 0 OrElse ObjCFDITimbre.ComplementoPagos.Traslados.Count > 0 Then ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {} ComPag.Pago(0).ImpuestosP(0) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP() - ComPag.Pago(0).ImpuestosP(0).TrasladosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP((ObjCFDITimbre.ComplementoPagos.Traslados).Count - 1) {} - For Each Tra As CFDITraslados In (ObjCFDITimbre.ComplementoPagos.Traslados) - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP() - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImpuestoP = Tra.Impuesto - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota.RoundSQL(6) - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe.RoundSQL(6) - ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).BaseP = Tra.Base.RoundSQL(6) - x += 1 - Next + + If (ObjCFDITimbre.ComplementoPagos.Retenciones).Count > 0 Then + Dim x As Integer + ComPag.Pago(0).ImpuestosP(0).RetencionesP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP((ObjCFDITimbre.ComplementoPagos.Retenciones).Count - 1) {} + For Each Ret As CFDIRetenciones In ObjCFDITimbre.ComplementoPagos.Retenciones + ComPag.Pago(0).ImpuestosP(0).RetencionesP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP() + ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImpuestoP = Ret.Impuesto + ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImporteP = Ret.Importe + x += 1 + Next + End If + + If ObjCFDITimbre.ComplementoPagos.Traslados.Count > 0 Then + Dim x As Integer + ComPag.Pago(0).ImpuestosP(0).TrasladosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP((ObjCFDITimbre.ComplementoPagos.Traslados).Count - 1) {} + For Each Tra As CFDITraslados In (ObjCFDITimbre.ComplementoPagos.Traslados) + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP() + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImpuestoP = Tra.Impuesto + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota.RoundSQL(6) + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe.RoundSQL(6) + ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).BaseP = Tra.Base.RoundSQL(6) + x += 1 + Next + End If End If - - - ''Estos impuestos aplicarían para anticipos - 'If ObjCFDITimbre.ComplementoPagos.tota > 0 OrElse ObjCFDITimbre.ComplementoPagos.TotalImpuestosTrasladados > 0 Then - ' ComPag.Pago(0).ImpuestosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP(0) {} - ' ComPag.Pago(0).ImpuestosP(0) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosP() - - ' If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "T").Count > 0 Then - ' Dim x As Integer - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP((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).ImpuestosP(0).TrasladosP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPTrasladoP() - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImpuestoP = Tra.Impuesto - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TipoFactorP = Tra.TipoFactor - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).TasaOCuotaP = Tra.TasaOCuota - ' ComPag.Pago(0).ImpuestosP(0).TrasladosP(x).ImporteP = Tra.Importe - ' x += 1 - ' Next - ' End If - - ' If (ObjCFDITimbre.ComplementoPagos.Impuestos).Where(Function(x) x.TrasladooRetencion = "R").Count > 0 Then - ' Dim x As Integer - ' ComPag.Pago(0).ImpuestosP(0).RetencionesP = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP((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).ImpuestosP(0).RetencionesP(x) = New Profact.TimbraCFDI40.Complementos.Pagos20.PagosPagoImpuestosPRetencionP() - ' ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImpuestoP = Ret.Impuesto - ' ComPag.Pago(0).ImpuestosP(0).RetencionesP(x).ImporteP = Ret.Importe - ' x += 1 - ' Next - ' End If - - - 'End If - - Dim nsComp As New System.Xml.Serialization.XmlSerializerNamespaces() - nsComp.Add("pago20", "http://www.sat.gob.mx/Pagos20") - Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComPag, GetType(Profact.TimbraCFDI40.Complementos.Pagos20.Pagos), nsComp) - Dim docComp As New XmlDocument() - docComp.LoadXml(xmlComp) - 'comprobante.PagosSpecified = True - LXmlComplementos.Add(docComp.DocumentElement) - TieneComplemento = True - End If + nsComp.Add("pago20", "http://www.sat.gob.mx/Pagos20") + Dim xmlComp As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(ComPag, GetType(Profact.TimbraCFDI40.Complementos.Pagos20.Pagos), nsComp) + Dim docComp As New XmlDocument() + docComp.LoadXml(xmlComp) + 'comprobante.PagosSpecified = True + LXmlComplementos.Add(docComp.DocumentElement) + TieneComplemento = True + End If - End If + End If #End Region diff --git a/Bin/GoCfdi.dll b/Bin/GoCfdi.dll index 8375b7d16f033cc02a05a42a7caf06629f53613f..7e2aee54eee6ecd5964a11d414171d09950b4937 100644 GIT binary patch delta 12941 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 b*y+a7SF+iYdwb-tTe4Igz1MFJyFvdSy{Omt