miércoles, 15 de septiembre de 2010

Cuadros de diálogo en .NET (Dialog Controls)

Buenas después de un pequeño periodo de ausencia, en este post voy a volver a mundo de .NET explicando unos controles que harán que nuestras aplicaciones sean más profesionales: son los DialogControls o cuadros de diálogo y de paso haré un repaso al uso de menús en .NET (muy muy sencillo).
Con esto volvemos al tema de la programación, que quiero que también tenga protagonismo. Últimamente estoy liado programando aplicaciones para conseguir automatizar procesos contables y financieros, sobre todo creando sitios web aspx. De hecho a día de hoy tiene grandes ventajas ya que no hace falta un ordenador con mucho hardware para que funcione. Simplemente con tener un explorador web ya es más que suficiente ya que tú envías html, ese html se procesa en el servidor, y recibes html con el resultado. Nada más simple y por eso cada vez es lo más demandado ya que con una inversión relativamente pequeña se consigue un gran ahorro de tiempo en tareas repetitivas.

Afortunadamente puedo compaginar mis dos pasiones: programación y empresa. Ya que ser un mero contable a día de hoy está muy mal visto por la sociedad. Parece que somos gente antipática, desprestigiada y que vivimos en una era analógica. Eso es mentira: mira mi blog aquí, creo que de los temas que estoy tratando no sean muy anticuados. Para muchos la contabilidad no es más que un gasto que se trata de reducir a la mínima expresión. El problema es que lo reducen tanto que cuando se dan cuenta de la importancia de la contabilidad ya es demasiado tarde y tienen que chapar el “chiringuito”. Otros consideran que esto lo puede hacer hasta los niños y que incluso con un cursito de 3 mesesitos ya vale. Este segmento de población tiene una enfermedad llamada "titulitis", es decir, hacer cursos en los que no aprenden nada, por el hecho de conseguir un título que colgar en la pared y/o poner en un currículum. Esta enfermedad está en auge con las crisis económica ya se piensan que haciendo cursos van a encontrar esa ansiada estabilidad laboral. El problema es que lo uno no implica necesariamente lo otro, y aún menos en España. Para empezar muchos de nuestros gobernantes no tienen ni la E.S.O., las Universidades, que tan progres son para lo que les conviene, ahora son verdaderos conventos donde nadie levanta la voz viendo como el activo intangible más importante que tiene este país, los universitarios, van derechitos a la cola del paro y sin pararse a plantear en qué nos estamos equivocando; y el país está tendiendo hacía una decadencia vulgar donde parece que todo vale. Pues bien dejemos de rajar que me enciendo…

Pues bien, quizás te has dado cuenta que al trabajar con varios tipos de aplicaciones de escritorio, incluso desarrolladas por empresas diferentes, si abres un archivo, lo guardas o lo imprimes aparece el mismo cuadro de diálogo. Esto es debido a que los programadores para evitar tener que duplicar código, en lugar de escribir líneas y más líneas de código repetitivo para desarrollar esa funcionalidad sencillamente cogen y utilizan estos controles. Ahora en Visual Studio .NET ya no hay que agregar un componente al proyecto (el componente Microsoft Common Dialog Controls que se usaba en VB6) sino que basta arrastrar al formulario y configurar las distintas propiedades. También se puede hacer creando un objeto de la clase, por ejemplo, OpenFileDialog -para que aparezca el cuadro de diálogo de abrir un archivo-, ColorDialog - el cuadro de diálogo de cambiar color-,… Podemos configurar las propiedades que necesitemos y llamar el método ShowDialog() cuando el usuario pulse el botón Ok con el siguiente código:

If OpenFileDialog.ShowDialog() = Windows.Forms.DialogResult.OK
Then
'código para leer el archivo
End If


Bueno todo esto lo explicaré con un video y como siempre el código está disponible en este link.

Pues bien en siguientes entradas desarrollaré una aplicación simular ahora al Wordpad, pero con un formulario MDI y así poder trabajar con varios formularios hijos.

miércoles, 25 de agosto de 2010

Servicio impresión modelo 202

