domingo, 12 de diciembre de 2010

De Notepad a Wordpad

En este pequeño post voy a continuar con el desarrollo de la aplicación notepad para .NET utilizando los demás ControlDialogs y añadiéndole más funcionalidades. Para ello he cambiado el control Textbox por un control RichTextbox, que además de las típicas funcionalidades del control Textbox añade muchas más propiedades que nos permitirán cambiar cosas como el color del texto, añadir imágenes,… y así nuestra aplicación se parecerá más a un procesador de textos tipo Word. A parte está el tema de la impresión que no es fácil, ya que aquí no se vale arrastrar el control al formulario, cambiar 3 o 4 propiedades y ya funciona. El tema es un poco complicado porque de lo que se trata es que el texto se imprima dentro del área de impresión y no se vaya por los márgenes, y a parte está el tema del color, que a ser posible no se imprima todo en un único color.
Si ya nos vale con que se nos vaya el texto por los márgenes y se imprima todo en negro, tan sencillo como añadir un control PrintDocument al formulario y en el evento Print_Page añadir el siguiente código:
Private Sub PDoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PDoc.PrintPage
e.Graphics.DrawString(RichTextBox.Text, RichTextBox.Font, Brushes.Black, e.MarginBounds.Left, RichTextBox.Font.GetHeight(e.Graphics))

End Sub
En el soporte técnico de Microsoft ofrecen una buena alternativa que es la de extender el control RichTextBox creando una clase llamada RichTextBoxPrintCtrl, que hereda de la clase RichTextBox y que tiene un método Print que nos permitirá imprimir el contenido del RichTextBox. En el proyecto que se adjunta está implementado de esta manera -y así me quedo tan ancho y con un problema menos- y en http://support.microsoft.com/kb/811401 está el código y más documentación.

A parte para rizar más el rizo quiero trabajar con un formulario MDI, es decir, un formulario padre con varios subformularios hijos en su interior. Esto complica el tema ya que estás trabajando con varios formularios hijos y hay que identificar el formulario hijo activo con el que estás trabajando.
Para ello añado al proyecto un formulario llamado Form1, al que le arrastro el control RichTextBoxPrintCtrl y que tendrá definidas las propiedades y los eventos necesarios que yo utilizaré cuando cree una instancia del formulario Form1. Para ello cada vez que se cree un nuevo formulario hijo llamaré al método CrearForm() que me devolverá un objeto Form1 y como vemos el valor de su propiedad texto será “Sin título-“ concatenado a un número que será sumarle 1 al valor almacenado en la propiedad P_ChildFormNumber.


Private Function crearForm() As Form1
' Crea una nueva instancia del formulario secundario
Dim ChildForm As New Form1
' Lo Convierte en un elemento secundario de este formulario MDI antes de mostrarlo.
ChildForm.MdiParent = Me

P_ChildFormNumber += 1
ChildForm.Text = "Sin título-" & childFormNumber.ToString()
Return ChildForm
End Function

A parte quiero añadir en el Formulario Form1 la funcionalidad de poder arrastrar un documento al formulario y que éste se me abra en el RickTextBox. Esto se consigue manejando los eventos DragEnter y DragDrop del control RickTextBox con código siguiente:
Private Sub richTextBox_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles RichTextBox.DragEnter
If (e.Data.GetDataPresent(DataFormats.Text)) Then
e.Effect = DragDropEffects.Copy
Else
e.Effect = DragDropEffects.None
End If

End Sub

Private Sub richTextBox_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles RichTextBox.DragDrop
Dim i As Integer, s As String

' Obtener la posición inicial para pegar el texto.
i = CInt(RichTextBox.SelectionStart)
s = RichTextBox.Text.Substring(i)
RichTextBox.Text = RichTextBox.Text.Substring(0, i)

' Pegar el texto en el Richtextbox
RichTextBox.Text = RichTextBox.Text + _
e.Data.GetData(DataFormats.Text).ToString()
RichTextBox.Text = RichTextBox.Text + s

End Sub

El método richTextBox_DragEnter se llama cuando el usuario arrastra un documento al control RichTextBox y si el formato del documento es texto los datos se copiarán en el destino de colocación, el RickTextBox. Cuando se llama al método richTextBox_DragDrop es para pegar el contenido del documento en el control RichTextBox.


Otro tema es el programar que cuando se llame al Paint, se cree un archivo temporal y se abra con el Paint. Una ver el usuario cierre el Paint y guarde los cambios la imagen se añadirá al control RichTextBox. En la imagen se ve que cuando el usuario haga clik en Paint se ejecutará un código como el siguiente:

Dim rutaimagen As String = System.IO.Path.GetTempFileName()
Dim bitmap As New Bitmap(250, 250, Imaging.PixelFormat.Format32bppArgb)
Dim g As Graphics = Graphics.FromImage(bitmap)
Dim s As New SolidBrush(Color.White)
g.FillRectangle(s, 0, 0, 250, 250)
bitmap.Save(rutaimagen)

' Llamo al Paint con los argumentos puestos de esta forma porque sino en

