Curso gratis para crear el archivo PDF a partir de un XML 3.3 ya timbrado. C# .Net #SAT #cfdi




Con este curso de 4 videos te enseño como crear el archivo pdf a partir de un XML ya timbrado con C# .Net.

Te invito a que te suscribas a mi canal de youtube para mas videos interesantes sobre programación.

La ventaja que tiene ese curso, es que haremos el archivo pdf a partir de un archivo HTML, esto es útil para cuando el cliente pide muchos cambios en su formato (es más fácil capacitarlo a que el mismo mueva el archivo html que capacitarlo en crystal reports por ejemplo).

Me enfoco para crear el archivo PDF con un proyecto simple de consola, para que así veas que puedes implementarlo en cualquier tipo de proyecto de C# .Net: mvc .net, asp, Windows form, WPF, WCF etc.

1.- En el primer video nos enfocaremos a obtener la información del xml 3.3 en un objeto, y para ello te muestro como es posible hacer el parseo de los datos del xml para posterior poder manipularlos.

2.- En este segundo video nos centraremos en convertir un archivo html a pdf, y de igual manera te mostrare como ejecutar Razor para que nuestro html sea manipulado dinámicamente (no importa que el proyecto no sea web, yo te muestro como hacerlo).

3.- En este video te muestro como crear el código QR como el SAT lo requiere.

4.- En este video, te muestro como hacer el archivo PDF conforme al anexo 20, al igual veremos cómo crear el texto de la cantidad total de la factura con letra.

5.- Por último, te enseño como puedes navegar a elementos mas profundos, en este caso los impuestos, y de esta manera puedas representarlos en tu pdf.

Con estos 5 videos seras capaz de crear el archivo PDF sin problemas.

 

¿Cómo crear el archivo pdf a partir de un xml timbrado 3.3 C# .Net? | Anexo 20 | SAT #4

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/

¿Cómo crear el archivo pdf a partir de un xml timbrado 3.3 C# .Net? | Creación de QR | SAT #3

En este tercer video te mostrare como crear el código QR como lo exige el SAT.

Código del video: clic aquí

Primer video: https://www.youtube.com/watch?v=gHSC8GrEC5g

Segundo video: https://www.youtube.com/watch?v=ZppyFAM2JQM

Cuarto video: https://youtu.be/0nmqpoCTUuM

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/

¿Cómo verificar si existe conexión a la base de datos por medio de Entity Framework? C# .Net

Para verificar si existe conexión a la base de datos desde nuestro contexto creado con Entity Framework, puedes hacerlo de la siguiente manera:


public bool VerificarConexión() {
    using(var db = new MiEntities()) {
        DbConnection conn = db.Database.Connection;
        try {
            //abrimos conexión, en caso de no existir dará excepción para caer en el catch
            conn.Open();
            return true;
        } catch {
            return false;
        }
    }
}

¿Cómo obtener el total de memoria RAM utilizada en el sistema operativo con C# .Net?

Para obtener el total de memoria RAM utilizada en nuestro equipo mediante C# .Net, les comparto la siguiente clase que organice, la cual obtiene la memoria disponible y la memoria total del equipo en el que se ejecuta el código (En megabytes).


