
DESCARGA SOFTWARE PARA FACTURA ELECTRONICA DE AQUI.
Facturacion, Validacion, Addendas, Librerias de programacion, etc.
CARTA PORTE V3.1
ECODEX TIENE ESTOS NUEVOS DATOS DE CONTACTO :
Comercializacion y Ventas - Evelia Vicke evicke@ecodex.com.mx 33-16-03-03-48
Soporte - Humberto Guerrero soporte@ecodex.com.mx 33-34-90-46-03
.
Ayuda Sello Invalido No encuentro el error
-
- Mensajes: 12
- Registrado: Dom Jun 05, 2011 9:38 pm
Ayuda Sello Invalido No encuentro el error
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
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 424 veces
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Ayuda Sello Invalido No encuentro el error
Checa tu cadena original para ver como interpretas esas comillas
Tu cadena original deberia tener el dato asi :
Tu cadena original deberia tener el dato asi :
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 problemaBROCA TRUPER TIPO MANITA 1/2" #BPT-1/2
ADDENDAS? VALIDACION? CODIGO PARA PROGRAMAR TU PROPIA SOLUCION? TODO LO TENEMOS EN WWW.VALIDACFD.COM VISITANOS !!
-
- Mensajes: 12
- Registrado: Dom Jun 05, 2011 9:38 pm
Re: Ayuda Sello Invalido No encuentro el error
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
Me faltara algun encode? Alguna otra sugerencia?
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("<", "<");
result = result.Replace(">", ">");
result = result.Replace("\"", """);
return result;
}
-
- Mensajes: 372
- Registrado: Mié Ago 11, 2010 1:55 am
- Ubicación: México, D.F.
- Contactar:
Re: Ayuda Sello Invalido No encuentro el error
La cadena original... ¿la generas tu o usas XSLT?
Todo lo que no es dado es perdido
-
- Mensajes: 12
- Registrado: Dom Jun 05, 2011 9:38 pm
Re: Ayuda Sello Invalido No encuentro el error
Yo la genero
-
- Mensajes: 372
- Registrado: Mié Ago 11, 2010 1:55 am
- Ubicación: México, D.F.
- Contactar:
Re: Ayuda Sello Invalido No encuentro el error
Te recomiendo fehacientemente que uses XSLT... aunque sea solo para que pruebes si por ahí esta el error...
Saludos
Saludos
Todo lo que no es dado es perdido
- Dado
- Mensajes: 15980
- Registrado: Mar Jul 06, 2010 7:56 pm
Re: Ayuda Sello Invalido No encuentro el error
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
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 !!
-
- Mensajes: 12
- Registrado: Dom Jun 05, 2011 9:38 pm
Re: Ayuda Sello Invalido No encuentro el error
Yo soy programador de .NET, que tanto recomiendan el approach de XMLSerialize usando la clase generada a partir del xsd?
-
- Mensajes: 12
- Registrado: Dom Jun 05, 2011 9:38 pm
Re: Ayuda Sello Invalido No encuentro el error
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
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;
}
}