Buenas en este post voy a continuar con el tema del modelo 202 del pago fraccionado del Impuesto sobre Sociedades y de la Renta de No Residentes. Hasta el cambio del modelo que supuso la unificación del modelo 220 y del 202 en uno de sólo, en la página de la AEAT había la posibilidad de descargar un pdf que se podía rellenar e imprimir y que era de utilidad a efectos de tener una copia con la que ir al banco a solicitar el NRC.
Lo que ha pasado es que ahora para obtener el pdf hay que ir a la dirección https://www2.agenciatributaria.gob.es/es13/h/ie02020b.html y rellenar el formulario para obtener el pdf del modelo 202 ya cumplimentado y validado. Pero, no podía ser tan fácil, ya que para las empresas que han de presentar obligatoriamente este modelo por vía telemática (S.L. y S.A.) a la hora de obtener el pdf te dice que nanay, es decir, todo el gozo en un pozo. Se puede hacer la chapucilla de poner el nif, nombre y apellidos inventados, obtener el pdf y después cambiarlo a bolígrafo, cosa que es un poco cutre. Por ahora la solución que he encontrado y con unos resultados idénticos a la creación de un Excel con macros como hice con el modelo 115 o una aplicación profesional como estoy haciendo con el 303, es crear un pdf editable con un mínimo de validación y que se pueda rellenar e imprimir fácilmente. De hecho en Bizkaibai utilizan mucho esto de los pdf editables para las presentaciones de impuestos y el resultado es óptimo. Pues bien lo dejo para descarga libre aquí por si hay alguien que se ha encontrado con el mismo problema. Hay una 2ª versión con algunos campos calculados que ayudan a su cumplimentación disponible aquí.

domingo, 15 de agosto de 2010

Impuesto sobre Sociedades 2009 práctico

Buenas en este post voy a tratar un tema bastante complicado. Se trata del Impuesto sobre Sociedades, pero no desde una óptica teórica sino desde un punto de vista práctico. Ya sé que voy un poquito mal de tiempo, ya que si la fecha de cierre del ejercicio fue el 31/12/2009 el plazo máximo para presentar el Impuesto sobre Sociedades era los 25 días siguientes a los 6 meses posteriores a la fecha de cierre. En pocas palabras el 25/07/2010 que como cayó en domingo y se pasó al 26/07/2010. Pero he preferido dejar esta entrada para agosto y no en plena campaña de impuestos –primero las obligaciones y luego las aficiones-. De hecho esto no tiene porque ser siempre así. Hay empresas que, por ejemplo, debido a su gran volumen de actividad en época navideña deciden no cerrar a 31/12 sino en otra fecha. Si cierran a 31/03/2010 el plazo máximo para presentar el IS 2009 sería el 25/09/2010 (es decir que aún estarían a tiempo). Es más las empresas que cierran a 31/08 está estudiado que el importe de los pagos fraccionados del modelo 202 es inferior (siempre que el cálculo del pago fraccionado se haga a través de la modalidad del artículo 45.2 L.I.S.).

Pues bien vamos al grano. Parto del balance de situación y la cuenta de pérdidas y ganancias de la empresa Under Pressure, S.L. a 31/12/2009. Esta empresa es ficticia -como las previsiones del FMI- y la he creado sólo para efectos didácticos. Este ejemplo se basa en uno similar de la asignatura de análisis financiero, ya que de otro modo llevar una contabilidad ficticia y presentar una declaración basada en datos ficticios está tipificado en la Ley General Tributaria como delito fiscal, con una repercusiones bastante graves entre las que están penas de prisión.

La contabilidad es sencilla: tiene compras, ventas, el pago de los suministros, el pago del alquiler del local y la nómina de un empleado. Para ilustrar más el ejemplo aquí está disponible el balance de situación y la cuenta de pérdidas y ganancias, que será de lo que partiremos para calcular el IS. Pues bien procedemos a cerrar la contabilidad del 2009 con el asiento del impuesto sobre beneficios a 31/12/2009. Es el 25 % (al ser una Pyme) del Resultado antes de impuestos:

La contabilidad del 2009 de esta empresa está disponible aquí ya con el asiento del IS contabilizado.
De está manera puedo abrir el ejercicio 2010 y el programa de contabilidad me creará la cuenta 120.2009, donde tendré el resultado del 2009, ya después de impuestos, listo para ser distribuido en 2010.

Si consulto el siguiente esquema ya podría legalizar los libros con el programa Legalia que está disponible para descarga en el siguiente enlace.

Hay que tener claro que según el tamaño del patrimonio de la empresa, los resultados y el número medio de trabajadores las cuentas anuales se pueden formular en el modelo normal, abreviado o Pymes (y esto también se aplica para el Impuesto sobre Sociedades). El cuadro resumen es el siguiente y vemos que si no se superan los límites las cuentas anuales se pueden formular en el modelo Pymes o en en el Abreviado, sino en el modelo Abreviado y para las empresas de gran tamaño está el modelo Normal.

En contabilidad a 30/06/2010, fecha de la aprobación de las cuentas anuales y de la aplicación del resultado, tengo el siguiente asiento en el que doto toda la reserva legal y el resto lo llevo a reservas voluntarias. En este punto podrían haber más opciones: distribuir dividendos, compensar pérdidas de ejercicios anteriores, ...

