lunes, 28 de noviembre de 2011

Análisis contable y fiscal del trabajo por cuenta ajena vs propia

Hola,
en este post voy a volver a temas relacionados con la fiscalidad. En el siguiente continuaré con programación, pero quería volver a escribir unas líneas sobre un tema bastante importante y que por lo complejo que es, a veces lleva a muchas confusiones y equívocos. Se trata de las diferencias entre el trabajo por cuenta propia y por cuenta ajena y voy a centrarme sobre todo en explicar claramente cada modalidad y las repercusiones fiscales y contables de optar por una u otra. Lógicamente aquí me podría enrollar de gusto y el tema da para escribir un libro pero lo que quiero es dejar las ideas claras. Pues bien al grano.

Trabajo por cuenta ajena
Primero trabajar por cuenta ajena significa que tienes una nómina, significa que en la Renta tributarás en el apartado de “Rendimientos de Trabajo Personal” y significa que estarás salvo contadas excepciones en el Régimen General de la Seguridad Social (el empresario no, será autónomo y estará en el Régimen Especial de Trabajadores Autónomos o RETA). Ahora voy a explicar los puntos más importantes ya que hay mucha gente que confunde cosas.
Todos sabemos lo que es una nómina. No creo que haya muchos problemas. A final de mes el trabajador recibe este documento en el que aparece además del líquido que cobrará el trabajador (vamos el dinero que le entrará en el banco) otros conceptos importantes como son el bruto de la nómina, la cotización del trabajador al sistema de la Seguridad Social y el porcentaje retención que la empresa le aplica. No olvidemos que lo que la empresa retiene al trabajador es un dinero que luego se lo entrega a Hacienda a través del modelo 111 (trimestral o mensual según el tipo de empresa) y que luego el trabajador a la hora de confeccionar su renta se deducirá (como menos importe a pagar de IRPF o Impuesto sobre la Renta). También la empresa paga al final de cada mes el llamado TC1, que es la suma de la cuota obrera (que se le ha restado al trabajador de su nómina) y la cuota empresarial, todo ello para sustentar el sistema de la seguridad social. Las Bases y tipos de cotización 2011 están detallados en el siguiente enlace.
Bueno vamos a lo práctico, explicar la confección de una nómina con un software tipo NominaPlus supera los objetivos de este post, se podría hacer en un post posterior, pero lo que quiero es que queden las ideas claras y para ello aquí tenemos este ejemplo para verlo todo: 
Supongamos que el 01-01-2011 una empresa llamada “Manolo S.A.” contrata un trabajador, algo muy raro últimamente. La nómina que vemos más abajo podría ser la nómina de diciembre de ese trabajador.
Vemos el bruto que son 3.330,15 € (en el que está incluido el salario base más la prorrata de las pagas extras). Las retenciones son 499,52 € que no es más que 3.330,15 * el tipo de retención establecido, en este caso el 15%. La cotización del trabajador al sistema de la seguridad social es sobre 1.980,15 € el 4,7 % para Contingencias Comunes, o sea, 93,07 €, más el 1,55 % para Desempleo, o sea, 30,69 €, más el 0,10 % para Formación Profesional, o sea, 1,98 € y la suma es 125,74 €. Retenciones y la aportación del trabajador al sistema de la seguridad Seguridad Social se le resta del bruto para obtener el líquido. La retención es sobre lo que se paga al trabajador,siempre se retiene sobre lo que se paga, es decir, sobre 3.330,15 € y el tipo depende de las circunstancias personales y familiares del trabajador (el trabajador ha comunicado previamente al empresario su situación personal a través del modelo 145) y del bruto de renta anual.
Pero vamos a lo que en realidad nos interesa como contables: el gasto que tiene la empresa por ese trabajador, que no es lo que se le paga al trabajador, sino la suma del bruto de la nómina (640.0 Sueldos y salarios) + la Seguridad Social a cargo de la empresa (642.0 Seguridad Social a Cargo de la Empresa, que es la aportación del empresario a la Seguridad Social por tener contratado al trabajador, que en nuestro caso es sobre 1980,15 el 23,60 % para Contingencias Comunes, el 5,50 % para Desempleo, el 0,20 % para el FOGASA y el 0,60 % para Formación Profesional y la suma es 592,07 €. Verás que en el asiento contable aparece 611,87 €, es decir 19,80 € de más por un tema que veremos en el recibo del TC1 que es la parte de Accidentes del Trabajo y Enfermedades Profesionales (cuota I.T. e I.M.S.).
Aquí muestro el asiento contable a fecha 31-12-2011:

La empresa tendrá que contabilizar esa nómina, para tener registrada cada partida y controlar el pago del TC1 (la suma de la aportación del trabajador y del empresario, es decir, 611,87 € + 125,74 € = 737,61 €), de las retenciones (modelo 111) y el propio pago de la nómina al trabajador.
Pues bien ahora a 20-01-2012 la empresa presentará el modelo 111 el que que ingresará a Hacienda el dinero retenido al trabajador. Este modelo puede ser mensual para Grandes Empresas (+ 6 M de € de cifra de negocios año anterior) o trimestral para Pymes. Supongamos que MANOLO S.A. es una Pyme, pues ingresará a 20-01-2012 las retenciones de las nóminas de octubre, noviembre y diciembre en el modelo 111 como vemos aquí abajo:

El modelo TC1 se paga mensualmente, por lo que a 31/01/2012 se pagará el TC1 de la nómina de diciembre arriba detallada (siempre hay 1 mes de plazo):
A parte el 30/01/2012 se tendrá que presentar el modelo 190 con los detalles de las retenciones e ingresos a cuenta del año 2011. Es un resumen anual sin coste alguno en el que "resumes y detallas" los importes presentados en los respectivos modelos 111 durante el año anterior.

El trabajador no tendrá nada más que esperar a recibir el borrador de su declaración y comprobar que coincide con lo declarado por la empresa y con las nóminas que posee. De hecho una vez la empresa ha presentado el resumen anual 190 debe darle al trabajador el llamado “Certificado de Retenciones” en el que aparece el bruto de las percepciones y el dinero retenido por la empresa y entregado a Hacienda, que el trabajador se descontará cuando haga su renta. En este caso en el certificado debe aparecer todo declarado como Rendimientos del Trabajo ya que la clave del 190 es la A.
Lógicamente una empresa no puede retener lo que quiera, ya que según el trabajador y sus circunstancias personales y familiares le corresponde un tipo de retención. Por eso el IRPF tiene en cuenta las circunstancias personales y familiares de trabajador. El trabajador tiene derecho a que le retengan correctamente y hecho de no retenerle correctamente supondrá fuertes sanciones para la empresa. Si quieres comprobar la retención que te corresponde existe el programa Retenciones de la AEAT. Es tan sencillo como rellenar tus datos personales y como mínimo el bruto de las retribuciones totales durante el año y te calculará el tipo de retención que te corresponde. Así luego en Renta no te llevarás sustos.
Trabajo por cuenta propia
Aquí empieza el caos.  Hay poca gente que tiene claro lo que es y las implicaciones fiscales y contables que tiene. Pues voy a arrojar un poco de luz.
El trabajo por cuenta propia es el ser “Autónomo”, es decir, contratan tus servicios, emites una factura y si es posible la cobras en el plazo establecido. Lo que la gente no tiene claro es que el ser autónomo conlleva muchas responsabilidades: has de darte de alta de actividad en Hacienda, has de darte de alta en la Seguridad Social como autónomo, has de presentar trimestralmente las declaraciones de IVA y de pagos a cuenta del IRPF, has de presentar a finales de enero los resúmenes anuales de las declaraciones de los 4 trimestres del año y finalmente cuando presentes la Renta habrás de rellenar el apartado de “Rendimientos de Actividades Empresariales y Profesionales”. Es decir que es un follonazo para quien no sepa de contabilidad y fiscalidad. De hecho sólo se diferencia de una empresa en que no se han de legalizar los libros ni presentarlos en el Registro Mercantil, por todo lo demás idéntico.
No esperes que Hacienda te prepare el borrador de la Renta y que lo confirmes en 1 minuto, ya que a diferencia de estar trabajando por cuenta ajena con una nómina (donde los datos para la renta del trabajador Hacienda los saca del modelo 190 que presenta la empresa), aquí la contabilidad la llevas tú y Hacienda no tiene constancia de como has llegado a sacar los importes de cada modelo. Será a través de la inspección donde comprobará si por ejemplo te has deducido el gasto y el IVA de una factura de la luz de tu oficina o el gasto y el IVA de la factura de la reforma de la piscina de tu casa. Por eso es normal que hayan inspecciones y que tengas que conservar los libros y demás documentación durante al menos 4 años.
Mi consejo: lamentablemente si no vas a ganar lo suficiente como para sufragar el pago de tu recibo de autónomos (que se paga a mes actual, es decir aunque te des de alta a 31-12-2011 tendrás que pagar el mes de diciembre) y el pago de un gestor adecuado, pues te tengo que decir que no te dediques a ésto. Hay leyendas urbanas que dicen que si no facturas por encima del salario mínimo interprofesional no te has de dar de alta de autónomo. En teoría, eso es falso y la legislación lamentablemente no favorece en nada al autónomo. De hecho todas las empresas han de pedir el último recibo pagado de autónomos a sus profesionales así como el certificado de contratistas y subcontratistas.También puedes estar en la economía sumergida pero puede ser mala idea si alguien te declara en algún modelo.
Pues bien vamos a poner un ejemplo y veremos los pasos que hay que hacer para salir airoso de todo esto.
Un chaval llamado Raúl González es programador y va a iniciar a 01-12-2011 su actividad profesional.
El primer paso es el alta de actividad que se hace vía modelo 036 o 037 (es un modelo más simple que el 036 y no tiene las complejidades de las páginas destinadas a las personas jurídicas). Pues bien en este pdf tenemos el alta censal. Raúl se da de alta en el regímen general del IVA, de la obligación de hacer pagos fraccionados para su Renta, en el método de estimación directa simplificada y de la obligación de presentar el modelo 111 de profesionales (éste último no sería necesario  a menos que tuviera alguna factura con retención emitida por otro profesional como economistas, abogados, etc...).
Pues bien vamos por puntos: ¿en que consiste el método de estimación simplificada? Para la determinación del rendimiento de la actividad económica que está ejerciendo Raúl hay 3 métodos posibles: objetiva, directa simplificada y directa normal. El método de estimación objetiva consiste en determinar el rendimiento en función de unos módulos determinados por Hacienda que fijarán lo que el contribuyente pagará por cada unidad que use (por ejemplo m2 del local, kWh de potencia contratada, nº de personas contratadas, ...). En este caso no se podría aplicar ya que la actividad del contribuyente no se encuentra comprendida en la Orden de Módulos. El método de estimación directa normal generalmente se aplica cuando la cifra de negocios del año anterior supera los 600.000 €, cosa que en este caso no sucede. Por lo tanto sólo queda el método de estimación directa simplificada. Lo bueno de este método es que si no ganas nada pues no pagas nada, a diferencia del de módulos donde siempre pagas lo mismo.

Sobre la obligación de hacer pagos fraccionados a cuenta del IRPF, con el modelo 130, no es más que ir adelantando el dinero a Hacienda para cuando llegue el momento de hacer la declaración de Renta quel pago no sea tan grande. Lógicamente Hacienda se beneficia porque obtiene durante 1,5 años dinero a tipo de interés 0 %. Si Raúl sólo facturase a empresas y como más del 70 % de sus ventas llevarían retención no estaría obligado a presentar el modelo 130. Suponemos que ventas con retención / ventas totales no superan 70 %.

Una vez sellada el alta de actividad hay que ir a la Tesorería a darse de alta de autónomo. El modelo es el TA521/1 y lo adjunto aquí rellenito.
Pues bien ahora a fecha 02-12-2011 factura un diseño de una intranet a una empresa llamada MANOLO S.A. por 1.000 € + IVA - IRPF. Como MANOLO S.A. tiene como actividad principal la comercialización de productos de belleza por lo que requerir los servivios de un profesional independiente en materia de programación no entrañaría problemas ante posible inspección.


Los 150 € de retención la empresa no se los paga, sólo le pagará Base imponible + IVA. La retención se la entregará a Hacienda a través del modelo 111. Raúl recibirá a principios de febrero su certificado de retenciones con la clave G o de Actividades Empresariales o Profesionales para confeccionar su renta. Si MANOLO S.A. no los declara eso será bajo su responsabilidad. Raúl cuando haga su renta estando en posesión de la correspondiente factura se restará, a parte de los pagos fraccionados que haya ingresado con el modelo 130, el importe de las retenciones que haya soportado, es decir, los 150 €. Para ésto que comento hay una captura más abajo.
A fecha 03-12-2011 factura a un particular el diseño de un programa en JAVA adaptado a su móvil Android

Pues bien a 20-01-2012 presentará el modelo 303 de IVA y 130 de pagos a fraccionados del IRPF del 4 trimestre del 2011 y el día 30-01-2012 el resumen anual de IVA o el llamado modelo 390.
Para el cálculo del IVA supongo además de las 2 facturas de prestaciones de servicios, que tenemos aquí arriba, Raúl sólo dispone de una factura con IVA soportado a deducir en el 4T del 2012. Se trata de la factura de su teléfono móvil por 100 € de base más 18 € de IVA (a más facturas menos IVA a pagar, ya que el IVA para los empresarios/profesionales no es un gasto, sólo lo han de repercutir al cliente final).
Pues bien el modelo 303 quedaría así (si tú quieres rellenarlo a través de la página de la AEAT para obtener el pdf y si sale a pagar poder pagarlo en el banco aquí tienes el link):
El pago a cuenta del IRPF quedaría así (como está en directa simplificada considero un 5% de provisiones y gastos de difícil justificación, es decir, hago (1800 - 100)*0,05 y el resultado, 85 €, lo añado a los 100 € de gastos):

Por último en la Renta, Raúl rellenará el apartado de Rendiemientos de actividades económicas en estimación directa y marcará la casilla "simplificada" como se aprecia aquí:

Y para restarse los pagos fraccionados y las retenciones que ha soportado durante el 2011 Raúl deberá rellenar la página 14 de su declaración de Renta, donde vemos que para nuestro ejemplo se restará los 150 € de retención y 173 € de pago fraccionado.

Para finalizar con el ejemplo estaría el ver cómo darse de baja de profesional y de baja de autónomo. Para el ejemplo pongamos a fecha 31/12/2011.
El modelo es el mismo 037, que vemos rellenado para el alta, y lo adjunto aquí  rellenado con los datos de baja y para darse de baja de autónomo hay que ir a la Seguridad Social y presentar el TA 521/1 rellenado con los datos de baja que adjunto en este otro link.
Esta baja a 31/12/2011 no le exime de la obligación de presentar la renta del 2011 en junio ni de presentar la declaración informativa del 347. Para el 347 se tendrían que declarar estas 2 facturas por el importe total, es decir, base imponible + IVA en la clave "A". No tendría que presentar el 347 si estas operaciones estuvieran declaradas en alguna otra declaración informativa, como por ejemplo el 190, pero éste no es el caso ya la retención de la primera factura "es soportada" por Raúl, es decir, a efectos contables va a la cuenta 473.0 (cuenta de debe o activo) y no a la cuenta 4751.0 (cuenta de haber o pasivo).
Es muy importante el paso de la baja ya que sino Hacienda y la Seguridad Social, en su labor de "yo trabajo lo mínimo posible", no te van a llamar para preguntarte porque no has pagado los autónomos, ni has presentado el IVA ni el 130 una vez tú has dedicido no continuar con tu actividad. Ellos sencillamente se limitarán sumar cada trimiestre que les coste que no presentes los impuestos y pasados 1 o 2 añitos (porque a partir del año cobrarán intereses de demora) recibirás la una notificación donde se te reclamarán los modelos + la correspondiente sanción, y aquí estamos hablando de cifras de miles de euros. En mi opinión consultas SQL las sabemos hacer todos, es decir, cada trimestre yo Hacienda hago una consulta poniendo como condición cuales de los obligados tributarios no han cumplido con su obligación de presentar los modelos y yo me quedo tan satisfecho y regreso feliz a mi casita. Eso es lo fácil, lo difícil es preocuparse y hallar los motivos y sobre todo ser un poco más humildes y ayudar al contribuyente. Esta es mi crítica como economista a esta situación.
Bueno aquí adjunto un link de un pdf de la página de Hacienda que recoge algunas las ideas de este post, pero a mi entender sigue siendo bastante complejo para aquellas personas que no saben nada de tributación (lógicamente para economistas es muy básico) y además no hace referencia a la relación del contribuyente con la Seguridad Social, cosa en la que yo he querido profundizar.
¿Son los 2 régimenes compatibles?
Por último, ¿se puede estar en ambos regímenes al mismo tiempo? En una misma empresa no. Si lo que te planteas es la pluriactividad, es decir, estar contratado por en una empresa de alta en Régimen General trabajando, por ejemplo, como economista de lunes a viernes -con tu nómina-, y los fines de semana estar por cuenta propia facturando tus servicios de asesoramiento a otras empresas en materia de inversiones en otros paises. Pues según la Tesorería de la Seguridad Social la respuesta es clara: te tienes que dar de alta de autónomo para trabajar por cuenta propia con idenpendencia de estar ya en el Régimen General trabajando por cuenta ajena.

viernes, 30 de septiembre de 2011

Creación de soluciones para Excel usando Visual Studio

Buenas en esta nueva entrada me voy a centrar en cómo integrar Visual Studio con Office. Para ello voy a crear primero un proyecto libro de Excel 2010 al cual añadiré un panel de acciones y luego voy a crear un proyecto complemento para Excel todo ello con VB.NET como lenguaje de programación. Esto mismo que voy a crear con Excel también se podría crear con otra aplicación de Office como Word o Outlook sin problemas, pero me voy a centrar en Excel ya que es la aplicación que con más alegría se usa en entornos empresariales. Como verás Visual Studio 2010 integra este conjunto de herramientas y plantillas para la creación y personalización de soluciones para Office, que para los que no lo recuerden hace no mucho tiempo toda esta funcionalidad estaba en una descarga aparte llamada ‘Visual Studio Tools for Office’.

La principal diferencia entre crear un nuevo proyecto seleccionado la plantilla ‘Libro de Excel 2010’ o seleccionado la plantilla ‘Complemento de Excel 2010’ es que usando la primera todo el código que escribamos y toda la funcionalidad que añadamos sólo estará disponible para el libro de Excel que vamos a crear. Si abrimos otro libro pues esa funcionalidad no estará disponible. Cuando por el contrario creamos un complemento el código es independiente de cualquier documento y siempre estará disponible en Excel a menos que desinstalemos el complemento a través de la ficha de ‘Programador’ de Excel 2010 del menú y el botón ‘Complementos COM’. Este último proyecto es ideal por ejemplo si queremos crear un complemento que nos añada a la cinta principal del Excel (el antiguo menú principal) alguna funcionalidad, por ejemplo un botón para que cuando el usuario pulse se ejecute cierto código que nos muestre en una celda de Excel la hora actual y que este botón esté disponible sea cual sea el libro de Excel que abra. Es un ejemplo muy simple lógicamente.

Pero aquí alguien me podría decir que todo esto está muy bien que es lo que ganamos frente a usar VBA en Excel. Podría decir que es más simple, que usamos Visual Basic 6 (pocas líneas de código), que podemos grabar macros fácilmente que nos ayudan a la hora de escribir código. Si todo esto está muy bien pero aquí lo interesante es poder usar los controles y la potencialidad de Visual Studio y VB.NET para trabajar con Excel. Por ejemplo que pasa si queremos conectarnos a una base de datos SQL y ejecutar un procedimiento almacenado que nos devuelva cierta información que luego se muestre en Excel, si queremos controles más complejos que los que podemos agregar a un formulario usando VBA (por ejemplo un DataGridView) o si por ejemplo queremos manejar las Excepciones de una manera más profesional que usando ‘On Error Resume Next’ y por no hablar de depurar nuestro código como podríamos depurar cualquier otro proyecto que diseñemos en Visual Studio.

Voy a poner 2 ejemplos. El primero, más sencillo, en el que crearé un proyecto ‘Libro de Excel 2010’ al cual le voy a añadir un control Calendar al panel de acciones como se ve en la siguiente imagen:














El segundo será un proyecto ‘Complemento de Excel 2010’ que nos permitirá seleccionar un precio máximo de un producto y que al pulsar a un botón del menú se ejecutará un método que primero se conectará a la base de datos Northwind, ejecutará un procedimiento almacenado y devolverá una lista de productos cuyo precio sea menor o igual al precio pasado como parámetro y dicha lista se mostrará en el libro Excel. Voy a usar LINQToSQL pero también se podría hacer los mismo abriendo una conexión y usando un SQLCommand (si trabajamos con un ambiente conectado). Cuando creemos un complemento para Excel veremos que no se nos crea un libro de Excel y no podrems añadir un elemento ActionPaneControl, sino que para que este complemento esté disponible siempre que habramos el Excel voy a añadirle un elementol Cinta (diseñador visual) como se ve en la imagen:











Y el vídeo es el siguiente:

Bueno en siguientes entradas me centraré en otra aplicación que estoy diseñando como la aplicación ‘Norma34Creator’ pero esta vez para temas fiscales y más tarde es posible que según si tengo tiempo cuelgue alguna aplicación desarrollada en Java usando el conocido IDE Netbeans, que aún está en betatesteo. Como digo, es bueno a parte de .NET conocer otras tecnologías y lenguajes para más que otra cosa no casarse con una única plataforma.

domingo, 24 de julio de 2011

Norma34Creator

Hola en este post voy a introducir la primera de las utilidades que voy a compartir. Se trata de una aplicación para Windows que permitirá generar ficheros Norma 34 AEB. Permitirá importar los datos a partir de un Excel o de un documento de texto con una estructura definida y además será posible añadir nuevas transferencias en tiempo de ejecución. Este programa nos permitirá generar remesas de nóminas, pensiones y transferencias simples y será ideal para aquellas empresas que operan con un gran volumen de pagos tanto a proveedores como trabajadores y tienen habilitado el servicio de enviar fichero norma 34 en su banca electrónica. Bueno después de venderos la burra cuelgo el programa. Es necesario disponer de Windows XP o superior y del .NET Framework 4.0 ya que el instalador validará que se cumplan los 2 requisitos. Aunque es una versión reducida de una aplicación más completa -que aportaría el valor añadido de la gestión proveedores y así como un control más detallado del pago- es una versión totalmente funcional y gratuita. Además está abierta a mejoras y sugerencias siempre que sean constructivas y siempre que sirvan para construir aplicaciones más robustas que permitan ahorra tiempo en aquellos procesos inútiles repetitivos. El diseño de la estructura de un fichero Norma34 es pública y se puede descargar desde aquí. Porque que quieres que te diga pero yo prefiero estarme 10 minutos más tomándome un cafecillo a estar perdiendo el tiempo en tareas que no me aportan ningún valor y que puedo delegar a mi ordenador.
¡Novedad! actualizado y mejorado el proceso importación a 02/07/2012.
¡Novedad! importa archivos .csv (delimitados por puntos y comas) a 31/01/2013. Sólo instalar de nuevo y se actualizará.

y...
En la entrada Norma1934CreatorSEPA en MARZO 2014 está una versión más actualizada de este programa compatible con SEPA.

Ejemplo de fichero nómina XML:

sábado, 4 de junio de 2011

Trabajando con datos de tablas en SAP

Hola, en este post voy a continuar de nuevo con el tema de SAP. Hará un poco más de un año que escribí 2 artículos sobre SAP Netweaver ABAP Trial Edition en los que explicaba un poco como instalarlo en una máquina virtual y como escribir nuestro primer programa en ABAP. Continuando con este tema quiero expresar varias ideas claras sobre SAP, debido a que con la cantidad de material que hay y lo poco orientado a principiantes a veces son muy duros los inicios, y también colgar varios recursos que considero interesantes para aprender poco a poco a dominar este ERP.

La primera idea clara es que si tenemos instalado en nuestra máquina virtual o en nuestro ordenador la versión SAP Netweaver ABAP Trial Edition sólo podremos usarla para fines de programación. Es decir si escribimos en el ‘command field’ la transacción SE38 (‘ABAP Editor’) no habrá problemas y la ejecutará, pero si por el contrario tú eres un consultor de SAP o trabajas como contable o controller con SAP, posiblemente entre muchas de las transacciones que tienes añadidas a menú favoritos esté la F-02, que sirve para contabilizar un apunte en el mayor (siempre que no vaya a una cuenta de IVA) -vamos el típico asiento contable de toda la vida-. Pues bien si escribes F-02 en el ‘command field’ y usas la versión ABAP Trial Edition verás que te dirá que dicha transacción no existe. Lógicamente la versión de SAP que tienes en tu trabajo tendrá todos los demás módulos instalados. Por ejemplo yo trabajo habitualmente con el módulo FI y en la versión de ABAP no lo tenemos instalado, ya que es una versión de prueba para testear ABAP.
Aquí adjunto una captura de dicha transacción por si alguien la quiere curiosear:

Pero, aquí va el primer puntazo del día, hay una versión de SAP llamada IDES que viene con todos los módulos instalados, así con varios mandantes para probar distintas configuraciones y varias empresas ya creadas con distintos planes de cuentas. Esta versión es interesante cuando, por ejemplo, no te puedas conectar remotamente desde casa al servidor de tu empresa a través del cual puedas logearte al sistema SAP a mediante el SAPGUI y puedas hacer pruebas en el mandante de desarrollo de las funcionalidades de las distintas transacciones que luego usarás en producción. Instalarlo en una máquina virtual es cuestión de paciencia ya que son 14 horas de instalación, 10 horas si tienes un i7 con 8 GB de RAM, pero lo bueno que tiene es que mientras se está instalando puedes crear snapshots y continuar con la instalación echando 2 horitas cada día. Hay un manual muy bueno cuyo enlace adjunto aquí donde se detalla el proceso de instalación.
Como verás en el manual los preparativos para instalar SAP IDES son similares a los preparativos para instalar SAP Netweaver ABAP Trial Edition: adaptador de bucle invertido, instalar el JRE 1.4.2.x de JAVA, cambiar el hostname o nombre del equipo para que no tenga más de 16 caracteres, verificar que en Windows/System32/drivers/etc/services no tenga entradas para los puertos 3200, 3600 y 8000 y añadir entrada una que ponga localhost y nuestra IP. Lo que no pone en el manual anterior y creo que es importante es crearse una cuenta de administrador en Windows con contraseña, cerrar sesión y usar esta cuenta de administrador para instalar SAP IDES. Además hay que tener en cuenta que tamaño del disco duro de nuestra máquina virtual no debe ser inferior a 120 GB.
Pues bien yo me voy a centrar por ahora en el uso de nuestro SAP Netweaver ABAP Trial Edition, y si nos vamos a la transacción SE16 (‘Data Browser: Initial Screen’) y nos posicionamos sobre el campo ‘Table Name’ y pulsamos F4 veremos que nos vienen creadas unas cuantas tablas de ejemplo, como la SFLIGHT, la SPFLI y la SBOOK, que son las tablas ya creadas del ‘Flight Data Model’ con el que vamos a practicar. Son las tablas para almacenar los datos de una compañía aeronáutica. Ésta sería la captura de la pantalla:

El diseño de estas tablas se puede consultar escribiendo en el 'command field' la transacción SE11 a través de la que accedemos al ‘ABAP Dictionary’.

Si seleccionamos el radiobuttom ‘Database table’ y escribimos el nombre de la tabla a consultar y pulsamos en el botón ‘Display’ veremos el diseño.

El problema es que si te vas de nuevo a la transacción SE16 y consultas los datos que tienen cada una de las tablas verás que están vacías.
El segundo puntazo del día es que si no queremos escribir en el ABAP Editor (transacción SE38) los INSERTS correspondientes para ir populando las tablas o a través de la misma transacción SE16 ir añadiendo los datos uno a uno, hay una opción más sencilla. Existe un programa creado en ABAP que nos permite rellenar las tablas con datos ficticios y así empezar a crear programas que interactúen esas tablas de ejemplo. Pues para añadir los datos a las tablas de ejemplo éstos son los pasos:
1º Ir con la transacción SE38 al ABAP Editor.
2º Situar el cursor en la caja de texto llamada ‘Program’ y pulsa F4 para buscar en la lista de programas que aparecerá uno que se llama SAPBC_DATA_GENERATOR.

Una vez seleccionado pulsamos en el botón ‘Display’ para visualizarlo. En el editor pulsamos en el botón ‘Direct Processing’ o F8 (que es un icono con una especie de llave inglesa) y entonces se nos compilará el programa y se mostrará una pantalla en la que podremos definir algunas opciones como la cantidad de datos que queremos que se genere.

3º Pulsamos en F8 o al icono de ‘Execute’ para ejecutarlo y así rellenar las 3 tablas con datos ficticios.
Pues bien en este vídeo voy escribir un pequeño programa que me permitirá consultar los datos de la tabla SFLIGHT y mostraré por pantalla el resultado de la consulta. Explicaré el funcionamiento del Data Dictionary hablando de dominios, elementos de datos y tablas y dejo para más adelante explicar como diseñar la definición de una tabla en el Data Dictionary y luego activarla para crearla físicamente en la base de datos.
Pues bien en el siguiente vídeo voy a tratar todos estos temas y algunos más de una forma más visual.


viernes, 29 de abril de 2011

Localización y globalización de aplicaciones .NET

Hola,
Después de un poco de tiempo de pausa voy a tratar el tema de la localización de nuestras aplicaciones, es decir que la interfaz y los mensajes estén disponibles en varios idiomas. Con esto doy por finalizado el desarrollo de la aplicación Wordpad y continuaré desarrollando proyectos más complejos.
Bueno al grano. Localizar una aplicación es mucho más que cambiar el texto de tu aplicación e incluye por ejemplo el formato de las fechas, el formato de los números o la dirección del texto. Un caso real, si una aplicación importa datos numéricos de archivos de texto separados por puntos y comas, en España el separador de los miles es el punto y el de los decimales es la coma. En Estados Unidos, por ejemplo, es al revés. Si no lo tienes presente y simplemente cambias la cultura de la aplicación de “es-ES” a “en-US” la importación de los datos será errónea. En el ejemplo anterior estoy utilizando un código para representar el lenguaje, o la cultura, que se usa en España, y es "es-ES" y otro para la de los Estados Unidos, y es "en-US". ¿Cuáles son las culturas soportadas por .NET? Muchas, si creamos una aplicación de consola en VB.NET veremos el listado:
Imports System.Globalization

Module Module1

Sub Main()
Dim cultura As CultureInfo
For Each cultura In CultureInfo.GetCultures(CultureTypes.InstalledWin32Cultures)
Console.WriteLine("Cultura: " & cultura.Name)
Console.WriteLine(vbTab & "Nombre: " & cultura.DisplayName)
Console.WriteLine(vbTab & "Símbolo de la moneda: " & cultura.NumberFormat.CurrencySymbol)
Console.WriteLine(vbTab & "Formato de la fecha: " & cultura.DateTimeFormat.FullDateTimePattern)
Next
End Sub


End Module

Cuando trabajamos con un formulario para Windows y queremos adaptarlo a la cultura con la que estamos trabajando hay varios pasos:
1) Si lo que queremos cambiar es el texto de los controles que aparecen en el formulario, aquí no hay que escribir ni una sola línea de código. Simplemente con seleccionar el formulario y cambiar la propiedad Localizable = true ya podremos seleccionar en la lista ‘Language’ el lenguaje con el que vamos a trabajar. Si no seleccionamos nada siempre trabajaremos con el formulario predeterminado. Seleccionado por ejemplo inglés en la propiedad ‘Language’ podremos cambiar el texto del castellano al inglés y este texto será el que aparecerá cuando la cultura será “en-US”. Ahora podemos cambiar el texto de los controles y hasta su posición y por detrás el diseñador de Visual Studio creará archivos de recursos para cada uno de los idiomas con los que trabajará nuestra aplicación. Pero no te olvides que si estás trabajando en el modo de localización los cambios que hagas no serán globales y sólo quedarán circunscritos al lenguaje con el que estés trabajando.
2) Si queremos mostrar mensajes distintos al usuario según la cultura en este caso habrá que crearse archivos de recursos para cada uno de los idiomas con los que nuestra aplicación trabajará y luego vía código acceder a al contenido de esos archivos. Por ejemplo, si la interfaz de nuestra aplicación está en español y en inglés y queremos que los mensajes que se muestre al usuario sean acordes a la cultura con la que el usuario trabaje, habrá que crearse 2 archivos de recursos, llamados en este caso WinAppSettings.resx (para el idioma predeterminado) y WinAppSettings.en.resx (para el idioma inglés). Es muy importante la estructura del fichero: [Nombre del fichero].[idioma].resx
Y luego ir cambiando el valor de cada cadena del archivo WinAppSettings.xx.resx, siendo xx el otro idioma con el va a trabajar la aplicación.
Pues bien para obtener la cadena de texto apropiada a la cultura con la que estamos trabajando podemos crear una función como la siguiente:
Public Function getMessage(ByVal cadenaTexto As String) As String
'Obtengo la cadena de texto del archivo de recursos
Return My.Resources.WinAppSettings.ResourceManager.GetString(cadenaTexto)
End Function

