lunes, 29 de marzo de 2010

Menús en .NET

Hola,
en este post voy a tratar el tema de la creación de menús en aplicaciones para Windows usando Visual Studio. De paso también recordaré la forma en la que se creaban menús en Visual Basic 6, usando el Editor de Menús y lo compararé con la variedad de controles que nos ofrece Visual Studio 2008 o 2010.


Pues bien, voy a desarrollar una aplicación para Windows usando VB.NET como lenguaje de programación. En post anteriores he usado C#, pero esta vez voy a usar Visual Basic. No es bueno limitarse a un único lenguaje de programación ya que en la vida real te pueden surgir proyectos en cualquiler lenguaje y tecnología, y de hecho en más del 90% de las empresas se trabaja con tecnologías mucho más antiguas. Por eso me gusta ir alternando Visual Basic .NET y C# y quizás algún día algo de Java. De hecho si sabes programar en Visual Basic .NET, ya tienes mucho camino recorrido porque C# no es que sea muy diferente a Visual Basic. C# es más parecido a Java y eso se ve en que cada declaración acaba en “;”. La ventaja de .NET es que puedes elegir el lenguaje de programación que más te guste, ya que todo lo que hagas con un lenguaje de programación lo puedes hacer con cualquiler otro de .NET.

Pues bien, como siempre el código se puede descargar aquí.


En próximos post acabaré la aplicación Maestro-Detalle añadiendo la funcionalidad de agregar facturas, usando LINQ y a partir de aquí me centraré en el IVA, ya que parece que un impuesto "chorra" pero es muy muy complejo y con muchos tipos de operaciones y de casuísticas; y del cual se hablará mucho en los próximos meses (si es por esas fechas queda alguna empresa).

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).

domingo, 17 de enero de 2010

Novedades fiscales 2010

Hola,
Este post lo voy a destinar a comentar las novedades en los programas de ayuda de la AEAT.
Como siempre después de navidad, la Agencia Tributaria cuelga en su página 2 programas de ayuda útiles:
-El primero, el del modelo 390-392, te permite generar un .xml con los datos el resumen anual del IVA y aparte te permite confeccionar el modelo 303 (o el 311 para los autónomos) pero, únicamente del último período del año, ya sea 4T o 12M. Vamos es útil, pero que no, ya que a lo largo del año hay que presentar, como poco, cuatro liquidaciones por IVA, pero saber que existe. Por cierto las fechas para el 303 y el 390 (presentación telemática) es el 1 de febrero de 2010.


-El segundo, la Plataforma Informativas, que como cada año actualiza los modelos a agregar. Como su propio nombre indica te permite elaborar declaraciones informativas -aquellas en las que no hay que rascarse el bolsillo- o mejor dicho resúmenes anuales de los modelos que has ido presentando a lo largo del año. Está el 190 (resumen anual del 110-111), el 118 (resumen anual del 115), el 296 (resumen anual del 216) y el 193 (resumen anual del 123), entre los más usados.

Cabe recordar que aquellos que presenten sus declaraciones en Oficina de Hacienda y Finanzas de Vizcaya o en Álava también tienen disponibles sendos programas de ayuda -incluso permiten importar el formato de los ficheros de la AEAT-, con la particularidad que no existe el periodo 4T o el 12M para el IVA, ya que dicha información se presenta sumada a la de todo el año en el Resumen Anual. En Navarra el Resumen Anual del IVA se presenta en la declaración del 4T o 12M.

Bueno ahora toca comentar lo pobres que somos y lo más pobres que seremos en el 2010 con los cambios en retenciones y tipos impositivos en 2010, que tanto sí como sí van a afectar a todo el mundo.

miércoles, 6 de enero de 2010

Crear una tabla maestro sin ninguna línea de código

Hola, hoy voy a explicar cómo crear una tabla maestro-detalle usando el Visual Studio 2008 pero tengo la intención de no escribir ni una sola línea de código. En un video posterior explicaré como hacer lo mismo pero con código, concretamente utilizaré LINQToSQL para hacer las consultas a la base de datos, y así me olvido de usar T-SQL y a parte es más sencillo porque podré servirme de Intellisense.
Pero no sólo me voy a centrar en la creación del formulario sino que también voy a mostrar cómo se crea una base de datos desde 0, con sus respectivas tablas y relaciones en el SQL Server Management Studio. La base de datos la voy a crear de forma visual, es decir, sin escribir código en Transact-SQL. Lógicamente el proyecto es sencillo: una base de datos con dos tablas (Clientes y Facturas) y una relación de uno a varios (un cliente muchas facturas, pero no al contrario). Si fuera más complicado tendría que crear una consulta y escribir código en T-SQL, de hecho hay cosas como por ejemplo como la creación de un "Snaphot" de la base de datos que no se pueden hacer de forma visual y a parte el trabajar con código te da más flexibilidad, ya que a veces es complicado saber donde está cada cosa.
El problema es que hay que aprender otro lenguaje de programación y ya llevamos unos pocos... SQL Management Studio da la opción de crear scripts de forma automática, similar a lo de 'grabar nueva macro en Excel' e incluso si seleccionamos la base de datos y vamos a Tareas --> Generate Scripts encontraremos un asistente con el que podremos obtener el código en T-SQL con el que poder generar una base de datos e incluso sus tablas con sus respectivos datos. De hecho más abajo he colgado un script que generará la base de datos eBase.
El 100% de las aplicaciones empresariales funcionan así, acceden a los datos que se encuentran en SQL Server o cualquier otro servidor de base de datos o los tienen directamente en local, en una base de datos en el directorio de la aplicación. Por eso, lo que estamos diseñando no difierirá sustancialmente de las aplicaciones que están en producción, de hecho hay muchas que no llego a comprender como han superado la fase de testeo.
En este
link voy a colgar un script que permitirá crear la base de datos eBase. Sólo hay que abrirlo en el SQL Management Studio y ejecutar pulsando F5.





