Edit in place, agregando valid. en la propiedad (Parte IV)

Código útil, tips de programación, etc.
Responder
R.Pacheco
Al nivel de RZ
Mensajes: 358
Registrado: Lun Feb 07, 2011 4:45 pm
Ubicación: Santo Domingo,Rep.Dominicana
Contactar:

Edit in place, agregando valid. en la propiedad (Parte IV)

Mensaje por R.Pacheco » Lun Mar 21, 2011 1:41 pm

Edit in place, agregando validaciones en la propiedad Globales (Parte IV)

En este post vamos a comenzar a colocarles las validaciones a nuestro sistema de facturación en la propiedad globales.

Validaciones en Propiedades Globales
Quizás usted se pregunte, porque hacer validaciones en la propiedades globales, muy pocos programadores en clarión le gusta hacerlas o desconocen que se pueden hacer ahí, pero es un asunto de criterio o yo diría de facilidad o comodidad para lograr algo más fácil, en lo personal a mi me gusta más hacerla ahí, pero también va a despender de lo que usted vaya hacer, aunque quiero dejar bien claro que hay varias formas o puntos de cómo hacer las validaciones.
Entres las validaciones que vamos ponerles a nuestro sistema están:
1) Validar código de producto, esto es para evitar repeticiones de ítem o renglones en el detalleFactura.
2) Validar la cantidad de venta, esto es para evitar que la cantidad entre en cero en el detalleFactura.
3) Validar existencia o stock, esto es para saber cuando la existencia se esta agotó o llego a su terminación.
4) Validar el Reorden, esto es para notificar al usuario que la existencia se está agotando.
5) Validar cantidad para la venta contra Existencia actual, esto es para evitar que se facturé mayor cantidad de la que hay disponible en existencia.
6) Validar rebaja o Inventario, esta sirve para ir rebajando de los inventarios
la existencia actual.
7) Validación código de cliente, para forzar al usuario a seleccionar un cliente.

Agregando las validaciones
Para comenzar a poner nuestra validación en la propiedad global, presionamos el icono verde o globito en el menú de clarión, luego sale la ventana de propiedades global, así como se muestra en la imagen.
Imagen
Como se observa en la imagen, ahí tenemos el globito verde y la ventana global porperties, para colocar los códigos de validaciones, entonces presionamos el botón embeds, sería Incrustar, desde aqui se observan varios puntos de embidos, no se desesperé y tómelo al paso, si es necesario relajase un poquito.

Validando el código de clientes
Nuestra primera validación que vamos hacer es validar el código del cliente, con el objetivo de forzar al usuario a seleccionar un código de clientes en la elaboración de una factura, con esto evitamos que entren código de cliente huérfanos en nuestro sistema de factura.
Váyase a la propiedad global, botón embeds, desde ahí verá el árbol con todos los puntos como se muestra en la siguiente imagen.
Imagen
Cuando entremos al árbol vamos a ver varios puntos. Ahora lo que debemos hacer es ubicar el punto exacto para hacer la validación del código del cliente.
Para validar campo de una tabla, en la propiedad global, debemos seleccionar el punto Field level validation, esto quiere decir, validación de campo de nivel, luego procedemos a ubicar primeramente la tabla donde está el campo que se desea validar,
Hay que tener en cuenta en la propiedades globales el campo a validar, ya que si usted valida el código del cliente de la tabla cliente, este se va a validar en todos los procedimiento donde intervenga la tabla del cliente. El código que vamos a validar en este caso es el de la tabla factura. Ahora ubicamos en el Fiel level Validation tabla factura y seleccionamos el campo código de cliente, y ahí colocamos el siguiente código.

Código: Seleccionar todo

Validar Código de Cliente
if FAC:CodigoClientes = '0' Then
    Message('Cliente no fue selecionado','Aviso de error',ICON:Question)
  Select(FAC:CodigoClientes)
 Return Level:Notify
 END
