En el post anterior en la parte IV, agregue las validaciones en la propiedad Global a nuestro sistema de facturación.
Ahora en este post voy a crear tres trucos esenciales a nuestro sistema de facturación como son:
1) Contador de renglones o de Ítems
2) Controlando la cantidad de registro en el Detallefactura
3) Reporte media Carta usando papel 8 ½ X 11
4) Crea una aplicación Demo usando una o varias tablas del sistema
Contador de renglones o Item
Ahora voy a crear un contador de renglones o de ítems en detallefactura, para hacer esto creamos en la tabla Factura un campo llamado contador Item sería un long de 3 o 5 como usted deseé, el objetivo de este contador es para controlar la cantidad de renglones o ítems en el detallefactura. Por ejemplo me explico mejor, si deseamos que nuestro detalleFactura solo tenga 10 renglones o ítems, a través de este contador podemos controlar esto.
Para lograr este contador nos vamos a la pantalla de factura ahí colocamos nuestro campo contador, así como see observa en la imagen.
Colocando la formula al contador
Ahora vamos a colocar la formula al contado, en la parte de abajo del list ponemos el campo contador, luego encima del list le damos botón derecho del Mouse y entramos a la propiedad Action, luego presionamos el botón Browse Box Behevior, luego presionamos la solapa totaling luego presionamos el botón insert para agregar la formula de nuestro contador, esto debe haber quedado así como se observa en la imagen.
Mire le voy a ser sincero, si siguió los pasos tal como lo describí de seguro su contador de renglones le funciona perfectamente, cada vez que entre cierta cantidad de registros en el detallefactura les va a sumar la cantidad de renglones o ítems, hasta qui todos esta bien.
Truquito, Refrescando el contador en runtime
Ahora realmente lo que quiero es lograr es que cada vez se introduzca un registro en el detalledfactura el contador se vaya refrescando automáticamente en run time, para lograr esto nos vamos a la la propiedad de la ventana embeds, local Objeto, EIP Manager for Browse Using? List(BrowseEIPManager), ahí empezamos a buscar el punto TakeCompletedProcedure(Byte force),Virtual, después del parent, así como se observa e la imagen.
Para a refrescar el contador colocamos el código en el browse del edit in place en el TaKeComplete 5001
Código: Seleccionar todo
FAC:Renglon = Records(Queue:Browse)
Controlando cantidad de renglones o ítems en el DetalleFactura
Ahora queremos controlar la cantidad de renglones o ítems en el detallefactura, con el objetivo de solamente permitir ciertas cantidad de registros en cada detalle de factura, más adelante usted se dará cuenta porque es muy importante hacer esto. Para lograr esto nos vamos a propiedad de la ventana factura, embed, local Objeto, luego buscamos en este punto EIP Field Manager for Browse Using?List for Field Det:CodigoProducto(EditLookupClass , luego bajamos y ubicamos el siguiente punto, TakeEvent Procedure(Unisigned Event),Bayte, Virtual. Así como se observa en la imagen.
Ahora colocamos el siguiente código después del parent, en la Pp 5001
Código: Seleccionar todo
!Controlando la cantidad de Regnlones
CASE ReturnValue
OF EditAction:None OROF EditAction:Cancel
ELSE
UPDATE(Self.Feq)
IF BRW7.Q.FAC:Contador => 5 THEN
BEEP(BEEP:SystemExclamation) ; YIELD()
Message('La factura no debe pasar de 10 renglones,| Si pasa es necesario dividala en dos facturas.', 'Aviso Facturas.', Icon:Hand)
! 'Atención!', ICON:Exclamation)
ReturnValue = EditAction:ignore
Return ReturnValue
END
END
No olvides que debe agregar el campo Contador en list del detalle de factura y debe ponerlo en modo disable.
En este ejemplo el detallefactura solamente va a soportar 5 renglones o ítems como máximo, ahora usted le pone la cantidad que más le convenga según sea su gusto, cada vez que el usuario intente ingresar mas de 5 renglones el sistema muestra un aviso, no permitiendo agregar más registros.
Reporte media Carta usando papel 8 ½ X 11
Ahora a nuestro sistema de facturación, le voy a crear uno de los temas mas tediosos y dificil de hacer, y que nos ha dado mucho trabajo poderlo implementar a algunos programadores, incluyéndome a mi, voy a crear un reporte media carta usando papel 8 ½ X 1, esto quiere decir que la factura se imprimirá dos veces en la misma hoja, para que esto nos salga bien. hay que controlar la cantidad de registros en el detallefactura, como anteriormente decía que usted se iba a darse cuenta porque es tan importante hace esto.
Ahora procedemos en la ventana factura a crear un botón para Imprimir y le pongo como nombre al reporte, reporteFactura, empiezo a diseña mi reporte. Ya dentro del reporte
que cree empiezo a borrar todas las bandas y voy a crear cuatro detail, tales como:
1) Detail para Encabezado: aquí ponemos todos lo que sea parte del encabezado
2) Detail para DetalleFactura: aquí coloco los campos del detalle de Factura
3) Detail para Totales: Aquí coloco los datos de totales
4) Detail Vacío o en Blanco: Este se queda en blanco y va a controlar la cantidad de líneas contenidas en el reporte. Ahora su reporte media carta debe haber quedado diseñado, así como se observa en la imagen.
El resultado de este reporte es que se va a imprimir dos veces en la misma página, según como usted lo haya diseñado, como vemos creamos un break por numero factura para hacer el rompimiento, ahora usted debe hacer algunos ajuste hasta que quedé a la medida
de su necesidad. Hay que crear dos campos locales en el reporte Loc:CantidadLinea, Loc:Total, y Glo:reporte este es global.
Configurando el reporte
Ahora por favor entremos a la propiedad del reporte para que configuremos algunas cositas, para que el reporte no salte a la próxima página tenemos que ponerlo en modo Memory, luego debemos poner los detalles creados como false, debe quedar tal como se
se vez en la próxima imagen.
Colocando los Códigos al reporte
Ahora le voy agregar los código al reportes, para eso nos vamos a propiedad del reporte,
embeds, Local Objet, busca el punto Process Manager(ProcedureClass) luego bajamos más abajo hasta encontrar el TaKeRecord)Procedure()Byte, Virtual, ahí colocamos el siguiente código después del parent.
Código: Seleccionar todo
! PROCESO DE IMPRESION MEDIA CARTA DWE FACTURA Y DUPLICADO EN LA MISMA HOJA
LOOP I# = 1 TO 2 BY 1 ! cantidad de copias
Loc:Total = 0
PRINT(RPT:Encabezado)
clear(Glo:Reporte)
CLEAR(DET:RECORD)
Loc:CantidadLinea= 1 !lINICIALIZANDO LINEA
!bARRIDO DE LA TABALA DETALLEFACTURA
DET:NumeroFactura = FAC:NumeroFactura SET(DET:PorNoFacturaKey,DET:PorNoFacturaKey)
LOOP UNTIL ACCESS:DetalleFactura.Next() OR DET:NumeroFactura <> FAC:NumeroFactura DET:Importe=DET:Cantidad*DET:PrecioUnitario
!CARGANDO LA TABLA PRODUCTO
PRO:Codigo = DET:CodigoProducto
Access:Producto.Fetch(PRO:PorCodigoProductoKey)
PRINT(RPT:Detalle)
Loc:CantidadLinea +=1
Loc:Total +=DET:Importeç
END!Primer
!CONTROLANDO LA CANTIDAD DE ITEMS
LOOP X# = Loc:CantidadLinea TO 10 BY 1 !Es la cantidad de items que entran como máximo
PRINT(RPT:DetalleVacio)
Loc:CantidadLinea+=1
END
PRINT(RPT:DetalleTotal)
END!LOOP
Display
Return Level:Benign !ya imprimí todo
Controlando las cantidad de líneas en el reporte
Para controlar la cantidad de línea en el reporte hacemos los mismos, propiedad del reporte,
embeds, Local Objet, ubicamos el siguiente punto, Window Manager(ReporteManager) luego bajamos un poquito y seleccionamos el punto, AskPreview(Procedure Virtual) después del parent colocamos este código:
Código: Seleccionar todo
!cantidad de línea
Loc:CantidadLinea =5
Resultado del reporte media carta
Si siguió los pasos tal como los es ido describiendo, el resultado de su reporte media carta de bebe ser así, como se vez en la imagen.
Haciendo una Aplicación Demo en una o varias tablas.
Ahora a nuestra aplicación de facturación les vamos agregar un control para hacer que sea una aplicación demo, esto quiere decir, cuando la tabla de factura llegue a x cantidad de registros nos muestre un mensaje de notificación que informe que el sistema es un Demo,
esto es sencillo de hacer, para lograrlo no vamos al browse de factura en el botón agregar factura o insert, colocamos este simple código en el Insert Control Handling, After event Handling PP 4000
Código: Seleccionar todo
!Demo aplicado a la tabla factura
IF RECORDS(Factura)> 16 THEN ! Aqui se coloca el nombre de la tabla
Message(' Este sistema se ha detenido, por que ha llegado|a la cantidad máxima de registros permitidos | por favor contacte al programador del mismo,al|Telefono (XXX) XXX-XXXX','Aviso',ICON:Question)
! MESSAGE('Demo Version')
RETURN LEVEL:FATAL
END.
Continuará
En nuestro próximo post le voy a agregar a nuestra aplicación de facturación los siguientes puntos:
1) Una Ventanita de Inicio
2) Un control de notificación de factura impresa, que nos notifique cuando una factura se ha impreso.
3) Un procedimiento de Membresía, es donde se guardan los datos del negocio
4) Las maravillas de las Vistas en Tabla Tps.
Reciban muchas bendiciones