Pero hay gente que estos dos asientos no los hacen hasta que calculan el IS, ya que luego hay que tener presente que el impuesto sobre el Beneficio no es fiscalmente deducible y supone una diferencia permanente positiva. Pero para mí hacerlo así es más cómodo, ya que así tengo ya cerrado el ejercicio 2009 y puedo ir legalizando los libros. Pues bien ahora ya vamos a lo práctico, que es a partir del balance de situación, la cuenta de pérdidas y ganancias y el programa de ayuda de la AEAT cumplimentar la declaración del Impuesto sobre Sociedades del 2009, donde explicaré algunos truquillos interesantes.




Analisis del Impuesto sobre Sociedades 2009 from Raúl González on Vimeo.

Después de presentar el impuesto sobre sociedades lo último que queda cada año es el depósito de las cuentas anuales en el Registro Mercantil hasta el 31/07/2010. Para ello está el programa D2 que nos permite tal fin, aunque hay otras soluciones en el mercado totalmente integradas -o también se pueden programar- para evitar tener que escribir una y otra vez los mismos datos.

En siguientes post volveré al mundo de la programación con el modelo 303, que por ahora lo estoy desarrollando en ASP.NET, pero no descarto realizar algún desarrollo similar en PHP y tengo la intención de explicar algunos controles útiles que permitirán desarrollar aplicaciones aún más profesionales.

lunes, 19 de julio de 2010

Mysql .NET Connector

Buenas, continuamos con un tema interesante.
Yo siempre he dicho que uno no ha limitarse a conocer una única tecnología (ya lo que suele ocurrir es que en todos los sitios no trabajen con esa tecnología), sino hay que saber un poco de todo y no casarse con un determinado programa, lenguaje o tecnología. Es más la obsolescencia puede hacer que si te centras en aprender una única tecnología, puede ocurrir que veas que cada vez es menos demandada por el mercado y tus conocimientos queden desfasados por el mero paso del tiempo. Por ejemplo a día de hoy es difícil encontrar aplicaciones escritas Turbo Pascal, por ejemplo, cuando hará 20 años sería el no va más en lenguajes de programación. Otra cosa es que en la facultad sólo se enseñe Turbo Pascal y nada más. Ni Java ni .NET y luego has de aprender esos lenguajes a marchas forzadas, pero eso es normal. Si yo te contará... Acabé económicas sin saber sin saber ni liquidar un Iva...


Bueno, voy a la chicha. Crear aplicaciones en Visual Studio 2008 y conectarse a una base de datos utilizando otro proveedor de datos de .NET Framework distinto a SQL Server siempre ha sido posible. De hecho si no me equivoco, por ejemplo, en la Diputación de Álava existe una aplicación para la confección de impuestos desarrollada usando el Visual Studio 2008 (lo deduzco porque pide instalar el .NET Framework 3.51), pues bien usa una base de datos Access y se conecta a través del proveedor de datos de .NET Framework para OLEDB. No es que sea tan óptimo como usar una base de datos SQL, pero funciona a la perfección.
Pues bien existe también el proveedor para MySql, con el que conectarse a bases de datos en MySql y es gratuito. De hecho viene una versión con un instalador que automáticamente te configura el Visual Studio (por ahora sólo hasta el Visual Studio 2008, ya que para el 2010 se liberará en breve), y aparte está la versión con el código y la dll. Anteriormente conectarse a MySql a través de del Visual Studio no era muy eficiente, ya que se había de utilizar el proveedor genérico, es decir, ODBC. A diferencia ahora el proceso es tan sencillo como escribir correctamente la cadena de conexión. Podemos crear incluso datasets tipados y aprovechar todas las ventajas que nos proporcionada el acceso desconectado a datos (pero LINQToSql no funciona) al igual que hacemos con bases de datos en SQL Server.
Pues bien en el siguiente video no sólo voy a explicar cómo crear una aplicación en Visual Studio que se conecte a MySql, sino que voy a explicar desde 0 la descarga de MySql, configuración, creación de una base de datos.





Pues bien, si añadimos a la aplicación un Archivo de configuración de aplicaciones llamado app.config, que no es más que un archivo xml, en que además de configurar un montón de opciones de la aplicación, nos permite almacenar cadenas de conexión y así en el caso que algún día necesitemos tener que cambiar el proveedor de datos y la cadena de conexión, por ejemplo, sería tan sencillo como cambiarlo en el archivo app.config y estos cambios se aplicarán a toda la aplicación -siempre que utilicemos los datos del archivo app.config y no una cadena de conexión en cada formulario porque puede ser un caos para mantenimiento de la aplicación-.