El paso más importante es si el usuario cambia la cultura de la aplicación. En este caso los controles se han de redibujar de nuevo. Esto se puede hacer de 3 formas según la complejidad que queramos para la aplicación.
a. Borrar el contenido de todos los controles con Me.Controls.Clear() y llamar al método InicializeComponent() para que los vuelva a dibujar.
Imports System.Threading
Imports System.Globalization

Public Class Form1

Private Sub SButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SButton.Click
Thread.CurrentThread.CurrentCulture = New CultureInfo("es-ES")
Thread.CurrentThread.CurrentUICulture = New CultureInfo("es-ES")
Inicializar()
End Sub

Private Sub EButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EButton.Click
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
Thread.CurrentThread.CurrentUICulture = New CultureInfo("en-US")
Inicializar()
End Sub

Private Sub Inicializar()
'borro los controles
Me.Controls.Clear()
'los vuelvo a inicializar
InitializeComponent()
End Sub

End Class

b. Decirle al usuario que cuando reinicie la aplicación ésta ya aparecerá con la cultura seleccionada. Para ello la aplicación guardará la cultura seleccionada en una propiedad llamada ‘cultura’ en la configuración de la aplicación. Cuando se reinicie la aplicación de nuevo será en el método constructor en el que según el valor almacenado en la configuración de la aplicación cargará una cultura u otra.
Ejemplo del código en el método constructor de la clase Editor para que se carge la cultura definida en la configuración de la aplicación.
Public Class Editor

