martes, 23 de febrero de 2010

ADO.NET & LINQToSQL

Hola, En este post voy a explicar cómo crear una alicación maestro detalle (Clientes-Facturas) pero ahora usando LINQToSQL. ¿Pero qué es LINQ? LINQ es un lenguaje de consultas que permite unir datos con programación y nos hará más fácil trabajar con datos, colecciones y elementos ya que podremos hacer consultas como las de SQL usando VB.NET o C#. Tenemos varias extensiones: LINQToObjects, LINQToXML, LINQToDataset, LINQToSQL y LINQToEntities. Con la API LINQToSQL podemos hacer de una forma fácil y sencilla consultas de la misma forma que escribimos código.

Pero, lógicamente antes de la versión 3.5 del NET Framework, que es a partir de la cual se puede usar LINQ, también se podia trabajar con datos gracias a ADO.NET (Namespace System.Data). Para ello voy a recordar las 2 formas que existían y que existen para acceder a una base de datos y luego más tarde explicaré en un video como hacer lo mismo usando LINQToSql, ya que en programación hay más de una forma de hacer las cosas:

1. Acceso desconectado a la base de datos: se llama así porque sólo estamos conectados a la fuente de datos el tiempo preciso para realizar las operaciones. Para ello utilizamos un dataset, una copia en memoria de los datos, y un dataadapter, que se encargará de conectarse a la fuente de datos y rellenar las tablas del dataset. El dataadapter abrirá la conexión, rellenará los datos en el dataset o actualizará la fuente de datos y cerrará la conexión el solito. Gracias al dataadapter podemos filtrar los datos a nuestro antojo. En el siguiente ejemplo voy a seleccionar los registros de la base de datos Northwind cuyo país es España. Yo parto de una aplicación para Windows Forms en VB.NET con un formulario, en el que se ha añadido un control DataGridView llamado DataGridView1. Pues pegar este este fragmento de código en el evento Load:

'defino la cadena de conexión
Private conexion As String = "Data Source=(local); Integrated Security=true; Initial Catalog=Northwind;"

'declaro el dataadapter, poniendo el selectcommand y la cadena de conexión
Dim da As New SqlDataAdapter("Select * from Customers where country =@pais", conexion)
da.SelectCommand.Parameters.Add("@pais", SqlDbType.NVarChar).Value = "Spain"
'declaro el dataset
Dim ds As New DataSet

'relleno el dataset usando el método Fill del dataapter
da.Fill(ds, "Customers")
Me.DataGridView1.DataSource = ds.Tables("Customers")

2. Acceso conectado a la base de datos: en este caso abriremos la conexión y permanerá abierta hasta que nosotros la cerrermos. En algunas ocasiones se utiliza este tipo de acceso porque lo que queremos no es una copia en memoria de los datos sino queremos actualizar un conjunto de datos. Por ejemplo quiero actualizar el tipo general de IVA del 16 % al 18 % en la base de datos Facturas. Bueno, para que funcione este ejemplo necesitas tener lo mismo de antes, un formulario en VB.NET con un DataGridView llamado DataGridView1:

'defino la conexión
Dim conexion As New SqlConnection("Data Source=(local); Integrated Security=true; Initial Catalog=Northwind;")

'abro la conexión
conexion.Open()

'delaro el SqlComand
Dim comando As New SqlCommand("Select * from Customers where country=@pais", conexion)
comando.Parameters.Add("@pais", SqlDbType.NVarChar).Value = "Spain"
'el tipo es texto, también prodrñia ser un storedprocedure
comando.CommandType = CommandType.Text


'declaro el datareader
Dim reader As SqlDataReader = comando.ExecuteReader()


'declaro el datatable
Dim dt As New DataTable


'relleno el datatable
dt.Load(reader)
Me.DataGridView1.DataSource = dt

'que no se me olvide de cerrar la conexión ya que si no consume recursos
conexion.Close()

