Abrimos el menú de "Proyecto" e indicamos la opción "Administrar paquetes NuGet".
Indicamos el nombre del paquete NuGet e instalamos.
El primer paso es abrir el instalador y se mostrará la siguiente ventana.
Indicamos la ruta donde instalaremos las dependencias del SDK.
Seleccionamos las bibliotecas con las que deseamos trabajar.
En esta ventana debemos aceptar la configuración de instalación que deseamos.
El último paso es confirmar el termino de la instalación de las bibiliotecas para comenzar su uso.
Abrimos el menú de "Proyecto" e indicamos la opción "Referencia".
Indicamos el uso de la biblioteca "tagcode ReadCFDI" que se encuentra en la ruta "C:\Windows\System32\tagcode.ReadCFDI.tlb".
El primer paso es abrir el instalador y se mostrará la siguiente ventana.
Indicamos la ruta donde instalaremos las dependencias del SDK.
Seleccionamos las bibliotecas con las que deseamos trabajar.
En esta ventana debemos aceptar la configuración de instalación que deseamos.
El último paso es confirmar el termino de la instalación de las bibiliotecas para comenzar su uso.
Con nuestro código de comandos JSON ejecutaremos la aplicación consola.
using tagcode.ReadFDI;
//Configuración general para el uso de servicios
ConfiguracionesReadCFDI config = new ConfiguracionesReadCFDI("CFx4....Hg", "micontraseñaPIN");
//Es posible establecer la cuenta PIN para el uso de servicios
config.EstablecerPIN("CFx4....Hg", "miconstraseñaPIN");
//Podemos establecer una dirección Proxy para el paso de la información a la Red.
config.EstablecerProxy = "127.0.0.1:8888";
//Es posible establecer el comportamiento de los mensajes de errores.
config.MostrarDetallesEnErrores = true;
//Esta propiedad nos permite cambiar la URL de la API para usuarios con servicio personalizado.
config.UrlAPI = "https://...";
'Configuración general para el uso de servicios Dim config As New ConfiguracionesReadCFDI 'Establecer la cuenta PIN para el uso de servicios (Obligatorio) config.EstablecerPIN "CFx4....Hg", "miconstraseñaPIN" 'Podemos establecer una dirección Proxy para el paso de la información a la Red. config.EstablecerProxy = "127.0.0.1:8888" 'Es posible establecer el comportamiento de los mensajes de errores. config.MostrarDetallesEnErrores = True 'Esta propiedad nos permite cambiar la URL de la API para usuarios con servicio personalizado. config.UrlAPI = "https://..."
{
"ConfiguracionesConsola": {
//Establece la cuenta PIN (Cuenta de timbres)
"PIN": "CFx45...Hg",
//Establece la contraseña de la cuenta PIN
"PasswordPIN": "micontraseña",
//Mostramos información mas detallada en caso de recibir un error a la hora de timbrar el documento.
"MostrarDetallesEnErrores": true,
//Podemos establecer una dirección Proxy para el paso de la información a la Red.
"EstablecerProxy": "127.0.0.1:8888",
//Indica si la salida de errores será por medio de un Archivo ó directo a la consola.
"ErroresEnConsola": false,
//Indica si la salida de resultados de la función ejecutada será por medio de un Archivo ó directo a la consola.
"ResultadosEnConsola": false,
//Cuando el campo ErroresEnConsola sea 'true', este campo será obligatorio establecerlo. (Condicional)
"ArchivoErrores": "C:\\Errores.json",
//Cuando el campo ResultadosEnConsola sea 'true', este campo será obligatorio establecerlo. (Condicional)
"ArchivoResultados": "C:\\Resultados.json"
},
"ReadCFDI": {
"..."
}
}
using tagcode.ReadCFDI;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoCartaPorte.NodoMercanciasCartaPorte;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoComercioExterior;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoComercioExterior.NodoMercanciasComercioExterior;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoComercioExterior.NodoMercanciasComercioExterior.NodoMercanciaComercioExterior;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoImpuestosLocales;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoPagos10;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoPagos10.NodoPago10.NodoImpuestosPagos10.NodoRetencionesPagos10;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoPagos10.NodoPago10.NodoImpuestosPagos10.NodoTrasladosPagos10;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoPagos20;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoPagos20.NodoPago20.NodoDoctoRelacionadoPagos20;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoPagos20.NodoPago20.NodoImpuestosPPagos20.NodoRetencionesPPagos20;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoComplemento.NodoPagos20.NodoPago20.NodoImpuestosPPagos20.NodoTrasladosPPagos20;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoConceptos;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoConceptos.NodoConcepto;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoConceptos.NodoConcepto.NodoComplementoConcepto;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoImpuestos.NodoRetencionesImpuestos;
using static tagcode.ReadCFDI.ResultadosLecturaCFDI.NodoComprobante.NodoImpuestos.NodoTrasladosImpuestos;
//Configuración general para el uso de servicios (Obligatorio para poder el uso de las funciones)
ConfiguracionesReadCFDI config = new ConfiguracionesReadCFDI();
//Establece los parametros de la cuenta de timbre que se usará para la lectura.
config.EstablecerPIN("CFx45...Hg", "micontraseña");
//Mostramos información mas detallada en caso de recibir un error a la hora de generar la lectura.
config.MostrarDetallesEnErrores = true;
//Clase para lectura de comprobantes fiscales y cancelaciones
Lectura lectura = new Lectura();
//Función para obtener los datos del CFDI
ResultadosLecturaCFDI res = lectura.LeerCFDI("C:\\XML\\CfdiTimbrado.xml");
//Obtenemos los datos del comprobante
Console.WriteLine(res.Comprobante.Version);
Console.WriteLine(res.Comprobante.Fecha);
Console.WriteLine(res.Comprobante.Serie);
Console.WriteLine(res.Comprobante.Folio);
Console.WriteLine(res.Comprobante.LugarExpedicion);
Console.WriteLine(res.Comprobante.TipoDeComprobante);
Console.WriteLine(res.Comprobante.MetodoPago);
Console.WriteLine(res.Comprobante.FormaPago);
Console.WriteLine(res.Comprobante.Moneda);
Console.WriteLine(res.Comprobante.TipoCambio);
Console.WriteLine(res.Comprobante.CondicionesDePago);
Console.WriteLine(res.Comprobante.SubTotal);
Console.WriteLine(res.Comprobante.Descuento);
Console.WriteLine(res.Comprobante.Total);
Console.WriteLine(res.Comprobante.Exportacion);
Console.WriteLine(res.Comprobante.Certificado);
Console.WriteLine(res.Comprobante.Sello);
Console.WriteLine(res.Comprobante.NoCertificado);
Console.WriteLine(res.Comprobante.Confirmacion);
//Comprobamos que exista el nodo InformacionGlobal
if (res.Comprobante.InformacionGlobal != null)
{
//Obtenemos los datos del nodo InformacionGlobal
Console.WriteLine(res.Comprobante.InformacionGlobal.Periodicidad);
Console.WriteLine(res.Comprobante.InformacionGlobal.Meses);
Console.WriteLine(res.Comprobante.InformacionGlobal.Año);
}
//Comprobamos que exista el nodo CfdiRelacionados
if (res.Comprobante.CfdiRelacionados != null)
{
//Asignamos el nodo a una variable para facilitar su lectura
NodoCfdiRelacionados cr = res.Comprobante.CfdiRelacionados;
//Obtenemos los datos del nodo CfdiRelacionados
Console.WriteLine(cr.TipoRelacion);
for (int i = 0; i < cr.CfdiRelacionado.Length; i++)
{
Console.WriteLine(cr.CfdiRelacionado[i].UUID);
}
}
//Obtenemos los datos del Emisor
Console.WriteLine(res.Comprobante.Emisor.Rfc);
Console.WriteLine(res.Comprobante.Emisor.Nombre);
Console.WriteLine(res.Comprobante.Emisor.RegimenFiscal);
Console.WriteLine(res.Comprobante.Emisor.FacAtrAdquirente);
//Obtenemos los datos del Receptor
Console.WriteLine(res.Comprobante.Receptor.Rfc);
Console.WriteLine(res.Comprobante.Receptor.Nombre);
Console.WriteLine(res.Comprobante.Receptor.RegimenFiscalReceptor);
Console.WriteLine(res.Comprobante.Receptor.DomicilioFiscalReceptor);
Console.WriteLine(res.Comprobante.Receptor.UsoCFDI);
Console.WriteLine(res.Comprobante.Receptor.ResidenciaFiscal);
Console.WriteLine(res.Comprobante.Receptor.NumRegIdTrib);
//Obtenemos los datos del Concepto
for (int i = 0; i < res.Comprobante.Conceptos.Concepto.Length; i++)
{
//Asignamos una variable de tipo Concepto para facilitar la lectura
NodoConcepto concepto = res.Comprobante.Conceptos.Concepto[i];
//Obtenemos los datos del concepto
Console.WriteLine(concepto.ClaveProdServ);
Console.WriteLine(concepto.ClaveUnidad);
Console.WriteLine(concepto.Unidad);
Console.WriteLine(concepto.NoIdentificacion);
Console.WriteLine(concepto.Descripcion);
Console.WriteLine(concepto.Cantidad);
Console.WriteLine(concepto.ValorUnitario);
Console.WriteLine(concepto.Importe);
Console.WriteLine(concepto.Descuento);
Console.WriteLine(concepto.ObjetoImp);
//Comprobamos que existan impuestos en el concepto
if (concepto.Impuestos != null)
{
//Asignamos una variable de tipo ImpuestoConcepto para facilitar la lectura
NodoImpuestosConcepto impuestos = concepto.Impuestos;
//Comprobamos que existan impuestos Retenciones
if (impuestos.Retenciones != null)
{
for (int ii = 0; ii < impuestos.Retenciones.Retencion.Length; ii++)
{
//Obtenemos los datos del impuesto
Console.WriteLine(impuestos.Retenciones.Retencion[ii].Base);
Console.WriteLine(impuestos.Retenciones.Retencion[ii].Impuesto);
Console.WriteLine(impuestos.Retenciones.Retencion[ii].TipoFactor);
Console.WriteLine(impuestos.Retenciones.Retencion[ii].TasaOCuota);
Console.WriteLine(impuestos.Retenciones.Retencion[ii].Importe);
}
}
//Comprobamos que existan impuestos Traslados
if (impuestos.Traslados != null)
{
for (int ii = 0; ii < impuestos.Traslados.Traslado.Length; ii++)
{
//Obtenemos los datos del impuesto
Console.WriteLine(impuestos.Traslados.Traslado[ii].Base);
Console.WriteLine(impuestos.Traslados.Traslado[ii].Impuesto);
Console.WriteLine(impuestos.Traslados.Traslado[ii].TipoFactor);
Console.WriteLine(impuestos.Traslados.Traslado[ii].TasaOCuota);
Console.WriteLine(impuestos.Traslados.Traslado[ii].Importe);
}
}
}
//Comprobamos que existan nodos de información aduanera
if (concepto.InformacionAduanera != null)
{
//Obtenemos los datos de todos los nodos de la información aduanera del concepto
for (int ii = 0; ii < concepto.InformacionAduanera.Length; ii++)
{
Console.WriteLine(concepto.InformacionAduanera[ii].NumeroPedimento);
}
}
//Comprobamos que exista el nodo cuenta predial
if (concepto.CuentaPredial != null)
{
//Obtenemos el numero de la cuenta predial
Console.WriteLine(concepto.CuentaPredial.Numero);
}
//Comprobamos que exista el nodo ACuentaTerceros
if (concepto.ACuentaTerceros != null)
{
//obtenemos todos sus datos
Console.WriteLine(concepto.ACuentaTerceros.RfcACuentaTerceros);
Console.WriteLine(concepto.ACuentaTerceros.NombreACuentaTerceros);
Console.WriteLine(concepto.ACuentaTerceros.RegimenFiscalACuentaTerceros);
Console.WriteLine(concepto.ACuentaTerceros.DomicilioFiscalACuentaTerceros);
}
//Comprobamos que exista el nodo ComplementoConcepto
if (concepto.ComplementoConcepto != null)
{
//Revisamos los complementos existentes
if (concepto.ComplementoConcepto.instEducativas != null)
{
//Asignamos una variable para facilitar su lectura
NodoinstEducativas iedu = concepto.ComplementoConcepto.instEducativas;
//Obtenemos sus datos
Console.WriteLine(iedu.version);
Console.WriteLine(iedu.nombreAlumno);
Console.WriteLine(iedu.nivelEducativo);
Console.WriteLine(iedu.CURP);
Console.WriteLine(iedu.autRVOE);
Console.WriteLine(iedu.rfcPago);
}
}
//Comprobamos que existan los nodos Parte
if (concepto.Parte != null)
{
for (int ii = 0; ii < concepto.Parte.Length; ii++)
{
//Asignamos una variable de tipo Parte para facilitar la lectura
NodoParte parte = concepto.Parte[i];
//Obtenemos los datos del nodo Parte
Console.WriteLine(parte.ClaveProdServ);
Console.WriteLine(parte.Unidad);
Console.WriteLine(parte.NoIdentificacion);
Console.WriteLine(parte.Descripcion);
Console.WriteLine(parte.Cantidad);
Console.WriteLine(parte.ValorUnitario);
Console.WriteLine(parte.Importe);
//Comprobamos que el nodo Parte tenga información aduanera
if (parte.InformacionAduanera != null)
{
//Obtenemos todos los datos de los nodos de la información aduanera
for (int iii = 0; iii < parte.InformacionAduanera.Length; i++)
{
Console.WriteLine(parte.InformacionAduanera[iii].NumeroPedimento);
}
}
}
}
}
//Comprobamos que exista nodo de Impuestos en el comprobante
if (res.Comprobante.Impuestos != null)
{
//Obtenemos los totales de impuestos
Console.WriteLine(res.Comprobante.Impuestos.TotalImpuestosRetenidos);
Console.WriteLine(res.Comprobante.Impuestos.TotalImpuestosTrasladados);
//Comprobamos que existan nodos de impuestos retenidos
if (res.Comprobante.Impuestos.Retenciones != null)
{
for (int i = 0; i < res.Comprobante.Impuestos.Retenciones.Retencion.Length; i++)
{
//Asignamos los valores a una variable de tipo Retenciones para facilitar su lectura
NodoRetencionImpuestos retencion = res.Comprobante.Impuestos.Retenciones.Retencion[i];
//Obtenemos todos los datos de la retención
Console.WriteLine(retencion.Impuesto);
Console.WriteLine(retencion.Importe);
}
}
//Comprobamos que existan nodos de impuestos trasladados
if (res.Comprobante.Impuestos.Traslados != null)
{
for (int i = 0; i < res.Comprobante.Impuestos.Traslados.Traslado.Length; i++)
{
//Asignamos los valores a una variable de tipo Trasladados para facilitar su lectura
NodoTrasladoImpuestos traslado = res.Comprobante.Impuestos.Traslados.Traslado[i];
//Obtenemos todos los datos del impuesto trasladado
Console.WriteLine(traslado.Base);
Console.WriteLine(traslado.Impuesto);
Console.WriteLine(traslado.TipoFactor);
Console.WriteLine(traslado.TasaOCuota);
Console.WriteLine(traslado.Importe);
}
}
}
//Comprobamos si existen el nodo Complementos
if (res.Comprobante.Complemento != null)
{
//Comprobamos si existe el complemento Divisas
if (res.Comprobante.Complemento.Divisas != null)
{
//Obtenemos el tipo de operación
Console.WriteLine(res.Comprobante.Complemento.Divisas.tipoOperacion);
}
//Comprobamos si existe el complemento Donatarias
if (res.Comprobante.Complemento.Donatarias != null)
{
//Obtenemos los datos de la Donataria
Console.WriteLine(res.Comprobante.Complemento.Donatarias.version);
Console.WriteLine(res.Comprobante.Complemento.Donatarias.noAutorizacion);
Console.WriteLine(res.Comprobante.Complemento.Donatarias.fechaAutorizacion);
Console.WriteLine(res.Comprobante.Complemento.Donatarias.leyenda);
}
if (res.Comprobante.Complemento.ImpuestosLocales != null)
{
//Obtenemos los datos del complemento Impuestos locales
Console.WriteLine(res.Comprobante.Complemento.ImpuestosLocales.version);
Console.WriteLine(res.Comprobante.Complemento.ImpuestosLocales.TotaldeRetenciones);
Console.WriteLine(res.Comprobante.Complemento.ImpuestosLocales.TotaldeTraslados);
//Comprobamos que la variable contenga información
if (res.Comprobante.Complemento.ImpuestosLocales.TrasladosLocales != null)
{
//Asignamos variable de los impuestos trasladados para facilitar la lectura
NodoTrasladosImpuestosLocales[] traslados = res.Comprobante.Complemento.ImpuestosLocales.TrasladosLocales;
//Obtenemos la información de cada impuesto trasladado local
for (int i = 0; i < traslados.Length; i++)
{
Console.WriteLine(traslados[i].ImpLocTrasladado);
Console.WriteLine(traslados[i].TasadeTraslado);
Console.WriteLine(traslados[i].Importe);
}
}
//Comprobamos que la variable contenga información
if (res.Comprobante.Complemento.ImpuestosLocales.RetencionesLocales != null)
{
//Asignamos variable de los impuestos retenidos para facilitar la lectura
NodoRetencionesImpuestosLocales[] retenciones = res.Comprobante.Complemento.ImpuestosLocales.RetencionesLocales;
//Obtenemos la información de cada impuesto retenido local
for (int i = 0; i < retenciones.Length; i++)
{
Console.WriteLine(retenciones[i].ImpLocRetenido);
Console.WriteLine(retenciones[i].TasadeRetencion);
Console.WriteLine(retenciones[i].Importe);
}
}
}
//Comprobamos si existe el complemento INE
if (res.Comprobante.Complemento.INE != null)
{
//Obtenemos los datos del complemento INE
Console.WriteLine(res.Comprobante.Complemento.INE.Version);
Console.WriteLine(res.Comprobante.Complemento.INE.TipoProceso);
Console.WriteLine(res.Comprobante.Complemento.INE.TipoComite);
Console.WriteLine(res.Comprobante.Complemento.INE.IdContabilidad);
//Comprobamos que el complemento tenga nodo Entidad
if (res.Comprobante.Complemento.INE.Entidad != null)
{
//Obtenemos todos los datos de los nodos Entidad
for (int i = 0; i < res.Comprobante.Complemento.INE.Entidad.Length; i++)
{
Console.WriteLine(res.Comprobante.Complemento.INE.Entidad[i].Ambito);
Console.WriteLine(res.Comprobante.Complemento.INE.Entidad[i].ClaveEntidad);
//Comprobamos que cada nodo entidad tenga nodos Contabilidad
if (res.Comprobante.Complemento.INE.Entidad[i].Contabilidad != null)
{
//Obtenemos los datos de los nodos Contabilidad
for (int ii = 0; ii < res.Comprobante.Complemento.INE.Entidad[i].Contabilidad.Length; ii++)
{
Console.WriteLine(res.Comprobante.Complemento.INE.Entidad[i].Contabilidad[ii].IdContabilidad);
}
}
}
}
}
//Comprobamos si existe el complemento Comercio Exterior
if (res.Comprobante.Complemento.ComercioExterior != null)
{
//Asignamos el complemento a una variable para facilitar la lectura
NodoComercioExterior comext = res.Comprobante.Complemento.ComercioExterior;
Console.WriteLine(comext.Version);
Console.WriteLine(comext.TipoOperacion);
Console.WriteLine(comext.MotivoTraslado);
Console.WriteLine(comext.Incoterm);
Console.WriteLine(comext.Subdivision);
Console.WriteLine(comext.ClaveDePedimento);
Console.WriteLine(comext.NumCertificadoOrigen);
Console.WriteLine(comext.CertificadoOrigen);
Console.WriteLine(comext.NumeroExportadorConfiable);
Console.WriteLine(comext.Observaciones);
Console.WriteLine(comext.TipoCambioUSD);
Console.WriteLine(comext.TotalUSD);
//Comprobamos que exista el nodo Emisor de Comercio Exterior
if (comext.Emisor != null)
{
//Obtenemos los datos del emisor
Console.WriteLine(comext.Emisor.Curp);
//Comprobamos que exista domicilio en el emisor del comercio exterior
if (comext.Emisor.Domicilio != null)
{
//Obtenemos todos los datos del domicilio
Console.WriteLine(comext.Emisor.Domicilio.Calle);
Console.WriteLine(comext.Emisor.Domicilio.NumeroExterior);
Console.WriteLine(comext.Emisor.Domicilio.NumeroInterior);
Console.WriteLine(comext.Emisor.Domicilio.Colonia);
Console.WriteLine(comext.Emisor.Domicilio.CodigoPostal);
Console.WriteLine(comext.Emisor.Domicilio.Referencia);
Console.WriteLine(comext.Emisor.Domicilio.Localidad);
Console.WriteLine(comext.Emisor.Domicilio.Municipio);
Console.WriteLine(comext.Emisor.Domicilio.Estado);
Console.WriteLine(comext.Emisor.Domicilio.Pais);
}
}
//Comprobamos que exista el nodo Receptor de Comercio Exterior
if (comext.Receptor != null)
{
//Obtenemos los datos del receptor
Console.WriteLine(comext.Receptor.NumRegIdTrib);
//Comprobamos que exista domicilio en el receptor del comercio exterior
if (comext.Receptor.Domicilio != null)
{
//Obtenemos todos los datos del domicilio
Console.WriteLine(comext.Receptor.Domicilio.Calle);
Console.WriteLine(comext.Receptor.Domicilio.NumeroExterior);
Console.WriteLine(comext.Receptor.Domicilio.NumeroInterior);
Console.WriteLine(comext.Receptor.Domicilio.Colonia);
Console.WriteLine(comext.Receptor.Domicilio.CodigoPostal);
Console.WriteLine(comext.Receptor.Domicilio.Referencia);
Console.WriteLine(comext.Receptor.Domicilio.Localidad);
Console.WriteLine(comext.Receptor.Domicilio.Municipio);
Console.WriteLine(comext.Receptor.Domicilio.Estado);
Console.WriteLine(comext.Receptor.Domicilio.Pais);
}
}
//Comprobamos que existan nodos Propietario de Comercio Exterior
if (comext.Propietario != null)
{
//Obtenemos los datos de cada nodo Propietario
for (int i = 0; i < comext.Propietario.Length; i++)
{
Console.WriteLine(comext.Propietario[i].NumRegIdTrib);
Console.WriteLine(comext.Propietario[i].ResidenciaFiscal);
}
}
//Comprobamos que existan nodos Destinatarios de Comercio Exterior
if (comext.Destinatario != null)
{
//Obtenemos los datos del receptor
for (int i = 0; i < comext.Destinatario.Length; i++)
{
//Asignamos una variable de lectura al nodo Destinatario
NodoDestinatarioComercioExterior destinatario = comext.Destinatario[i];
Console.WriteLine(destinatario.Nombre);
Console.WriteLine(destinatario.NumRegIdTrib);
//Comprobamos que exista domicilio en el destinatario del comercio exterior
if (destinatario.Domicilio != null)
{
//Recorremos todos los domicilios del destinatario
for (int ii = 0; ii < comext.Destinatario[i].Domicilio.Length; ii++)
{
//Obtenemos todos los datos del domicilio
Console.WriteLine(destinatario.Domicilio[ii].Calle);
Console.WriteLine(destinatario.Domicilio[ii].NumeroExterior);
Console.WriteLine(destinatario.Domicilio[ii].NumeroInterior);
Console.WriteLine(destinatario.Domicilio[ii].Colonia);
Console.WriteLine(destinatario.Domicilio[ii].CodigoPostal);
Console.WriteLine(destinatario.Domicilio[ii].Referencia);
Console.WriteLine(destinatario.Domicilio[ii].Localidad);
Console.WriteLine(destinatario.Domicilio[ii].Municipio);
Console.WriteLine(destinatario.Domicilio[ii].Estado);
Console.WriteLine(destinatario.Domicilio[ii].Pais);
}
}
}
}
//Comprobamos que existan mercancias en el complemento comercio exterior
if (comext.Mercancias != null)
{
//Obtenemos todos los datos de las mercancias
for (int i = 0; i < comext.Mercancias.Mercancia.Length; i++)
{
//Asignamos una variable por cada mercancia para facilitar la lectura
NodoMercanciaComercioExterior mercancia = comext.Mercancias.Mercancia[i];
Console.WriteLine(mercancia.FraccionArancelaria);
Console.WriteLine(mercancia.UnidadAduana);
Console.WriteLine(mercancia.NoIdentificacion);
Console.WriteLine(mercancia.CantidadAduana);
Console.WriteLine(mercancia.ValorUnitarioAduana);
Console.WriteLine(mercancia.ValorDolares);
//Comprobamos que existan descripciones específicas en la mercancia
if (mercancia.DescripcionesEspecificas != null)
{
for (int ii = 0; ii < mercancia.DescripcionesEspecificas.Length; ii++)
{
//Asignamos una variable de descripciones específicas para facilitar la lectura de cada nodo
NodoDescripcionesEspecificasComercioExterior descripciones = mercancia.DescripcionesEspecificas[ii];
//Obtenemos los datos de la descripción específica
Console.WriteLine(descripciones.Marca);
Console.WriteLine(descripciones.Modelo);
Console.WriteLine(descripciones.SubModelo);
Console.WriteLine(descripciones.NumeroSerie);
}
}
}
}
}
//Comprobamos que exista complemento de Pagos 1.0
if (res.Comprobante.Complemento.Pagos10 != null)
{
//Obtenemos los datos del complemento Pagos 1.0
Console.WriteLine(res.Comprobante.Complemento.Pagos10.Version);
for (int i = 0; i < res.Comprobante.Complemento.Pagos10.Pago.Length; i++)
{
//Asignamos una variable de tipo Pago para facilitar la lectura
NodoPago10 pago = res.Comprobante.Complemento.Pagos10.Pago[i];
//Obtenemos los datos del nodo Pago
Console.WriteLine(pago.FechaPago);
Console.WriteLine(pago.FormaDePagoP);
Console.WriteLine(pago.CadPago);
Console.WriteLine(pago.CertPago);
Console.WriteLine(pago.CtaBeneficiario);
Console.WriteLine(pago.CtaOrdenante);
Console.WriteLine(pago.MonedaP);
Console.WriteLine(pago.Monto);
Console.WriteLine(pago.NomBancoOrdExt);
Console.WriteLine(pago.NumOperacion);
Console.WriteLine(pago.RfcEmisorCtaBen);
Console.WriteLine(pago.RfcEmisorCtaOrd);
Console.WriteLine(pago.SelloPago);
Console.WriteLine(pago.TipoCadPago);
Console.WriteLine(pago.TipoCambioP);
//Comprobamos que el pago contenga nodos DoctoRelacionado
if (pago.DoctoRelacionado != null)
{
//Obtenemos los datos de cada DoctoRelacionado
for (int ii = 0; ii < pago.DoctoRelacionado.Length; ii++)
{
Console.WriteLine(pago.DoctoRelacionado[ii].IdDocumento);
Console.WriteLine(pago.DoctoRelacionado[ii].Serie);
Console.WriteLine(pago.DoctoRelacionado[ii].Folio);
Console.WriteLine(pago.DoctoRelacionado[ii].MetodoDePagoDR);
Console.WriteLine(pago.DoctoRelacionado[ii].MonedaDR);
Console.WriteLine(pago.DoctoRelacionado[ii].TipoCambioDR);
Console.WriteLine(pago.DoctoRelacionado[ii].NumParcialidad);
Console.WriteLine(pago.DoctoRelacionado[ii].ImpSaldoAnt);
Console.WriteLine(pago.DoctoRelacionado[ii].ImpPagado);
Console.WriteLine(pago.DoctoRelacionado[ii].ImpSaldoInsoluto);
}
}
//Comprobamos que el pago contenga nodo Impuestos
if (pago.Impuestos != null)
{
//Comprobamos que contenga impuestos retenidos
if (pago.Impuestos.Retenciones.Retencion != null)
{
//Obtenemos los datos de cada impuesto retenido
for (int ii = 0; ii < pago.Impuestos.Retenciones.Retencion.Length; ii++)
{
//Asignamos el impuesto para facilitar la lectura
NodoRetencionPagos10 retencion10 = pago.Impuestos.Retenciones.Retencion[ii];
Console.WriteLine(retencion10.Impuesto);
Console.WriteLine(retencion10.Importe);
}
}
//Comprobamos que contenga impuestos trasladados
if (pago.Impuestos.Traslados != null)
{
//Obtenemos los datos de cada impuesto trasladado
for (int ii = 0; ii < pago.Impuestos.Traslados.Traslado.Length; ii++)
{
//Asignamos el impuesto para facilitar la lectura
NodoTrasladoPagos10 traslado10 = pago.Impuestos.Traslados.Traslado[ii];
Console.WriteLine(traslado10.Impuesto);
Console.WriteLine(traslado10.TipoFactor);
Console.WriteLine(traslado10.TasaOCuota);
Console.WriteLine(traslado10.Importe);
}
}
}
}
}
//Comprobamos que exista complemento de Pagos 2.0
if (res.Comprobante.Complemento.Pagos20 != null)
{
//Obtenemos los datos del complemento Pagos 2.0
Console.WriteLine(res.Comprobante.Complemento.Pagos20.Version);
//Asignamos una variable al nodo Totales para facilitar la lectura
NodoTotalesPagos20 totales = res.Comprobante.Complemento.Pagos20.Totales;
Console.WriteLine(totales.MontoTotalPagos);
Console.WriteLine(totales.TotalRetencionesIEPS);
Console.WriteLine(totales.TotalRetencionesISR);
Console.WriteLine(totales.TotalRetencionesIVA);
Console.WriteLine(totales.TotalTrasladosBaseExento);
Console.WriteLine(totales.TotalTrasladosBaseIVA0);
Console.WriteLine(totales.TotalTrasladosImpuestoIVA0);
Console.WriteLine(totales.TotalTrasladosBaseIVA8);
Console.WriteLine(totales.TotalTrasladosImpuestoIVA8);
Console.WriteLine(totales.TotalTrasladosBaseIVA16);
Console.WriteLine(totales.TotalTrasladosImpuestoIVA16);
//Obtenemos los datos de todos los nodos de Pago
for (int i = 0; i < res.Comprobante.Complemento.Pagos20.Pago.Length; i++)
{
//Asignamos una variable de tipo Pago para facilitar la lectura
NodoPago20 pago20 = res.Comprobante.Complemento.Pagos20.Pago[i];
Console.WriteLine(pago20.FechaPago);
Console.WriteLine(pago20.FormaDePagoP);
Console.WriteLine(pago20.CadPago);
Console.WriteLine(pago20.CertPago);
Console.WriteLine(pago20.CtaBeneficiario);
Console.WriteLine(pago20.CtaOrdenante);
Console.WriteLine(pago20.MonedaP);
Console.WriteLine(pago20.Monto);
Console.WriteLine(pago20.NomBancoOrdExt);
Console.WriteLine(pago20.NumOperacion);
Console.WriteLine(pago20.RfcEmisorCtaBen);
Console.WriteLine(pago20.RfcEmisorCtaOrd);
Console.WriteLine(pago20.SelloPago);
Console.WriteLine(pago20.TipoCadPago);
Console.WriteLine(pago20.TipoCambioP);
//Comprobamos que el pago contenga nodos DoctoRelacionado
if (pago20.DoctoRelacionado != null)
{
//Obtenemos los datos de cada DoctoRelacionado
for (int ii = 0; ii < pago20.DoctoRelacionado.Length; i++)
{
Console.WriteLine(pago20.DoctoRelacionado[ii].IdDocumento);
Console.WriteLine(pago20.DoctoRelacionado[ii].Serie);
Console.WriteLine(pago20.DoctoRelacionado[ii].Folio);
Console.WriteLine(pago20.DoctoRelacionado[ii].MonedaDR);
Console.WriteLine(pago20.DoctoRelacionado[ii].EquivalenciaDR);
Console.WriteLine(pago20.DoctoRelacionado[ii].NumParcialidad);
Console.WriteLine(pago20.DoctoRelacionado[ii].ImpSaldoAnt);
Console.WriteLine(pago20.DoctoRelacionado[ii].ImpPagado);
Console.WriteLine(pago20.DoctoRelacionado[ii].ImpSaldoInsoluto);
Console.WriteLine(pago20.DoctoRelacionado[ii].ObjetoImpDR);
//Comprobamos si el documento relacionado tiene impuestos
if (pago20.DoctoRelacionado[ii].ImpuestosDR != null)
{
//Asignamos una variable de impuestos para facilitar la lectura
NodoImpuestosDRPagos20 impdr = pago20.DoctoRelacionado[ii].ImpuestosDR;
//Confirmamos que existan impuestos retenidos
if (impdr.RetencionesDR != null)
{
//Obtenemos todos los datos de los impuestos
for (int iii = 0; iii < impdr.RetencionesDR.RetencionDR.Length; iii++)
{
Console.WriteLine(impdr.RetencionesDR.RetencionDR[iii].BaseDR);
Console.WriteLine(impdr.RetencionesDR.RetencionDR[iii].ImpuestoDR);
Console.WriteLine(impdr.RetencionesDR.RetencionDR[iii].TipoFactorDR);
Console.WriteLine(impdr.RetencionesDR.RetencionDR[iii].TasaOCuotaDR);
Console.WriteLine(impdr.RetencionesDR.RetencionDR[iii].ImporteDR);
}
}
//Confirmamos que existan impuestos trasladados
if (impdr.TrasladosDR != null)
{
//Obtenemos todos los datos de los impuestos
for (int iii = 0; iii < impdr.TrasladosDR.TrasladoDR.Length; iii++)
{
Console.WriteLine(impdr.TrasladosDR.TrasladoDR[iii].BaseDR);
Console.WriteLine(impdr.TrasladosDR.TrasladoDR[iii].ImpuestoDR);
Console.WriteLine(impdr.TrasladosDR.TrasladoDR[iii].TipoFactorDR);
Console.WriteLine(impdr.TrasladosDR.TrasladoDR[iii].TasaOCuotaDR);
Console.WriteLine(impdr.TrasladosDR.TrasladoDR[iii].ImporteDR);
}
}
}
}
}
//Comprobamos que el pago contenga nodo Impuestos
if (pago20.ImpuestosP != null)
{
//Comprobamos que contenga impuestos retenidos
if (pago20.ImpuestosP.RetencionesP != null)
{
//Obtenemos los datos de cada impuesto retenido
for (int ii = 0; ii < pago20.ImpuestosP.RetencionesP.RetencionP.Length; i++)
{
//Asignamos el impuesto para facilitar la lectura
NodoRetencionPPagos20 retencion20 = pago20.ImpuestosP.RetencionesP.RetencionP[ii];
Console.WriteLine(retencion20.ImpuestoP);
Console.WriteLine(retencion20.ImporteP);
}
}
//Comprobamos que contenga impuestos trasladados
if (pago20.ImpuestosP.TrasladosP != null)
{
//Obtenemos los datos de cada impuesto trasladado
for (int ii = 0; ii < pago20.ImpuestosP.TrasladosP.TrasladoP.Length; i++)
{
//Asignamos el impuesto para facilitar la lectura
NodoTrasladoPPagos20 traslado20 = pago20.ImpuestosP.TrasladosP.TrasladoP[ii];
Console.WriteLine(traslado20.BaseP);
Console.WriteLine(traslado20.ImpuestoP);
Console.WriteLine(traslado20.TipoFactorP);
Console.WriteLine(traslado20.TasaOCuotaP);
Console.WriteLine(traslado20.ImporteP);
}
}
}
}
}
//Comprobamos que exista complemento Nómina
if (res.Comprobante.Complemento.Nomina != null)
{
//Asignamos una variable del nodo Nómina para facilitar la lectura
NodoNomina Nomina = res.Comprobante.Complemento.Nomina;
Console.WriteLine(Nomina.Version);
Console.WriteLine(Nomina.TipoNomina);
Console.WriteLine(Nomina.FechaPago);
Console.WriteLine(Nomina.FechaInicialPago);
Console.WriteLine(Nomina.FechaFinalPago);
Console.WriteLine(Nomina.NumDiasPagados);
//Comprobamos que existan percepciones en el complemento
if (Nomina.Percepciones != null)
{
//Obtenemos los datos de las percepciones
Console.WriteLine(Nomina.Percepciones.TotalSueldos);
Console.WriteLine(Nomina.Percepciones.TotalSeparacionIndemnizacion);
Console.WriteLine(Nomina.Percepciones.TotalJubilacionPensionRetiro);
Console.WriteLine(Nomina.Percepciones.TotalExento);
Console.WriteLine(Nomina.Percepciones.TotalGravado);
//Comprobamos que exista nodo JubilacionPensionRetiro
if (Nomina.Percepciones.JubilacionPensionRetiro != null)
{
//Obtenemos los datos del nodo JubilacionPensionRetiro
Console.WriteLine(Nomina.Percepciones.JubilacionPensionRetiro.TotalUnaExhibicion);
Console.WriteLine(Nomina.Percepciones.JubilacionPensionRetiro.TotalParcialidad);
Console.WriteLine(Nomina.Percepciones.JubilacionPensionRetiro.MontoDiario);
Console.WriteLine(Nomina.Percepciones.JubilacionPensionRetiro.IngresoAcumulable);
Console.WriteLine(Nomina.Percepciones.JubilacionPensionRetiro.IngresoNoAcumulable);
}
//Comprobamos que exista nodo SeparacionIndemnizacion
if (Nomina.Percepciones.SeparacionIndemnizacion != null)
{
//Obtenemos los datos del nodo JubilacionPensionRetiro
Console.WriteLine(Nomina.Percepciones.SeparacionIndemnizacion.UltimoSueldoMensOrd);
Console.WriteLine(Nomina.Percepciones.SeparacionIndemnizacion.TotalPagado);
Console.WriteLine(Nomina.Percepciones.SeparacionIndemnizacion.NumAñosServicio);
Console.WriteLine(Nomina.Percepciones.SeparacionIndemnizacion.IngresoAcumulable);
Console.WriteLine(Nomina.Percepciones.SeparacionIndemnizacion.IngresoNoAcumulable);
}
//Obtenemos todos los nodos de percepción
for (int i = 0; i < Nomina.Percepciones.Percepcion.Length; i++)
{
Console.WriteLine(Nomina.Percepciones.Percepcion[i].TipoPercepcion);
Console.WriteLine(Nomina.Percepciones.Percepcion[i].Clave);
Console.WriteLine(Nomina.Percepciones.Percepcion[i].Concepto);
Console.WriteLine(Nomina.Percepciones.Percepcion[i].ImporteExento);
Console.WriteLine(Nomina.Percepciones.Percepcion[i].ImporteGravado);
//Comprobamos que existan horas extras en la percepción
if (Nomina.Percepciones.Percepcion[i].HorasExtra != null)
{
//Obtenemos los datos de las horas extra
for (int ii = 0; ii < Nomina.Percepciones.Percepcion[i].HorasExtra.Length; ii++)
{
Console.WriteLine(Nomina.Percepciones.Percepcion[i].HorasExtra[ii].Dias);
Console.WriteLine(Nomina.Percepciones.Percepcion[i].HorasExtra[ii].HorasExtra);
Console.WriteLine(Nomina.Percepciones.Percepcion[i].HorasExtra[ii].ImportePagado);
Console.WriteLine(Nomina.Percepciones.Percepcion[i].HorasExtra[ii].TipoHoras);
}
}
//Comprobamos que exista nodo AccionesOTitulos
if (Nomina.Percepciones.Percepcion[i].AccionesOTitulos != null)
{
//Obtenemos todos los datos del nodo AccionesOTitulos
Console.WriteLine(Nomina.Percepciones.Percepcion[i].AccionesOTitulos.PrecioAlOtorgarse);
Console.WriteLine(Nomina.Percepciones.Percepcion[i].AccionesOTitulos.ValorMercado);
}
}
}
//Comprobamos que existan deducciones en el complemento
if (Nomina.Deducciones != null)
{
//Obtenemos los datos de las deducciones
Console.WriteLine(Nomina.Deducciones.TotalImpuestosRetenidos);
Console.WriteLine(Nomina.Deducciones.TotalOtrasDeducciones);
//Obtenemos todos los nodos de deducción
for (int i = 0; i < Nomina.Deducciones.Deduccion.Length; i++)
{
Console.WriteLine(Nomina.Deducciones.Deduccion[i].TipoDeduccion);
Console.WriteLine(Nomina.Deducciones.Deduccion[i].Clave);
Console.WriteLine(Nomina.Deducciones.Deduccion[i].Concepto);
Console.WriteLine(Nomina.Deducciones.Deduccion[i].Importe);
}
}
//Comprobamos que existan otros pagos en el complemento
if (Nomina.OtrosPagos != null)
{
//Obtenemos todos los nodos de otros pagos
for (int i = 0; i < Nomina.OtrosPagos.OtroPago.Length; i++)
{
Console.WriteLine(Nomina.OtrosPagos.OtroPago[i].TipoOtroPago);
Console.WriteLine(Nomina.OtrosPagos.OtroPago[i].Clave);
Console.WriteLine(Nomina.OtrosPagos.OtroPago[i].Concepto);
Console.WriteLine(Nomina.OtrosPagos.OtroPago[i].Importe);
//Comprobamos que exista nodo SubsidioAlEmpleo
if (Nomina.OtrosPagos.OtroPago[i].SubsidioAlEmpleo != null)
{
//Obtenemos todos los datos del nodo SubsidioAlEmpleo
Console.WriteLine(Nomina.OtrosPagos.OtroPago[i].SubsidioAlEmpleo.SubsidioCausado);
}
//Comprobamos que exista el nodo CompensacionSaldosAFavor
if (Nomina.OtrosPagos.OtroPago[i].CompensacionSaldosAFavor != null)
{
//Obtenemos todos los datos del nodo CompensacionSaldosAFavor
Console.WriteLine(Nomina.OtrosPagos.OtroPago[i].CompensacionSaldosAFavor.Año);
Console.WriteLine(Nomina.OtrosPagos.OtroPago[i].CompensacionSaldosAFavor.RemanenteSalFav);
Console.WriteLine(Nomina.OtrosPagos.OtroPago[i].CompensacionSaldosAFavor.SaldoAFavor);
}
}
}
//Comprobamos que existan incapacidades en el complemento
if (Nomina.Incapacidades != null)
{
//Obtenemos todos los nodos de incapacidad
for (int i = 0; i < Nomina.Incapacidades.Incapacidad.Length; i++)
{
Console.WriteLine(Nomina.Incapacidades.Incapacidad[i].TipoIncapacidad);
Console.WriteLine(Nomina.Incapacidades.Incapacidad[i].DiasIncapacidad);
Console.WriteLine(Nomina.Incapacidades.Incapacidad[i].ImporteMonetario);
}
}
}
//Comprobamos que exista complemento Carta porte 2.0
if (res.Comprobante.Complemento.CartaPorte != null)
{
//Asignamos una variable al complemento para facilitar la lectura
NodoCartaPorte CartaPorte = res.Comprobante.Complemento.CartaPorte;
//Obtenemos los datos del nodo CartaPorte
Console.WriteLine(CartaPorte.Version);
Console.WriteLine(CartaPorte.EntradaSalidaMerc);
Console.WriteLine(CartaPorte.PaisOrigenDestino);
Console.WriteLine(CartaPorte.TotalDistRec);
Console.WriteLine(CartaPorte.TranspInternac);
Console.WriteLine(CartaPorte.ViaEntradaSalida);
//Comprobamos que exista nodo Ubicaciones
if (CartaPorte.Ubicaciones != null)
{
//Obtenemos los datos de cada nodo Ubicaciones
for (int i = 0; i < CartaPorte.Ubicaciones.Ubicacion.Length; i++)
{
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].RFCRemitenteDestinatario);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].NombreRemitenteDestinatario);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].NumRegIdTrib);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].ResidenciaFiscal);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].TipoUbicacion);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].IDUbicacion);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].FechaHoraSalidaLlegada);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].TipoEstacion);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].DistanciaRecorrida);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].NavegacionTrafico);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].NumEstacion);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].NombreEstacion);
//Comprobamos que exista el nodo Domicilio
if (CartaPorte.Ubicaciones.Ubicacion[i].Domicilio != null)
{
//Obtenemos todos los datos del nodo Domicilio
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].Domicilio.Calle);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].Domicilio.NumeroExterior);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].Domicilio.NumeroInterior);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].Domicilio.Colonia);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].Domicilio.CodigoPostal);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].Domicilio.Referencia);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].Domicilio.Localidad);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].Domicilio.Municipio);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].Domicilio.Estado);
Console.WriteLine(CartaPorte.Ubicaciones.Ubicacion[i].Domicilio.Pais);
}
}
}
//Comprobamos que exista nodo Mercancias
if (CartaPorte.Mercancias != null)
{
//Obtenemos todos los datos del nodo Mercancias
Console.WriteLine(CartaPorte.Mercancias.CargoPorTasacion);
Console.WriteLine(CartaPorte.Mercancias.NumTotalMercancias);
Console.WriteLine(CartaPorte.Mercancias.PesoBrutoTotal);
Console.WriteLine(CartaPorte.Mercancias.PesoNetoTotal);
Console.WriteLine(CartaPorte.Mercancias.UnidadPeso);
//Obtenemos todos los nodos de Mercancia
for (int i = 0; i < CartaPorte.Mercancias.Mercancia.Length; i++)
{
//Asignamos una variable por cada mercancía para facilitar la lectura
NodoMercanciaCartaPorte MercanciaCP = CartaPorte.Mercancias.Mercancia[i];
Console.WriteLine(MercanciaCP.BienesTransp);
Console.WriteLine(MercanciaCP.Cantidad);
Console.WriteLine(MercanciaCP.ClaveSTCC);
Console.WriteLine(MercanciaCP.ClaveUnidad);
Console.WriteLine(MercanciaCP.CveMaterialPeligroso);
Console.WriteLine(MercanciaCP.Descripcion);
Console.WriteLine(MercanciaCP.DescripEmbalaje);
Console.WriteLine(MercanciaCP.Dimensiones);
Console.WriteLine(MercanciaCP.Embalaje);
Console.WriteLine(MercanciaCP.FraccionArancelaria);
Console.WriteLine(MercanciaCP.MaterialPeligroso);
Console.WriteLine(MercanciaCP.Moneda);
Console.WriteLine(MercanciaCP.PesoEnKg);
Console.WriteLine(MercanciaCP.Unidad);
Console.WriteLine(MercanciaCP.UUIDComercioExt);
Console.WriteLine(MercanciaCP.ValorMercancia);
//Comprobamos que existan los nodos GuiasIdentificacion
if (MercanciaCP.GuiasIdentificacion != null)
{
//Obtenemos todos los datos de los nodos GuiasIdentificacion
for (int ii = 0; ii < MercanciaCP.GuiasIdentificacion.Length; ii++)
{
Console.WriteLine(MercanciaCP.GuiasIdentificacion[ii].DescripGuiaIdentificacion);
Console.WriteLine(MercanciaCP.GuiasIdentificacion[ii].NumeroGuiaIdentificacion);
Console.WriteLine(MercanciaCP.GuiasIdentificacion[ii].PesoGuiaIdentificacion);
}
}
//Comprobamos que exista el nodo DetalleMercancia
if (MercanciaCP.DetalleMercancia != null)
{
//Obtenemos todos los datos del nodo DetalleMercancia
Console.WriteLine(MercanciaCP.DetalleMercancia.NumPiezas);
Console.WriteLine(MercanciaCP.DetalleMercancia.PesoBruto);
Console.WriteLine(MercanciaCP.DetalleMercancia.PesoNeto);
Console.WriteLine(MercanciaCP.DetalleMercancia.PesoTara);
Console.WriteLine(MercanciaCP.DetalleMercancia.UnidadPesoMerc);
}
//Comprobamos que exista el nodo CantidadTransporta
if (MercanciaCP.CantidadTransporta != null)
{
//Obtenemos todos los nodos CantidadTransporta
for (int ii = 0; ii < MercanciaCP.CantidadTransporta.Length; ii++)
{
Console.WriteLine(MercanciaCP.CantidadTransporta[ii].Cantidad);
Console.WriteLine(MercanciaCP.CantidadTransporta[ii].IDOrigen);
Console.WriteLine(MercanciaCP.CantidadTransporta[ii].IDDestino);
Console.WriteLine(MercanciaCP.CantidadTransporta[ii].CvesTransporte);
}
}
//Comprobamos que existan Pedimentos
if (MercanciaCP.Pedimentos != null)
{
//Obtenemos todos los Pedimentos
for (int ii = 0; ii < MercanciaCP.Pedimentos.Length; ii++)
{
Console.WriteLine(MercanciaCP.Pedimentos[ii].Pedimento);
}
}
}
//Comprobamos que exista el nodo Autotransporte
if (CartaPorte.Mercancias.Autotransporte != null)
{
//Obtenemos todos los datos del nodo Autotransporte
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.PermSCT);
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.NumPermisoSCT);
//Comprobamos que exista el nodo Seguros
if (CartaPorte.Mercancias.Autotransporte.Seguros != null)
{
//Obtenemos los datos del nodo Seguros
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.Seguros.AseguraCarga);
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.Seguros.PolizaCarga);
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.Seguros.AseguraMedAmbiente);
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.Seguros.PolizaMedAmbiente);
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.Seguros.AseguraRespCivil);
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.Seguros.PolizaRespCivil);
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.Seguros.PrimaSeguro);
}
//Comprobamos que exista el nodo IdentificacionVehicular
if (CartaPorte.Mercancias.Autotransporte.IdentificacionVehicular != null)
{
//Obtenemos todos los datos del nodo IdentificacionVehicular
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.IdentificacionVehicular.PlacaVM);
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.IdentificacionVehicular.ConfigVehicular);
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.IdentificacionVehicular.AnioModeloVM);
}
//Comprobamos que exista el nodo IdentificacionVehicular
if (CartaPorte.Mercancias.Autotransporte.Remolques != null)
{
//Obtenemos todos los datos del nodo Remolques
for (int ii = 0; ii < CartaPorte.Mercancias.Autotransporte.Remolques.Remolque.Length; ii++)
{
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.Remolques.Remolque[ii].Placa);
Console.WriteLine(CartaPorte.Mercancias.Autotransporte.Remolques.Remolque[ii].SubTipoRem);
}
}
}
}
//Comprobamos que exista el nodo FiguraTransporte
if (CartaPorte.FiguraTransporte != null)
{
//Recorremos todos los nodos TiposFigura
for (int i = 0; i < CartaPorte.FiguraTransporte.TiposFigura.Length; i++)
{
//Obtenemos los datos del nodo
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].RFCFigura);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].NombreFigura);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].NumLicencia);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].TipoFigura);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].NumRegIdTribFigura);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].ResidenciaFiscalFigura);
//Comprobamos que el nodo Domicilio exista
if (CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio != null)
{
//Obtenemos los datos del domicilio
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio.Calle);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio.NumeroExterior);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio.NumeroInterior);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio.Colonia);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio.CodigoPostal);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio.Referencia);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio.Localidad);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio.Municipio);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio.Estado);
Console.WriteLine(CartaPorte.FiguraTransporte.TiposFigura[i].Domicilio.Pais);
}
}
}
}
//Comprobamos que el nodo TimbreFiscalDigital exista
if (res.Comprobante.Complemento.TimbreFiscalDigital != null)
{
//Obtenemos todos los datos del TimbreFiscalDigital
Console.WriteLine(res.Comprobante.Complemento.TimbreFiscalDigital.Version);
Console.WriteLine(res.Comprobante.Complemento.TimbreFiscalDigital.FechaTimbrado);
Console.WriteLine(res.Comprobante.Complemento.TimbreFiscalDigital.UUID);
Console.WriteLine(res.Comprobante.Complemento.TimbreFiscalDigital.SelloSAT);
Console.WriteLine(res.Comprobante.Complemento.TimbreFiscalDigital.SelloCFD);
Console.WriteLine(res.Comprobante.Complemento.TimbreFiscalDigital.Leyenda);
Console.WriteLine(res.Comprobante.Complemento.TimbreFiscalDigital.NoCertificadoSAT);
Console.WriteLine(res.Comprobante.Complemento.TimbreFiscalDigital.RfcProvCertif);
}
}
'Configuración general para el uso de servicios (Obligatorio para poder el uso de las funciones)
Dim config As New ConfiguracionesReadCFDI
'Establece los parametros de la cuenta de timbre que se usará para la lectura.
config.EstablecerPIN "CFx45...Hg", "micontraseña"
'Mostramos información mas detallada en caso de recibir un error a la hora de generar la lectura.
config.MostrarDetallesEnErrores = True
'Clase para lectura de comprobantes fiscales y cancelaciones
Dim lectura As New lectura
Dim res As New ResultadosLecturaCFDI
'Función para obtener los datos del CFDI
Set res = lectura.LeerCFDI("C:\XML\CfdiTimbrado.xml")
'Obtenemos los datos del comprobante
MsgBox res.Comprobante.Version
MsgBox res.Comprobante.Fecha
MsgBox res.Comprobante.Serie
MsgBox res.Comprobante.Folio
MsgBox res.Comprobante.LugarExpedicion
MsgBox res.Comprobante.TipoDeComprobante
MsgBox res.Comprobante.MetodoPago
MsgBox res.Comprobante.FormaPago
MsgBox res.Comprobante.Moneda
MsgBox res.Comprobante.TipoCambio
MsgBox res.Comprobante.CondicionesDePago
MsgBox res.Comprobante.SubTotal
MsgBox res.Comprobante.Descuento
MsgBox res.Comprobante.Total
MsgBox res.Comprobante.Exportacion
MsgBox res.Comprobante.Certificado
MsgBox res.Comprobante.Sello
MsgBox res.Comprobante.NoCertificado
MsgBox res.Comprobante.Confirmacion
'Comprobamos que exista el nodo InformacionGlobal
If Not res.Comprobante.InformacionGlobal Is Nothing Then
'Obtenemos los datos del nodo InformacionGlobal
MsgBox res.Comprobante.InformacionGlobal.Periodicidad
MsgBox res.Comprobante.InformacionGlobal.Meses
MsgBox res.Comprobante.InformacionGlobal.Año
End If
'Comprobamos que exista el nodo CfdiRelacionados
If Not res.Comprobante.CfdiRelacionados Is Nothing Then
'Asignamos el nodo a una variable para facilitar su lectura
Dim cr As New NodoCfdiRelacionados
Set cr = res.Comprobante.CfdiRelacionados
'Obtenemos los datos del nodo CfdiRelacionados
MsgBox cr.TipoRelacion
For i = 0 To cr.CfdiRelacionado.Count - 1
MsgBox cr.CfdiRelacionado.Value(i).UUID
Next i
End If
'Obtenemos los datos del Emisor
MsgBox res.Comprobante.Emisor.Rfc
MsgBox res.Comprobante.Emisor.Nombre
MsgBox res.Comprobante.Emisor.RegimenFiscal
MsgBox res.Comprobante.Emisor.FacAtrAdquirente
'Obtenemos los datos del Receptor
MsgBox res.Comprobante.Receptor.Rfc
MsgBox res.Comprobante.Receptor.Nombre
MsgBox res.Comprobante.Receptor.RegimenFiscalReceptor
MsgBox res.Comprobante.Receptor.DomicilioFiscalReceptor
MsgBox res.Comprobante.Receptor.UsoCFDI
MsgBox res.Comprobante.Receptor.ResidenciaFiscal
MsgBox res.Comprobante.Receptor.NumRegIdTrib
'Obtenemos los datos del Concepto
For i = 0 To res.Comprobante.Conceptos.concepto.Count - 1
'Asignamos una variable de tipo Concepto para facilitar la lectura
Dim concepto As NodoConcepto
Set concepto = res.Comprobante.Conceptos.concepto.Value(i)
'Obtenemos los datos del concepto
MsgBox concepto.ClaveProdServ
MsgBox concepto.ClaveUnidad
MsgBox concepto.Unidad
MsgBox concepto.NoIdentificacion
MsgBox concepto.Descripcion
MsgBox concepto.Cantidad
MsgBox concepto.ValorUnitario
MsgBox concepto.Importe
MsgBox concepto.Descuento
MsgBox concepto.ObjetoImp
'Comprobamos que existan impuestos en el concepto
If Not concepto.impuestos Is Nothing Then
'Asignamos una variable de tipo ImpuestoConcepto para facilitar la lectura
Dim impuestos As NodoImpuestosConcepto
Set impuestos = concepto.impuestos
'Comprobamos que existan impuestos Retenciones
If Not impuestos.retenciones Is Nothing Then
For ii = 0 To impuestos.retenciones.retencion.Count - 1
'Obtenemos los datos del impuesto
MsgBox impuestos.retenciones.retencion.Value(ii).Base
MsgBox impuestos.retenciones.retencion.Value(ii).Impuesto
MsgBox impuestos.retenciones.retencion.Value(ii).TipoFactor
MsgBox impuestos.retenciones.retencion.Value(ii).TasaOCuota
MsgBox impuestos.retenciones.retencion.Value(ii).Importe
Next ii
End If
'Comprobamos que existan impuestos Traslados
If Not impuestos.traslados Is Nothing Then
For ii = 0 To impuestos.traslados.traslado.Count - 1
'Obtenemos los datos del impuesto
MsgBox impuestos.traslados.traslado.Value(ii).Base
MsgBox impuestos.traslados.traslado.Value(ii).Impuesto
MsgBox impuestos.traslados.traslado.Value(ii).TipoFactor
MsgBox impuestos.traslados.traslado.Value(ii).TasaOCuota
MsgBox impuestos.traslados.traslado.Value(ii).Importe
Next ii
End If
End If
'Comprobamos que existan nodos de información aduanera
If Not concepto.InformacionAduanera Is Nothing Then
'Obtenemos los datos de todos los nodos de la información aduanera del concepto
For ii = 0 To concepto.InformacionAduanera.Count - 1
MsgBox concepto.InformacionAduanera.Value(ii).NumeroPedimento
Next ii
End If
'Comprobamos que exista el nodo cuenta predial
If Not concepto.CuentaPredial Is Nothing Then
'Obtenemos el numero de la cuenta predial
MsgBox concepto.CuentaPredial.Numero
End If
'Comprobamos que exista el nodo ACuentaTerceros
If Not concepto.ACuentaTerceros Is Nothing Then
'obtenemos todos sus datos
MsgBox concepto.ACuentaTerceros.RfcACuentaTerceros
MsgBox concepto.ACuentaTerceros.NombreACuentaTerceros
MsgBox concepto.ACuentaTerceros.RegimenFiscalACuentaTerceros
MsgBox concepto.ACuentaTerceros.DomicilioFiscalACuentaTerceros
End If
'Comprobamos que exista el nodo ComplementoConcepto
If Not concepto.ComplementoConcepto Is Nothing Then
'Revisamos los complementos existentes
If Not concepto.ComplementoConcepto.instEducativas Is Nothing Then
'Asignamos una variable para facilitar su lectura
Dim iedu As NodoinstEducativas
Set iedu = concepto.ComplementoConcepto.instEducativas
'Obtenemos sus datos
MsgBox iedu.Version
MsgBox iedu.nombreAlumno
MsgBox iedu.nivelEducativo
MsgBox iedu.CURP
MsgBox iedu.autRVOE
MsgBox iedu.rfcPago
End If
End If
'Comprobamos que existan los nodos Parte
If Not concepto.parte Is Nothing Then
For ii = 0 To concepto.parte.Count - 1
'Asignamos una variable de tipo Parte para facilitar la lectura
Dim parte As NodoParte
Set parte = concepto.parte.Value(i)
'Obtenemos los datos del nodo Parte
MsgBox parte.ClaveProdServ
MsgBox parte.Unidad
MsgBox parte.NoIdentificacion
MsgBox parte.Descripcion
MsgBox parte.Cantidad
MsgBox parte.ValorUnitario
MsgBox parte.Importe
'Comprobamos que el nodo Parte tenga información aduanera
If Not parte.InformacionAduanera Is Nothing Then
'Obtenemos todos los datos de los nodos de la información aduanera
For iii = 0 To parte.InformacionAduanera.Count - 1
MsgBox parte.InformacionAduanera.Value(iii).NumeroPedimento
Next iii
End If
Next ii
End If
Next i
'Comprobamos que exista nodo de Impuestos en el comprobante
If Not res.Comprobante.impuestos Is Nothing Then
'Obtenemos los totales de impuestos
MsgBox res.Comprobante.impuestos.TotalImpuestosRetenidos
MsgBox res.Comprobante.impuestos.TotalImpuestosTrasladados
'Comprobamos que existan nodos de impuestos retenidos
If Not res.Comprobante.impuestos.retenciones Is Nothing Then
For i = 0 To res.Comprobante.impuestos.retenciones.retencion.Count - 1
'Asignamos los valores a una variable de tipo Retenciones para facilitar su lectura
Dim retencion As NodoRetencionImpuestos
Set retencion = res.Comprobante.impuestos.retenciones.retencion.Value(i)
'Obtenemos todos los datos de la retención
MsgBox retencion.Impuesto
MsgBox retencion.Importe
Next i
End If
'Comprobamos que existan nodos de impuestos trasladados
If Not res.Comprobante.impuestos.traslados Is Nothing Then
For i = 0 To res.Comprobante.impuestos.traslados.traslado.Count - 1
'Asignamos los valores a una variable de tipo Trasladados para facilitar su lectura
Dim traslado As NodoTrasladoImpuestos
Set traslado = res.Comprobante.impuestos.traslados.traslado.Value(i)
'Obtenemos todos los datos del impuesto trasladado
MsgBox traslado.Base
MsgBox traslado.Impuesto
MsgBox traslado.TipoFactor
MsgBox traslado.TasaOCuota
MsgBox traslado.Importe
Next i
End If
End If
'Comprobamos si existen el nodo Complementos
If Not res.Comprobante.Complemento Is Nothing Then
'Comprobamos si existe el complemento Divisas
If Not res.Comprobante.Complemento.Divisas Is Nothing Then
'Obtenemos el tipo de operación
MsgBox res.Comprobante.Complemento.Divisas.TipoOperacion
End If
'Comprobamos si existe el complemento Donatarias
If Not res.Comprobante.Complemento.Donatarias Is Nothing Then
'Obtenemos los datos de la Donataria
MsgBox res.Comprobante.Complemento.Donatarias.Version
MsgBox res.Comprobante.Complemento.Donatarias.noAutorizacion
MsgBox res.Comprobante.Complemento.Donatarias.fechaAutorizacion
MsgBox res.Comprobante.Complemento.Donatarias.leyenda
End If
If Not res.Comprobante.Complemento.ImpuestosLocales Is Nothing Then
'Obtenemos los datos del complemento Impuestos locales
MsgBox res.Comprobante.Complemento.ImpuestosLocales.Version
MsgBox res.Comprobante.Complemento.ImpuestosLocales.TotaldeRetenciones
MsgBox res.Comprobante.Complemento.ImpuestosLocales.TotaldeTraslados
'Asignamos variable de los impuestos trasladados para facilitar la lectura
Dim traslados As NodoTrasladosImpuestosLocalesCollection
Set traslados = res.Comprobante.Complemento.ImpuestosLocales.TrasladosLocales
'Comprobamos que la variable contenga información
If Not traslados Is Nothing Then
'Obtenemos la información de cada impuesto trasladado local
For i = 0 To traslados.Count - 1
MsgBox traslados.Value(i).ImpLocTrasladado
MsgBox traslados.Value(i).TasadeTraslado
MsgBox traslados.Value(i).Importe
Next i
End If
'Asignamos variable de los impuestos retenidos para facilitar la lectura
Dim retenciones As NodoRetencionesImpuestosLocalesCollection
Set retenciones = res.Comprobante.Complemento.ImpuestosLocales.RetencionesLocales
'Comprobamos que la variable contenga información
If Not retenciones Is Nothing Then
'Obtenemos la información de cada impuesto retenido local
For i = 0 To retenciones.Count - 1
MsgBox retenciones.Value(i).ImpLocRetenido
MsgBox retenciones.Value(i).TasadeRetencion
MsgBox retenciones.Value(i).Importe
Next i
End If
End If
'Comprobamos si existe el complemento INE
If Not res.Comprobante.Complemento.INE Is Nothing Then
'Obtenemos los datos del complemento INE
MsgBox res.Comprobante.Complemento.INE.Version
MsgBox res.Comprobante.Complemento.INE.TipoProceso
MsgBox res.Comprobante.Complemento.INE.TipoComite
MsgBox res.Comprobante.Complemento.INE.IdContabilidad
'Comprobamos que el complemento tenga nodo Entidad
If Not res.Comprobante.Complemento.INE.Entidad Is Nothing Then
'Obtenemos todos los datos de los nodos Entidad
For i = 0 To res.Comprobante.Complemento.INE.Entidad.Count - 1
MsgBox res.Comprobante.Complemento.INE.Entidad.Value(i).Ambito
MsgBox res.Comprobante.Complemento.INE.Entidad.Value(i).ClaveEntidad
'Comprobamos que cada nodo entidad tenga nodos Contabilidad
If Not res.Comprobante.Complemento.INE.Entidad.Value(i).Contabilidad Is Nothing Then
'Obtenemos los datos de los nodos Contabilidad
For ii = 0 To res.Comprobante.Complemento.INE.Entidad.Value(i).Contabilidad.Count - 1
MsgBox res.Comprobante.Complemento.INE.Entidad.Value(i).Contabilidad.Value(ii).IdContabilidad
Next ii
End If
Next i
End If
End If
'Comprobamos si existe el complemento Comercio Exterior
If Not res.Comprobante.Complemento.ComercioExterior Is Nothing Then
'Asignamos el complemento a una variable para facilitar la lectura
Dim comext As NodoComercioExterior
Set comext = res.Comprobante.Complemento.ComercioExterior
MsgBox comext.Version
MsgBox comext.TipoOperacion
MsgBox comext.MotivoTraslado
MsgBox comext.Incoterm
MsgBox comext.Subdivision
MsgBox comext.ClaveDePedimento
MsgBox comext.NumCertificadoOrigen
MsgBox comext.CertificadoOrigen
MsgBox comext.NumeroExportadorConfiable
MsgBox comext.Observaciones
MsgBox comext.TipoCambioUSD
MsgBox comext.TotalUSD
'Comprobamos que exista el nodo Emisor de Comercio Exterior
If Not comext.Emisor Is Nothing Then
'Obtenemos los datos del emisor
MsgBox comext.Emisor.CURP
'Comprobamos que exista domicilio en el emisor del comercio exterior
If Not comext.Emisor.Domicilio Is Nothing Then
'Obtenemos todos los datos del domicilio
MsgBox comext.Emisor.Domicilio.Calle
MsgBox comext.Emisor.Domicilio.NumeroExterior
MsgBox comext.Emisor.Domicilio.NumeroInterior
MsgBox comext.Emisor.Domicilio.Colonia
MsgBox comext.Emisor.Domicilio.CodigoPostal
MsgBox comext.Emisor.Domicilio.Referencia
MsgBox comext.Emisor.Domicilio.Localidad
MsgBox comext.Emisor.Domicilio.Municipio
MsgBox comext.Emisor.Domicilio.Estado
MsgBox comext.Emisor.Domicilio.Pais
End If
End If
'Comprobamos que exista el nodo Receptor de Comercio Exterior
If Not comext.Receptor Is Nothing Then
'Obtenemos los datos del receptor
MsgBox comext.Receptor.NumRegIdTrib
'Comprobamos que exista domicilio en el receptor del comercio exterior
If Not comext.Receptor.Domicilio Is Nothing Then
'Obtenemos todos los datos del domicilio
MsgBox comext.Receptor.Domicilio.Calle
MsgBox comext.Receptor.Domicilio.NumeroExterior
MsgBox comext.Receptor.Domicilio.NumeroInterior
MsgBox comext.Receptor.Domicilio.Colonia
MsgBox comext.Receptor.Domicilio.CodigoPostal
MsgBox comext.Receptor.Domicilio.Referencia
MsgBox comext.Receptor.Domicilio.Localidad
MsgBox comext.Receptor.Domicilio.Municipio
MsgBox comext.Receptor.Domicilio.Estado
MsgBox comext.Receptor.Domicilio.Pais
End If
End If
'Comprobamos que existan nodos Propietario de Comercio Exterior
If Not comext.Propietario Is Nothing Then
'Obtenemos los datos de cada nodo Propietario
For i = 0 To comext.Propietario.Count - 1
MsgBox comext.Propietario.Value(i).NumRegIdTrib
MsgBox comext.Propietario.Value(i).ResidenciaFiscal
Next i
End If
'Comprobamos que existan nodos Destinatarios de Comercio Exterior
If Not comext.destinatario Is Nothing Then
'Obtenemos los datos del receptor
For i = 0 To comext.destinatario.Count - 1
'Asignamos una variable de lectura al nodo Destinatario
Dim destinatario As NodoDestinatarioComercioExterior
Set destinatario = comext.destinatario.Value(i)
MsgBox destinatario.Nombre
MsgBox destinatario.NumRegIdTrib
'Comprobamos que exista domicilio en el destinatario del comercio exterior
If Not destinatario.Domicilio Is Nothing Then
'Obtenemos todos nodos de domicilio
For ii = 0 To destinatario.Domicilio.Count - 1
MsgBox destinatario.Domicilio.Value(ii).Calle
MsgBox destinatario.Domicilio.Value(ii).NumeroExterior
MsgBox destinatario.Domicilio.Value(ii).NumeroInterior
MsgBox destinatario.Domicilio.Value(ii).Colonia
MsgBox destinatario.Domicilio.Value(ii).CodigoPostal
MsgBox destinatario.Domicilio.Value(ii).Referencia
MsgBox destinatario.Domicilio.Value(ii).Localidad
MsgBox destinatario.Domicilio.Value(ii).Municipio
MsgBox destinatario.Domicilio.Value(ii).Estado
MsgBox destinatario.Domicilio.Value(ii).Pais
Next ii
End If
Next i
End If
'Comprobamos que existan mercancias en el complemento comercio exterior
If Not comext.Mercancias Is Nothing Then
'Obtenemos todos los datos de las mercancias
For i = 0 To comext.Mercancias.mercancia.Count - 1
'Asignamos una variable por cada mercancia para facilitar la lectura
Dim mercancia As NodoMercanciaComercioExterior
Set mercancia = comext.Mercancias.mercancia.Value(i)
MsgBox mercancia.FraccionArancelaria
MsgBox mercancia.UnidadAduana
MsgBox mercancia.NoIdentificacion
MsgBox mercancia.CantidadAduana
MsgBox mercancia.ValorUnitarioAduana
MsgBox mercancia.ValorDolares
'Comprobamos que existan descripciones específicas en la mercancia
If Not mercancia.DescripcionesEspecificas Is Nothing Then
'Asignamos una variable de descripciones específicas para facilitar la lectura de cada nodo
Dim descripciones As NodoDescripcionesEspecificasComercioExteriorCollection
Set descripciones = mercancia.DescripcionesEspecificas
For ii = 0 To descripciones.Count - 1
'Obtenemos los datos de la descripción específica
MsgBox descripciones.Value(ii).Marca
MsgBox descripciones.Value(ii).Modelo
MsgBox descripciones.Value(ii).SubModelo
MsgBox descripciones.Value(ii).NumeroSerie
Next ii
End If
Next i
End If
End If
'Comprobamos que exista complemento de Pagos 1.0
If Not res.Comprobante.Complemento.Pagos10 Is Nothing Then
'Obtenemos los datos del complemento Pagos 1.0
MsgBox res.Comprobante.Complemento.Pagos10.Version
For i = 0 To res.Comprobante.Complemento.Pagos10.pago.Count - 1
'Asignamos una variable de tipo Pago para facilitar la lectura
Dim pago As NodoPago10
Set pago = res.Comprobante.Complemento.Pagos10.pago.Value(i)
'Obtenemos los datos del nodo Pago
MsgBox pago.FechaPago
MsgBox pago.FormaDePagoP
MsgBox pago.CadPago
MsgBox pago.CertPago
MsgBox pago.CtaBeneficiario
MsgBox pago.CtaOrdenante
MsgBox pago.MonedaP
MsgBox pago.Monto
MsgBox pago.NomBancoOrdExt
MsgBox pago.NumOperacion
MsgBox pago.RfcEmisorCtaBen
MsgBox pago.RfcEmisorCtaOrd
MsgBox pago.SelloPago
MsgBox pago.TipoCadPago
MsgBox pago.TipoCambioP
'Comprobamos que el pago contenga nodos DoctoRelacionado
If Not pago.DoctoRelacionado Is Nothing Then
'Obtenemos los datos de cada DoctoRelacionado
For ii = 0 To pago.DoctoRelacionado.Count - 1
MsgBox pago.DoctoRelacionado.Value(ii).IdDocumento
MsgBox pago.DoctoRelacionado.Value(ii).Serie
MsgBox pago.DoctoRelacionado.Value(ii).Folio
MsgBox pago.DoctoRelacionado.Value(ii).MetodoDePagoDR
MsgBox pago.DoctoRelacionado.Value(ii).MonedaDR
MsgBox pago.DoctoRelacionado.Value(ii).TipoCambioDR
MsgBox pago.DoctoRelacionado.Value(ii).NumParcialidad
MsgBox pago.DoctoRelacionado.Value(ii).ImpSaldoAnt
MsgBox pago.DoctoRelacionado.Value(ii).ImpPagado
MsgBox pago.DoctoRelacionado.Value(ii).ImpSaldoInsoluto
Next ii
End If
'Comprobamos que el pago contenga nodo Impuestos
If Not pago.impuestos Is Nothing Then
'Comprobamos que contenga impuestos retenidos
If Not pago.impuestos.retenciones.retencion Is Nothing Then
'Obtenemos los datos de cada impuesto retenido
For ii = 0 To pago.impuestos.retenciones.retencion.Count - 1
'Asignamos el impuesto para facilitar la lectura
Dim retencion10 As NodoRetencionPagos10
Set retencion10 = pago.impuestos.retenciones.retencion.Value(ii)
MsgBox retencion10.Impuesto
MsgBox retencion10.Importe
Next ii
End If
'Comprobamos que contenga impuestos trasladados
If Not pago.impuestos.traslados Is Nothing Then
'Obtenemos los datos de cada impuesto trasladado
For ii = 0 To pago.impuestos.traslados.traslado.Count - 1
'Asignamos el impuesto para facilitar la lectura
Dim traslado10 As NodoTrasladoPagos10
Set traslado10 = pago.impuestos.traslados.traslado.Value(ii)
MsgBox traslado10.Impuesto
MsgBox traslado10.TipoFactor
MsgBox traslado10.TasaOCuota
MsgBox traslado10.Importe
Next ii
End If
End If
Next i
End If
'Comprobamos que exista complemento de Pagos 2.0
If Not res.Comprobante.Complemento.Pagos20 Is Nothing Then
'Obtenemos los datos del complemento Pagos 2.0
MsgBox res.Comprobante.Complemento.Pagos20.Version
'Asignamos una variable al nodo Totales para facilitar la lectura
Dim totales As NodoTotalesPagos20
Set totales = res.Comprobante.Complemento.Pagos20.totales
MsgBox totales.MontoTotalPagos
MsgBox totales.TotalRetencionesIEPS
MsgBox totales.TotalRetencionesISR
MsgBox totales.TotalRetencionesIVA
MsgBox totales.TotalTrasladosBaseExento
MsgBox totales.TotalTrasladosBaseIVA0
MsgBox totales.TotalTrasladosImpuestoIVA0
MsgBox totales.TotalTrasladosBaseIVA8
MsgBox totales.TotalTrasladosImpuestoIVA8
MsgBox totales.TotalTrasladosBaseIVA16
MsgBox totales.TotalTrasladosImpuestoIVA16
'Obtenemos los datos de todos los nodos de Pago
For i = 0 To res.Comprobante.Complemento.Pagos20.pago.Count - 1
'Asignamos una variable de tipo Pago para facilitar la lectura
Dim pago20 As NodoPago20
Set pago20 = res.Comprobante.Complemento.Pagos20.pago.Value(i)
MsgBox pago20.FechaPago
MsgBox pago20.FormaDePagoP
MsgBox pago20.CadPago
MsgBox pago20.CertPago
MsgBox pago20.CtaBeneficiario
MsgBox pago20.CtaOrdenante
MsgBox pago20.MonedaP
MsgBox pago20.Monto
MsgBox pago20.NomBancoOrdExt
MsgBox pago20.NumOperacion
MsgBox pago20.RfcEmisorCtaBen
MsgBox pago20.RfcEmisorCtaOrd
MsgBox pago20.SelloPago
MsgBox pago20.TipoCadPago
MsgBox pago20.TipoCambioP
'Comprobamos que el pago contenga nodos DoctoRelacionado
If Not pago20.DoctoRelacionado Is Nothing Then
'Obtenemos los datos de cada DoctoRelacionado
For ii = 0 To pago20.DoctoRelacionado.Count - 1
MsgBox pago20.DoctoRelacionado.Value(ii).IdDocumento
MsgBox pago20.DoctoRelacionado.Value(ii).Serie
MsgBox pago20.DoctoRelacionado.Value(ii).Folio
MsgBox pago20.DoctoRelacionado.Value(ii).MonedaDR
MsgBox pago20.DoctoRelacionado.Value(ii).EquivalenciaDR
MsgBox pago20.DoctoRelacionado.Value(ii).NumParcialidad
MsgBox pago20.DoctoRelacionado.Value(ii).ImpSaldoAnt
MsgBox pago20.DoctoRelacionado.Value(ii).ImpPagado
MsgBox pago20.DoctoRelacionado.Value(ii).ImpSaldoInsoluto
MsgBox pago20.DoctoRelacionado.Value(ii).ObjetoImpDR
'Comprobamos si el documento relacionado tiene impuestos
If Not pago20.DoctoRelacionado.Value(ii).ImpuestosDR Is Nothing Then
'Asignamos una variable de impuestos para facilitar la lectura
Dim impdr As NodoImpuestosDRPagos20
impdr = pago20.DoctoRelacionado.Value(ii).ImpuestosDR
'Confirmamos que existan impuestos retenidos
If Not impdr.RetencionesDR Is Nothing Then
For iii = 0 To impdr.RetencionesDR.RetencionDR.Count - 1
MsgBox impdr.RetencionesDR.RetencionDR.Value(iii).BaseDR
MsgBox impdr.RetencionesDR.RetencionDR.Value(iii).ImpuestoDR
MsgBox impdr.RetencionesDR.RetencionDR.Value(iii).TipoFactorDR
MsgBox impdr.RetencionesDR.RetencionDR.Value(iii).TasaOCuotaDR
MsgBox impdr.RetencionesDR.RetencionDR.Value(iii).ImporteDR
Next iii
End If
'Confirmamos que existan impuestos trasladados
If Not impdr.TrasladosDR Is Nothing Then
For iii = 0 To impdr.TrasladosDR.TrasladoDR.Count - 1
MsgBox impdr.TrasladosDR.TrasladoDR.Value(iii).BaseDR
MsgBox impdr.TrasladosDR.TrasladoDR.Value(iii).ImpuestoDR
MsgBox impdr.TrasladosDR.TrasladoDR.Value(iii).TipoFactorDR
MsgBox impdr.TrasladosDR.TrasladoDR.Value(iii).TasaOCuotaDR
MsgBox impdr.TrasladosDR.TrasladoDR.Value(iii).ImporteDR
Next iii
End If
End If
Next ii
End If
'Comprobamos que el pago contenga nodo Impuestos
If Not pago20.ImpuestosP Is Nothing Then
'Comprobamos que contenga impuestos retenidos
If Not pago20.ImpuestosP.RetencionesP Is Nothing Then
'Obtenemos los datos de cada impuesto retenido
For ii = 0 To pago20.ImpuestosP.RetencionesP.RetencionP.Count - 1
'Asignamos el impuesto para facilitar la lectura
Dim retencion20 As NodoRetencionPPagos20
Set retencion20 = pago20.ImpuestosP.RetencionesP.RetencionP.Value(ii)
MsgBox retencion20.ImpuestoP
MsgBox retencion20.ImporteP
Next ii
End If
'Comprobamos que contenga impuestos trasladados
If Not pago20.ImpuestosP.TrasladosP Is Nothing Then
'Obtenemos los datos de cada impuesto trasladado
For ii = 0 To pago20.ImpuestosP.TrasladosP.TrasladoP.Count - 1
'Asignamos el impuesto para facilitar la lectura
Dim traslado20 As NodoTrasladoPPagos20
Set traslado20 = pago20.ImpuestosP.TrasladosP.TrasladoP.Value(ii)
MsgBox traslado20.BaseP
MsgBox traslado20.ImpuestoP
MsgBox traslado20.TipoFactorP
MsgBox traslado20.TasaOCuotaP
MsgBox traslado20.ImporteP
Next ii
End If
End If
Next i
End If
'Comprobamos que exista complemento Nómina
If Not res.Comprobante.Complemento.Nomina Is Nothing Then
'Asignamos una variable del nodo Nómina para facilitar la lectura
Dim Nomina As NodoNomina
Set Nomina = res.Comprobante.Complemento.Nomina
MsgBox Nomina.Version
MsgBox Nomina.TipoNomina
MsgBox Nomina.FechaPago
MsgBox Nomina.FechaInicialPago
MsgBox Nomina.FechaFinalPago
MsgBox Nomina.NumDiasPagados
'Comprobamos que existan percepciones en el complemento
If Not Nomina.Percepciones Is Nothing Then
'Obtenemos los datos de las percepciones
MsgBox Nomina.Percepciones.TotalSueldos
MsgBox Nomina.Percepciones.TotalSeparacionIndemnizacion
MsgBox Nomina.Percepciones.TotalJubilacionPensionRetiro
MsgBox Nomina.Percepciones.TotalExento
MsgBox Nomina.Percepciones.TotalGravado
'Comprobamos que exista nodo JubilacionPensionRetiro
If Not Nomina.Percepciones.JubilacionPensionRetiro Is Nothing Then
'Obtenemos los datos del nodo JubilacionPensionRetiro
MsgBox Nomina.Percepciones.JubilacionPensionRetiro.TotalUnaExhibicion
MsgBox Nomina.Percepciones.JubilacionPensionRetiro.TotalParcialidad
MsgBox Nomina.Percepciones.JubilacionPensionRetiro.MontoDiario
MsgBox Nomina.Percepciones.JubilacionPensionRetiro.IngresoAcumulable
MsgBox Nomina.Percepciones.JubilacionPensionRetiro.IngresoNoAcumulable
End If
'Comprobamos que exista nodo SeparacionIndemnizacion
If Not Nomina.Percepciones.SeparacionIndemnizacion Is Nothing Then
'Obtenemos los datos del nodo JubilacionPensionRetiro
MsgBox Nomina.Percepciones.SeparacionIndemnizacion.UltimoSueldoMensOrd
MsgBox Nomina.Percepciones.SeparacionIndemnizacion.TotalPagado
MsgBox Nomina.Percepciones.SeparacionIndemnizacion.NumAñosServicio
MsgBox Nomina.Percepciones.SeparacionIndemnizacion.IngresoAcumulable
MsgBox Nomina.Percepciones.SeparacionIndemnizacion.IngresoNoAcumulable
End If
'Obtenemos todos los nodos de percepción
For i = 0 To Nomina.Percepciones.Percepcion.Count - 1
MsgBox Nomina.Percepciones.Percepcion.Value(i).TipoPercepcion
MsgBox Nomina.Percepciones.Percepcion.Value(i).Clave
MsgBox Nomina.Percepciones.Percepcion.Value(i).concepto
MsgBox Nomina.Percepciones.Percepcion.Value(i).ImporteExento
MsgBox Nomina.Percepciones.Percepcion.Value(i).ImporteGravado
'Comprobamos que existan horas extras en la percepción
If Not Nomina.Percepciones.Percepcion.Value(i).HorasExtra Is Nothing Then
'Obtenemos los datos de las horas extra
For ii = 0 To Nomina.Percepciones.Percepcion.Value(i).HorasExtra.Count - 1
MsgBox Nomina.Percepciones.Percepcion.Value(i).HorasExtra.Value(ii).Dias
MsgBox Nomina.Percepciones.Percepcion.Value(i).HorasExtra.Value(ii).HorasExtra
MsgBox Nomina.Percepciones.Percepcion.Value(i).HorasExtra.Value(ii).ImportePagado
MsgBox Nomina.Percepciones.Percepcion.Value(i).HorasExtra.Value(ii).TipoHoras
Next ii
End If
'Comprobamos que exista nodo AccionesOTitulos
If Not Nomina.Percepciones.Percepcion.Value(i).AccionesOTitulos Is Nothing Then
'Obtenemos todos los datos del nodo AccionesOTitulos
MsgBox Nomina.Percepciones.Percepcion.Value(i).AccionesOTitulos.PrecioAlOtorgarse
MsgBox Nomina.Percepciones.Percepcion.Value(i).AccionesOTitulos.ValorMercado
End If
Next i
End If
'Comprobamos que existan deducciones en el complemento
If Not Nomina.Deducciones Is Nothing Then
'Obtenemos los datos de las deducciones
MsgBox Nomina.Deducciones.TotalImpuestosRetenidos
MsgBox Nomina.Deducciones.TotalOtrasDeducciones
'Obtenemos todos los nodos de deducción
For i = 0 To Nomina.Deducciones.Deduccion.Count - 1
MsgBox Nomina.Deducciones.Deduccion.Value(i).TipoDeduccion
MsgBox Nomina.Deducciones.Deduccion.Value(i).Clave
MsgBox Nomina.Deducciones.Deduccion.Value(i).concepto
MsgBox Nomina.Deducciones.Deduccion.Value(i).Importe
Next i
End If
'Comprobamos que existan otros pagos en el complemento
If Not Nomina.OtrosPagos Is Nothing Then
'Obtenemos todos los nodos de otros pagos
For i = 0 To Nomina.OtrosPagos.OtroPago.Count - 1
MsgBox Nomina.OtrosPagos.OtroPago.Value(i).TipoOtroPago
MsgBox Nomina.OtrosPagos.OtroPago.Value(i).Clave
MsgBox Nomina.OtrosPagos.OtroPago.Value(i).concepto
MsgBox Nomina.OtrosPagos.OtroPago.Value(i).Importe
'Comprobamos que exista nodo SubsidioAlEmpleo
If Not Nomina.OtrosPagos.OtroPago.Value(i).SubsidioAlEmpleo Is Nothing Then
'Obtenemos todos los datos del nodo SubsidioAlEmpleo
MsgBox Nomina.OtrosPagos.OtroPago.Value(i).SubsidioAlEmpleo.SubsidioCausado
End If
'Comprobamos que exista el nodo CompensacionSaldosAFavor
If Not Nomina.OtrosPagos.OtroPago.Value(i).CompensacionSaldosAFavor Is Nothing Then
'Obtenemos todos los datos del nodo CompensacionSaldosAFavor
MsgBox Nomina.OtrosPagos.OtroPago.Value(i).CompensacionSaldosAFavor.Año
MsgBox Nomina.OtrosPagos.OtroPago.Value(i).CompensacionSaldosAFavor.RemanenteSalFav
MsgBox Nomina.OtrosPagos.OtroPago.Value(i).CompensacionSaldosAFavor.SaldoAFavor
End If
Next i
End If
'Comprobamos que existan incapacidades en el complemento
If Not Nomina.Incapacidades Is Nothing Then
'Obtenemos todos los nodos de incapacidad
For i = 0 To Nomina.Incapacidades.Incapacidad.Count - 1
MsgBox Nomina.Incapacidades.Incapacidad.Value(i).TipoIncapacidad
MsgBox Nomina.Incapacidades.Incapacidad.Value(i).DiasIncapacidad
MsgBox Nomina.Incapacidades.Incapacidad.Value(i).ImporteMonetario
Next i
End If
End If
'Comprobamos que exista complemento Carta porte 2.0
If Not res.Comprobante.Complemento.CartaPorte Is Nothing Then
'Asignamos una variable al complemento para facilitar la lectura
Dim CartaPorte As NodoCartaPorte
Set CartaPorte = res.Comprobante.Complemento.CartaPorte
'Obtenemos los datos del nodo CartaPorte
MsgBox CartaPorte.Version
MsgBox CartaPorte.EntradaSalidaMerc
MsgBox CartaPorte.PaisOrigenDestino
MsgBox CartaPorte.TotalDistRec
MsgBox CartaPorte.TranspInternac
MsgBox CartaPorte.ViaEntradaSalida
'Comprobamos que exista nodo Ubicaciones
If Not CartaPorte.Ubicaciones Is Nothing Then
'Obtenemos los datos de cada nodo Ubicaciones
For i = 0 To CartaPorte.Ubicaciones.Ubicacion.Count - 1
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).RFCRemitenteDestinatario
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).NombreRemitenteDestinatario
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).NumRegIdTrib
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).ResidenciaFiscal
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).TipoUbicacion
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).IDUbicacion
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).FechaHoraSalidaLlegada
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).TipoEstacion
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).DistanciaRecorrida
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).NavegacionTrafico
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).NumEstacion
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).NombreEstacion
'Comprobamos que exista el nodo Domicilio
If Not CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio Is Nothing Then
'Obtenemos todos los datos del nodo Domicilio
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio.Calle
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio.NumeroExterior
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio.NumeroInterior
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio.Colonia
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio.CodigoPostal
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio.Referencia
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio.Localidad
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio.Municipio
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio.Estado
MsgBox CartaPorte.Ubicaciones.Ubicacion.Value(i).Domicilio.Pais
End If
Next i
End If
'Comprobamos que exista nodo Mercancias
If Not CartaPorte.Mercancias Is Nothing Then
'Obtenemos todos los datos del nodo Mercancias
MsgBox CartaPorte.Mercancias.CargoPorTasacion
MsgBox CartaPorte.Mercancias.NumTotalMercancias
MsgBox CartaPorte.Mercancias.PesoBrutoTotal
MsgBox CartaPorte.Mercancias.PesoNetoTotal
MsgBox CartaPorte.Mercancias.UnidadPeso
'Obtenemos todos los nodos de Mercancia
For i = 0 To CartaPorte.Mercancias.mercancia.Count - 1
'Asignamos una variable por cada mercancía para facilitar la lectura
Dim MercanciaCP As New NodoMercanciaCartaPorte
Set MercanciaCP = CartaPorte.Mercancias.mercancia.Value(i)
MsgBox MercanciaCP.BienesTransp
MsgBox MercanciaCP.Cantidad
MsgBox MercanciaCP.ClaveSTCC
MsgBox MercanciaCP.ClaveUnidad
MsgBox MercanciaCP.CveMaterialPeligroso
MsgBox MercanciaCP.Descripcion
MsgBox MercanciaCP.DescripEmbalaje
MsgBox MercanciaCP.Dimensiones
MsgBox MercanciaCP.Embalaje
MsgBox MercanciaCP.FraccionArancelaria
MsgBox MercanciaCP.MaterialPeligroso
MsgBox MercanciaCP.Moneda
MsgBox MercanciaCP.PesoEnKg
MsgBox MercanciaCP.Unidad
MsgBox MercanciaCP.UUIDComercioExt
MsgBox MercanciaCP.ValorMercancia
'Comprobamos que existan los nodos GuiasIdentificacion
If Not MercanciaCP.GuiasIdentificacion Is Nothing Then
'Obtenemos todos los datos de los nodos GuiasIdentificacion
For ii = 0 To MercanciaCP.GuiasIdentificacion.Count - 1
MsgBox MercanciaCP.GuiasIdentificacion.Value(ii).DescripGuiaIdentificacion
MsgBox MercanciaCP.GuiasIdentificacion.Value(ii).NumeroGuiaIdentificacion
MsgBox MercanciaCP.GuiasIdentificacion.Value(ii).PesoGuiaIdentificacion
Next ii
End If
'Comprobamos que exista el nodo DetalleMercancia
If Not MercanciaCP.DetalleMercancia Is Nothing Then
'Obtenemos todos los datos del nodo DetalleMercancia
MsgBox MercanciaCP.DetalleMercancia.NumPiezas
MsgBox MercanciaCP.DetalleMercancia.PesoBruto
MsgBox MercanciaCP.DetalleMercancia.PesoNeto
MsgBox MercanciaCP.DetalleMercancia.PesoTara
MsgBox MercanciaCP.DetalleMercancia.UnidadPesoMerc
End If
'Comprobamos que exista el nodo CantidadTransporta
If Not MercanciaCP.CantidadTransporta Is Nothing Then
'Obtenemos todos los nodos CantidadTransporta
For ii = 0 To MercanciaCP.CantidadTransporta.Count - 1
MsgBox MercanciaCP.CantidadTransporta.Value(ii).Cantidad
MsgBox MercanciaCP.CantidadTransporta.Value(ii).IDOrigen
MsgBox MercanciaCP.CantidadTransporta.Value(ii).IDDestino
MsgBox MercanciaCP.CantidadTransporta.Value(ii).CvesTransporte
Next ii
End If
'Comprobamos que existan Pedimentos
If Not MercanciaCP.Pedimentos Is Nothing Then
'Obtenemos todos los Pedimentos
For ii = 0 To MercanciaCP.Pedimentos.Count - 1
MsgBox MercanciaCP.Pedimentos.Value(ii).Pedimento
Next ii
End If
Next i
'Comprobamos que exista el nodo Autotransporte
If Not CartaPorte.Mercancias.Autotransporte Is Nothing Then
'Obtenemos todos los datos del nodo Autotransporte
MsgBox CartaPorte.Mercancias.Autotransporte.PermSCT
MsgBox CartaPorte.Mercancias.Autotransporte.NumPermisoSCT
'Comprobamos que exista el nodo Seguros
If Not CartaPorte.Mercancias.Autotransporte.Seguros Is Nothing Then
'Obtenemos los datos del nodo Seguros
MsgBox CartaPorte.Mercancias.Autotransporte.Seguros.AseguraCarga
MsgBox CartaPorte.Mercancias.Autotransporte.Seguros.PolizaCarga
MsgBox CartaPorte.Mercancias.Autotransporte.Seguros.AseguraMedAmbiente
MsgBox CartaPorte.Mercancias.Autotransporte.Seguros.PolizaMedAmbiente
MsgBox CartaPorte.Mercancias.Autotransporte.Seguros.AseguraRespCivil
MsgBox CartaPorte.Mercancias.Autotransporte.Seguros.PolizaRespCivil
MsgBox CartaPorte.Mercancias.Autotransporte.Seguros.PrimaSeguro
End If
'Comprobamos que exista el nodo IdentificacionVehicular
If Not CartaPorte.Mercancias.Autotransporte.IdentificacionVehicular Is Nothing Then
'Obtenemos todos los datos del nodo IdentificacionVehicular
MsgBox CartaPorte.Mercancias.Autotransporte.IdentificacionVehicular.PlacaVM
MsgBox CartaPorte.Mercancias.Autotransporte.IdentificacionVehicular.ConfigVehicular
MsgBox CartaPorte.Mercancias.Autotransporte.IdentificacionVehicular.AnioModeloVM
End If
'Comprobamos que exista el nodo IdentificacionVehicular
If Not CartaPorte.Mercancias.Autotransporte.Remolques Is Nothing Then
'Obtenemos todos los datos del nodo Remolques
For ii = 0 To CartaPorte.Mercancias.Autotransporte.Remolques.Remolque.Count - 1
MsgBox CartaPorte.Mercancias.Autotransporte.Remolques.Remolque.Value(ii).Placa
MsgBox CartaPorte.Mercancias.Autotransporte.Remolques.Remolque.Value(ii).SubTipoRem
Next ii
End If
End If
End If
'Comprobamos que exista el nodo FiguraTransporte
If Not CartaPorte.FiguraTransporte Is Nothing Then
'Recorremos todos los nodos TiposFigura
For i = 0 To CartaPorte.FiguraTransporte.TiposFigura.Count - 1
'Obtenemos los datos del nodo
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).RFCFigura
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).NombreFigura
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).NumLicencia
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).TipoFigura
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).NumRegIdTribFigura
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).ResidenciaFiscalFigura
'Comprobamos que el nodo Domicilio exista
If Not CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio Is Nothing Then
'Obtenemos los datos del domicilio
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio.Calle
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio.NumeroExterior
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio.NumeroInterior
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio.Colonia
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio.CodigoPostal
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio.Referencia
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio.Localidad
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio.Municipio
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio.Estado
MsgBox CartaPorte.FiguraTransporte.TiposFigura.Value(i).Domicilio.Pais
End If
Next i
End If
End If
'Comprobamos que el nodo TimbreFiscalDigital exista
If Not res.Comprobante.Complemento.TimbreFiscalDigital Is Nothing Then
'Obtenemos todos los datos del TimbreFiscalDigital
MsgBox res.Comprobante.Complemento.TimbreFiscalDigital.Version
MsgBox res.Comprobante.Complemento.TimbreFiscalDigital.FechaTimbrado
MsgBox res.Comprobante.Complemento.TimbreFiscalDigital.UUID
MsgBox res.Comprobante.Complemento.TimbreFiscalDigital.SelloSAT
MsgBox res.Comprobante.Complemento.TimbreFiscalDigital.SelloCFD
MsgBox res.Comprobante.Complemento.TimbreFiscalDigital.leyenda
MsgBox res.Comprobante.Complemento.TimbreFiscalDigital.NoCertificadoSAT
MsgBox res.Comprobante.Complemento.TimbreFiscalDigital.RfcProvCertif
End If
End If
using tagcode.ReadCFDI;
using static tagcode.ReadCFDI.ResultadosLecturaCancelacion.NodoAcuse;
//Configuración general para el uso de servicios (Obligatorio para poder el uso de las funciones)
ConfiguracionesReadCFDI config = new ConfiguracionesReadCFDI();
//Establece los parametros de la cuenta de timbre que se usará para la lectura.
config.EstablecerPIN("CFx45...Hg", "micontraseña");
//Mostramos información mas detallada en caso de recibir un error a la hora de generar la lectura.
config.MostrarDetallesEnErrores = true;
//Clase para lectura de comprobantes fiscales y cancelaciones
Lectura lectura = new Lectura();
//Función para obtener los datos del Acuse de cancelación
ResultadosLecturaCancelacion res = lectura.LeerAcuseCancelacion("C:\\Cancelaciones\\AcuseCancelacion.xml");
//Obtenemos los datos del Acuse de cancelación
Console.WriteLine(res.Acuse.Fecha);
Console.WriteLine(res.Acuse.RfcEmisor);
Console.WriteLine(res.Acuse.Sello);
//Comprobamos que existan los nodos Folios
if (res.Acuse.Folios != null)
{
//Recorremos todos los nodos Folios
foreach (NodoFolios folio in res.Acuse.Folios)
{
//Obtenemos los datos de cada nodo Folios
Console.WriteLine(folio.UUID);
Console.WriteLine(folio.EstatusUUID);
}
}
'Configuración general para el uso de servicios (Obligatorio para poder el uso de las funciones)
Dim config As New ConfiguracionesReadCFDI
'Establece los parametros de la cuenta de timbre que se usará para la lectura.
config.EstablecerPIN "CFx45...Hg", "micontraseña"
'Mostramos información mas detallada en caso de recibir un error a la hora de generar la lectura.
config.MostrarDetallesEnErrores = True
'Clase para lectura de comprobantes fiscales y cancelaciones
Dim lectura As New lectura
Dim res As New ResultadosLecturaCancelacion
'Función para obtener los datos del Acuse de cancelación
Set res = lectura.LeerAcuseCancelacion("C:\Cancelaciones\AcuseCancelacion.xml")
'Obtenemos los datos del Acuse de cancelación
MsgBox res.Acuse.Fecha
MsgBox res.Acuse.RfcEmisor
MsgBox res.Acuse.Sello
'Comprobamos que existan los nodos Folios
If Not res.Acuse.Folios Is Nothing Then
'Recorremos todos los nodos Folios
For i = 0 To res.Acuse.Folios.Count - 1
'Obtenemos los datos de cada nodo
MsgBox res.Acuse.Folios.Value(i).UUID
MsgBox res.Acuse.Folios.Value(i).EstatusUUID
Next i
End If
//Configuración general para el uso de servicios (Obligatorio para poder el uso de las funciones)
using tagcode.ReadCFDI;
ConfiguracionesReadCFDI config = new ConfiguracionesReadCFDI();
//Establece los parametros de la cuenta de timbre que se usará para la lectura.
config.EstablecerPIN("CFx45...Hg", "micontraseña");
//Mostramos información mas detallada en caso de recibir un error a la hora de generar la lectura.
config.MostrarDetallesEnErrores = true;
//Clase para lectura de catálogos del SAT
CatalogosSAT catalogos = new CatalogosSAT();
//Mostramos algunas de las funciones disponibles en la clase CatalogosSAT
//Catálogo ClaveUnidad a partir de un código (Conceptos)
ResultadosCatalogos resUnico = catalogos.ObtenerClaveUnidadPorClave("E48");
Console.WriteLine(resUnico.Codigo + " - " + resUnico.Descripcion);
//Catálogo ClaveProdServ a partir de una descripción (Conceptos)
ResultadosCatalogos[] resArreglo = catalogos.ObtenerClaveProdServPorDescripcion("leche");
foreach (ResultadosCatalogos r in resArreglo)
{
Console.WriteLine(r.Codigo + " - " + r.Descripcion);
}
//Catálogo Estado a partir de una clave (Varios)
resUnico = catalogos.ObtenerEstadoPorClave("MEX");
Console.WriteLine(resUnico.Codigo + " - " + resUnico.Descripcion);
//Catálogo bancos a partir del nombre (Nómina)
resArreglo = catalogos.ObtenerBancoPorNombre("bbva");
foreach (ResultadosCatalogos r in resArreglo)
{
Console.WriteLine(r.Codigo + " - " + r.Descripcion);
}
//Catálogo de moneda a partir de un código (Varios)
ResultadosCatalogosDecimales resDecimales = catalogos.ObtenerMonedaPorClave("MXN");
Console.WriteLine(resDecimales.Codigo + " - " + resDecimales.Descripcion);
Console.WriteLine(resDecimales.CantidadDecimales);
//Catálogo de colonia a partir de clave y código postal (Varios)
ResultadosCatalogosCodigoPostal resCodigoPostal = catalogos.ObtenerColoniaPorClave("0347", "25350");
Console.WriteLine(resCodigoPostal.Codigo + " - " + resCodigoPostal.Descripcion);
Console.WriteLine(resCodigoPostal.CodigoPostal);
//Catálogo de colonia a partir de nombre (Varios)
ResultadosCatalogosCodigoPostal[] resCodigoPostalArreglo = catalogos.ObtenerColoniaPorNombre("centro", "25350");
foreach (ResultadosCatalogosCodigoPostal r in resCodigoPostalArreglo)
{
Console.WriteLine(r.Codigo + " - " + r.Descripcion);
Console.Write(r.CodigoPostal);
}
//Catálogo de régimen fiscal a partir de tipo de persona fiscal
ResultadosCatalogosPersonaFiscal[] resPersonaArreglo = catalogos.ObtenerRegimenFiscalPorTipoPersona(opTipoPersonaFiscalReadCFDI.PersonaFisica);
foreach (ResultadosCatalogosPersonaFiscal r in resPersonaArreglo)
{
Console.WriteLine(r.Codigo + " - " + r.Descripcion);
if (r.PersonaFisica) Console.WriteLine("Física");
if (r.PersonaMoral) Console.WriteLine("Moral");
}
//Muchos más catalogos dentro de la clase CatalogosSAT
//ResultadosCatalogos res = catalogos.Obtener...(...);
//Console.WriteLine(res.Codigo);
//Console.WriteLine(res.Descripcion);
'Configuración general para el uso de servicios (Obligatorio para poder el uso de las funciones)
Dim config As New ConfiguracionesReadCFDI
'Establece los parametros de la cuenta de timbre que se usará para la lectura.
config.EstablecerPIN "CFx45...Hg", "micontraseña"
'Mostramos información mas detallada en caso de recibir un error a la hora de generar la lectura.
config.MostrarDetallesEnErrores = True
'Clase para lectura de catálogos del SAT
Dim catalogos As New CatalogosSAT
'Mostramos algunas de las funciones disponibles en la clase CatalogosSAT
'Catálogo ClaveUnidad a partir de un código (Conceptos)
Dim resUnico As ResultadosCatalogos
Set resUnico = catalogos.ObtenerClaveUnidadPorClave("E48")
MsgBox resUnico.Codigo & " - " & resUnico.Descripcion
'Catálogo ClaveProdServ a partir de una descripción (Conceptos)
Dim resArreglo As ResultadosCatalogosCollection
Set resArreglo = catalogos.ObtenerClaveProdServPorDescripcion("leche")
For i = 0 To resArreglo.Count - 1
MsgBox resArreglo.Value(i).Codigo & " - " & resArreglo.Value(i).Descripcion
Next i
'Catálogo Estado a partir de una clave (Varios)
Set resUnico = catalogos.ObtenerEstadoPorClave("MEX")
MsgBox resUnico.Codigo & " - " & resUnico.Descripcion
'Catálogo bancos a partir del nombre (Nómina)
Set resArreglo = catalogos.ObtenerBancoPorNombre("bbva")
For i = 0 To resArreglo.Count - 1
MsgBox resArreglo.Value(i).Codigo & " - " & resArreglo.Value(i).Descripcion
Next i
'Catálogo de moneda a partir de un código (Varios)
Dim resDecimales As ResultadosCatalogosDecimales
Set resDecimales = catalogos.ObtenerMonedaPorClave("MXN")
MsgBox resDecimales.Codigo & " - " & resDecimales.Descripcion
MsgBox resDecimales.CantidadDecimales
'Catálogo de colonia a partir de clave y código postal (Varios)
Dim resCodigoPostal As ResultadosCatalogosCodigoPostal
Set resCodigoPostal = catalogos.ObtenerColoniaPorClave("0347", "25350")
MsgBox resCodigoPostal.Codigo & " - " & resCodigoPostal.Descripcion
MsgBox resCodigoPostal.CodigoPostal
'Catálogo de colonia a partir de nombre (Varios)
Dim resCodigoPostalArreglo As ResultadosCatalogosCodigoPostalCollection
Set resCodigoPostalArreglo = catalogos.ObtenerColoniaPorNombre("centro", "25350")
For i = 0 To resCodigoPostalArreglo.Count - 1
MsgBox resCodigoPostalArreglo.Value(i).Codigo & " - " & resCodigoPostalArreglo.Value(i).Descripcion
MsgBox resCodigoPostalArreglo.Value(i).CodigoPostal
Next i
'Catálogo de régimen fiscal a partir de tipo de persona fiscal
Dim resPersonaArreglo As ResultadosCatalogosPersonaFiscalCollection
Set resPersonaArreglo = catalogos.ObtenerRegimenFiscalPorTipoPersona(opTipoPersonaFiscalReadCFDI_PersonaFisica)
For i = 0 To resPersonaArreglo.Count - 1
MsgBox resPersonaArreglo.Value(i).Codigo & " - " & resPersonaArreglo.Value(i).Descripcion
If resPersonaArreglo.Value(i).PersonaFisica Then MsgBox "Física"
If resPersonaArreglo.Value(i).PersonaMoral Then MsgBox "Moral"
Next i
'Muchos más catalogos dentro de la clase CatalogosSAT
'Dim res As ResultadosCatalogos
'Set res = catalogos.Obtener...(...)
'MsgBox res.Codigo
'MsgBox res.Descripcion
try
{
//Configuración general para el uso de servicios (Obligatorio para el uso de funciones avanzadas)
ConfiguracionesReadCFDI config = new ConfiguracionesReadCFDI("CFx45...Hg", "micontraseña");
//...
//...
//...
//...
}
catch (Exception ex)
{
//Aquí controlamos nuestro código en caso de un error en el procedimiento de lectura
Console.WriteLine(ex.Message);
}
On Error GoTo Errores 'Configuración general para el uso de servicios (Obligatorio para el uso de funciones avanzadas) Dim config As New ConfiguracionesReadCFDI '... '... '... '... Exit Sub Errores: 'Aquí controlamos nuestro código en caso de un error en el procedimiento de lectura MsgBox Err.Description