Estructura del XML de nómina mensual

Si estás aquí, es porque seguramente eres programador y estás interesado en saber cómo armar tu XML para que la nómina mensual sea completamente válida.

Esto es realmente fácil partiendo de la estructura inicial, donde por cada XML tienes un nodo <nomina:Nomina> dentro del nodo: <cfdi:Complemento>

por lo que ahora podrá quedar:

<cfdi:Complemento>
		<nomina:Nomina ... />
		<nomina:Nomina ... />
		<nomina:Nomina ... />
		<nomina:Nomina ... />
</cfdi:Complemento>

Es decír, podrás tener múltiples complemente <nomina:Nomina> dentro del nodo superior.

también cambian los nodos <cfdi:conceptos> donde importe sera la suma de las percepciones menos las deucciones de todos los nodos <nomina:Nomina>, al igual que el nodo <cfdi:Impuestos> donde los atributos internos serán el total de las retenciones de todos los nodos de <nomina:Nomina>

Quedando entonces los totales registrados en:

	<cfdi:Conceptos>
		<cfdi:Concepto cantidad="1" unidad="servicio" descripcion="Pago de nómina" valorUnitario="6000" importe="6000"/>
	</cfdi:Conceptos>
	<cfdi:Impuestos totalImpuestosRetenidos="225">
		<cfdi:Retenciones>
			<cfdi:Retencion impuesto="ISR" importe="225"/>
		</cfdi:Retenciones>
	</cfdi:Impuestos>

 

Para que quede mas claro, pongo un ejemplo de XML ya timbrado y verificado completo de una Nómina (CFDI) Mensual:

