Author | Topic: ABM en modo grfico - interfaz GUI | |
---|---|---|
Jose Luis Otermin | ABM en modo grfico - interfaz GUI on Mon, 01 Nov 2010 12:43:21 -0300 Estimados colegas, Algunos colegas novicios no se animan a escribir en estos foros y me han preguntado por la forma correcta de hacer un ABM. Alguien querra subir un ejemplo de un ABM hecho en modo grfico? (Interfaz grfica, claro). Dicen que un cuadro vale mil palabras. Muchas gracias Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jorge L | Re: ABM en modo gráfico - interfaz GUI on Mon, 01 Nov 2010 13:06:01 -0300 Hola José con su pedido me ha generado algunas dudas no veo diferencias entre manejar un ABM entre modo gráfico y consola particularmente desde clipper, siempre he cargado los datos de las dbfs a 2 juegos de variables de memoria, 1 juego para editar en los gets y otro juego para que antes de actualizar a la DBF, testear si la clave existe en caso de un alta y verificar en caso de una modificación que los datos en la dbf siga siendo los mismo para evitar sobre escrituras cuando 2 usuarios hacen lo mismo (viejas teorías de semáforos) esta secuencia la adopté entre las miles de teorías que hablan de como hacer un ABM en una red lo que le agregaría (esto lo digo..., luego de haber escuchado tu "bendita" recomendación de leer el manual) es un testeo para aquellos campos claves tenga un valor justamente válido por las dudas que con la ayuda del mouse el usuario cargue los campos que le interesa y no los que debe "Jose Luis Otermin" escribió en el mensaje de noticias:b7b73d9$61d4facb$1d122@news.alaska-software.com... Estimados colegas, Algunos colegas novicios no se animan a escribir en estos foros y me han preguntado por la forma correcta de hacer un ABM. ¿Alguien querría subir un ejemplo de un ABM hecho en modo gráfico? (Interfaz gráfica, claro). Dicen que un cuadro vale mil palabras. Muchas gracias José Luis Otermin Alaska Software Soporte Técnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Página Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Tue, 02 Nov 2010 13:55:28 -0300 Qu mejoras haras a este abm? Gracias por participar Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- Abm.zip | |
Jose Valle | Re: ABM en modo grfico - interfaz GUI on Wed, 03 Nov 2010 10:46:48 +0100 El Tue, 2 Nov 2010 13:55:28 -0300, Jose Luis Otermin escribió: > ¿Qué mejoras harías a este abm? > > Gracias por participar Hola Jose Luis, nos alegramos de verte por aqui. El programa queda muy limpio como punto de partida. Pero no hace ni A ni B, solo M. Tampoco hace validaciones, ni control de concurrencia. Y la parte visual, redimensionamiento de ventanas, etc supongo que lo dejas para mas adelante, a efectos didacticos. Jose Valle | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Wed, 03 Nov 2010 13:57:09 -0300 Hola tocayo!! Bueno, s que no se hacen validaciones ni se producen altas ni bajas. Por eso, que resulta evidente, ped un modelo para esta tarea. Los novicios tienen dificultades a la hora de codificar un ABM. Mi pregunta fue, creo, clara. cmo hace un abm un profesional que programa desde hace aos? Imagino que el cdigo fuente de un ABM no es un Secreto de Estado. La idea es discutir sobre la mejor forma de codificar algo tan habitual como un ABM. A travs de la discusin encontraremos el patrn de programacin para cualquier ABM y de ah a un cdigo fuente genrico, hay un pasito. te animas? Un abrazo Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- "Jose Valle" <jomagava@gmail.com> escribi en el mensaje news:1kskuiotqh3og$.1skszofuzai9s.dlg@40tude.net... > El Tue, 2 Nov 2010 13:55:28 -0300, Jose Luis Otermin escribi: > >> Qu mejoras haras a este abm? >> >> Gracias por participar ;) > > Hola Jose Luis, nos alegramos de verte por aqui. > > El programa queda muy limpio como punto de partida. Pero no hace ni A ni > B, > solo M. Tampoco hace validaciones, ni control de concurrencia. Y la parte > visual, redimensionamiento de ventanas, etc supongo que lo dejas para mas > adelante, a efectos didacticos. > > Jose Valle > > > > | |
Jose Valle | Re: ABM en modo grfico - interfaz GUI on Thu, 04 Nov 2010 11:43:47 +0100 El Wed, 3 Nov 2010 13:57:09 -0300, Jose Luis Otermin escribió: > Hola tocayo!! > > Bueno, sé que no se hacen validaciones ni se producen altas ni bajas. > Por eso, que resulta evidente, pedí un modelo para esta tarea. > Los novicios tienen dificultades a la hora de codificar un ABM. > Mi pregunta fue, creo, clara. > > ¿cómo hace un abm un profesional que programa desde hace años? > Imagino que el código fuente de un ABM no es un Secreto de Estado. > La idea es discutir sobre la mejor forma de codificar algo tan habitual como > un ABM. > > A través de la discusión encontraremos el patrón de programación para > cualquier ABM y de ahí a un código fuente genérico, hay un pasito. > > ¿te animas? > > Un abrazo Hola Jose Luis. Añado un adjunto de lo que uso actualmente. Tiene todos los defectos posibles pero funciona y para mi es trabajo de media hora hacer un abm de un fichero nuevo. Como creo que debe hacerse es así: 1) Borrado: Si puedo bloquear el registro. Compruebo si hay registros relacionados. Por ejemplo. Si un cliente tiene facturas, albaranes, pedidos. Borro datos del cliente que están en otras tablas, por ejemplo precios especiales, direcciones de envío, teléfonos, etc. Borro el registro, skip +1 2) Altas y modificaciones. Si son altas hago variables de memoria con los valores predeterminados. Por ejemplo el valor predeterminado para ‘pais’ el 034 en mi caso. Y si son modificaciones hago estas variables con los valores actuales. Edito el formulario. Siempre hay dos botones Validar y Cancelar. Si cancelan se sale sin mas Valido algunos campos según se teclean pero dejo salir del campo con errores por si acaso hay que corregir errores en otro campo relacionado (por ejemplo la validación de una cif depende del campo pais). Al final repito todas las validaciones. Si no es correcto no dejo salir (siempre pueden salir con el botón cancelar) Si es un alta hago un INSERT. Postgree asigna un valor al campo autoincremental y actualiza el resto de los campos. Si es una modificación leo de nuevo el registro y comparo con los valores que he guardado al inicio. Si hay diferencias puedo intentar resolverlas, pero lo fácil es dar un mensaje de que otro usuario ha modificado el registro y que vuelva a modificarlo. Si no hay diferencias hago el UPDATE. Me parece una buena idea lo de hacer un ABM genérico. A mi me interesa hacerlo para Postgree. Jose Valle GESMFMA.PRG | |
Jorge L | Re: ABM en modo gráfico - interfaz GUI on Fri, 05 Nov 2010 10:37:43 -0300 Hola José te comento que no estoy trabajando en modo gráfico, si estoy trabajando con getsysx.prg lo que me pueden saltar con el mouse a cualquier get y la forma de resolverlo es revisar en el GET de confirmación final si tengo valores válidos en los campos que requieren validación obligatoria particularmente jamás manejo una B dentro de un AM respondí el mensaje apuntando a la validación de datos y no a como manejar resize, validaciones, prevalidaciones, combobox(), xbpbrowse dentro de un xbpget y formatos entre otras cosas, lo que sí particularmente me gustaría es proponer un pequeño ejemplo complejo en GET y convertirlo a GUI con ayuda "Jose Luis Otermin" escribió en el mensaje de noticias:d0d0223$40b9bfb3$220a0@news.alaska-software.com... ¿Qué mejoras harías a este abm? Gracias por participar José Luis Otermin Alaska Software Soporte Técnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Página Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Fri, 05 Nov 2010 11:00:35 -0300 Hola Jorge, Espero tu ejemplo y, junto con el que envi Jos Valle har las sugerencias. Creo que esta discusin puede llegar a ser muy productiva. Si se sumaran ms ejemplos (otros usuarios), podramos dar con un modelo genrico. Gracias por escribir Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- "Jorge L" <jlborlando@way.com.ar> escribi en el mensaje news:12a478f8$748b3e75$4a08d@news.alaska-software.com... > Hola Jos > te comento que no estoy trabajando en modo grfico, si estoy trabajando > con getsysx.prg lo que me pueden saltar con el mouse a cualquier get > > y la forma de resolverlo es revisar en el GET de confirmacin final si > tengo valores vlidos en los campos que requieren validacin obligatoria > particularmente jams manejo una B dentro de un AM > > respond el mensaje apuntando a la validacin de datos y no a como manejar > resize, validaciones, prevalidaciones, combobox(), xbpbrowse dentro de un > xbpget y formatos entre otras cosas, > lo que s particularmente me gustara es proponer un pequeo ejemplo > complejo en GET y convertirlo a GUI con ayuda > > > > "Jose Luis Otermin" escribi en el mensaje de > noticias:d0d0223$40b9bfb3$220a0@news.alaska-software.com... > > Qu mejoras haras a este abm? > > Gracias por participar ;) > > > -- > Jos Luis Otermin > Alaska Software > Soporte Tcnico > -------------------------------------------------------------------- > Foros de Usuarios: news://news.alaska-software.com > Pgina Web: http://www.alaska-software.com > Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm > Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 > Oficina en EEUU: Fax: +1 (646) 218 1281 > -------------------------------------------------------------------- > > > | |
Ingenieria de Sistemas(NQN) | Re: ABM en modo grfico - interfaz GUI on Mon, 08 Nov 2010 21:59:48 -0300 Voy a dar mi opinion sobre un proceso ABM... Soy partidario de realizar los controles a medida que "se pasa de campo", como en algunos casos la edicion o modificacion de ciertos campos depende de otro.. por supuesto para esto se requiere un pequeno analisis sobre la disposicion de los campos (gets) en la pantalla (no importa si es modo consola o grafica o web) Tambien voy a dar por obvio...una serie de cuestiones (no creo que esten mal pero en nuestro nivel creo que raya lo obvio (por no decir otra cosa)), como ser verificar que la BD exista, (estoy convencido que mi teoria "sirve" tanto para tablas planas DBF, o para BD, no importa el motor por supuesto va ha diferir el modo de coneccion, DBF modo directo o nativo, BD a travez de ODBC u otro mecanismo), que el servidor este operativo , que la maquina este prendida y una serie de obiedades (a mi entender) mas... Otra teoria que aplico (tal vez por herencia de las viejas maquinas o si quieren de viejo maoso je je je)..es realizar las aperturas de los archivos (cuando me refiero a archivos me refiero a DBF y/o BD) en el momento que los voy a utilizar, vi muchos sistemas que cuando arranca la aplicacion "abren / conectan" todos los archivos necesarios, y de esta manera cuando ingresan a una opcion ya tienen los datos disponibles, para mi es una pesima manera de programar. Por la sencilla razon que los datos estan almacenados en una computadora y manejados al final por un sistema operativo, Esto quiere decir que estan expuestos a fallas tecnicas/humanas y todos sabemos que pasa cuando estoy actualizando datos en el disco y se corta la luz... Seguramente me podran de decir para eso estan las UPS (SAI), y un monton de herramientas preventivas, yo solo puedo garantizar COMO mi aplicacion maneja los datos y que algoritmo de recuperacion/o rolback implemento,,,no puedo garantizar que la UPS (SAI) tenga las baterias en buen estado, que todo el hardware este conectado a una UPS(SAI), que la coneccion de internet no se va ha caer en el momento de la actualizacion, en fin un sin numero de factores que no puedo controlar PERO que atentan contra la seguridad/integridad de mi sistema, entonces trato de no depender (dentro de lo posible por supuesto) de factores externos a mi aplicacion. La otra, el tiempo que demanda la apertura de los archivos con las maquinas de hoy es despreciable, comparado con las antiguas XT por ej. y la seguridad que me da no tener los datos en linea todo el tiempo, para mi es fundamental.. Bueee en realidad puedo escribir un par de paginas mas con respecto a seguridad e integridad de datos pero para que se me entienda la teoria creo que suficiente.. Ahora si volviendo al procese de ABM Normalmente los procesos de ABM - siempre (por ahora) hablamos de tablas o archivos maestros, (ej,. Clientes/Productos/Rubros etc. ) es decir archivos que por su condicion NO varian con la frecuencia que lo hacen los archivos de movimientos,...(ej. Facturas/Detalles de Fc. Resumens de Cuenta , Movimientos de stock etc.) Yo los manejo desde un menu PERO dentro del mismo prg (o proceso) Menu Altas - Bajas - Modificaciones - archivo XXXXX (clientes o customer etc) 1 - Selecciono la opcion (que esta en el menu) Ingreso al prg - Formulario que "maneja" mi ABM 2 - Abro los archivos/BD use con las dbf... Coneccion con BD...(con todo lo que eso significa) 3 - Como de yo se que estoy trabajando con clientes 4 - Cargo en variables LA ESTRUCTURA del registro, no importe si es dbf o BD y las inicializo con los valores por defecto.. mientras estoy "cargando" la estructura del registro a variables de memoria voy asignando los valores por defecto.. por ej, Campos caracter =blanco Campos numericos = 0.00 Campos Fecha/time()=en blanco o date/time, segun la aplicacion Campos Logicos = SOY ENEMIGO DE LOS CAMPOS LOGICOS no los utilizo en su lugar utilizo un campo caracter CON 1/0 o S/N etc y asi ...... 5 - Muestro/Presento el Formulario con el diseno del registro, es decir las variables del Clientes/Customer. Posiciono el cursor en el primer campo a ingresar y FUERZO el foco en ese campo..esta operacion me permite luego realizar todos los demas controles.. SI presiono ESC o Click en Boton Salir, salgo del formulario Si ingreso un valor los busco en el archivo..(dbf o con selec si es BD) si lo encontro Cargo las variables de memoria con los datos del registro, y lo muestro ...(si ocurre esta situacion ACTVO el boton BORRAR - GRABAR) Si no lo encontro asumo que es una alta (en realidad en este punto activo un boton para buscar el cliente o que el sistema genere el nro, libre,) Haa, tampoco utilizo el famoso ID de la BD, los nros por ej. de clientes/customer los manejo yo en la aplicacion...mi teoria es que la herramienta sea Xbase.Clipper/V.Fox/ etc. haga lo que yo quiero y no lo que ella crea.. 6- Como al ingresar al formulario "forze" el get en el campo, Principal (que normalmente es el primero de la lista), controlo el LOST FOCUS, y segun esto activo o no los campos siguientes...y mientras NO llegue al ultimo campo , solo esta activado el boton Cancelar...o Borrar segun el caso.. ....bueno manana otro capitulo (o no ) de mi exposicion, voy a ver como se recepciona... | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Tue, 09 Nov 2010 00:01:43 -0300 Jelou Carlos! Muy buena tu exposicin, chango. Gracias por escribir, dicho sea de paso Debido a que uno de los pollos en tu discurso es de mi gallinero, me hago cargo y digo: Lo de las Pre y Post condiciones son un "vicio acadmico" que me gust conservar. La profe de Algoritmos I y II (la misma insistente y morruda) machac con esas premisas y me quedaron, a fuerza de garrotazos, impregnadas en algunos anlisis donde no siempre es trivial el funcionamiento del algoritmo. He cargado las tintas en esos puntos ANTES y DESPUES del algoritmo porque en cualquier otra discusin de este tipo seguramente saltar a la vista que para poder ejecutar una secuencia bastante sencilla de instrucciones altamente especficas, las condiciones ambientales deben estar bien claras. Ahora, yendo a lo nuestro: El proceso de A-B-M requiere de esas pre y post condiciones. La representacin de los datos frente al usuario puede ser (como bien apunt Angel), GUI (Interfaz Grfica - xbp) o HTML o... Entonces, es importante considerar que la pantalla, donde se exponen los datos para su interaccin con el usuario, es resultado de la estrategia de representacin ms que por un imperativo tcnico o algortmico. El ambiente previo y posterior a la pantalla de edicin es nuestra primer consideracin. Hasta ahora, sin discusin luego de la unificacin de criterios, parece. Hechas las salvedades, comenzamos con la parte interactiva? Me gusta esta discusin Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Sat, 06 Nov 2010 06:48:50 -0300 Estimados Colegas, Como se sabe, todo algoritmo requiere el siguiente escenario: Pre-Condicin Algoritmo Post-Condicin Para el caso de Altas (nuevo registro) - Bajas (anular registro) y Modificaciones (alterar registro): - Pre-Condicin: -------------------- a) Existe una tabla. a.1) Est abierta. b) Existe un orden para esa tabla. b.1) Ya ha sido creado y activado. c) El puntero de registro se encuentra en el registro a modificar. d) Hay una copia del registro a modificar. - Post-Condicin: --------------------- a) Tabla permanece abierta. b) Mismo orden de Pre-Condicin. c) Los datos manipulados por el algoritmo han sido agregados anulados modificados. d) El puntero de registro se encuentra en: d.1) Altas: El nuevo registro (RECCOUNT()). d.2) Bajas: El registro anterior (ltimo existente o BOF()). d.3) Modificaciones: El mismo registro de Pre-Condicin. Estamos de acuerdo hasta aqu? Es importante que la discusin de estas condiciones ambientales est resuelta antes de abordar el desarrollo del algoritmo. Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Angel Pais | Re: ABM en modo grfico - interfaz GUI on Sat, 06 Nov 2010 18:00:48 -0200 On Sat, 6 Nov 2010 06:48:50 -0300, Jose Luis Otermin wrote: > Estimados Colegas, > > Como se sabe, todo algoritmo requiere el siguiente escenario: > > Pre-Condición > Algoritmo > Post-Condición > > Para el caso de Altas (nuevo registro) - Bajas (anular registro) y > Modificaciones (alterar registro): > - Pre-Condición: > -------------------- > a) Existe una tabla. > a.1) Está abierta. > b) Existe un orden para esa tabla. > b.1) Ya ha sido creado y activado. > c) El puntero de registro se encuentra en el registro a modificar. > d) Hay una copia del registro a modificar. > > - Post-Condición: > --------------------- > a) Tabla permanece abierta. > b) Mismo orden de Pre-Condición. > c) Los datos manipulados por el algoritmo han sido agregados anulados > modificados. > d) El puntero de registro se encuentra en: > d.1) Altas: El nuevo registro (RECCOUNT()). > d.2) Bajas: El registro anterior (último existente o BOF()). > d.3) Modificaciones: El mismo registro de Pre-Condición. > > ¿Estamos de acuerdo hasta aquí? > Es importante que la discusión de estas condiciones ambientales esté > resuelta antes de abordar el desarrollo del algoritmo. NO estoy de acuerdo Ese modelo solo aplica para aplicaciones desktop que usen dbfs. Si la GUI es HTML o los datos se encuentran en un servidor stateless (sql o propio) nada de eso es válido. Saludos Angel | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Sun, 07 Nov 2010 01:36:02 -0300 Hola Angel! Qu gusto leerte por ac! Bien, si lo anterior es cierto para una tabla plana, Qu solucin propondras? Gracias por sumarte Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- "Angel Pais" <amigosam@adinet.com.uy> escribi en el mensaje news:1fbg0b4avmn5c.xkn1wl7thbdf.dlg@40tude.net... > On Sat, 6 Nov 2010 06:48:50 -0300, Jose Luis Otermin wrote: > >> Estimados Colegas, >> >> Como se sabe, todo algoritmo requiere el siguiente escenario: >> >> Pre-Condicin >> Algoritmo >> Post-Condicin >> >> Para el caso de Altas (nuevo registro) - Bajas (anular registro) y >> Modificaciones (alterar registro): >> - Pre-Condicin: >> -------------------- >> a) Existe una tabla. >> a.1) Est abierta. >> b) Existe un orden para esa tabla. >> b.1) Ya ha sido creado y activado. >> c) El puntero de registro se encuentra en el registro a modificar. >> d) Hay una copia del registro a modificar. >> >> - Post-Condicin: >> --------------------- >> a) Tabla permanece abierta. >> b) Mismo orden de Pre-Condicin. >> c) Los datos manipulados por el algoritmo han sido agregados / anulados / >> modificados. >> d) El puntero de registro se encuentra en: >> d.1) Altas: El nuevo registro (RECCOUNT()). >> d.2) Bajas: El registro anterior (ltimo existente o BOF()). >> d.3) Modificaciones: El mismo registro de Pre-Condicin. >> >> Estamos de acuerdo hasta aqu? >> Es importante que la discusin de estas condiciones ambientales est >> resuelta antes de abordar el desarrollo del algoritmo. > > NO estoy de acuerdo =) > > Ese modelo solo aplica para aplicaciones desktop que usen dbfs. > Si la GUI es HTML o los datos se encuentran en un servidor stateless (sql > o > propio) nada de eso es vlido. > > Saludos > Angel | |
Jose Valle | Re: ABM en modo grfico - interfaz GUI on Sun, 07 Nov 2010 12:04:15 +0100 El Sun, 7 Nov 2010 01:36:02 -0300, Jose Luis Otermin escribió: > Hola Angel! > > ¡Qué gusto leerte por acá! > > Bien, si lo anterior es cierto para una tabla plana, ¿Qué solución > propondrías? > > Gracias por sumarte Variante para sql (aviso que en esto no tengo experiencia) - Pre-Condición: d) Hay una copia del registro a modificar. (Incluso creo que esto no es necesario, porque sql avisará del 'lost update') - Post-Condición: c) Los datos manipulados por el algoritmo han sido agregados anulados modificados. (Creo que basta comprobar que no se ha producido un error) --- Va a ser verdad lo que dice Boris que con sql todo es mas fácil. Hasta ahora he trabajado en modo hibrido (solo he usado Td en algunas aplicaciones) y con dbf. Ahora solo me interesa el modo gráfico y con sql. Saludos a todos. | |
Jorge L | Re: ABM en modo gráfico - interfaz GUI on Mon, 08 Nov 2010 16:40:34 -0300 Grupo José Valle, me sumo a tu interés, pero antes de pasar al sql prefiero entender el funcionamiento de las xbppartes acá he armado un pequeño ejemplo de edición de un get, en donde el usuario debe localizar un dato buscandolo por el índice en una dbf mi dificultad pasa por como armar la relación entre las distintas xbpPartes de manera "no modal" José Luis, si te parece y podés dar el puntapié para iniciar la conversión de VIO a GUI, en la medida que vaya entendiendo me sumo para agregar funciones o clases de prevalidación y postvalidación de datos para "modificar" una dbf "Jose Valle" escribió en el mensaje de noticias:5qjusbnkkz43$.1968venhuxu76.dlg@40tude.net... El Sun, 7 Nov 2010 01:36:02 -0300, Jose Luis Otermin escribió: > Hola Angel! > > ¡Qué gusto leerte por acá! > > Bien, si lo anterior es cierto para una tabla plana, ¿Qué solución > propondrías? > > Gracias por sumarte Variante para sql (aviso que en esto no tengo experiencia) - Pre-Condición: d) Hay una copia del registro a modificar. (Incluso creo que esto no es necesario, porque sql avisará del 'lost update') - Post-Condición: c) Los datos manipulados por el algoritmo han sido agregados anulados modificados. (Creo que basta comprobar que no se ha producido un error) --- Va a ser verdad lo que dice Boris que con sql todo es mas fácil. Hasta ahora he trabajado en modo hibrido (solo he usado Td en algunas aplicaciones) y con dbf. Ahora solo me interesa el modo gráfico y con sql. Saludos a todos. | |
Jorge L | Re: ABM en modo gráfico - interfaz GUI on Mon, 08 Nov 2010 16:43:10 -0300 Me había olvidado de incluir el ejemplo, aquí va "Jorge L" escribió en el mensaje de noticias:3fc8218f$ab6f790$3ca8f@news.alaska-software.com... Grupo José Valle, me sumo a tu interés, pero antes de pasar al sql prefiero entender el funcionamiento de las xbppartes acá he armado un pequeño ejemplo de edición de un get, en donde el usuario debe localizar un dato buscandolo por el índice en una dbf mi dificultad pasa por como armar la relación entre las distintas xbpPartes de manera "no modal" José Luis, si te parece y podés dar el puntapié para iniciar la conversión de VIO a GUI, en la medida que vaya entendiendo me sumo para agregar funciones o clases de prevalidación y postvalidación de datos para "modificar" una dbf "Jose Valle" escribió en el mensaje de noticias:5qjusbnkkz43$.1968venhuxu76.dlg@40tude.net... El Sun, 7 Nov 2010 01:36:02 -0300, Jose Luis Otermin escribió: > Hola Angel! > > ¡Qué gusto leerte por acá! > > Bien, si lo anterior es cierto para una tabla plana, ¿Qué solución > propondrías? > > Gracias por sumarte Variante para sql (aviso que en esto no tengo experiencia) - Pre-Condición: d) Hay una copia del registro a modificar. (Incluso creo que esto no es necesario, porque sql avisará del 'lost update') - Post-Condición: c) Los datos manipulados por el algoritmo han sido agregados anulados modificados. (Creo que basta comprobar que no se ha producido un error) --- Va a ser verdad lo que dice Boris que con sql todo es mas fácil. Hasta ahora he trabajado en modo hibrido (solo he usado Td en algunas aplicaciones) y con dbf. Ahora solo me interesa el modo gráfico y con sql. Saludos a todos. ADUANA.DBF Gets.prg main.PRG Project.xpj | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Tue, 09 Nov 2010 01:28:30 -0300 Jorge, En el ejemplo que enviaste existe un browse con una bsqueda. Sugiero mirar en : <drive>\ALASKA\XPPW32\source\samples\basics\QBrowse Para darte una idea de cmo puede utilizarse el XbpQuickBrowse con bsqueda por columna. Fijate en el fuente de QBROWSE2.prg Esta forma de buscar es apta para tablas chicas y no se aplica a un contexto SQL excepto que la vista de la tabla haya sido hecha con un SELECT * FROM MiTabla Mientras tanto, sigo viendo tu cdigo fuente. Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Wed, 10 Nov 2010 07:39:06 -0300 Jorge, Adjunto tu ejemplo "convertido" a modo grfico. Puede que carezca de la belleza de un hermoso diseo pero la intencin es mostrar la funcionalidad en modo GUI y cmo se puede hacer una validacin con interaccin del usuario. Adicionalmente hay algunos detalles como navegacin del browse con teclado a travs del campo de edicin (SLE). Si miras EditSLE encontrars que con las teclas K_UP y K_DOWN se puede mover el puntero del browse y por consiguiente, el de la tabla / recordset en memoria paginada del DacPagedDatastore(). Cuando se mueve el puntero del browse, ste puede hacerse de diversas formas: a) Por teclado - Evento keyboard. b) Por ratn - Evento itemselected (doble click) c) Por ratn - Evento itemMarked (un solo click) d) Por manipulacin directa (ver EditSLE) Por lo tanto ya no servir la simplicidad del DBEdit porque como vemos, hay ms de una forma de mover el puntero del registro e inclusive se puede mover el cursor sin mover el puntero de registro. Estoy seguro que el fuente necesita una pulida y quiz hasta deba retocarse el fuente para ajustarlo mejor, pero la idea es mostrar cmo se puede disear un formulario con el XppFD (Diseador de Formularios de Xbase++) y luego alterar el cdigo fuente generado. En este caso, el formato de funcin es para que el cdigo "convertido" sea semejante al del DOS. Sin embargo, como veremos ms adelante, se puede crear una clase y desde ella administrar mejor toda la funcionalidad sin tener que pensar en un plato de cdigo spaguetti como el que se adjunta. Espero tus comentarios y el de los dems, claro. Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- Abm.zip | |
Jorge L | Re: ABM en modo gráfico - interfaz GUI on Wed, 10 Nov 2010 10:01:05 -0300 José, perfecto ! hay cositas que voy a tratar de pulir y tratar de hacer una pantalla como para entregar a un cliente además de ir agregando otros gets como para poder armar todas las posibilidades luego de terminar con todos los gets, voy a agregar las validaciones antes y después para hacer las ABM mil gracias "Jose Luis Otermin" escribió en el mensaje de noticias:7806a94b$458d7f15$89f@news.alaska-software.com... Jorge, Adjunto tu ejemplo "convertido" a modo gráfico. Puede que carezca de la belleza de un hermoso diseño pero la intención es mostrar la funcionalidad en modo GUI y cómo se puede hacer una validación con interacción del usuario. Adicionalmente hay algunos detalles como navegación del browse con teclado a través del campo de edición (SLE). Si miras EditSLE encontrarás que con las teclas K_UP y K_DOWN se puede mover el puntero del browse y por consiguiente, el de la tabla / recordset en memoria paginada del DacPagedDatastore(). Cuando se mueve el puntero del browse, éste puede hacerse de diversas formas: a) Por teclado - Evento keyboard. b) Por ratón - Evento itemselected (doble click) c) Por ratón - Evento itemMarked (un solo click) d) Por manipulación directa (ver EditSLE) Por lo tanto ya no servirá la simplicidad del DBEdit porque como vemos, hay más de una forma de mover el puntero del registro e inclusive se puede mover el cursor sin mover el puntero de registro. Estoy seguro que el fuente necesita una pulida y quizá hasta deba retocarse el fuente para ajustarlo mejor, pero la idea es mostrar cómo se puede diseñar un formulario con el XppFD (Diseñador de Formularios de Xbase++) y luego alterar el código fuente generado. En este caso, el formato de función es para que el código "convertido" sea semejante al del DOS. Sin embargo, como veremos más adelante, se puede crear una clase y desde ella administrar mejor toda la funcionalidad sin tener que pensar en un plato de código spaguetti como el que se adjunta. Espero tus comentarios y el de los demás, claro. José Luis Otermin Alaska Software Soporte Técnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Página Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Wed, 10 Nov 2010 10:24:49 -0300 Jorge, Gracias por tu elogio Hay cosas que deberian pulirse como por ejemplo la edicin del SLE. Lo que s debe hacerse de inmediato es la comprobacin: Si el SEEK del Valid002 es verdadero, NO debe procederse con la creacin del dilogo y todo lo dems. Es decir, AD01->( dbSeek( AllTrim( cNOM ), .T., 1 ) ) lRET := Found() IF .NOT. lRet aHeader := {"Aduanas"} aFields := {'AD01->NOMBRE'} [... etc ...] cData := oSLE:getData() oDialog:hide() Oculta oDialog oDialog:destroy() Destruye al objeto oDialog := NIL Libera la memoria If ( LastAppEvent() != xbeK_ESC ) nCOD := AD01->CODIGO cNOM := AD01->NOMBRE lRET := .T. //----------------------------------------// Actualiza el contenido del objeto XbpGet con los datos encontrados //----------------------------------------// oObj:SetData(cData) EndIF ENDIF RETURN lRet Esa (y no la que he enviado) sera una estrategia de validacin ms apropiada. Me centr en la interaccin con el usuario, la similitud de cdigo y estrategia. Por supuesto, ms lo miro y ms modificaciones le hara Espero haber ayudado Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Thu, 25 Nov 2010 22:41:04 -0300 Adjunto imagen del Get con bsqueda incremental. Es a ttulo ilustrativo. Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- GetConValidacionPorBusquedaIncremental.jpg | |
Angel Pais | Re: ABM en modo grfico - interfaz GUI on Sun, 07 Nov 2010 09:36:38 -0200 On Sun, 07 Nov 2010 01:36:02 -0300, Jose Luis Otermin wrote: > Hola Angel! > > ¡Qué gusto leerte por acá! > > Bien, si lo anterior es cierto para una tabla plana, ¿Qué solución > propondrías? > > Gracias por sumarte Un placer Don Gato !!! Bueno creo que una variante mas generica podiras ser: > Pre-Condición > Algoritmo > Post-Condición > > Para el caso de Altas (nuevo registro) - Bajas (anular registro) y > Modificaciones (alterar registro): > - Pre-Condición: > -------------------- > a) Existe una tabla. > a.1) Está abierta. > b) Existe un orden para esa tabla. > b.1) Ya ha sido creado y activado. > c) El puntero de registro se encuentra en el registro a modificar. > d) Hay una copia del registro a modificar. Si es alta inicializar las variables temporales valores por defecto si no buscar el registro que se quiere modificar si existe iniciar variables temporales con los datos del registro si no error > - Post-Condición: > --------------------- > a) Tabla permanece abierta. > b) Mismo orden de Pre-Condición. > c) Los datos manipulados por el algoritmo han sido agregados anulados > modificados. > d) El puntero de registro se encuentra en: > d.1) Altas: El nuevo registro (RECCOUNT()). > d.2) Bajas: El registro anterior (último existente o BOF()). > d.3) Modificaciones: El mismo registro de Pre-Condición. Si es alta crear registro con los datos de variables temporales Si es baja buscar registro si existe borrarlo si no ignorar comando Si es modificacion buscar registro si existe variante a: borrarlo o moverlo a historico de cambios crear registro con los datos de variables temporales variante b: sobreescribir registro con los datos de variables temporales si no error No me preocupa si el registro fue modificado por alguien en la red, el ultimo usuario es el que gana. Si se quiere saber quien modifico que, hay que llevar un archivo historico de cambios para saber quien hizo que y cuando. Si en vez de estar en una dbf clasica estamos en un recordset en memoria hay que volver a cargar el mismo desde la fuentes de datos. HTH Angel | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Sun, 07 Nov 2010 11:33:55 -0300 Hola Angel, Intentar poner en un conjunto de Pre y Post condiciones tus estrategias y de paso las combinar con lo que se dijo (siempre que no haya colisiones). Adems, tenemos que ver dnde cae la estrategia sugerida por Jos (Valle). > Bueno creo que una variante mas generica podria ser: Para el caso de Altas (nuevo registro) - Bajas (anular registro) y Modificaciones (alterar registro): NOTA: Ampliaremos el concepto de Tabla para evitar confusiones en el cdigo. Debemos tener en cuenta que las tablas planas (DBF) tienen un tratamiento y los conjuntos de registros (en ingls: recordset) tienen otro. No obstante, las instrucciones de tratamiento en algunos casos son los mismos. Supongamos que usamos ODBCDBE (el motor ODBC de Xbase++ para BD SQL). En ese caso, las instrucciones para administracin de tablas planas son LAS MISMAS que para tablas ODBC. Si usamos SQL como lenguaje de conversacin con el motor de la BD, la estrategia cambia. En donde sea necesario, agregaremos las aclaraciones pertinentes. Escenario: ----------- Imaginemos una pantalla con un Browse (o QuickBrowse). En las lneas del Browse estn los registros de nuestro inters (Plan de cuentas - ACCOUNTS.dbf que se envi al comienzo del hilo). El usuario busca un registro y procede a: a) Modificar el saldo de cuenta. b) Dar de baja la cuenta. c) Insertar una cuenta nueva. Aqu es donde surge la necesidad de discutir la estrategia del ABM. Si los datos son locales (Tabla plana) o remotos (SQL). - Pre-Condicin: -------------------- a) Existe una tabla (o un conjunto de registros). a.1) Est abierta (o: est disponible). b) Existe un orden para esa tabla. b.1) Ya ha sido creado y activado. //------------------------// Estrategia de Angel //------------------------// Si es Alta Inicializar las variables temporales valores por defecto SiNo Buscar el registro que se quiere Modificar / Eliminar Si existe iniciar variables temporales con los datos del registro SiNo error FinSi FinSi - Post-Condicin: --------------------- a) Tabla permanece abierta. b) Mismo orden de Pre-Condicin. c) Los datos manipulados por el algoritmo han sido agregados anulados modificados. Si EsTablaPlana DBF d) El puntero de registro se encuentra en: d.1) Altas: El nuevo registro (RECCOUNT()). d.2) Bajas: El registro anterior (ltimo existente o BOF()). d.3) Modificaciones: El mismo registro de Pre-Condicin. Sino Si es Alta crear registro con los datos de variables temporales Si es baja buscar registro Si existe borrarlo SiNo ignorar comando FinSi Si es modificacion buscar registro si existe Si AuditoriaDeCambios Variante A borrarlo o moverlo a historico de cambios crear registro con los datos de variables temporales Sino Variante B sobreescribir registro con los datos de variables temporales FinSi SiNo error FinSi FinSi Ntese que la estrategia de Jos (Valle) est englobada en esta sintesis. > No me preocupa si el registro fue modificado por alguien en la red, el > ultimo usuario es el que gana. > Si se quiere saber quien modifico que, hay que llevar un archivo historico > de cambios para saber quien hizo que y cuando. > > Si en vez de estar en una dbf clasica estamos en un recordset en memoria > hay que volver a cargar el mismo desde la fuentes de datos. //-----------------------------------------------// Creo que los aportes han enriquecido no slo a la discusin sino tambin al concepto. Alguien cree que nos olvidamos de algo? Todo comentario es bienvenido!! Gracias por compartir sus conocimientos. Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Sun, 07 Nov 2010 11:02:10 -0300 Hola otra vez, Para quienes se sumen (y no estn en tema), amplo un par de conceptos: NOTA: Estas consideraciones de Pre y Post condiciones sirven para tablas planas. Para el caso de situaciones cuyo estado es desconocido (SQL, HTML, etc), seguir el hilo anterior. Por favor, tomen nota que no se ha hablado del algoritmo aun. Pre.condicin: ---------------- Son las tareas que deben realizarse ANTES de la ejecucin de un algoritmo. Entre ellas corresponde mencionar: - Apertura de la tabla cursor puntero / conjunto de registros, etc. - Busqueda del registro sobre el cual trabajar, - Bloqueo de la Tabla (altas), Bloqueo del registro (modificaciones). - Sume ac las acciones que quiera incorporar: (Por ejemplo, bloqueo en cascada de un cliente y sus vnculos para el caso de "baja"). Post.condicin: ------------------ Son las tareas que debern realizarse luego de ejecutar el algoritmo. Por ejemplo: - Si la accin es Alta, a.1) Bloquear tabla a.2) agregar registro en blanco a.3) substituir los campos por datos en memoria. a.4) Desbloquear tabla. - Si la accin es Bajas b.1) Bloquear registro. b.2) Ejecutar DELETE() b.3) Desbloquear registro. - Si la accin es Modificacin. m.1) Bloquear registro m.2) substituir los campos por los datos en memoria. m.3) Desbloquear registro. Por supuesto, estamos en medio de un debate sobre estos elementos. Este es el momento ideal para discutir esta estrategia. Le parece que nos olvidamos algo? Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Wed, 10 Nov 2010 10:48:34 -0300 Estimados Colegas, Luego de un par de das sin objeciones, creo que podemos continuar con el asunto que nos ocupa. Resueltas las estrategias de las Pre y Post condiciones, podemos proceder al algoritmo principal. No es ningn secreto de Estado que una pantalla de ABM debe llevar como mnimo las etiquetas descriptivas de los campos a mostrar, sus mscaras de edicin y, en caso de ser datos editables, sus condiciones de validacin. Resumiendo, el siguiente conjunto de datos debera contemplar lo que se ha dicho. aCampo := {; "Etiqueta",; "NombreCampo",; "MscaraDeEdicin",; "PreValidacin",; "PostValidacin",; "Editable"; } Ejemplo: aCampo := {; "Razn Social",; "CLI->RSOCIAL",; "@!",; {| oGet | NombreEmpresa(CLI->CODCLI, oGet) },; {| | .T. },; .F.; } En este punto quisiera llamar la atencin sobre el codeblock de prevalidacin: {| oGet | NombreEmpresa(CLI->CODCLI, oGet) } Se puede apreciar que el codeblock recibe al oGet como parmetro y se lo reenva a la funcin invocada. En ese caso la funcin podr hacer lo mismo que Valid002( cNom, nCod, oObj) en el ejemplo enviado anteriormente. Debido a que XbpGet deriva de XbpSLE, se puede ejecutar: oGet:SetData( cData ) De esta forma, anloga a Valid002( ) , se puede localizar un registro y colocar un dato en el buffer de edicin del objeto prevalidado. As, luego de colocar el cdigo de cliente (en un paso anterior) y, en su postvalidacin, encontrado su registro, se puede colocar la descripcin en un campo de slo lectura cuando ste deba ganar el foco de edicin. Si no hay observaciones, maana continuar con este tema. Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- | |
Jose Luis Otermin | Re: ABM en modo grfico - interfaz GUI on Fri, 12 Nov 2010 11:54:23 -0300 Antes de continuar con el paso anterior me interesa saber: a) Cmo posicionan los campos en pantalla? b) Usan algn mtodo para calcular posiciones? c) De dnde se sacan las descripciones? d) Alguien usa un Diccionario de Datos? Nota: Si a alguien le interesa discutir el Diccionario de Datos, por favor abra un tema nuevo. Espero las respuestas antes de seguir. Jos Luis Otermin Alaska Software Soporte Tcnico -------------------------------------------------------------------- Foros de Usuarios: news://news.alaska-software.com Pgina Web: http://www.alaska-software.com Base de Conocimientos en la Web: http://www.alaska-software.com/kbase.shtm Oficina en Europa: Fax: +49 (0) 61 96 - 77 99 99 23 Oficina en EEUU: Fax: +1 (646) 218 1281 -------------------------------------------------------------------- |