Public Sub New()
If Not (Thread.CurrentThread.CurrentCulture.Name = My.Settings.cultura) Then
'asignar el idioma guardado en My.Settings.Cultura
' al hilo que ejecuta el programa

Thread.CurrentThread.CurrentCulture = New CultureInfo(My.Settings.cultura)
Thread.CurrentThread.CurrentUICulture = New CultureInfo(My.Settings.cultura)
'asigno el tipo de separador para los números decimales ya que la aplicación va a importar datos numéricos de un mismo fichero .txt externo que es independiente a la cultura seleccionada
Thread.CurrentThread.CurrentCulture.NumberFormat.NumberDecimalSeparator = ","
Thread.CurrentThread.CurrentCulture.NumberFormat.NumberGroupSeparator = "."

End If
' Llamada necesaria para el diseñador.
InitializeComponent()

End Sub
...
Otro ejemplo, si queremos mostrar un mensaje al usuario indicando la cantidad de dinero que dispone su cuenta corriente y que según la cultura se muestre el símbolo de la moneda predeterminada de su país (lógicamente el código correcto tendría un módulo conversor que utilizase un servicio web para obtener el tipo de cambio vigente entre las diferentes monedas).
Imports System.Globalization

Public Class Form1
Private Sub InfoButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles InfoButton.Click
Dim c As New Cuenta
c.Importe = 1000
System.Threading.Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
MessageBox.Show(c.Importe.ToString("c"))
System.Threading.Thread.CurrentThread.CurrentCulture = New CultureInfo("es-ES")
MessageBox.Show(c.Importe.ToString("c"))
End Sub
End Class