<cfdi:Comprobante xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cfdi="http://www.sat.gob.mx/cfd/3" xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd http://www.sat.gob.mx/nomina http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina11.xsd" version="3.2" serie="AA" folio="33" fecha="2015-02-05T22:51:14" sello="Dyzt66wXc4x0UVahwlC51n5aAfJE9+1/npHP6vrX3StMbxDdJoGOzk47jN2tERNjtmWHooIrw7duVaafGPXJmCGtHkucUxvbowu5Jufz1ejOiiZwOruJoUzHefCn6EbqoqV6XxI6qFV9mBPYB/BZHA9rHWyTLiRQeBlvg1IOHd8=" formaDePago="PAGO EN UNA SOLA EXHIBICION" noCertificado="20001000000200001428" certificado="MIIEYTCCA0mgAwIBAgIUMjAwMDEwMDAwMDAyMDAwMDE0MjgwDQYJKoZIhvcNAQEFBQAwggFcMRowGAYDVQQDDBFBLkMuIDIgZGUgcHJ1ZWJhczEvMC0GA1UECgwmU2VydmljaW8gZGUgQWRtaW5pc3RyYWNpw7NuIFRyaWJ1dGFyaWExODA2BgNVBAsML0FkbWluaXN0cmFjacOzbiBkZSBTZWd1cmlkYWQgZGUgbGEgSW5mb3JtYWNpw7NuMSkwJwYJKoZIhvcNAQkBFhphc2lzbmV0QHBydWViYXMuc2F0LmdvYi5teDEmMCQGA1UECQwdQXYuIEhpZGFsZ28gNzcsIENvbC4gR3VlcnJlcm8xDjAMBgNVBBEMBTA2MzAwMQswCQYDVQQGEwJNWDEZMBcGA1UECAwQRGlzdHJpdG8gRmVkZXJhbDESMBAGA1UEBwwJQ295b2Fjw6FuMTQwMgYJKoZIhvcNAQkCDCVSZXNwb25zYWJsZTogQXJhY2VsaSBHYW5kYXJhIEJhdXRpc3RhMB4XDTEzMDUwNzE2MDEyOVoXDTE3MDUwNzE2MDEyOVowgdsxKTAnBgNVBAMTIEFDQ0VNIFNFUlZJQ0lPUyBFTVBSRVNBUklBTEVTIFNDMSkwJwYDVQQpEyBBQ0NFTSBTRVJWSUNJT1MgRU1QUkVTQVJJQUxFUyBTQzEpMCcGA1UEChMgQUNDRU0gU0VSVklDSU9TIEVNUFJFU0FSSUFMRVMgU0MxJTAjBgNVBC0THEFBQTAxMDEwMUFBQSAvIEhFR1Q3NjEwMDM0UzIxHjAcBgNVBAUTFSAvIEhFR1Q3NjEwMDNNREZOU1IwODERMA8GA1UECxMIcHJvZHVjdG8wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKS/beUVy6E3aODaNuLd2S3PXaQre0tGxmYTeUxa55x2t/7919ttgOpKF6hPF5KvlYh4ztqQqP4yEV+HjH7yy/2d/+e7t+J61jTrbdLqT3WD0+s5fCL6JOrF4hqy//EGdfvYftdGRNrZH+dAjWWml2S/hrN9aUxraS5qqO1b7btlAgMBAAGjHTAbMAwGA1UdEwEB/wQCMAAwCwYDVR0PBAQDAgbAMA0GCSqGSIb3DQEBBQUAA4IBAQACPXAWZX2DuKiZVv35RS1WFKgT2ubUO9C+byfZapV6ZzYNOiA4KmpkqHU/bkZHqKjR+R59hoYhVdn+ClUIliZf2ChHh8s0a0vBRNJ3IHfA1akWdzocYZLXjz3m0Er31BY+uS3qWUtPsONGVDyZL6IUBBUlFoecQhP9AO39er8zIbeU2b0MMBJxCt4vbDKFvT9i3V0Puoo+kmmkf15D2rBGR+drd8H8Yg8TDGFKf2zKmRsgT7nIeou6WpfYp570WIvLJQY+fsMp334D05Up5ykYSAxUGa30RdUzA4rxN5hT+W9whWVGD88TD33Nw55uNRUcRO3ZUVHmdWRG+GjhlfsD" subTotal="6000" descuento="0" motivoDescuento="Deducciones nómina" TipoCambio="1.00" Moneda="Peso MXN" total="5775" tipoDeComprobante="egreso" metodoDePago="Efectivo" LugarExpedicion="Nayarit, México">
	<cfdi:Emisor rfc="AAA010101AAA" nombre="DESARROLLO FACTUKORA">
		<cfdi:DomicilioFiscal calle="calle" noExterior="23" colonia="colonia" localidad="Tepic" municipio="Tepic" estado="Nayarit" pais="México" codigoPostal="63163"/>
		<cfdi:RegimenFiscal Regimen="Régimen de las Personas Físicas con Actividades Empresariales y Profesionales"/>
	</cfdi:Emisor>
	<cfdi:Receptor rfc="XAXX010101000" nombre="NOMBRE DEL EMPLEADO">
		<cfdi:Domicilio calle="calle" noExterior="10" colonia="colonia" localidad="TEPIC" municipio="TEPIC" estado="NAYARIT" pais="MÉXICO" codigoPostal="63163"/>
	</cfdi:Receptor>
	<cfdi:Conceptos>
		<cfdi:Concepto cantidad="1" unidad="servicio" descripcion="Pago de nómina" valorUnitario="6000" importe="6000"/>
	</cfdi:Conceptos>
	<cfdi:Impuestos totalImpuestosRetenidos="225">
		<cfdi:Retenciones>
			<cfdi:Retencion impuesto="ISR" importe="225"/>
		</cfdi:Retenciones>
	</cfdi:Impuestos>
	<cfdi:Complemento>
		<nomina:Nomina xmlns:nomina="http://www.sat.gob.mx/nomina" Version="1.1" RegistroPatronal="123456789" NumEmpleado="04458722855" CURP="COMR900725HNTRXP08" TipoRegimen="3" NumSeguridadSocial="123456" FechaPago="2015-02-05" FechaInicialPago="2015-02-05" FechaFinalPago="2015-02-11" NumDiasPagados="6" Departamento="Sistemas" Banco="014" Puesto="Jefe" TipoContrato="Base" TipoJornada="Diurna" PeriodicidadPago="Semanal" RiesgoPuesto="1" SalarioDiarioIntegrado="150">
			<nomina:Percepciones TotalGravado="1500" TotalExento="1500">
				<nomina:Percepcion TipoPercepcion="001" Clave="001" Concepto="Sueldos, Salarios Rayas y Jornales" ImporteExento="0" ImporteGravado="1500"/>
			</nomina:Percepciones>
			<nomina:Deducciones TotalGravado="56.25" TotalExento="0">
				<nomina:Deduccion TipoDeduccion="002" Clave="002" Concepto="ISR" ImporteExento="0" ImporteGravado="56.25"/>
			</nomina:Deducciones>
		</nomina:Nomina>
		<nomina:Nomina xmlns:nomina="http://www.sat.gob.mx/nomina" Version="1.1" RegistroPatronal="123456789" NumEmpleado="04458722855" CURP="COMR900725HNTRXP08" TipoRegimen="3" NumSeguridadSocial="123456" FechaPago="2015-02-05" FechaInicialPago="2015-02-12" FechaFinalPago="2015-02-18" NumDiasPagados="6" Departamento="Sistemas" Banco="014" Puesto="Jefe" TipoContrato="Base" TipoJornada="Diurna" PeriodicidadPago="Semanal" RiesgoPuesto="1" SalarioDiarioIntegrado="150">
			<nomina:Percepciones TotalGravado="1500" TotalExento="1500">
				<nomina:Percepcion TipoPercepcion="001" Clave="001" Concepto="Sueldos, Salarios Rayas y Jornales" ImporteExento="0" ImporteGravado="1500"/>
			</nomina:Percepciones>
			<nomina:Deducciones TotalGravado="56.25" TotalExento="0">
				<nomina:Deduccion TipoDeduccion="002" Clave="002" Concepto="ISR" ImporteExento="0" ImporteGravado="56.25"/>
			</nomina:Deducciones>
		</nomina:Nomina>
		<nomina:Nomina xmlns:nomina="http://www.sat.gob.mx/nomina" Version="1.1" RegistroPatronal="123456789" NumEmpleado="04458722855" CURP="COMR900725HNTRXP08" TipoRegimen="3" NumSeguridadSocial="123456" FechaPago="2015-02-05" FechaInicialPago="2015-02-19" FechaFinalPago="2015-02-25" NumDiasPagados="6" Departamento="Sistemas" Banco="014" Puesto="Jefe" TipoContrato="Base" TipoJornada="Diurna" PeriodicidadPago="Semanal" RiesgoPuesto="1" SalarioDiarioIntegrado="150">
			<nomina:Percepciones TotalGravado="1500" TotalExento="1500">
				<nomina:Percepcion TipoPercepcion="001" Clave="001" Concepto="Sueldos, Salarios Rayas y Jornales" ImporteExento="0" ImporteGravado="1500"/>
			</nomina:Percepciones>
			<nomina:Deducciones TotalGravado="56.25" TotalExento="0">
				<nomina:Deduccion TipoDeduccion="002" Clave="002" Concepto="ISR" ImporteExento="0" ImporteGravado="56.25"/>
			</nomina:Deducciones>
		</nomina:Nomina>
		<nomina:Nomina xmlns:nomina="http://www.sat.gob.mx/nomina" Version="1.1" RegistroPatronal="123456789" NumEmpleado="04458722855" CURP="COMR900725HNTRXP08" TipoRegimen="3" NumSeguridadSocial="123456" FechaPago="2015-02-05" FechaInicialPago="2015-02-26" FechaFinalPago="2015-03-04" NumDiasPagados="6" Departamento="Sistemas" Banco="014" Puesto="Jefe" TipoContrato="Base" TipoJornada="Diurna" PeriodicidadPago="Semanal" RiesgoPuesto="1" SalarioDiarioIntegrado="150">
			<nomina:Percepciones TotalGravado="1500" TotalExento="1500">
				<nomina:Percepcion TipoPercepcion="001" Clave="001" Concepto="Sueldos, Salarios Rayas y Jornales" ImporteExento="0" ImporteGravado="1500"/>
			</nomina:Percepciones>
			<nomina:Deducciones TotalGravado="56.25" TotalExento="0">
				<nomina:Deduccion TipoDeduccion="002" Clave="002" Concepto="ISR" ImporteExento="0" ImporteGravado="56.25"/>
			</nomina:Deducciones>
		</nomina:Nomina>
		<tfd:TimbreFiscalDigital xmlns:tfd="http://www.sat.gob.mx/TimbreFiscalDigital" xsi:schemaLocation="http://www.sat.gob.mx/TimbreFiscalDigital http://www.sat.gob.mx/TimbreFiscalDigital/TimbreFiscalDigital.xsd" version="1.0" UUID="AA509515-D0FA-4090-9C17-26C56A52D447" FechaTimbrado="2015-02-06T00:07:56" noCertificadoSAT="20001000000100005761" selloCFD="Dyzt66wXc4x0UVahwlC51n5aAfJE9+1/npHP6vrX3StMbxDdJoGOzk47jN2tERNjtmWHooIrw7duVaafGPXJmCGtHkucUxvbowu5Jufz1ejOiiZwOruJoUzHefCn6EbqoqV6XxI6qFV9mBPYB/BZHA9rHWyTLiRQeBlvg1IOHd8=" selloSAT="Y5ACAS/s1Q+oHy9giFwCIzHwCagW8qeGnOWRxuZRGTt7nJwtoM01DeMyl4MxkBhoKyxYkswN4xJJLPCF5sTI3mxqrGgXBEdZr0BtPSSP573+3E69OggWtx3dE0DFx79Q054g9amL1K++E1DVpD+bitakg4M+YOmjyExQif+NXNo="/>
	</cfdi:Complemento>
