Skip to main content

Consultas SQL sobre tablas temporales


En ocasiones se necesita mostrar la información de las líneas de albaranes o facturas agrupada u ordenada por algún criterio que exige utilizar una sentencia SQL.

Si utilizamos como ejemplo el formato de facturas de venta (ffv) la forma más efectiva (o sea, de ejecución más rápida) y sencilla sería utilizar el mismo fichero Lineas que se pasa al generar el informe. Sin embargo hay un pequeño problema : el nombre de la tabla es cambiante (es una tabla vitual y su nombre debe cambiar cada vez que se emite una factura).

Por ejemplo, una sentencia como la siguiente no funcionaría :

Select *
From Lineas_2883771
Where NroOperacion=:NroOperacion
Order By Cantidad
 
El nombre de la tabla de Lineas puede que sea ese durante la sesión de trabajo actual, pero cambiará la próxima vez que se ejecute el informe (error asegurado).

Una forma se evitar este problema es utilizar código. Se podría, por ejemplo, utilizar el evento OnStartReport para hacer algo parecido a esto :

procedure Report1OnStartReport(Sender: TfrxComponent);
begin
Consulta.SQL.Strings[ 1 ] := 'From ' + Lineas.TableName;
end

De esta forma la segunda línea de la sentencia SQL se modifica cada vez que se ejecuta el informe, poniendo en su lugar el nombre de tabla correcto. Aunque es factible es algo engorroso. Si se modifica la sentencia se tiene que ajustar el código y, además, siempre es poco legible utilizar código para estas tareas.

En la versión 10.3 se ha introducido una solución más adecuada. Se pueden utilizar expresiones en las sentencias SQL. Basta con enmarcarlas entre corchetes cuadrados para que antes de utilizarse la sentencia se sustituyan por sus valores. Por ejemplo :

Select *
From [Lineas.TableName]
Where NroOperacion=:NroOperacion
Order By Cantidad

Cuando se ejecute la sentencia se sustituirá [Lineas.Tablename] por su valor (por ejemplo Lineas_726355). Esta solución es más efectiva, y permite otros usos además del indicado. Las expresiones pueden ser de cualquier tipo, y se puede utilizar cualquier variable o campo que exista en el informe. Incluso fórmulas y funciones.

  • Actualizado el .