Public Class Cuenta
Private numero As Double
Public Property Importe As Double
Get
Return numero
End Get
Set(ByVal value As Double)
numero = value
End Set
End Property
End Class


c. Si el hilo de ejecución actual no tiene la cultura deseada creo un nuevo hilo de ejecución y mató al hilo actual. Lógicamente cuando se ejecute el nuevo hilo de ejecución en el método constructor asignaré la cultura del nuevo hilo al valor de mi propiedad 'idioma' en este caso (o cultura, el nombre es indiferente, en este caso le he llamado idioma).
Private Sub configuraIdioma(ByVal idioma As String)
My.Settings.cultura = idioma
If Not (Thread.CurrentThread.CurrentCulture.Name = idioma) Then
Call nuevoHilo()
End If
End Sub

Private Sub nuevoHilo()
'cierro el formulario para que se vuelva a abrir ya con el idioma y la cultura correcta
'
'creo un nuevo hilo de ejecución para enlazar con el método nuevoForm() que arranca
'otra instancia diferente de Editor
Dim hilo As New Thread(AddressOf nuevoForm)
hilo.SetApartmentState(ApartmentState.STA)
hilo.Start()
'cierro la aplicación y el hilo actual
Application.Exit()
End Sub

Private Sub nuevoForm()
'el hilo tendrá un retraso de 0.5 segundos
Thread.Sleep(500)
'inicio la aplicación
Application.Run(New Editor)
End Sub
Bueno aquí cuelgo un ejemplo de código de una aplicación para Windows Forms para ver el tema de la Localización. La interfaz y los mensajes están disponibles en español e inglés y así se puede ver el código para cambiar de una a otra cultura la aplicación. A parte la aplicación permite importar el contenido de un fichero de texto separado por puntos y comas a un DataGridView y, una vez validado, permite exportar el contenido del DataGridView a un fichero .xml con una opción de LINQ bastante guapa que nos ayudará a crear archivos xml de forma fácil: literales. Además cuelgo un vídeo donde se podrá analizar las claves del proceso con más tranquilidad.