public static class MonitorRam
    {

        [DllImport("psapi.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        public static extern bool GetPerformanceInfo([Out] out InformacionRendimiento PerformanceInformation, [In] int Size);

        /// Estructura que nos sera regresada por el metodo GetPerformanceInfo
        [StructLayout(LayoutKind.Sequential)]
        public struct InformacionRendimiento
        {
            public int Size;
            public IntPtr CommitTotal;
            public IntPtr CommitLimit;
            public IntPtr CommitPeak;
            public IntPtr PhysicalTotal;
            public IntPtr PhysicalAvailable;
            public IntPtr SystemCache;
            public IntPtr KernelTotal;
            public IntPtr KernelPaged;
            public IntPtr KernelNonPaged;
            public IntPtr PageSize;
            public int HandlesCount;
            public int ProcessCount;
            public int ThreadCount;
        }

        #region HELPERS
        public static Int64 GetRamDisponible()
        {
            InformacionRendimiento pi = new InformacionRendimiento();
            if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
            {
                return Convert.ToInt64((pi.PhysicalAvailable.ToInt64() * pi.PageSize.ToInt64() / 1048576));
            }
            else
            {
                return -1;
            }

        }

        public static Int64 GetRamTotal()
        {
            InformacionRendimiento pi = new InformacionRendimiento();
            if (GetPerformanceInfo(out pi, Marshal.SizeOf(pi)))
            {
                return Convert.ToInt64((pi.PhysicalTotal.ToInt64() * pi.PageSize.ToInt64() / 1048576));
            }
            else
            {
                return -1;
            }

        }

        #endregion

    }

Y para obtener la memoria RAM utilizada solo hacemos una resta:

Int64 disponible = MonitorRam.GetRamDisponible();
Int64 total = MonitorRam.GetRamTotal();
//obtenemos la memoria utilizada mediante una resta
Int64 utilizada = total - disponible;
Console.WriteLine("Memoria disponible: " + disponible.ToString());
Console.WriteLine("Memoria utilizada: " + utilizada.ToString());
Console.WriteLine("Total memoria RAM: " + total.ToString());

¿Cómo crear el archivo pdf a partir de un xml timbrado 3.3 C# .Net? | Convertir Html a PDF con ayuda de Razor | SAT #2

En este segundo video te mostrare una forma fácil de crear un archivo PDF a partir de un archivo HTML, y con ayuda de Razor poder incrustar nuestro objeto Comprobante obtenido en el primer video.

Código del video: clic aquí

Video 1: https://hdeleon.net/como-crear-el-archivo-pdf-a-partir-de-un-xml-timbrado-3-3-c-net-xml-a-clase-objeto-sat-1/

Video 3: https://hdeleon.net/como-crear-el-archivo-pdf-a-partir-de-un-xml-timbrado-3-3-c-net-creacion-de-qr-sat-3/

Curso para que aprendas a crear el xml 3.3 desde cero: https://hdeleon.net/curso-para-crear-la-factura-electronica-3-3-cfdi-del-sat-gratis-en-c-net/

Catálogos sat mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/

¿Cómo utilizar sentencias if dentro de una consulta LINQ? C# VB .Net

Para poder hacer uso de sentencias if dentro de nuestras consultas por LINQ, haremos uso de Lambda.

¿Cómo utilizar un try y catch dentro de una consulta LINQ?

A continuación con un ejemplo te muestro como es posible hacerlo:


EntityDB db= new EntityDB();
var lst = from d in db.tabla.ToList() //es importante hacerlo lista
                  select new TablaViewModel
                  {
                      id = d.id,
                      //campo es string por lo cual
                      //nuestra función delegada regresara igual string
                      campo = (new Func<string>(() => {
                                                            try {
                                                                 //utilizamos if
                                                                    if(d.alguncampo==1){
                                                                         return "Activo";
                                                                    }else{
                                                                         return "Inactivo";
                                                                    }

                                                                 }
                                                            catch {
                                                                 //si ocurre un error
                                                                   return "Error";
                                                            }
                                                        }
                                                  )
                                 )()
                  };

De esta manera podemos manipular la información para lograr el resultado deseado.

¿Cómo pasar un archivo XML de factura electrónica 3.3 timbrado a una clase u objeto en C# .Net? cfdi SAT

Para convertir un archivo XML ya timbrado a un objeto en C# haremos uso de la deserialización.

Lo primero que debes hacer es descargar las 2 clases que están debajo, estas clases fueron generadas por medio de los xsd del SAT (Como convertir un archivo xsd a clases).

cfdv33_tdCFDI_catCFDI.cs

TimbreFiscalDigitalv11_tdCFDI.cs

Una vez que tengas estas clases debes hacer lo siguiente (comento línea a línea para que entiendas el flujo):


 //crear un objeto el cual tendrá el resultado final, este objeto es el principal
 Comprobante oComprobante;
//pon la ruta donde tienes tu archivo XML Timbrado
 string path = @"C:\miXML.xml";

//creamos un objeto XMLSerializer para deserializar
XmlSerializer oSerializer = new XmlSerializer(typeof(Comprobante));

//creamos un flujo el cual recibe nuestro xml
using (StreamReader reader= new StreamReader(path))
{
      //aqui deserializamos
      oComprobante = (Comprobante)oSerializer.Deserialize(reader);

      //Deserializamos el complemento timbre fiscal
      foreach (var oComplemento in oComprobante.Complemento)
      {
              foreach (var oComplementoInterior in oComplemento.Any)
              {
                        //si el complemento es TimbreFiscalDigital lo deserializamos
                        if (oComplementoInterior.Name.Contains("TimbreFiscalDigital")) { 

                            //Objeto para aplicar ahora la deserialización del complemento timbre
                            XmlSerializer oSerializerComplemento = new XmlSerializer(typeof(TimbreFiscalDigital));
                            //creamos otro flujo para el complemento
                            using (var readerComplemento = new StringReader(oComplementoInterior.OuterXml))
                            {
                                //y por ultimo deserializamos el complemento
                                oComprobante.TimbreFiscalDigital =
                                    (TimbreFiscalDigital)oSerializerComplemento.Deserialize(readerComplemento);
                            }

                        }
                    }
                }
            }

Te invito a que tomes mi curso gratuito para crear la factura electrónica 3.3, en menos de 1 hr ya serás capaz de desarrollar módulos para facturación según obliga el SAT.

¿Cómo crear el archivo pdf a partir de un xml timbrado 3.3 C# .Net? | Xml a clase/objeto | SAT #1

En este video te mostrare como serializar un xml y guardarlo en una clase para poder manipularla los datos en C# .Net

Código del video: clic aquí

Curso para que aprendas a crear el xml 3.3 desde cero: https://hdeleon.net/curso-para-crear-la-factura-electronica-3-3-cfdi-del-sat-gratis-en-c-net/

Catálogos sat mysql: https://hdeleon.net/catalogos-para-facturar-3-3-sat-en-mysql/

¿Cómo utilizar la función serialize() de jquery en controles que no están dentro de un form? #js #jquery

La función serialize de jquery nos sirve para serializar los elementos que se encuentra dentro de un formulario en específico, es decir, al aplicar la función obtenemos los elementos preparados para una petición al backend (campo1=1&campo2=2…).

Para que podamos hacer esta funcionalidad pero en elementos que no están dentro de un form sino dentro de un div por ejemplo lo podemos hacer de la siguiente manera:


<div id="UnDiv">
   <input type="text" name="campo1">
   <select name="campo2">
        <option value="1">1</option>
        <option value="2">2</option>
   </select>
   <input type="text" name="campo3">
</div>


//selector de jquery :input
var parametros = $('#UnDiv :input').serialize();

Recuerda poner el atributo name en los elementos a serializar y también otro tip, el selector “:input” selecciona todos los elementos de formulario, tanto input, select, textarea etc.