PDA

Ver la Versión Completa : Insertar un dato a una tabla desde fastreport 4


IVAND
07-12-2008, 15:11:34
Hola a todos

Alguno de uds. a logrado insertar un dato a una tabla desde fastreport es decir
Imaginemonos que es un informe de cuatro paginas cada vez que la pagina termina el valor que esta incluya al final de la misma debe ser insertada a una tabla

Ej. una factura tiene 4 paginas de impresion , el final se encuentra la base Imponible , el iva , base Iva cero , pues bien esos datos son los que quiero capturar y grabarlos

la segunda opcion . el objeto del reporte trae un evento que indica cuando una pagina termina pero bien como le paso del reporte a este evento los valores para insertarlos que seria lo que ando buscando ..

Gracias por su tiempo e interes a leer este pedido

hecospina
10-12-2008, 16:38:43
Hola
Ivand
Yo he insertado y modificado registros al dar la vista previa al reporte, pero no es algo que recomiende hacer ya que cada vez que se de la vista previa o impresion el sistema ejecuta el sql de insercion duplicando los registros
Si a pesar de esto te interesa te puedo dar un dato de como hacerlo

IVAND
10-12-2008, 23:11:11
Gracias por tu respuesta , si fueras tan amable en darme una idea te lo agradeceria , la otra manera que estoy intentado es leer una variable desde delphi com el metodo findobject pero me retorna el texto de este campo y seria que me retorne es el valor (en este memo hay una formula de suma)


En espera de tu respuesta te quedo muy agradecido

IVAND
14-12-2008, 21:33:06
Hola hescopina ,

Espero no te incomode pero me podrias guiar un poquito en lo de insertar un datos a una tabla desde fastreport


Gracias

hecospina
17-12-2008, 18:50:58
Hola IVAND
Que pena la demora pero he estado un poco ocupado y sin internet

Empecemos
te voy a hacer un ejemplo donde se inserta codigo, nombre y valor en una tabla

Primero debes crear la variables de los valores que deseas insertar
Desde la pestaña codigo debes adicionar las siguentes lineas


Var
codigo:string;
nombre:string;
valor:string;


esto antes del begin

Despues debes crar el ibxquery para la insercion
desde la ventana data o datos adicionas un ibxquery


insert into tabla (codigo,nombre,valor) values (:cod,:nom,:vlr)


alli con el boton parametros asignas a estos parametros el valor de las variables creadas

Por ejemplo

PARAMETRO ------- TIPO DE DATO ------- VARIABLE
COD -------------- STRING-----------------<CODIGO>
NOM--------------- STRING-----------------<NOMBRE>
VLR---------------- CURRENCY--------------<VALOR>

tercero utilizando el evento before print de una banda, en mi caso utilizo un pie de pagina o un pie de grupo, eso depende del reporte

Para asignar el evento debes hace clic en la banda y oprimir la tecla F11, aparece el inspector de objetos y alli la pestaña eventos, haces dobleclic en el beforeprint y adicionas el siguiente codigo


codigo:=memo1.value;
nombre:=memo2.value;
valor:=memo3.value;
ibxquery1.open;


Memo1, memo2 y memo3, son los memos donde se almacena los valores a ser insertados
Ibxquery1 es la instruccion de insercion creada en el segundo paso

Espero te ayude a resolver tu problema

Yo personalmente no lo utilizo por los problemas de duplicidad de datos y violacion a llaves primarias, al realizar una nueva impresion

De nuevo disculpas por la tardanza

:)

IVAND
18-12-2008, 01:55:17
Hola Hescopina , nuevamente gracias por tu tiempo , te cuento que mas o menos era lo que yo habia investigado , solo tengo una pregunta para que los datos que insertas se vean reflejados en la base despues de la impresion como le haces , ahora lo que hago es cerrar el aplicativo y ahi me muestra los cambios recien , es decir que falta un commitretaing desde el fastreport

Aqui te pongo lo que yo he echo