Ubicación de los punto para hacer validaciones Globales
A nuestro mantenimiento de factura le vamos ahora agregar validaciones, para eso debemos ubicar los puntos exactos donde se deben colocar dichas validaciones globales, entonces entramos a propiedad globales, embeds, luego seleccionamos global Objet, con
muchos cuidado comenzamos a buscar la tabla donde vamos a colocar la validación, en mi caso seleciono la parte que dice: File Manager for DetalleFactura(Filemanager)
así como se muestra en la imagen, busco el punto exacto con mucho cuidado.
Imagen
Ahora luego de tener ubicada la tabla a la que les vamos a poner las validaciones, procedemos a buscar el punto de exacto a donde va el código, tiene que tener muchos tacto o cuidado para la ubicación de este punto para evitar cometer errores, muévase con la teclas de flechas hacia abajo hasta ubicar este punto llamado InsertPROCEDURE(); byte, Virtual, Ahora vamos a colocar nuestra primera validación a nuestro sistema de facturación
Agregando un campo IdFactura
Este campo sirve para evitar que se repitan ítem o renglones en el detalleFactura,
si un usuario trata de introducir dos veces un mismo código de producto en el detalle el sistema notifica con un aviso que hubo una duplicación, en la tabla detalle Factura cree un campo llamado IdFactura tipo String 25 longitud, entonces formo la combinaciones o la formula DET:IdFctura=DET:NumeroFactura &DET:CodigoProducto, ósea cada vez que se hace una factura se crea este Id o Código. Las validaciones muchas veces la hacemos en los procedimientos de entrada de datos. Ahora buscamos el punto donde va este código
así como se muestra en la siguiente imagen, ubicamos InsertPROCEDURE(); byte, Virtual

Imagen

Nota importante, tiene que tener en cuenta no salirse del Manager for DetalleFactura(Filemanager), hay un punto o embed de esto para cada tabla.
colocamos nuestro código ante del parent, en punto InsertPROCEDURE(); byte, Virtual,
En este mismo punto colocaremos todas la validaciones de entrada en la tabla detalleFactura.

Código: Seleccionar todo

¡Código para evitar repeticiones en el detalleFactura  
DET:IdFctura=DET:NumeroFactura &DET:CodigoProducto Get(DetalleFactura,DET:IdFatuKey)
IF NOT ERRORCODE() !THEN STOP(ERROR()) END
 Message('ESTE PRODUCTO YA FUE  REGISTRADO','AVISO DE DUPLICACION',ICON:HAND)
 Return Level:Notify
 End
Validando el campo cantidad
Ahora vamos agregar otra validación a nuestro sistema de facturación, queremos evitar que el usuario introduzca o grave en el detalle de factura con cantidades en cero, para esto
ponemos este código, en mismo punto que se colocó el anterior.

Código: Seleccionar todo

!Validar Cantidad, para evitar  que haya cantidad cero en el  detalleFactura
If DET:Cantidad = '0' Then
   BEEP(BEEP:SystemExclamation) ; YIELD()
   Message('Cantidad no puede ser 0','Aviso en Detalle',ICON:Exclamation)           
  Select(DET:CodigoProducto)
 Return Level:Notify 
 END
Validando la existencia del un producto
Queremos ahora que nuestro sistema nos lleve informado sobre la situación del del inventario de producto, cuando manejábamos sistema manuales teníamos que despender de un tarjetero o de una persona física para que nos fuera chequeando e informando sobre la existencia de los productos en el inventario, ahora ya no necesitamos nada de eso, porque nuestro sistema no puede ir informado todos los que va pasando con el inventario, el siguiente código va a validar la existencia cuando se termina, cuando la existencia llegue a 0 para el código de producto que se esté facturando, entonces el sistema da un aviso de que la existencia se agotó, este código será coloca debajo del anterior en mismo
punto.

Código: Seleccionar todo

¡Validar Existencia Final para llevar el control del inventario.
If PRO:ExistenciaFinal = 0  THEN 
   Message('La Existencia se Agoto','Aviso',ICON:Exclamation)      
   Select(DET:CodigoProducto)
   Return Level:Notify 
End
Validando El campo reorden de la tabla producto
Este campo se utiliza para poner una cantidad X de un producto con el objetivo de tener un control de la existencia del producto con el fin de ir notificando que la existencia se esta agotando, eso ayuda para ir programando la próxima compras, este código será coloca debajo del anterior en mismo

Código: Seleccionar todo

!Validando el reorden, para notificación de la exitencia.
 If PRO:ExistenciaFinal < PRO:Reorden then 
    Message('Se esta agostando la Existencia','Aviso',ICON:Exclamation)
   Return Level:Notify
End
!Validar Cantidad de Ventas VS ExistenciaFinal o actual
Ahora vamos validar la cantidad a de venta contra la existenciaFinal, actual o minima como usted la llame, con el objetivo de evitar que se vaya a facturar una cantidad mayor a la existencia actual, si el usuario introduce una cantidad mayor a la que hay en el inventario el sistema le a tirar un mensaje de aviso, este código será coloca debajo del anterior.
!Validar cantidad de Ventas contra ExistenciaFinal, para evitar que se facturé una cantidad mayor a la que existe en la existencia