Ok, esto está muy bien, pero ¿cuál es la ventaja de usar LINQ frente a lo que hemos visto? Pues la ventaja... Para mi es complicado comprobar si la consulta es correcta antes de ejecutar la aplicación. En cambio usando LINQToSQL (acceso conectado) o LINQToDataset (acceso desconectado) puedo depurar la consulta, además de al escribirla tener la ayuda que me proporciona IntelliSense.

Pues bien en el ejemplo que pongo acontinuación, voy a hacer lo mismo que podría hacer de cualquiera de las 2 maneras anteriores pero ahora usando LINQToSQL. En este primer vídeo además de mostrar como crear la interfaz de usuario explicaré como eliminar y modificar Facturas. En un segundo vídeo explicaré cómo insertar facturas y cómo pasar datos entre formularios.


En este link se puede descargar el Snaphot1 con todo el código fuente del programa. Para abrirlo necesitarás tener instalado el Visual Studio 2008.

Formulario Facturas-Clientes usando LINQToSQL & C# (Spanish) from Raúl González on Vimeo

domingo, 21 de febrero de 2010

2 opciones para el cálculo del Modelo 202


El plazo máximo para presentar el Impuesto sobre Sociedades es el de los 25 días naturales a partir de los 6 meses de la fecha de cierre del ejercicio. Como la mayoría de las empresas cierran su ejercicio el 31/12, el Impuesto sobre Sociedades se puede presentar hasta el 25 de julio. Pero ahora no voy a explicar cómo se calcula el Impuesto sobre Sociedades, si no que me voy a centrar en los 3 pagos fraccionados del IS, que se presentan el 20 de abril, el 20 de octubre y el 20 de diciembre.