procedure Memo4OnBeforePrint(Sender: TfrxComponent);
begin
if Engine.FinalPass then
Begin
ibx.Close;
IBX.ParamByName('Val').Value:=Get(<frxDBDataset1."descuento">);
IBX.ExecSQL;
ibx.Open;
End;
end;



Lo que ahora no puedo es ver los datos directamente como cuando uno hace commitretaining

Nuevamente gracias por tu tiempo , felicez fiestas

hecospina
19-12-2008, 00:23:50
Hola Ivand
No sabria como hacer el commit, nunca lo he utilizado pues dentro de la aplicacion que manejo al ingresar a la ventana que requiero los datos se actualizan

Mira si depronto en la propiedad de la transaccion encuentras el commit

algo como esto
ibxquery1.query.transaction.commit;

Suerte

IVAND
27-12-2008, 00:28:49
Listo ahora ya se pueden insertar datos desde fastreport a una tabla ... en poco colocare el codigo y la explicacion para todos aquellos que algun dia la necesitaran

PepeLolo
29-12-2008, 01:17:59
Antes de nada, felicitar las fiestas a todos los miembros del club.

Este post, me parece curiosisimo por el echo de generar registros desde el propio reporte. No es por criticar lo que haces, es que no comprendo muy bien el motivo. A mi entender esta claro que lo que haces no es correcto. Hacer se puede hacer, ¿pero es lógico está forma de implementación?:rolleyes:

En 20 años en el mundo de la programación, es la primera vez que veo algo parecido.:eek:

IVAND
29-12-2008, 14:29:00
Felices fiestas y un buen año 2009 a todos de corazon

Bueno Pepelolo , pues mira en el mundo de la programacion siempre hay alguna cosa logica en mi caso muy particular es justamente la de insertar registros al imprimir un reporte caso especial las facturas , en todos mis clientes trabajamos con impresiones de facturas muy grandes y de diferentes medidas , entonces como el Sri(servicio de rentas internas del ecuador) obliga a que cada impresion de facturas tenga subtotales iva y todo lo de ley , eso lo hacia antes en un proceso aparte pero entreba en juego varios factores entre ellos el redondeo es asi que las facturas dividas en varias hojas el valor que se insertaba desde otro proceso variaba por un centavo(questines de usar 4 decimales en los subtotales y dos para el calculo del iva)
, imaginate en 30.000 impresiones en el mes , ahora lo inserto desde el reporte y los valores que tiene cada factura seran exactos a lo que se guardan en la tabla , si el cliente cambia el tamaño de la impresion no pasara nada seguira dividiendo e insertando los valores sin ningun cambio


Y feliz año 2009

PepeLolo
29-12-2008, 15:14:38
Felices fiestas y un buen año 2009 a todos de corazon

Bueno Pepelolo , pues mira en el mundo de la programacion siempre hay alguna cosa logica ..... entonces como el Sri(servicio de rentas internas del ecuador) obliga a que cada impresion de facturas tenga subtotales iva y todo lo de ley , eso lo hacia antes en un proceso aparte pero entreba en juego varios factores entre ellos el redondeo es asi que las facturas dividas en varias hojas el valor que se insertaba desde otro proceso variaba por un centavo(questines de usar 4 decimales en los subtotales y dos para el calculo del iva)

Justo le has dado, en medio de la frente, no se puede usar un número de decimales distintos en el proceso de calculo. En España sucede lo mismo con el calculo de facturas (Importe Bruto - Descuentos + Iva + Gastos financieros = Total), en todos ellos se deben aplicar el mismo número de decimales, sino el total se desvirtua. Personalmente siempre uso 4 decimales y nunca he tenido problemas con el redeondeo (en mi caso mi empresa vende productos con 6 decimales la únidad, claro que al final hablamos de miles de unidades vendidas por lo que el redondeo se deja en 4 decimales).

¿Creo entender que es un servicio de billing.?
En la empresa actual en la que trabajo, se imprimen algunos millones de facturas al mes de distintos clientes, se usan distintos programas de generación de spool (PrintNet o Press) y tampoco se ha tenido problema con los subtotales, a no ser que no se manejaran el número correcto de decimales en todos los casos.

El proceso que hacias anteriormente si es lógico.