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.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.