A día de hoy estoy liado con temas de control de gestión y contabilidad de costes pero tengo cosillas interesantes que iré colgando poco a poco a ver si retomo de nuevo el mundillo de la programación. De hecho si hay ganas por aprender y hay constancia el resultado será óptimo. Esto se contrapone a cuando estudié en la EUETIB, donde no aprendí nada y estaba super desmotivado. Pero uno ha se saber aprender de los errores y las ganas de trabajar no te las puede quitar nadie y menos gente que sabe menos que tú.
Pues bien el próximo vídeo será de consultas SQL en ABAP y explicaré como dejar listo el SAP Netweaver para poder hacer consultas a las tablas que vienen de ejemplo (explicaré el FLIGHT DATA MODEL) y entender un poco lo que son los Dominios, los ‘Data Elements’ y las Tablas. En teoría usando un ERP como éste se pueden obtener cosas guapas como cuadros de mando instantáneos, así como cuentas de pérdidas y ganancias agrupadas por CeCos (centros de coste) que proporcionan información muy útil para llevar una contabilidad analítica y saber con antelación donde estamos ganando y donde perdiendo dinero. SAP es por ahora el ERP líder del mercado, y tengo compañeros que les encanta. En cambio otros consideran que es muy difícil adaptarlo a algunos tipos de empresas, el módulo fiscal -que todo buen programa de contabilidad ha de tener- deja bastante que desear ya que no se actualiza a los cambios normativos y sobre todo, no consolida. Eso sí con dinero San Pedro canta. Como vemos hay opiniones para todos los gustos.

