viernes, 18 de junio de 2010

Automatizar Word usando Excel

Hola, en este post voy volver a escribir un poco sobre VBA y para ello voy a poner un ejemplo de cómo automatizar Word a través de Excel. Es un proyecto muy simple que nos permitirá crear un sencillo documento Word en el que se detallará el importe de las operaciones, IVA incluido, (cuentas contables 4.X-41.X o 430.X) que hayan superado los 3.005,06 € durante el año anterior. En pocas palabras, la carta que envío a mis clientes/proveedores-acreedores para cuadrar el modelo 347. Este modelo, a parte que como siempre se presenta a finales de mayo, está en vías de desaparecer y ser sustituido por el modelo 340. En términos del volumen de información a suministrar a Hacienda con el modelo 340 Hacienda puede llevar una contabilidad paralela de tu empresa en cada momento y de hecho, con un poquito de T-SQL pueden hacer los SELECTs correspondientes en sus bases de datos y saber al segundillo aquellas contabilidades un poco “creativas”.

Lógicamente éste no es un proyecto para pasar a producción, ya que mucha gente me diría, y con razón, que hay opciones mucho más profesionales como por ejemplo el uso de Crystal Reports, que te permite hacer informes con una gran facilidad y es perfecto para procesos de facturación. A parte, a partir del Visual Studio 2008 viene ya integrado el componente ‘Microsoft Report Viewer’, para así tener 2 alternativas.

Lo que vengo a demostrar es que el hecho de poder hacer pequeñas soluciones ya va bien para sacarte de un apuro, y es un primer paso para cada vez ir desarrollando soluciones cada vez más profesionales.
A veces ves desarrolladores que saben hacer muy bien su trabajo, pero en la facultad sólo les ha enseñado programación -bueno yo recibí clases de programación en la EUETIB, cuando no hacían huelga, y puedo asegurar que de programación orientada a objectos nada de nada, quizás un 'Hola Mundo' por pantalla con Turbo Pascal y poco más; y lógicamente con esas habilidades que no se va a ningún sitio-. Y si vas a programar videojuegos posiblemente conocimientos empresariales no los necesites, pero cuando te dedicas a programar aplicaciones para empresas la cosa no está tan clara. Y muchos vienen con el mal hábito que todas las empresas son iguales y vista una vistas todas. En realidad, la contabilidad y fiscalidad es un tema bastante complejo, que no se aprende en "cursitos de 6 meses", sino que es un proceso paulatino, porque sino luego las cosas se presentan mal y Hacienda no tarda en enviar la "cartita" de la inspección.

Del mismo modo, afirmo que en las facultades de económicas sólo se enseña a ser economista -es decir a engañar a la gente contándoles historias basadas en modelos econométricos cuyas conclusiones hay que cogerlas con pinzas-, sin tocar ni un sólo programa de contabilidad en los 4 o 5 años de carrera. La docencia es eminentemente en papel como en el siglo XIX. Lógicamente el volumen de información actual es sustancialmente mayor al del siglo XIX, y como no tengas unos mínimos conocimientos informática tu trabajo puede hacerse muy extresante, cuando no tendría porque. Por eso lamento que no haya una formación intermedia entre ambas disciplinas.


Bueno, dejo el rollo, y aquí cuelgo el vídeo y el link para descargar fichero con la aplicación.


Automatizar Word a través del Excel usando VBA from Raúl González on Vimeo.

Bueno en próximos vídeos continuaré con temas de cómo conectar una aplicación .NET a Mysql sin pagar el peaje de ODBC, hablaré del impuesto sobre sociedades 2009, cuyo programita estará disponible como siempre el 1 de julio para que nos olvidemos del veranito y la playa, y retomaré el proyecto de Sitio Web para el modelo 303 -tan pronto como nos cambien los tipos de IVA y seamos todavía más pobres-.

lunes, 3 de mayo de 2010

Insetar facturas usando LINQToSQL (2ª parte)