</cfdi:Comprobante>

Si lo copias a  Sublime Text, te será más fácil digerirlo o leerlo.

Si tienes dudas sobre la estructura de un XML para la nómina mensual, puedes preguntar comentando. Aquí puedes ver cómo hacer un documento CFDI de nómina mensual en FactuKora.

Recuerda que en KoraNet Soluciones desarrollamos FactuKora, sistema que permite llevar el control documentos CFDI: Facturas, Nóminas y Recibos de honorarios. Tenemos precios especiales a distribuidores, si te interesa ponte en contacto con nosotros.

Puedes descargar una versión de demostración de FactuKora, también ver los Precios y Promociones.

 

Los medicamentos, absolutamente, van a cambiar tu vida. Si el problema persiste durante un perГ­odo mГЎs largo, se debe consultar a un mГ©dico. ВїTiene alguna cuestión sobre Kamagra y comprare cialis? Por supuesto que no es todo. ВїQuГ© medicamento es adecuado para incapacidad laboral para obtener o mantener una erecciГіn? Tal vez usted sabe sobre . Otra pregunta que tenemos que discutir es . Tener impotencia puede complicar el romance. Todo tipo de medicamentos, desde aquellos que se consideran «todos naturales» a los que se producen quГ­micamente en un laboratorio, pueden causar algunos efectos secundarios no deseados.

