lunes, 16 de abril de 2007

abm-o-matic para todo el mundo

Hace un par de años atras cuando comencé a trabajar para una empresa de software, me di cuenta el caos de programas que tenia, cada programa era totalmente distinto al otro, siendo que todos hacian básicamente lo mismo un proceso de ALTA, uno de MODIFICACION, uno de CONSULTA y uno de LISTADO. Si si, el famoso ABM.

El tema es que estos ABM's venian de la época de Francisco Cachilo (un programador no muy agil que se las rebuscaba para hacer todo más complicado y más feo).

Por lo que me surgió la idea de hacerle una lavada de cara al sistema y eliminar del menu de usuarios como 3 o 4 opciones por cada subsistema.

Me acuerdo que los menues no terminaban nunca, por cada opcion tenias un submenu que decia

Archivo de Talcosa
  • Alta de Talcosa
  • Consulta de Talcosa
  • Listado de Talcosa

o a veces peor

Archivo de Talcosa
  • Alta de Talcosa
  • Consulta de Talcosa por color de Pelo
  • Consulta de Talcosa por color de Ojos
  • Consulta de Talcosa por color de Calzones
  • Listado de Talcosa por color de Pelo
  • Listado de Talcosa por color de Ojos
  • Listado de Talcosa por color de Calzones

EN FIN UN HORROR!!!!

Luego de pelearme con la vida y despues de muchas horas de trabajo (8) se me ocurrio hacer un Programa que haga ABM's!

Si si .. algo así como una herramienta CASE pero más a lo bestia.

Bueno de ahí fue donde empece a buscar como demonios acceder a la definición de los campos y las tablas y los indices y etc. etc., pero eso ya lo puse en el posteo pasado por lo que ahora me voy a centrar en como lo hice.

Bien la cosa fue realmente sencilla:

Agarre un programa modelo que había hecho en donde se contemplaba, el Alta, la modificación el borrado, la consulta y el listado. A este programa lo llame PLANTILLA.p.

/*****************************************************************************/
/* PLANTILLA PARA ABM-O-MATIC */
/*****************************************************************************/

/** DEFINO BOTONES **/

def button btnAgregar label 'AGREGAR'.
def button btnModificar label 'MODIFICAR'.
def button btnBorrar label 'BORRAR'.
def button btnImprimir label 'IMPRIMIR'.

/** DEFINO UN QUERY **/
def query qry01 for @4@.

/** DEFINO UN BROWSE **/
def browse brw01 query qry01 share-lock
display
@1@
with 10 down width 78.

/** DEFINO UN FRAME **/
def frame frmMain
brw01 at 1
btnAgregar at 1
btnModificar
btnBorrar
btnImprimir
with 1 down row 3 centered
title '[ @5@ ]'.

def frame frmIngreso
@1@
with 1 down row 6 centered overlay 1 col color message
title '[ ALTA/MODIFICACION DE REGISTRO ]'.

/** DEFINO EVENTOS **/
on choose of btnAgregar run Agregar.
on choose of btnModificar run Modificar.
on choose of btnBorrar run Borrar.
on choose of btnImprimir run Imprimir.

/** MAIN **/
hide all no-pause.
status input off.
run OpenQry.
enable all with frame frmMain.
wait-for endkey of this-procedure.

/*** PROCEDURES ***/
procedure Agregar.

create @0@.
update
@2@
with frame frmIngreso.

message 'Confirma el Alta?'
view-as alert-box buttons OK-CANCEL title '[ ATENCION ]'
set wCh as Log.

if wCh <> true then delete @0@.
run OpenQry.

end procedure.


procedure Modificar.

update
@2@
with frame frmIngreso.

run OpenQry.

end procedure.

procedure Borrar.
message 'Confirma la baja?'
view-as alert-box buttons OK-CANCEL title '[ ATENCION ]'
set wCh as Log.

if wCh = TRUE then delete @0@.
run openQry.
end procedure.

procedure Imprimir.

form header
'Nombre Empresa' at 1
'Nro.Pag.: ' to 70 page-number format "99999999" to 80
'Fecha ..: ' to 70 today to 80
skip(1)
"Listado de @5@" at 30
skip(1)
with frame tit no-label no-box page-top.

message '¿Confirma la Impresión?' view-as alert-box buttons YES-NO update wCh.

if wCh <> TRUE then return.

output to archivo.txt paged page-size 66. /*** ACA LA SENTENCIA OUTPUT ***/

view frame tit.

get first qry01.
repeat while avail @0@:
display
@1@
with down frame frmImpresion width 255 no-box.

get next qry01.
end.

reposition qry01 to row 1.
output close.

end procedure.

procedure OpenQry.
close query qry01.
open query qry01
@3@
.
end procedure.


/*****************************************************************************/
/* (C) 2000 ABM-O-MATIC by Diego J. Coppari All Right Reserved */
/********************************* EOF ***************************************/


Bien, esa fue mi plantilla, ahora que fue lo siguiente que hice, hice un programa que "parseaba" este archivo y a medida que lo recorría iba reemplazando los numeros por su valor. Si se fijan tenemos varios.

@0@ = Nombre de la Tabla primaria
@1@ = Lista de campos para los display estos además de TABLA.campo tienen el label y el format.
@2@ = Lista de campos en el formato TABLA.campo sin agregados para los ABM.
@3@ = Sentencia del Open Query
@4@ = Lista de Tablas para el Query (Tabla1, Tabla2, TablaN)
@5@ = Titulo del Programa


Explicado esto creo que no les será muy difícil crear algo funcional, la parte más difícil ya la tienen.

Se trata de jugar y de tener un programa funcional en un 90%, cosa de tocar 2 o 3 pabadas y que quede andando.

Y por sobre todo, lo más importante, que todos los programas tengan la misma estructura.

No hay comentarios.:

Ultimos comentarios