miércoles, 30 de marzo de 2011

El certificado digital: problemas y soluciones

Hola, vuelvo de nuevo con un tema que es muy importante para la mayor parte de las entidades de este país (entre ellas S.A. y S.L.) y que está generando mucha confusión y como que creo que no está aclarado correctamente para eso estoy aquí para dar un poco de luz. Dejo un momento el tema de la programación para hablar de la necesidad por parte de estas y otras entidades de obtener un certificado digital. La gravedad del tema recae no en la posibilidad de presentar impuestos telemáticamente y poder acceder a páginas de instituciones que requieren un certificado digital (por ejemplo la página de la AEAT), sino en que como hasta ahora Hacienda gastaba una gran cantidad de papel y esfuerzo en notificar a los contribuyentes (por ejemplo, muchas empresas cambian el domicilio fiscal y no lo comunican todo y estar obligadas, es una infracción leve pero bueno) y el notificar suponía un verdadero dolor de cabeza para Hacienda y lo peor es que los contribuyentes se enteraban del tema cuando ya les habían embargado las cuentas. Solución por parte de Hacienda: obtienes un certificado digital, eso sí, pagando al Registro Mercantil donde constituiste la empresa para que emita un documento que diga quién es el administrador de la empresa -consulta que si tuvieran una base de datos SQL tardaría menos de un segundo- y sin perder ni un minuto porque caduca, el administrador se presenta en cualquier oficina de Hacienda con las escrituras y con un numerito -que ahora explicaré como obtenerlo- y lo enseñas y a las 24 horas -si no se ha borrado el ordenador en el que solicitaste el numerito- podrás descargarte el certificado. Y por qué toda esta maratón. Pues porque si no tienes un certificado digital no te abras enterado que a tu empresa ya le están llegando todas las notificaciones a una preciosa “Dirección de Correo Habilitada” o DEH (el nombre es cursi de cojones) y aunque no te des de alta o no abras los correos no significa que se queden sin notificar. Es más tienes 10 días para contestarlos.
Si ya tienes el certificado te puedes dar de alta del servicio en http://notificaciones.060.es/
Mola, el tema, ¿no? Para las Personas Físicas, es decir tú o yo, pronto todo esto llegará por decreto. Por ahora puedes ser uno de los primeros “frikies” que se den de alta del servicio. Para ellos puedes solicitar un certificado digital o si tienes el nuevo NIF electrónico y eres uno de los privilegiados que aún se acuerda de la contraseña que te dieron cuando renovaste el carnet, con un lector puedes también acceder a estos servicios tan guapos como consultar tus deudas y demás cositas. También voy a explicar el proceso para una persona física que difiere un poco en forma pero no en sustancia.
En teoría el fin parece honesto, porque para la Tesorería de la Seguridad Social está el Programa Red y es muy útil. Lo que a mí entender las formas no han sido las correctas, se ha hecho de manera bastante precipitada y creo que sería indecente en agosto estar en la playa mirando cada día por si te llega alguna notificación. Si esto lo lee alguna persona de Hacienda encargada de este tema, el regalar el iphone4 podría ser una buena compensación.