Modificar una Vista de SQL Server desde VBA en Access y mostrarla

Recientemente me ví en la necesidad de tener una vista con contenido ‘a petición’ del usuario, que bien puede ser de una sola tabla o de muchas, usando como base una instrucción en SQL Server.

Abrir una tabla desde VBA en Access es sencillo, para ello existe la instrucción:

DoCmd.OpenTable "NombreTabla", acViewNormal

Donde:

DoCmd.OpenTable es la instrucción

NombreTabla es un parámetro donde le indiques el nombre de la tabla

acViewNormal es un segundo parámetro para indicarle en que modo se abrirá la tabla. En este caso ‘Normal’

 

Ahora bien, nuestra misión será editar una consulta/vista desde VBA en Access, pero si no existe habrá que crearla y luego abrirla en vista tabla.

Estos son los pasos a seguir:

1 – Crear la consulta, si existe, regresará un error y entonces pasaremos a editarla.

2 – Luego de crearla o editarla, refrescar el enlace a la BD de SQL Server, porque si no hacemos este paso, la vista/consulta editada, saldrá con el contenido anterior y parecerá que nuestro método de edición ha fallado. Esto se soluciona dando clic en el area de objetos de Access y presionando F5, pero nosotros lo haremos desde VBA.

La función para Crear o Editar la vista es la siguiente:

Function CrearEditarVista(strNombreVista As String, strSQLBase As String) As Boolean
    Dim iSQL As String
    
    'le indicamos que si hay un error continúe'
    On Error Resume Next
    'Esta instrucción SQL crea la vista en SQL Server'
    iSQL = "CREATE VIEW " & strNombreVista & " AS " & strSQLBase
    
    Err.CLEAR
    CurrentProject.connection.Execute iSQL
    
    If Err.number = 0 Then 'Si no hubo error'
        'Se creó la vista :D, Devolvamos True'
        CrearEditarVista = True
    ElseIf Err.number = -2147217900 Then 'Este error significa que ya existe la vista. Entonces a editarla'
        iSQL = "ALTER VIEW " & strNombreVista & " AS " & strSQLBase
        Err.CLEAR
        CurrentProject.connection.Execute iSQL
        If Err.number Then GoTo MANEJA_ERROR 'Si genera error, anunciar el error'
        'Nuesta función, funcionó :D, retornemos True'
        CrearEditarVista = True
    Else
        GoTo MANEJA_ERROR
    End If
    Exit Function
MANEJA_ERROR:
    MsgBox "[" & Err.number & "] - [" & Err.description, vbCritical, "Error"
    CrearEditarVista = False
End Function

Ahora, necesitamos consumirla y hacer el resto:

Function AbrirVista()
    strSQL = "Cualquier consulta con SELECT"
    R = CrearEditarVista("NombreDeMiVista", SQL)
    
    If R = True Then 'Si se creó o editó la vista'
        'Refrescamos los objetos. Si no hacemos esto, dará error porque no encontrará la vista o nos abrirá la vista, con la consulta que ya tenía guardada'
        Application.RefreshDatabaseWindow
        'Esperamos un segundo a que se actualicen los objetos'
        Sleep (1)
        'Finalmente abrimos la vista'
        DoCmd.OpenView "NombreDeMiVista", acViewNormal
    End If
End Function

Aquí la función Sleep(), aclaro que no es mía, álgún genio de la Web la creó, y yo la copié

Public Function Sleep(NumberOfSeconds As Variant)
On Error GoTo Err_Pause

    Dim PauseTime As Variant, start As Variant

    PauseTime = NumberOfSeconds
    start = Timer
    Do While Timer < start + PauseTime
    DoEvents
    Loop

Exit_Pause:
    Exit Function

Err_Pause:
    MsgBox Err.number & " - " & Err.description, vbCritical, "Pause()"
    Resume Exit_Pause

End Function

Copia todo esto a un módulo y lo podrás usar sin problemas, o hasta puedes crear un formulario. como el siguiente:

SQLVista

Espero te sirva. ¡Hasta la próxima!

Los medicamentos, absolutamente, van a cambiar tu vida. Si el problema persiste durante un perГ­odo mГЎs largo, se debe consultar a un mГ©dico. ВїTiene alguna pregunta sobre Kamagra y comprare cialis? Por supuesto que no es todo. ВїQuГ© medicamento es adecuado para la incapacidad para obtener o mantener una erecciГіn? Tal vez usted sabe sobre . Otra cuestión que tenemos que discutir es . Tener impotencia lata complicar el romance. Todo tipo de medicamentos, desde aquellos que se consideran «todos naturales» a los que se producen quГ­micamente en un laboratorio, pueden causar algunos efectos secundarios no deseados.