Ayuda Sello Invalido No encuentro el error

Es tan comun este tema que he decidido abrir un foro especial para este caso. Se trata de programadores que tienen problemas para crear el Sello Digital y que no pasan la validacion
dacanetdev
Mensajes: 12
Registrado: Dom Jun 05, 2011 10:38 pm

Ayuda Sello Invalido No encuentro el error

Mensajepor dacanetdev » Sab Dic 15, 2012 9:25 am

Les agradeceria colegas que me ayudaran a ver que tiene incorrecto este XML y/o sello

Dado ya intente en ValidaCFD y en SAT y en los dos me dice que el Sello es Invalido pero en CFD no recibo ningun mensaje de error.

Si me pudieran ayudar se los agradeceria, mi cliente no puede cobrar unas facturas y es raro porque otras facturas si le validan.

Saludos
Adjuntos
F022483_20121215.xml
(12.18 KiB) Descargado 310 veces

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Re: Ayuda Sello Invalido No encuentro el error

Mensajepor Dado » Sab Dic 15, 2012 9:35 am

Checa tu cadena original para ver como interpretas esas comillas

Tu cadena original deberia tener el dato asi :

BROCA TRUPER TIPO MANITA 1/2" #BPT-1/2


Pero es posible que erroneamente lo estes tomando asi :

BROCA TRUPER TIPO MANITA 1/2" #BPT-1/2


Es solo una posibilidad, no significa que este sea el problema
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

dacanetdev
Mensajes: 12
Registrado: Dom Jun 05, 2011 10:38 pm

Re: Ayuda Sello Invalido No encuentro el error

Mensajepor dacanetdev » Sab Dic 15, 2012 9:51 am

La cadena la estoy formando antes del XML y uso el dato de descripcion de mi catalogo de productos y cuando formo el XML hago las conversiones de " a "

Tengo este metodo