Hola,
En este post voy a continuar con el desarrollo de la aplicación Clientes-Facturas. Voy a explicar como agregar un nuevo formulario que me permita insertar facturas para un cliente seleccionado, y también cómo puedo pasar información de un formulario al otro. Esto último es tan sencillo como modificar el constructor de la clase Form2 (del formulario para insertar facturas). A parte voy a utilizar el control “ErrorProvider”, que es un control no visual, y me permitirá indicar al usuario cuando un valor introducido no es correcto.
Hay que tener cuidado a la hora de validar las entradas del usuario, ya que es muy fácil que salte un excepción, y si no es correctamente manejada puede hacer que la aplicación se cierre y provocar una pérdida de datos. El típico ejemplo es el campo que le pide al usuario un número y el usuario entra un texto. Pues bien, si el error no se maneja correctamente saltará una excepción al intentar almacenar un valor de tipo String en una variable de tipo Int.
Visual Studio ofrece muchos controles de validación que proporcionan un resultado profesional. De hecho se podría poner el típico label al lado de cada control que mostrara un texto cuando se detectará que lo introducido no es correcto. Creo recordar que en el libro Excel que generaba el fichero para el modelo 115 de la AEAT lo hicé de esta manera, usando el evento LostFocus() del control para hacer la validación. El problema de hacerlo así es que aumentamos las líneas de código de forma ineficiente.

Afortunadamente en Visual Studio tenemos el evento Validating que nos permite cancelar la validación -y la inserción de una nueva factura- si lo introducido por el usuario no es correcto. Para ello basta con escribir e.cancel = true, para cancelar todos los eventos que se producirían tras el evento Validating, como el cambio de foco o el cierre del formulario. Además si queremos que usuario no tenga una sensación de no poder cambiar el foco y de estar prisinero por la aplicación, debemos establecer la propiedad AutoValidate del formulario en EnableAllowFocusChange. Y por último si queremos que un componente no genere eventos de validación se puede establecer la propiedad CausesValidation a false. El ejemplo típico es el botón de cancelar de un formulario, ya que al cancelar, como estoy desechando los datos, no quiero validarlos.

Bueno el proyecto entero con su código en C# está disponible aquí para descarga y aquí abajo el video donde voy a explicar de forma práctica todo la anterior.

2ª Parte de la aplicación Clientes-Facturas usando LINQToSQL from Raúl González on Vimeo.

Pues bien en el siguiente post me voy a centrar en el IVA, pero no desde un punto de vista fiscal ni contable (ese ya es para mí el pan nuestro de cada día), sino programando. Programando un sitio web ASP.NET, que posteriormente subiré al ISS ,y que nos permitirá obtener el fichero del modelo 303 de la AEAT.

lunes, 26 de abril de 2010

Renta 2009

Hola,
En este post voy a hablar un poco sobre el tema de la campaña de Renta del 2009. Ya está disponible para descarga el programa de ayuda en la página de la AEAT. Este año ha cambiado y está desarrollado en Java, como viene siendo ya habitual. Yo es que ya estaba acostumbrado a la funcionalidad del diseño anterior, y verdaderamente con este cambio tampoco se aporta nada de nuevo. De hecho lo importar los datos fiscales ya existía y es de gran ayuda, ya que en unos segundos tienes rellenada toda la declaración y sólo hace falta comprobar y añadir los datos que falten.


A parte está el tema de quién está obligado o no a declarar. Los límites están claros, pero hay casos en los que la gente no tiene las cosas muy claras. En muchos casos se fían de lo que oyen por la tele o de lo que que dice un vecino. Si tú eres uno de los millones de españoles que a lo largo del 2009 has ido a formar parte de las listas del paro, primero no desanimarse -que siempre queda coger las maletas e irse al extranjero como en los años 60-, pero ten claro que el cobrar el paro es como si cobraras de una empresa –¡¡¡de la más grande!!!-. Por lo tanto, con tal de cobrar 3 meses de paro, y por poco que hayas percibido donde te despidieron, como sume los 11.200 € ya sabes que te va a tocar rascarte el bolsillo. Pero es aún peor, si la retención que te han puesto en el Inem (modelo 145 que rellenaste en la cola) es del 2%, el resultado puede llegar bastante a ser aún peor. Pero antes de echar el grito -y la blasfemia- en el cielo conviene pedir cita previa para hacer la declaración (es gratís). Eso sí, si en el 2009 has realizado alguna actividad empresarial o profesional o tu declaración es bastante compleja, con toda seguridad no te podrán confeccionar la declaración, pero siempre te pueden guiar en los pasos a seguir. Eso si las indenizaciones por despido están exentas en los límites establecidos.


Bueno cuelgo esta pequeña chuleta.


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