Es más, gracias a las clases del Namespace System.Data.Common podemos hacer que el código de la aplicación sea independiente del proveedor de datos. Que es Oracle hoy pero mañana será MySql, pues ningún problema, y así escribimos código independiente del proveedor de datos, por lo que si algún día cambia, con sólo cambiar una línea en el nodo ‘connectionStrings’ del archivo app.config la aplicación ya estará preparada.

Pues bien aquí el link con el código de la solución con los 2 proyectos realizados.

Ahora un poco del código de una aplicación para Windows en C# que se conecta a una base de datos llamada db, que está en MySql, pero también está preparado para conectarse a la misma base de datos db en SQL Server, por si el cliente algún día decide cambiar.
Primero en el archivo app.config tendríamos 2 cadenas de conexión, una para cada proveedor:









Por ahora sólo uso la de MySql. Y en el evento Load de mi formulario obtengo la cadena de conexión y el nombre del proveedor que almaceno en 2 variables cadena.
Imports System.Data.Common
Imports System.Configuration
'obtengo el nombre y el proveedor
Dim proveedor As String = ConfigurationManager.ConnectionStrings("CadenaConexion").ProviderName
Dim cadena As String = ConfigurationManager.ConnectionStrings("CadenaConexion").ConnectionString

'creo una factoría de base de datos para trabajar con el proveedor de datos que queramos
Dim factory As DbProviderFactory = DbProviderFactories.GetFactory(proveedor)
'creo la conexion
Using conexion As DbConnection = factory.CreateConnection()
'asigno la cadena
conexion.ConnectionString = cadena

'creo un comando
Dim comando As DbCommand = conexion.CreateCommand
comando.CommandText =
"select * from clientes"

'creo el dataadapter
Dim da As DbDataAdapter = factory.CreateDataAdapter
'selecciono el SelectCommand

da.SelectCommand = comando
Dim ds As New DataSet
'relleno el dataset no tipado
da.Fill(ds)

'muestro los datos en el datagrid
DataGridView1.DataSource = ds.Tables(0)

End Using

sábado, 3 de julio de 2010

Novedades Verano

Hoy voy a tratar varias novedades que han aparecido recientemente:

Desde el punto de vista fiscal, es el programa de ayuda para el impuesto de sociedades 2009 de la AEAT. Como sabemos aquellas empresas que cerraron su ejercicio a 31/12/2009 tienen de plazo hasta el lunes 26 de julio. Eso se suma a que el 20 de julio es el plazo máximo para los impuestos de 2º Trimestre o 6M. No olvidemos que para la Diputación Foral de Bizkaia (Bizkaibai), el Gobierno de Navarra, Guipúzcoa y la Diputación de Álava tienen sus propios programas para el IS. En el caso que el volumen de facturación en el 2009 superara los 7.000.000 € presentarán un impuesto a cada administración en proporción al volumen de operaciones realizadas en cada territorio. Bueno ya hablaré más sobre el IS en un post exclusivo.
Bueno este es el link a la página de descarga del programa.


La nueva versión de Visual Studio 2010, cuyas versiones Express en varios idiomas, entre ellos español, están disponibles en http://www.microsoft.com/express/downloads/. A parte se puede descargar una ISO con todas las versiones Express en la misma página. Además necesitaras el SQL Server 2008 R2 Express sí o sí, indistintamente tengas instaladas otras versiones superiores de SQL Server, para poder adjuntar bases de datos a tus proyectos y crear las instancias de usuario (lo de User Instance = true).


La versión 6.9 de la IDE para JAVA Netbeans en http://netbeans.org/ Se puede descargar para desarrollar aplicaciones para Java o para otros lenguajes de programación como c++ o php. En este link está disponible la versión de la IDE con Java JDK y Java JRE (lo equivalente a la Common Language Runtine de .NET), ideal para descargarlo todo en un único ejecutable.


Programar videojuegos con c++ y Active X era un pelín complicado, y más si no te dedicas profesionalmente. Pero hace unos años ha aparecido XNA Game Studio que ha simplificado el proceso de programación. Es una API que se descarga y se instala conjuntamente con el Visual C#, y hace que crear videojuegos profesionales sea realmente fácil. El problema es el código que no ves y que se genera automáticamente, si tienes inquietudes por saberlo todo. Aún así no había hasta ahora muchos manuales ni videos desarrollando un videojuego de principio a fin en 2D y en 3D. Afortunadamente han colgado estos vídeos en http://www.youtube.com/user/XNAMktg2#p/u que vienen con el código libre de descarga. XNA Game Studio Express es gratuito y está disponible en la misma página.

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.