Esta es una serie de videos que hice para que cualquier persona afín o no afín al desarrollo de software, pueda aprender a programar.
Aviso: el siguiente contenido contiene sátira y majaderías, ya que fue hecho con ese fin.
Esta es una serie de videos que hice para que cualquier persona afín o no afín al desarrollo de software, pueda aprender a programar.
Aviso: el siguiente contenido contiene sátira y majaderías, ya que fue hecho con ese fin.
En este video te explico como crear una librería en C# .Net, para que seas capaz de encapsular tus funciones en común en un DLL, y poder reutilizarlo en tus distintos proyectos.
En este video explico los aspectos básicos para que entiendas el esquema del complemento de pago, para que sirve, y como debe ser incorporado.
Este curso esta hecho para que puedas crear el xml cfdi 3.3 con el complemento de pago en C# .Net.
En este quinto video te muestro como obtener los impuestos del xml para imprimirlos en el archivo pdf
Primer video: https://www.youtube.com/watch?v=gHSC8GrEC5g
Segundo video: https://www.youtube.com/watch?v=ZppyFAM2JQM
Tercer video: https://www.youtube.com/watch?v=2l9y_dbguaQ
Cuarto video: https://www.youtube.com/watch?v=0nmqpoCTUuM
Código del video: aquí
Te invito a que te suscribas a mi canal de youtube para mas videos interesantes sobre programación.
En este primer video te mostrare como agregar un impuesto al concepto y al nodo principal comprobante.
Descargar código: Clic aquí
Curso facturación electrónica básico: https://www.youtube.com/watch?v=XlTz0NRQLm4&list=PLWYKfSbdsjJg-yuu9K53GwthkEE8lkXDL
Curso creación pdf a partir de xml 3.3: https://www.youtube.com/watch?v=gHSC8GrEC5g&list=PLWYKfSbdsjJi6sOjwqZqotNnpWf7Jl_me
Catálogos mysql: https://www.youtube.com/watch?v=ZpHROAfzxsM
En este cuarto y último video de este curso veremos como crear el pdf a partir del anexo 20, a parte veremos como introducir la cantidad total con letra.
Código del video: clic aquí
Primer video: https://www.youtube.com/watch?v=gHSC8GrEC5g
Segundo video: https://www.youtube.com/watch?v=ZppyFAM2JQM
Tercer video: https://www.youtube.com/watch?v=2l9y_dbguaQ
Curso para que aprendas a crear el xml 3.3 desde cero: https://www.youtube.com/watch?v=XlTz0NRQLm4&list=PLWYKfSbdsjJg-yuu9K53GwthkEE8lkXDL
Catálogos sat mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/
Para contratar el servicio de timbrado comunícate al siguiente teléfono (33) 36581329 o al correo electrónico [email protected]. Y si deseas un DESCUENTO diles que viste los videos de Héctor de León o hdeleon.
En este video te mostrare como timbrar el xml que en los videos anteriores construimos y sellamos.
Descargar proyecto hecho en el video: clic aquí.
Video 1: https://www.youtube.com/watch?v=XlTz0NRQLm4
Video 2: https://www.youtube.com/watch?v=HjfqdTspnio
Video 3: https://www.youtube.com/watch?v=qIr-LdCzfF0
Video 4: https://www.youtube.com/watch?v=suRypKtb7VU
Video 5: https://www.youtube.com/watch?v=FBcEeEpgwr0
Catálogos sat mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/
class Program { //modifiquen por su path static private string path = @"C:\Users\Bioxor\source\repos\Facturacion3.3-tutorial-hdeleon\"; static string pathXML = path + @"miPrimerXML.xml"; static void Main(string[] args) { //Obtener numero certificado------------------------------------------------------------ string pathCer = path+@"XSDToXML\CSD01_AAA010101AAA.cer"; string pathKey = path+@"XSDToXML\CSD01_AAA010101AAA.key"; string clavePrivada = "12345678a"; //Obtenemos el numero string numeroCertificado, aa, b, c; SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado); //Llenamos la clase COMPROBANTE-------------------------------------------------------- Comprobante oComprobante = new Comprobante(); oComprobante.Version = "3.3"; oComprobante.Serie = "H"; oComprobante.Folio = "1"; oComprobante.Fecha = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); // oComprobante.Sello = "faltante"; //sig video oComprobante.FormaPago = "99"; oComprobante.NoCertificado = numeroCertificado; // oComprobante.Certificado = ""; //sig video oComprobante.SubTotal = 10m; oComprobante.Descuento = 1; oComprobante.Moneda = "MXN"; oComprobante.Total = 9; oComprobante.TipoDeComprobante = "I"; oComprobante.MetodoPago = "PUE"; oComprobante.LugarExpedicion = "20131"; ComprobanteEmisor oEmisor = new ComprobanteEmisor(); oEmisor.Rfc = "LEGH870601DM7"; oEmisor.Nombre = "Una razón rh de cv"; oEmisor.RegimenFiscal = "605"; ComprobanteReceptor oReceptor = new ComprobanteReceptor(); oReceptor.Nombre = "Pepe SA DE CV"; oReceptor.Rfc = "BIO091204LB1"; oReceptor.UsoCFDI = "P01"; //asigno emisor y receptor oComprobante.Emisor = oEmisor; oComprobante.Receptor = oReceptor; List<ComprobanteConcepto> lstConceptos = new List<ComprobanteConcepto>(); ComprobanteConcepto oConcepto = new ComprobanteConcepto(); oConcepto.Importe = 10m; oConcepto.ClaveProdServ = "92111704"; oConcepto.Cantidad = 1; oConcepto.ClaveUnidad = "C81"; oConcepto.Descripcion = "Un misil para la guerra"; oConcepto.ValorUnitario = 10m; oConcepto.Descuento = 1; lstConceptos.Add(oConcepto); oComprobante.Conceptos = lstConceptos.ToArray(); //Creamos el xml CreateXML(oComprobante); string cadenaOriginal = ""; string pathxsl = path+ @"XSDToXML\cadenaoriginal_3_3.xslt"; System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true); transformador.Load(pathxsl); using (StringWriter sw= new StringWriter()) using (XmlWriter xwo= XmlWriter.Create(sw,transformador.OutputSettings)) { transformador.Transform(pathXML, xwo); cadenaOriginal = sw.ToString(); } SelloDigital oSelloDigital = new SelloDigital(); oComprobante.Certificado = oSelloDigital.Certificado(pathCer); oComprobante.Sello = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada); CreateXML(oComprobante); //TIMBRE DEL XML ServiceReferenceFC.RespuestaCFDi respuestaCFDI = new ServiceReferenceFC.RespuestaCFDi(); byte[] bXML = System.IO.File.ReadAllBytes(pathXML); ServiceReferenceFC.TimbradoClient oTimbrado =new ServiceReferenceFC.TimbradoClient(); respuestaCFDI = oTimbrado.TimbrarTest("TEST010101ST1", "aaaaaa", bXML); if (respuestaCFDI.Documento == null) { Console.WriteLine(respuestaCFDI.Mensaje); } else { System.IO.File.WriteAllBytes(pathXML, respuestaCFDI.Documento); } } private static void CreateXML(Comprobante oComprobante) { //SERIALIZAMOS.------------------------------------------------- XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces(); xmlNameSpace.Add("cfdi", "http://www.sat.gob.mx/cfd/3"); xmlNameSpace.Add("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital"); xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance"); XmlSerializer oXmlSerializar = new XmlSerializer(typeof(Comprobante)); string sXml = ""; using (var sww = new Utils.StringWriterWithEncoding(Encoding.UTF8)) { using (XmlWriter writter = XmlWriter.Create(sww)) { oXmlSerializar.Serialize(writter, oComprobante,xmlNameSpace); sXml = sww.ToString(); } } //guardamos el string en un archivo System.IO.File.WriteAllText(pathXML, sXml); } }
Gratuitamente te enseñare como puedes crear tu factura electrónica con los siguientes videos, te aseguro que después de ver los videos podrás entender a la perfección como realizar el cfdi 3.3 que tanto martirio tiene a todos los contribuyentes en México.
Te invito a que te suscribas a mi canal de youtube para mas videos interesantes sobre programación.
En este primer video te muestro como generar automáticamente las clase a partir de los archivos xsd del SAT.
Una vez que creaste las clases de manera automatica, es momento de optimizarlas, y a continuación te muestro como hacerlo.
Ya por fin que tenemos nuestras clases adecuadas para crear el archivo XML, es momento de ir llenandolo conforme el anexo 20 del SAT, para ello te explico los campos del SAT para que son y como llenarlos de la forma correcta.
Ya que tenemos el xml listo, es momento comenzar el sellado, y te diré como obtener el numero del certificado; tambien te enseñare como cambiar la codificación de tu xml a utf8.
Ya por fin vamos a sellar nuestro xml con nuestro archivo key, al igual te mostrare como arreglar el problema con los campos FieldSpecified que se generaron al crear nuestras clases en el primer video, agregar los namespace adecuados del SAT, y a obtener la cadena original por medio del archivo xslt necesaria para el sellado.
Ya por fin en este vide veras como realizar el mitico timbrado de la factura, con lo cual tu factura ya sera valida para el SAT.
Para contratar el servicio de timbrado comunícate al siguiente teléfono (33) 36581329 o al correo electrónico [email protected]. Y si deseas un DESCUENTO diles que viste los videos de Héctor de León.
Si eres un perezoso o te urge hacer la facturación electrónica, te dejo el enlace al código del proyecto, espero te sirva: Código del proyecto
Dudas y comentarios pueden hacérmelos llegar en los comentarios abajo.
En este video te mostrare como contrarrestar los campos FieldSpecified creados en el primer video, poner el formato correcto de fecha, obtener la cadena original, obtener el campo certificado, poner los namespaces al xml, y por ultimo como sellar el xml con tu key.
Descargar proyecto hecho en el video: clic aquí.
Video 1: https://www.youtube.com/watch?v=XlTz0NRQLm4
Video 2: https://www.youtube.com/watch?v=HjfqdTspnio
Video 3: https://www.youtube.com/watch?v=qIr-LdCzfF0
Video 4: https://www.youtube.com/watch?v=suRypKtb7VU
Catálogos sat mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/
Puedes preguntarme sobre programación aquí: https://www.youtube.com/watch?v=M84D75OcuUU
//CÓDIGO UTILIZADO EN EL VIDEO class Program { //modifiquen por su path static private string path = @"C:\Users\Bioxor\source\repos\Facturacion3.3-tutorial-hdeleon\"; static string pathXML = path + @"miPrimerXML.xml"; static void Main(string[] args) { //Obtener numero certificado------------------------------------------------------------ string pathCer = path+@"XSDToXML\CSD01_AAA010101AAA.cer"; string pathKey = path+@"XSDToXML\CSD01_AAA010101AAA.key"; string clavePrivada = "12345678a"; //Obtenemos el numero string numeroCertificado, aa, b, c; SelloDigital.leerCER(pathCer, out aa, out b, out c, out numeroCertificado); //Llenamos la clase COMPROBANTE-------------------------------------------------------- Comprobante oComprobante = new Comprobante(); oComprobante.Version = "3.3"; oComprobante.Serie = "H"; oComprobante.Folio = "1"; oComprobante.Fecha = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss"); // oComprobante.Sello = "faltante"; //sig video oComprobante.FormaPago = "99"; oComprobante.NoCertificado = numeroCertificado; // oComprobante.Certificado = ""; //sig video oComprobante.SubTotal = 10m; oComprobante.Descuento = 1; oComprobante.Moneda = "MXN"; oComprobante.Total = 9; oComprobante.TipoDeComprobante = "I"; oComprobante.MetodoPago = "PUE"; oComprobante.LugarExpedicion = "20131"; ComprobanteEmisor oEmisor = new ComprobanteEmisor(); oEmisor.Rfc = "POWE870601DM7"; oEmisor.Nombre = "Una razón rh de cv"; oEmisor.RegimenFiscal = "605"; ComprobanteReceptor oReceptor = new ComprobanteReceptor(); oReceptor.Nombre = "Pepe SA DE CV"; oReceptor.Rfc = "PEPE080801JH1"; oReceptor.UsoCFDI = "P01"; //asigno emisor y receptor oComprobante.Emisor = oEmisor; oComprobante.Receptor = oReceptor; List<ComprobanteConcepto> lstConceptos = new List<ComprobanteConcepto>(); ComprobanteConcepto oConcepto = new ComprobanteConcepto(); oConcepto.Importe = 10m; oConcepto.ClaveProdServ = "92111704"; oConcepto.Cantidad = 1; oConcepto.ClaveUnidad = "C81"; oConcepto.Descripcion = "Un misil para la guerra"; oConcepto.ValorUnitario = 10m; oConcepto.Descuento = 1; lstConceptos.Add(oConcepto); oComprobante.Conceptos = lstConceptos.ToArray(); //Creamos el xml CreateXML(oComprobante); string cadenaOriginal = ""; string pathxsl = path+ @"XSDToXML\cadenaoriginal_3_3.xslt"; System.Xml.Xsl.XslCompiledTransform transformador = new System.Xml.Xsl.XslCompiledTransform(true); transformador.Load(pathxsl); using (StringWriter sw= new StringWriter()) using (XmlWriter xwo= XmlWriter.Create(sw,transformador.OutputSettings)) { transformador.Transform(pathXML, xwo); cadenaOriginal = sw.ToString(); } SelloDigital oSelloDigital = new SelloDigital(); oComprobante.Certificado = oSelloDigital.Certificado(pathCer); oComprobante.Sello = oSelloDigital.Sellar(cadenaOriginal, pathKey, clavePrivada); CreateXML(oComprobante); } private static void CreateXML(Comprobante oComprobante) { //SERIALIZAMOS.------------------------------------------------- XmlSerializerNamespaces xmlNameSpace = new XmlSerializerNamespaces(); xmlNameSpace.Add("cfdi", "http://www.sat.gob.mx/cfd/3"); xmlNameSpace.Add("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital"); xmlNameSpace.Add("xsi", "http://www.w3.org/2001/XMLSchema-instance"); XmlSerializer oXmlSerializar = new XmlSerializer(typeof(Comprobante)); string sXml = ""; using (var sww = new Utils.StringWriterWithEncoding(Encoding.UTF8)) { using (XmlWriter writter = XmlWriter.Create(sww)) { oXmlSerializar.Serialize(writter, oComprobante,xmlNameSpace); sXml = sww.ToString(); } } //guardamos el string en un archivo System.IO.File.WriteAllText(pathXML, sXml); } }
En este video te mostrare como crear tu xml en utf8, también a obtener el número del certificado a partir del archivo Cer e incluirlo en el xml.
Certificados de prueba: http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Paginas/certificado_sello_digital.aspx
Video 1: https://www.youtube.com/watch?v=XlTz0NRQLm4
Video 2: https://www.youtube.com/watch?v=HjfqdTspnio
Video 3: https://www.youtube.com/watch?v=qIr-LdCzfF0
Catálogos sat mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/