Código: Seleccionar todo

IF DET:Cantidad > PRO:ExistenciaFinal then
   Message('Cantindad No Puede ser Mayor a Existencia','Aviso',ICON:Exclamation)
  Select(DET:CodigoProducto)
   Return Level:Notify 
End
Validando el mantenimiento rebaja del Inventario o stock
Ahora vamos a poner nuestra ultima validación en sistema de facturación, es el mantenimiento de de rebaja del inventario, cada vez que el usuario factura un producto este se rebaja de la existencia actual de inventario, este codigo será coloca debajo del anterior.

Código: Seleccionar todo

!Validar el mantenimiento rebaja del stock
 PRO:Codigo=DET:CodigoProducto Access:Producto.FETCH(PRO:PorCodigoProductoKey)
 PRO:ExistenciaFinal-=DET:Cantidad
 Access:Producto.UPdate()
Todos los código deben estar en un mismo punto, según el orden así como se vez en la siguiente imagen.
Imagen
Desactivando la opción Change o Modificar
En aplicaciones edit in place yo lo que hago es que desactivo la opción change, este punto
yo no lo he podido hacer a la perfección en la propiedad globales, entones en vista de que debemos tener en cuenta el control de inventario mientra se van realizando factura esta opción no da datos reales en la existencia cuando la aplico, por que para implementarla hay que hacer una serie de formulas y pasos que lo que hacen es distorsionar la realidad de la existencia rea de el inventario, por tanto lo que hago es desactivar esta opción y se hace desde el init de la ventana de Factura, en el punto, setting up Browse toolbar control on Nombre de la tabla, en este caso sería detallefactura, como se muestra en la imagen.
Imagen
En este punto colocamos este código

Código: Seleccionar todo

!DESACTIVAR CONTROLES  Change
If Self.Request = 2 
BRW7.ChangeControl=FALSE
DISABLE(?CHANGE)
Hide(?CHANGE)
End
 Display
Borrado de Registro en el Edith in place
Ahora vamos hacer el borrado desde la propiedad globales, pero ante quiero aclarar algo muy importante, como desactivamos la opción changue de la ventana factura, si un usuario mientras hace una factura comete un error ya sea que quiera poner mayor o menor cantidad en la facturación de un producto, le recomiendo que borre el registro y lo vuelva hacer, si hace esto la cantidad borrada retorna al inventario tal como estaba ante del error o de la decisión del cambio, en poca palabra en vez de usted hacer un change en el detallefactura hará un borrado de registro.

Ubicación del punto para hacer el borrado en la validaciones Globales
A nuestro mantenimiento de factura le vamos ahora agregar la opción de borrado de registro, para eso debemos ubicar el puntos exactos donde se debe colocar el código en la propiedades globales, entonces entramos a propiedad globales, embeds, luego seleccionamos global Objet, con muchos cuidado comenzamos a buscar la tabla donde vamos a colocar el borrado, en este caso seleccionamos la parte que dice: File Manager for DetalleFactura(Filemanager) así como se muestra en la imagen.
Imagen
Así como se observa en la imagen, usted debe colocar el código para el borrado, debe tener mucho cuidado de no colocar el código en el punto equivocado, ya que hay dos opciones de delete, debe estar en el que dice DeleteRecordProcedure(Byte Querry=1), virtual, ante del parent, aquí coloque este código.

Código: Seleccionar todo

!Para borrado de Registros
PRO:Codigo=DET:CodigoProducto
Access:Producto.FETCH(PRO:PorCodigoProductoKey)
PRO:ExistenciaFinal+=DET:Cantidad
Access:Producto.UPdate()
Continuará
Hasta aquí he terminado esta parte voy a continuar agregándoles algunos controles y otros truquitos a nuestra aplicación Edit in place.
En nuestro próximo post voy a crear un contador de renglones o item en el detallefactura y voy a crear un reporte media carta en una misma página 8 ½ X 11.
Ing. R. Pacheco
Analista Programador
Pachecoramon@hotmail.com, Skype:pachecoramon
Santo Domingo, Rep. Dominicana
CRISTO DIJO: "Yo soy el camino, y la verdad,y la vida; nadie viene al Padre, sino por mí". S. Juan 14:6


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado