Edit in place, reporte media carta (Parte V)

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

Edit in place, reporte media carta (Parte V)

Mensaje por R.Pacheco » Mar Mar 29, 2011 5:59 pm

Edit in place, agregando contador de renglones o items y reporte media carta (Parte V)

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.
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.
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.
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)
.Ahora usted puede compilar su aplicación y verá que mientra va agregando renglones o ítems su contador se va refrescando.

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.
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
Nota importante
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.
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.
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
Si usted ha seguido los pasos tal como lo he ido describiendo entoces los puntos deben haberles quedados tal como se obeserva en la imgen.
Imagen
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.
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.
Este código lo podemos aplicar a cuantas tablas deseamos, y nos dará como resultado algo así como se observa en la imagen.

Imagen

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
Ing. R. Pacheco
Analista Programador
Pachecoramon@hotmail.com, Skype:pachecoramon
Santo Domingo, Rep. Dominicana
Para cualquier consulta rápida: hacerla por WhatApp al 1 347-6159 US


EstebanTrajtenberg
Ayudante de Santa
Mensajes: 62
Registrado: Mar Feb 15, 2011 10:57 am
Contactar:

Re: Edit in place, reporte media carta (Parte V)

Mensaje por EstebanTrajtenberg » Lun Abr 04, 2011 11:06 am

Excelente !!!

claudio
Novato
Mensajes: 14
Registrado: Mar Feb 08, 2011 4:09 am
Contactar:

Re: Edit in place, reporte media carta (Parte V)

Mensaje por claudio » Vie Abr 29, 2011 3:39 pm

Sos un maestro.. je
Un Abrazo

anibalponce
Novato
Mensajes: 25
Registrado: Mar May 10, 2011 5:20 pm
Contactar:

Re: Edit in place, reporte media carta (Parte V)

Mensaje por anibalponce » Mar Jul 19, 2011 3:52 pm

Muy bueno!!, gracias
Ya lo adapte para usarlo.
Saludos

Anibal

R.Pacheco
Al nivel de RZ
Mensajes: 367
Registrado: Lun Feb 07, 2011 4:45 pm
Ubicación: Santo Domingo,Rep.Dominicana
Contactar:

Re: Edit in place, reporte media carta (Parte V)

Mensaje por R.Pacheco » Mié Jul 20, 2011 11:44 am

Muchas gracia mi hermano
Eso me hacer sentir muy bien,
ya que el objetivo final es que les
sirva de apoyos a todos los colegas y a los
principiantes en clarion.
Ing. R. Pacheco
Analista Programador
Pachecoramon@hotmail.com, Skype:pachecoramon
Santo Domingo, Rep. Dominicana
Para cualquier consulta rápida: hacerla por WhatApp al 1 347-6159 US

Lu2014
Mensajes: 6
Registrado: Mié Jun 25, 2014 2:10 pm
Contactar:

Re: Edit in place, reporte media carta (Parte V)

Mensaje por Lu2014 » Mié Oct 01, 2014 11:05 pm

Hola, implemente el codigo para imprimir el reporte media carta, pero resulta que no me imprime ningun dato, y es logico porque al cambiar la propiedad File (donde filtraba el registro para que coincidiera con una variable global que es la que identifica la factura que quiero imprimir) por Memory, ya no estoy asignando ningún registro al reporte que se genera.
Entiendo que me estaria faltando el codigo necesario para asignar la factura al reporte, pero no encuentro como.

Agradeceré a quien me pueda ayudar. Saludos !!


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 22 invitados