Bueno voy a explicar cómo obtener e instalar el certificado en varios casos, pero quiero puntualizar si que tu empresa tributa en Vizcaya, Álava o Guipuzcoa los certificados de la Fábrica de Moneda y Timbre no te digo por donde se los pasan. En este caso necesitarás un certificado en tarjeta criptografica que se solicita en unas empresas de certificación distintas y son gratis, sí gratis.
Casos certificados FNMT:
a) Persona física.
El proceso es más simple. En la página de la FNMT hay que solicitar el certificado digital para persona física.
Una vez introducido tu NIF y pulsado el botón 'Enviar petición' aparecerá una página con numerito.
Vas a Hacienda con el numerito y con tu NIF y los presentas. Pues a las 24h te podrás descargar el certificado. Para ello vas a 'Descarga de Cetificado' y rellenas las 2 cajas de texto. Si el proceso funciona se te agregará un certificado a tu explorador.
Nota: si la configuración del ordenador no cambia no hay límite de tiempo para descargar el certificado con el código activado.
Pues bien, si todo ha ido bien vamos a Internet Explorer - Menú Herramientas - Opciones de Internet - Pestaña Contenido - Certificados y en la pestaña 'Personal' estará tu certificado.
Para hacer una copia de seguridad lo MÁS IMPORTANTE es explotar la clave privada y que el archivio se guarde como *pfx porque lo que obtienes no te servirá para nada.
Para importarlo si usas Moxilla Firefox y que no te dé error tienes que poner una contraseña cuando se te pide (la que quieras pero que no se te olvide).
El proceso de copia de seguridad ha finalizado con éxito. Guarda el certificado en lugar seguro fuera de manos ajenas y de patosos.
Si deseas importar en un explorador un certificado digital hay 2 alternativas: la primera es importarlo pero evitando que luego se pueda exportar, la segunda es importando y que luego se pueda exportar (y puedes hacer más copias de seguridad). Para la segunda opción, la única diferencia es que hay que marcar en la pantalla de asistente que te muestro abajo el checkbox en 'Marcar esta clave como exportable'. De lo contrario si se borra el archivo .pfx de copia de seguridad el certificado se perderá para siempre (siempre y cuando la configuración del ordenador haya cambiado y no te deje descargartelo de nuevo con el numerito que activaste en Hacienda).
Como vemos el certificado se importa en el almacén 'Personal'.