jueves, 10 de diciembre de 2009

Excel para crear el fichero del modelo 115 de la AEAT

Bueno continuando con los 2 últimos post sobre el modelo 115 de la AEAT, ahora voy a colgar el Excel con macros incluidas que permitirá obtener el fichero para la presentación telemática a partir del 2010 ya con el tipo de retención del 19% y que se encuentra en este link.

Excel es una herramienta poderosa para el análisis financiero y desde luego se podría llevar la gestión de una Pyme en Excel (incluso montar un “micro-SAP”, pero cuando dimensión del proyecto se hace tan grande es mejor mirar otras alternativas como Visual Studio, por ejemplo. Cuando usas VBA en Excel tienes que programar “muy a la defensiva”, considerando que todo lo que entra un usuario es erróneo hasta que no se demuestre lo contrario y eso es complicado por no disponer de muchos controles como los de validación que ahorran muchas líneas de código. A parte está la molesta “pantalla de bienvenida” informándote sobre la seguridad de las macros y el hecho de no arrastrar bien una fórmula o tener celdas vinculadas a otros libros que puede tener consecuencias desastrosas para los resultados.
Bueno vamos a por la chicha.
Continuando con la empresa MANOLOSA vamos a generar el modelo 115 del 4T del 2009. He explicado la contabilización y repito el asiento contable de la contabilidad de MANOLOSA:

Con el Excel y si no salta ningún error se generaría el fichero que se presentaría a través de la oficina virtual de la AEAT.


Lógicamente todo esto es falso, esa empresa no existe y yo no voy a presentar este modelo con mi certificado de usuario, ya que en Hacienda es posible que no se lo tomen muy bien. Pero si leemos el fichero vemos que no hay ningún problema.

Lógicamente una vez presentado el modelo 115 deberemos declarar lo mismo en el 180 (tenemos hasta finales de enero). No serviría de nada decir en el 115 que durante el año hemos tenido un único perceptor y luego en el 180 declarar 2 perceptores, o errores de no coincidir la suma de las bases imponibles y retenciones declaradas en los 115 con lo que se declara en el 180.

El modelo 115 es bastante irrisorio pero quizás el 303 pueda ser de utilidad para más gente. De hecho sólo hay que seguir el código y atender a que en el modelo 303 pueden haber importes en negativos y el signo – se ha se substituir por una N.
Ejemplo: -300,30 será N0000000030000
Bueno continúo un poco más. Existe la posibilidad de obtener una copia en papel usando los módulos de impresión que se pueden descargar de este link. Lógicamente si hubiera creado un proyecto en VB.NET, hubiera puesto el contenido de los módulos de impresión en la carpeta bin del proyecto para que se copiasen en el lugar de instalación y con la clase Process llamaría a la aplicación MIPF32 pasándole el argumento que necesita.
Por ahora, y de forma "más manual", si tenemos el fichero del M115 y vamos a Inicio --> Ejecutar y entonces escribimos cmd aparecerá:

Antes he descomprimido el contenido de los módulos de impresión en C:\ y se ha creado una carpeta llamada REDISTRIBUIR. Pues bien escribo cd\ para ir a C:\
Después cd REDISTRIBUIR para ir a la carpeta REDISTRIBUIR y entonces MIPF32 /E:”C:\REDISTRIBUIR\00000000T.TXT y por la impresora por defecto os aparecerá la copia en papel (en este caso lo imprimo en pdf a través del CutePDF Writer).

Para la confección del Excel he adaptado el código de validación de una c.c. disponible aquí, y así el Excel es más real y me consigo que me rechace los códigos de cuenta no válidos"

En próximos post, voy a volver al mundo .NET y lo primero de lo que voy a hablar es sobre LINQ donde enseñaré como crear una tabla maestro-detalle usando LINQ.