Código: Seleccionar todo

 private string CleanValue(string value)
        {
            string result = value;

            while (result.Contains("  "))
                result = result.Replace("  ", " ");

            result = result.Replace("|", "");
            result = result.Replace("\n", " ").Replace("\r", " ").Replace("\t", " ");

            result = result.Replace("&", "&");
            result = result.Replace("\"", """);
            result = result.Replace("<", "&lt;");
            result = result.Replace(">", "&gt;");
            result = result.Replace("\"", "&quot;");

            return result;
        }


Me faltara algun encode? Alguna otra sugerencia?

mauricio
Mensajes: 372
Registrado: Mié Ago 11, 2010 2:55 am
Ubicación: México, D.F.
Contactar:

Re: Ayuda Sello Invalido No encuentro el error

Mensajepor mauricio » Sab Dic 15, 2012 10:48 am

La cadena original... ¿la generas tu o usas XSLT?
Todo lo que no es dado es perdido

dacanetdev
Mensajes: 12
Registrado: Dom Jun 05, 2011 10:38 pm

Re: Ayuda Sello Invalido No encuentro el error

Mensajepor dacanetdev » Sab Dic 15, 2012 12:13 pm

Yo la genero

mauricio
Mensajes: 372
Registrado: Mié Ago 11, 2010 2:55 am
Ubicación: México, D.F.
Contactar:

Re: Ayuda Sello Invalido No encuentro el error

Mensajepor mauricio » Sab Dic 15, 2012 4:59 pm

Te recomiendo fehacientemente que uses XSLT... aunque sea solo para que pruebes si por ahí esta el error...

Saludos
Todo lo que no es dado es perdido

Avatar de Usuario
Dado
Mensajes: 15824
Registrado: Mar Jul 06, 2010 8:56 pm

Re: Ayuda Sello Invalido No encuentro el error

Mensajepor Dado » Sab Dic 15, 2012 6:46 pm

Tambien me parece poco practico generar la cadena ANTES del XML

Deberias crear una funcion en la que le envies un XML cualquiera y te genere la cadena, en ese orden
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!

dacanetdev
Mensajes: 12
Registrado: Dom Jun 05, 2011 10:38 pm

Re: Ayuda Sello Invalido No encuentro el error

Mensajepor dacanetdev » Dom Dic 16, 2012 10:30 pm

Yo soy programador de .NET, que tanto recomiendan el approach de XMLSerialize usando la clase generada a partir del xsd?

dacanetdev
Mensajes: 12
Registrado: Dom Jun 05, 2011 10:38 pm

Re: Ayuda Sello Invalido No encuentro el error

Mensajepor dacanetdev » Lun Dic 17, 2012 5:02 am

Gracias Dado, Mauricio

Sus sugerencias fueron de mucha ayuda, efectivamente opté por seguir su consejo y con XMLSerialize de la clase apartir del xsd pude generar el XML, con xslt sacar la cadena original y a recomendación de Dado usé 4 decimales y con eso ya me validaron todos mis CFD

Incluyo mi Unit Test

Código: Seleccionar todo

[TestClass]
    public class CFDServiceTest
    {
        [TestMethod]
        public void CanCreateCFD()
        {
            int facturaId = 24359;

            FacturaRepository facturaRepo = new FacturaRepository(new UnitOfWork());

            var factura = facturaRepo.GetById(facturaId);
           
            Comprobante comprobante = GetComprobante(factura);
           
            string cfd = CFDService.CreateCFD(comprobante, factura.Certificado);

            Assert.IsTrue(!string.IsNullOrEmpty(cfd));
        }

        private Comprobante GetComprobante(Factura factura)
        {
            Comprobante comprobante = new Comprobante();
            UnitOfWork unitOfWork = new UnitOfWork();

            CatalogosRepository catalogRepo = new CatalogosRepository(unitOfWork);
            DatosNegocio datosNegocio = catalogRepo.GetDatosNegocio();

            comprobante.version = "2.2";
            comprobante.anoAprobacion = factura.Folio.AprobacionFoliosDetalle.AprobacionFolio.YearAprobacion.ToString();
            comprobante.noAprobacion = factura.Folio.AprobacionFoliosDetalle.AprobacionFolio.NumAprobacion.ToString();
            comprobante.fecha = Convert.ToDateTime(factura.FechaEmision).ToString("yyyy-MM-ddThh:mm:ss");
            comprobante.serie = "F";
            comprobante.folio = factura.Folio.FolioConsecutivo.ToString();
            comprobante.metodoDePago = factura.MetodoDePago;
            comprobante.NumCtaPago = factura.NumeroCuenta;
            comprobante.noCertificado = factura.Certificado.NumCertificado;
            comprobante.tipoDeComprobante = ComprobanteTipoDeComprobante.ingreso;
            comprobante.formaDePago = factura.FormaPago;
            comprobante.LugarExpedicion = string.Format("{0}, {1}", datosNegocio.MunicipioExpedido, datosNegocio.EstadoExpedido);

            comprobante.Emisor = new ComprobanteEmisor();
            comprobante.Emisor.rfc = datosNegocio.RFC;
            comprobante.Emisor.nombre = datosNegocio.Nombre;
            comprobante.Emisor.DomicilioFiscal = new t_UbicacionFiscal();
            comprobante.Emisor.DomicilioFiscal.calle = datosNegocio.Calle;
            comprobante.Emisor.DomicilioFiscal.noExterior = datosNegocio.NumExterior;
            comprobante.Emisor.DomicilioFiscal.colonia = datosNegocio.Colonia;
            comprobante.Emisor.DomicilioFiscal.localidad = datosNegocio.Localidad;
            comprobante.Emisor.DomicilioFiscal.referencia = datosNegocio.Referencia;
            comprobante.Emisor.DomicilioFiscal.municipio = datosNegocio.Municipio;
            comprobante.Emisor.DomicilioFiscal.estado = datosNegocio.Estado;
            comprobante.Emisor.DomicilioFiscal.pais = datosNegocio.Pais;
            comprobante.Emisor.DomicilioFiscal.codigoPostal = datosNegocio.CP;

            comprobante.Receptor = new ComprobanteReceptor();
            comprobante.Receptor.rfc = factura.RFCCliente;

            comprobante.Emisor.RegimenFiscal = new ComprobanteEmisorRegimenFiscal[] {
                new ComprobanteEmisorRegimenFiscal() { Regimen = "Regimen General de Persona Moral" }
            };

            List<ComprobanteConcepto> conceptos = new List<ComprobanteConcepto>();

            List<VentaDetalle> ventaDetalle = new List<VentaDetalle>();

            foreach (var facturaDocumentoVenta in factura.FacturaDocumentoVentas)
            {
                ventaDetalle.AddRange(facturaDocumentoVenta.DocumentoVenta.Venta.VentaDetalles);
            }

            decimal tasaIVA = 0;
            decimal importe = 0;
            decimal importeIVA = 0;
            decimal subTotal = 0;

            foreach (var item in ventaDetalle)
            {
                ComprobanteConcepto concepto = new ComprobanteConcepto();

                if (tasaIVA == 0)
                    tasaIVA = (decimal)item.TasaIVA;

                concepto.cantidad = (decimal)item.Cantidad;
                concepto.descripcion = item.Producto.Descripcion;
                concepto.valorUnitario = Decimal.Round((decimal)item.PrecioSinIVA, 4);
                concepto.unidad = item.Producto.Unidad;
                concepto.noIdentificacion = item.ProductoId.ToString();
                concepto.importe = Decimal.Round((decimal)item.ImporteSinIVA, 4);

                importe += decimal.Round((decimal)item.Importe, 4);
                importeIVA += decimal.Round((decimal)item.MontoIVA, 4);
                subTotal += decimal.Round((decimal)item.ImporteSinIVA, 4);

                conceptos.Add(concepto);
            }

            comprobante.Conceptos = conceptos.ToArray();
           
            comprobante.Impuestos = new ComprobanteImpuestos();

            ComprobanteImpuestosTraslado traslado = new ComprobanteImpuestosTraslado();
            traslado.tasa = tasaIVA;
            traslado.importe = importeIVA;
            traslado.impuesto = ComprobanteImpuestosTrasladoImpuesto.IVA;

            comprobante.Impuestos.Traslados = new ComprobanteImpuestosTraslado[] { traslado };
            comprobante.Impuestos.totalImpuestosTrasladados = importeIVA;

            comprobante.subTotal = subTotal;
            comprobante.total = importe;
            comprobante.FolioFiscalOrig = factura.FolioComprobanteDigital;

            return comprobante;
        }

       
    }


Volver a “SELLO DIGITAL INVALIDO”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados