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.
