Una Cuenta Corriente, Paso a Paso

 

Una aplicación sencilla, completa, que no resulte aburrida ni difícil de entender para alguien que maneje los elementos del Visual Basic es lo que me propuse hacer. Había pensado en un control de inventario pero era muy trivial  y pobre en cuanto a posibilidades de diseño. Bien, aquí va mi programa.

La cuenta corriente es uno de los esquemas básicos de las aplicaciones comerciales, de allí salen las contabilidades (que son lo mismo con reportes especiales) así como varios otros programas. Es importante comprender la estructura porque puede aplicarse a una multitud de problemas diferentes. Es común que cuando enfrentamos un diseño especial lo primero que tratamos de determinar si es del “tipo inventario” o del “tipo cuenta corriente”.

Una cuenta corriente básica tiene dos archivos, uno con los nombres de las cuentas que es estable en tamaño y otro con los “movimientos” que va creciendo día a día. Como no puede crecer infinitamente, este archivo cada cierto período (mensual, semestral, anual, etc.) debe “cerrarse” es decir, volver a cero.

Los criterios de diseño

En orden de importancia, los criterios de diseño son:

  1. Confiabilidad, el programa debe funcionar absolutamente libre de fallas y debe depender el mínimo de los recursos o configuración del equipo
  2. Ergonomía, debe ser usable con mínimo o ningún adiestramiento previo, también cada movimiento del operador debe ser mínimo y las respuestas del programa a acciones del operador deben ser siempre las más intuitivas. Los errores deben ser todos fácilmente corregibles.
  3. Sencillez, un diseño limpio y sencillo resulta en un programa confiable y ergonómico. Se debe diseñar un mínimo de líneas de código y el uso mínimo de recursos así como solo las funciones fundamentales.

Soluciones

La producción y formateo de reportes impresos es un proceso que complica el diseño y causa la mayoría de los problemas cuando la aplicación se está explotando y hay que cambiar algún formato. Afortunadamente tenemos el Visual Basic Para Aplicaciones así es que todos los reportes impresos se emiten desde una plantilla Excel especialmente programada para esos efectos, lo que permite disponer de gran flexibilidad y simplifica enormemente la programación como veremos más adelante.

Así, la aplicación tendrá dos partes, una en VB6.0 para ingresar y corregir los datos con facilidad y otra en Excel VBA para emitir los informes impresos. Con este enfoque es muy fácil hacer correcciones de último minuto antes de imprimir.

La maqueta

La disposición del programa VB6.0 para ingreso y corrección de datos es la siguiente:

 

Para simplificar coloqué botones en lugar de un toolbar. A la izquierda está el área de ingreso de datos y a la derecha 7 botones con los comandos básicos, el botón en blanco lo dejé para algo que se me ocurra más adelante.

En el área de abajo aparecen dos ventanas para mostrar por pantalla un listado de las cuentas, un listado de los movimientos o una cartola como veremos más adelante. Por ahora esas ventanas están en modo invisible y se activan al presionar los respectivos botones

Cuando parte el programa el foco está en el textbox "Nombre de la cuenta" por lo que se encuentra listo, por defecto para el ingreso de datos. Por ergonomía el ingreso de datos no hace uso del mouse, el foco se traspasa con la tecla Enter y cada casilla tiene opciones para guiar y facilitar la tarea del programador.

Las cuentas se accesan por su nombre de la siguiente manera: supongamos que queremos ingresar un dato a la cuenta llamada DEUDA TARJETA DE CREDITO, podemos escribir cualquier porción del nombre de la cuenta y el programa la buscará en el archivo de nombres. Si colocamos por ejemplo tarj el programa encontrará inmediatamente esa cuenta y completará al nombre ya que es único, si ponemos en cambio deuda hay varias que coinciden con ese criterio y aparecerán en un listado abajo como muestra la figura. en este caso hay que escoger con un clic del mouse

Al escoger la cuenta correcta con el mouse pasa a llenar el textbox "Nombre de la cuenta", el textbox correspondiente a la fecha se coloca con la fecha actual y el foco pasa automáticamente al textbox "Detallle"

Si queremos cambiar la fecha la ingresamos solo como una secuencia de números, por ejemplo 02012001 y el programa la convierte automáticamente en 02/01/2001.

Al ingresar el detalle y colocar Enter el foco pasa al combobox "Haber o Debe" y lo que se escribió en el detalle se pasa a mayúscula. Finalmente se indica si es H o D con la flecha y al poner Enter se graba el movimiento, se limpian los textbox y el foco vuelve a "Nombre de Cuenta"

Para ingresar nuevas cuentas se hace clic en el botón correspondiente y aparecen dos nuevos textbox como muestra la figura

Se indica la posición en que se graba la cuenta y luego su nombre. Con Enter se graba la cuenta, se limpian los textbox y se vuelve a "Posicion" si se ingresa un número se grabará otra cuenta y si se ingresa solo Enter en posición estas dos textbox desaparecen y queda el programa en su estado inicial.

Con el botón "Listar Movimientos" se puede ver una pantalla ruda con los movimientos que se han ingresado. si hacemos clic sobre algún movimiento este pasará al área de ingreso de datos donde podrá ser corregido o bien borrado según el botón que escojamos. Al borrarse el movimiento este no es borrado físicamente del archivo sino que se le agrega un asterisco al principio del campo de Detalle lo que impide que este sea mostrado (también las cuentas se borran de la misma manera) así estos pueden ser posteriormente examinados o "desborrados". La figura muestra un movimiento recuperado de la lista

La cartola de movimientos es la misma funcionalidad que la lista anterior, solo que selecciona los de una determinada cuenta.

El Generador de Informes en Excel

Se trata de una plantilla Excel programada para generar en tres hojas de cálculo los informes principales: Listado de Cuentas y Saldos, Libro de Movimientos y Cartola de una Cuenta. El macro tiene la ventana que se muestra a continuación

Y los informes que genera son

Una ventaja importante de poder leer desde el Excel las cuentas y los movimientos es que resulta muy fácil corregirlos en la hoja de cálculo, por ejemplo insertar un movimiento es casi trivial aquí y libera muchísimo código del programa VB6.0 ya que los datos leídos y modificados en las hojas Excel pueden ser a su vez grabados de vuelta al archivo.

También resulta trivial hacer cambios simples de formatos y opciones de impresión, e incluso para cambios mayores es bastante sencillo modificar el código incrustado en la hoja de VBA

Para ver El Código Fuente Paso a Paso haz clic en el link

Conclusión
 

La programación completa tomó un día y medio de trabajo, podría haber sido bastante menos si no hubiese perdido el tiempo probando con un enfoque equivocado al comienzo.

La idea original era probar como con los componentes OCX y las clases podían hacerse programas más limpios y sencillos así es que traté de adaptar mi control OCX para despliegue de datos para esta aplicación.

No hubo caso, si bien las cosas funcionaban se perdía mucha ergonomía, tuve dificultades para manejar el foco (un movimiento del foco bien diseñado es  una de las mejores características de un programa ergonómico), también para que los distintos textboxes hicieran cada cual validaciones y se comportaran de la manera más adecuada según los requerimientos del programa. Creo que es una dificultad fundamental que explica por qué los nuevos programas son muchas veces menos amigables al usuario que los antiguos. Es como comprar un traje en la grandes tiendas y pretender que nos calce tan perfecto como el hecho a la medida por un buen sastre.

Ni siquiera pude usar mi clase para archivos ASCII con éxito. Al tratarse ya no de uno sino que de dos archivos, la programación de la clase se complicaba demasiado para mi gusto, ya no valía la pena. En este punto sin embargo puede haber una deficiencia mía por la poca experiencia programando con clases, quien sabe.

En cualquier caso quedé satisfecho con el programa, es pequeño, simple y parece bastante sólido, en el Análisis con Project Analyser mostró principalmente "errores de estilo" (era de esperar) y pienso extenderlo un día de estos para transformarlo en un programa de contabilidad por partida doble. Gran parte del trabajo ya está hecho.