A veces es más difícil leer el concepto en un libro y entenderlo que verlo con tu propios ojos. Según el art. 45.2 LIS, es tan sencillo como coger el último Impuesto sobre Sociedades presentado (normalmente el 25 de julio) y sobre la casilla 599 (que es la cuota líquida del Impuesto) pagar el 18%. Si sale negativo y no eres Gran Empresa a efectos de IVA (cifra de negocios <>

Voy a poner un ejemplo, estamos en el 20 de abril del 2009 y el Impuesto sobre Sociedades (del 2008 que el del último ejercicio cerrado) se presentará el 25 de julio del 2009. Pues bien para el primer pago fraccionado (20 de abril del 2009) yo cogeré el último Impuesto sobre Sociedades que tengo, el que se presentó el 25 del julio del 2008 (ejercicio 2007). Para el segundo y tercer pago fraccionado (20 de octubre y 20 de diciembre) entonces sí que ya habré presentado el Impuesto sobre Sociedades el 25 de julio (ejercicio 2008) y cogeré éste último para los pagos fraccionados.

Pues bien existe otra forma de calcular los pagos fraccionados (art 45.3 LIS), que es usando la cuenta de Pérdidas y Ganancias. Eso si supongo que la contabilidad está al día y no hay “contabilidades creativas” ni demás “cosas raras”. Vamos, sólo hay que ir a A3 o a Contaplus y que te imprima por pantalla la cuenta de Pérdidas y Ganancias, para el primer pago, de enero a marzo, para el segundo, de enero a septiembre y para el tercero, de enero a noviembre y a partir de ahí determinar la base imponible de la misma manera que se hace al calcular un IS. Y el tipo impositivo será 5/7 del tipo impositivo que te toca: si eres Pyme, el tipo impositivo es el del 25 % sobre los primeros 120.202,41 € y el 30% sobre el resto. Pues bien para el 202 5/7 x 25% = 17% y 5/7 x 30% = 21 %.
Si eres Gran Empresa (a partir de una cifra de negocios > 6.000.000 €) tú modelo será a partir del 2010 también el 202 y tendrás que marcar la opción 'Gran Empresa' con una cruz, pero hasta no alcanzar los 8.000.000 € de cifra de negocios podrás aplicar "los chollos" que tienen las PYMES, en los que que está el tipo impositivo del 25 % sobre los primeros 120.202,41 € y 30 % sobre el resto.

Pues bien, ¿cuándo interesa darse de alta o de baja de la opción del artículo 45.3 LIS? Pues si el 2009 fue muy bueno en ventas, pero vemos que los primeros meses del 2010 la cosa anda chunga y no ganamos más que para pérdidas, lo que pasará es que el Impuesto sobre Sociedades del 2009 (que se presentará el 25 de julio del 2010) saldrá a pagar, cuando vemos que en la contabilidad del 2010 tenemos pérdidas. Y eso supondrá que el 2º pago fraccionado del 2010 (20 de octubre del 2010), en el tercer pago fraccionado del 2010 (20 de diciembre del 2010) y en el 1er pago fraccionado del 2011 (20 de abril del 2011) que los calcularemos usando el Impuesto sobre Sociedades del 2009, nos tocará rascarnos el bolsillo, cuando vemos que en el ejercicio 2010 tendremos pérdidas y no tendríamos que pagar nada. Y lo peor es que hasta el 25 de julio de 2011 Hacienda no nos devolverá ese dinero. Eso sí se habrá financiado a tipo de interés 0.

Si el 2010 proveemos, por el contrario que vamos a ganar más que el 2009, y en el 2009 nos dimos de alta de la opción del art. 45.3 LIS, pues habrá que darse de baja y volver al método del 18% sobre la cuota íntegra.

Pues bien ahora cuelgo en modelo de 036 de alta de la opción del artículo 45.3 LIS en pdf y en xps. Ojo! El plazo finaliza el último día de febrero.

lunes, 15 de febrero de 2010

Análisis de la Plataforma Informativas 5 y el M349 2010

Bueno,
Hoy voy a colgar un vídeo en que hablaré de nuevo del modelo 349. De este modelo ya hablé el verano y expliqué el funcionamiento de la Plataforma Informativas de la AEAT. Pero como el mundo de la fiscalidad está en continua evolución voy a hablar de las 2 principales novedades del modelo 349: la primera es que se presentará mensualmente y la segunda es que ahora en el Modelo 349 también se declararán los servicios intracomunitarios (que antes se declaraban en el 216 pero como de esto no se recordaba ni Dios han decido cambiarlo y juntarlo todo en el 349).

De hecho el ejemplo típico es el del abogado francés que presta un servicio de asesoramiento a una empresa española. Es una prestación de servicios realizada por un profesional y la operación se entiende realizada en el TAI (Península y Baleares) por tener la empresa española su sede en España. Se produce la inversión del sujeto pasivo por ser el prestador (el abogado) no establecido.


En el siguiente asiento se contabiliza una adquisición intracomunitaria de bienes a una empresa alemana por 5.000 €. Para el caso del abogado francés (adquisición intracomunitaria de servicios), el asiento sería el mismo pero lo que cambiaría sería la clave a la que iría en el 349.

En esta captura contabilizo la adquisición intracomunitaria de bienes a la empresa alemana. En el caso de los servicios prestados por abogado francés el asiento sería idéntico pero lo que cambiaria seria la clave de la operación
También podría darse el caso contario de una empresa española que preste servicios de asesoramiento a una empresa francesa. Ahora nosotros emitiremos la factura sin IVA* y empresa francesa ya hará lo de la inversión del sujeto pasivo.


Ojo! Primero antes de emitir una factura sin IVA ya sea en una entrega intracomunitaria de bienes o una prestación intracomunitaria de servicios asegúrate que el receptor sea operador intracomunitario, porque si no hay que emitir la factura con el IVA español. A parte, si tu empresa no esta dada como operador intracomunitario y va a hacer adquisiciones o entregas intracomunitarias date de alta en el ROI presentando un 036 como éste en Hacienda (hay un mes de plazo desde la operación y por favor no presentes este mismo 036, cambia el nombre y el cif primero).

En la siguiente entrada volveré a lo que más me gusta, voy a explicar como construir una aplicación desde 0 usando LINQToSQL y también comentaré las 2 dos formas clásicas de acceder a los datos: el acceso desconectado a la base de datos (dataset y dataadapter) y el acceso conectado a la base de datos (abrir la conexión, sqlcommand, datareader, cerrar la conexión).