Recomiendo utilizar internet explorer 6 y Windows XP y si tienes Windows Vista o 7 descargate el Moxilla Firefox, porque con el Explorer el proceso es un poco engorroso. Si aún quieres probar hay más info sobre la correcta configuración del Explorer aquí.
b) Persona jurídica.
Es el proceso más costoso en tiempo y en dinero porque primero el Registro Mercantil de donde se presentó la escritura pública otorgada ante notario ha de emitir un certificado de quien es el administrador de la sociedad, y para eso cobra. Aunque ni ellos tienen claro el importe y muchos ni siquiera saben cuál es el documento que han de proporcionar (es lo que tiene ser funcionario). Serán necesarias 2 visitas al Registro Mercantil de donde se presentó las escrituras: la primera para solicitar el certificado de quien es el administrador/es de la sociedad y al cabo de 5 días una segunda para recoger el certificado.

También existe la posibilidad de solicitarlo por internet y descargalo al cabo de 5 días evitando viajes y demás desplazamientos. Se accede con cualquier certificado, incluso el tuyo personal, y se paga con tarjeta. El link lo adjunto aquí.
Este documento no es necesario que lo solicite el administrador ya que será en Hacienda donde si será obligatoria su presencia. Una vez tenemos el documento vamos a la página de la Fábrica de la Moneda y Timbre y solicitamos un certificado digital para persona jurídica. Introducimos en el campo que nos aparece el NIF de la entidad y si se genera correctamente nos aparecerá un número. Con ese número y el documento proporcionado por el Registro Mercantil, el administrador tendrá que ir a Hacienda o a cualquier otra oficina de acreditación y presentarlos y a las 24h podrá descargar. La relación de oficinas de acreditación está disponible aquí.
En proceso de solicitud e instalación salvo en lo que acabo de comentar es indéntico al de la solicitud del certificado para persona física.
c) Precauciones.
Es muy importante no borrar el ordenador con el que se solicitó el código porque con otro ordenador o con otro explorador no nos podremos descargar el certificado y se tendrá que ir de nuevo al Registro Mercantil (sólo en el caso de personas jurídicas para que pagen más) y solicitar un nuevo numerito. El porqué está en que los certificados digitales llevan asociados una clave privada que sólo el ordenador donde se ha instalado el certificado es capaz de desencriptar y utilizar. Para ello el sistema operativo se vale de una clave maestra, que se genera a partir del SID del usuario y su contraseña. Sólo si tenemos la copia de seguridad del perfil y contraseña del usuario que lo tenía instalado se podría tratar de recuperar el certificado. Eso sí utilizando Windows Server 2003 y la utilidad NewSid diponible aquí. Podríamos usar Vmware para conseguirlo de forma más fácil. En este link puedes encontrar más información, pero si estás en este punto es que no has mirado mis consejos sobre la correcta instalación y exportación de un certificado digital.

Bueno todo esto lo acompaño con un vídeo para dejarlo todo bien masticado.

viernes, 11 de febrero de 2011

ASP.NET y Ajax: configurar el AutoComplete extender

Hola, en este post voy a volver a mundo de ASP.NET analizando la nueva plantilla ‘Nuevo Sitio web ASP.NET’ que viene con el Visual Studio 2010. Voy a comentar como administrar el sitio web denegando a los usuarios anónimos, es decir, no autentificados, el acceder al contenido de una carpeta de mi sitio web y por último lo que quiero es mostrar como configurar el AutoCompleteExtender. Ya que estoy desarrollando una página ASP.NET pues retomo el tema de los controles Ajax que vienen con el “ASP.NET Ajax Control Tookit”. Configurar el AutoCompleteExtender es un poco engorroso. De hecho si miramos aquí en la página en la que descargamos los controles, viene una demostración de cómo queda el control correctamente configurado y nos explican cómo configurar algunas de sus propiedades. Pues bien lo que voy a hacer va a ser demostrar cómo configurarlo. Para ello utilizaré la base de datos ‘AdventureWorks’ y al proyecto le añadiré un elemento ‘Clases de LINQToSQL’. Arrastraré la tabla ‘Address’ de la base de datos ‘AdventureWorks’ al diseñador de LINQToSQL y al guardar se me generará una clase DataContext, en este caso CiudadesDataContext que es el nombre que yo le pongo. Una vez que hemos modelado nuestra base de datos con el diseñador de LINQToSQL podemos hacer consultas LINQ de una manera muy fácil y potente. Eso sí recuerdo que es necesario trabajar con bases de datos sql ya que por ejemplo con una base de datos Access no se puede. Me podrías decir que a día de hoy es un poco cutre tener una aplicación profesional usando Access como base de datos. Te diré que sí pero para proyectos de andar por casa o si creas un instalador y no quieres obligar al cliente a instalar el SQLSERVER Express para trabajar con la base de datos en local, Access se puede seguir utilizando digan lo que digan los más puritanos en la materia. Eso sí no niego que se pierden funciones y facilidades como ésta de LINQToSQL.
Pues para que funcione el control escribiremos en la propiedad ServiceMethod el texto 'GetInfo' que es el método donde escribiremos la consulta LINQ, que nos devolverá los nombres de ciudades que empiecen por el texto que vamos escribiendo en el TextBox, que oportunamente hemos añadido a la página (al cual le hemos añadido el AutoCompleteExtender)

En código quedará + o - de la siguiente manera:
[WebMethod]
[ScriptMethod]
public static string[] GetInfo(string prefixText, int count)
{
' CiudadesDataContext en este caso o el nombre que le pongas tú
CiudadesDataContext dc = new CiudadesDataContext();
' consulta LINQ
var query = (from c in dc.Address
where c.City.StartsWith(prefixText)
select c.City).Distinct();
return query.Take(count).ToArray();
}

Y el vídeo:


Bueno con esto escribo algo en el blog que ya llevaba varios meses sin. Es que con los exámenes del curso de controller de costes que me tienen adsorbido. De hecho estoy diseñando un componente para arrastrar a un formulario y que te calcule el fondo de maniobra, las necesidades operativas de fondos, el EDITBA, así como el ROA y el ROE y más ratios, y puede ser guapo porque te crea en tiempo real un gráfico con el análisis patrimonial de una empresa. A ver si esto lo comparto con vosotros así como algunos proyectos guapos que tengo un poco olvidados.
A parte tengo pendiente explicar cómo añadir varios idiomas a una aplicación de WindowsForms, ya sea poniendo la propiedad Localizable a ‘True’ y seleccionando el idioma en la propiedad ‘Language’ (de esta forma ya se nos crea el archivo de recursos automáticamente y sólo hay que ir control por control modificando al nuevo idioma las los textos que queramos), o si queremos mostrar mensajes al usuario en función del idioma que tenga seleccionado habrá que crear nuestro archivo de recursos. Bueno no me enrollo más.