' Windows XP no me reconoce los parámetros que contienen la ruta de la imagen
Dim paint As Process = Process.Start("mspaint.exe", """" & rutaimagen & """")

' Espero hasta que el usuario acabe
paint.WaitForExit()
' Anado la imagen al RichTexbox
If (Not Me.ActiveMdiChild Is Nothing) Then
Dim cajatexto As RichTextBox = CType(Me.ActiveMdiChild.ActiveControl, RichTextBox)
' Me aseguro de hacer un dispose con el End Using
Using imagen As Image = Image.FromFile(rutaimagen)
Clipboard.SetImage(imagen)
cajatexto.Paste()
Clipboard.Clear()
End Using
End If
' Elimino el fichero temporal creado
System.IO.File.Delete(rutaimagen)

Como siempre cuelgo el código por si alguien le mola el tema y está disponible aquí. Así con un sencillo “Copy-Paste” puedes adaptar este editor de texto profesional a varios tipos de aplicaciones y de formatos de archivo y aún más útil sería crearse una plantilla del proyecto. De esta manera tardarás menos en crear tus aplicaciones ya que para proyectos similares tendrás la estructura lista y no perderás el tiempo en diseñar una y otra vez todo desde 0.

Me queda por comentar lo que se refiere a localización y globalización, es decir, hacer que la interfaz de nuestra aplicación esté disponible en varios idiomas y se pueda cambiar de idioma de una forma muy sencilla. Localización y globalización lo explicaré con un sencillo vídeo donde demostraré como una misma aplicación puede tener el texto de los controles en varios idiomas (en el caso de la aplicación wordpad verás que están disponibles los idiomas castellano, catalán e inglés) sin necesidad de crear 3 formularios diferentes –cosas que a veces he visto en producción y para mantener eso te puedes volver loco-.

viernes, 5 de noviembre de 2010

Depurar, generar, publicar en el IIS y crear un proyecto de instalación en .NET

Hola, hoy voy a hablar sobre de tema de los pasos para generar y publicar una aplicación de escritorio de Windows Forms en VB.NET y luego explicaré cómo añadir un proyecto de instalación a nuestra solución que nos permitirá crear un instalador más profesional para repartirlo a los usuarios finales.
Como vemos en el menú Generar de Visual Studio tienes varias opciones: generar toda la solución o generar el proyecto seleccionado, según si tenemos seleccionada toda la solución o tenemos seleccionado un único proyecto. A diferencia del menú depurar -donde está ‘Iniciar Depuración’ (F5)- ahora lo que no voy a hacer es corregir los posibles errores lógicos e ir poniendo ‘Breakpoints’ para que el programa se detenga en un determinada línea de código y yo inspeccione el valor de una determinada variable, por ejemplo, esto se supone que ya lo he hecho. Lo que quiero es que se genere el ‘ejecutable’ en la carpeta bin –ejecutable que difiere mucho de los .exe que se generaban con VB6 ya que aunque tenga extensión .exe sin NET Framework no funciona-, y para eso está la opción de Generar.


Si vamos a la carpeta bin/Release a parte del archivo ejecutable y alguna dll necesaria hay muchos más archivos que se nos han creado.
Por el contrario si lo que quiero es repartir nuestro proyecto a terceras personas para eso está la opción de Publicar. Al hacer click en Publicar se iniciará el asistente de publicación que nos pedirá la ubicación donde se publicará nuestra aplicación y en esa localización se nos generará una carpeta con los archivos necesarios y además un manifiesto de aplicación y un manifiesto de implementación. El manifiesto de aplicación describe la aplicación en sí, incluidos los ensamblados, las dependencias y los archivos que constituyen la aplicación, los permisos para ejecutar la aplicación y la ubicación en que estarán disponibles las actualizaciones, si las hay. En el manifiesto de implementación se describe la forma de implementar la aplicación, incluida la ubicación del manifiesto de aplicación y la versión de la aplicación. Para ello se usa la tecnología ‘ClikOnce’ para conseguir que las aplicaciones de escritorio sean tan fáciles de instalar, actualizar y seguras como son las aplicaciones Web y se pueden publicar sin ningún problema en un Servidor Web para que esté disponible para todos los usuarios.


De hecho a efectos didácticos nuestra aplicación se va a publicar en el IISS, en el servidor web que viene con Windows y que nos sirve para publicar y testar páginas asp y aspx antes de pasarlas a producción. Si abrimos el Internet Explorer o el Mozilla y escribimos http://localhost/podemos comprobar si está instalado. Una vez publicada la aplicación en el IIS -o en cualquier otro servidor web- con tal de escribir en el navegador http://[dirección_del_servidor]/[nombre_del_proyecto]/publish.htm iremos a la página para instalar la aplicación usando 'ClickOne'. Nunca fue tan fácil publicar aplicaciones de escritorio y que otros usuarios las instalen sin los problemas que planteaba la instalación de aplicaciones en VB6. Es muy importante si vas a publicar tu aplicación en el IIS que aparte de tener instalado el ISS que ejecutemos el Visual Studio como administrador, ya que sino fallará el proceso.
Pero también hay otra alternativa: para un resultado más profesional está la creación de un Proyecto de instalación que nos permitirá crear un instalador profesional para nuestra aplicación e ideal para repartirlo a otros usuarios. Muchos programas se distribuyen con un instalador tipo InstallShield, que al ejecutarlo aparece un asistente con varias pantallas en la que se te da la bienvenida, se te pide que aceptes una licencia, se te pregunta por el directorio en el que quieres instalar tu aplicación y una vez configurado todo, se instala la aplicación y se crean los accesos directos. Con Visual Studio 2010 es posible crear un proyecto de instalación y configurar todas estas características de una forma muy fácil y con gran cantidad de opciones.
Pues esto es lo que vamos a explicar en el siguiente vídeo.


Pues en próximos post acabaré el desarrollo de la aplicación de escritorio wordpad usando el resto de los DialogControls como el de vista previa de impresión, el de imprimir y el de cambiar el color de texto y a para ello prescindiré del control Textbox y lo sustituiré por el control richtextbox que ofrece muchas más posibilidades y nos permitirá trabajar con texto enriquecido.

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.

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

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.