Crear un reporte script

En este ejemplo, crearemos un pequeño reporte de tipo script para ver las características de este sistema.

Primero agregar un nuevo reporte de las opciones, seleccionar el tipo de script y presionar configura para ver el editor. Recordáis cuando agregáis el nuevo reporte de configurar todos los parámetros para poder verlos correctamente.

--create filter interface
filtertable.clear()

filtertable.addcategoryrow("Date")
filtertable.adddaterow("START","Start")
filtertable.adddaterow("END","End")
filtertable.addsubtablerow("CUSTOMER","Customers","customers","")

--create report grid
reporttable.clearcolumns()
reporttable.clearrows()
reporttable.adddatecolumn("date","Date",150,true)
reporttable.addtextcolumn("customer","Customer",200,true)

En primer lugar, dentro del script de interfaz, insertamos todos los comandos para crear los filtros de búsqueda y las columnas que se usarán para mostrar los datos.

Las siguientes líneas, por otro lado, se insertarán en el script de procesamiento. Si bien el script de interfaz se inicia solo una vez, el script de procesamiento se realiza cada vez que presionamos el botón Elabora.

startdate = filtertable.getvalue("START")
enddate   = filtertable.getvalue("END")

-- I do a basic search on a range of dates
iday = tostring(utility.dateday(startdate))
imonth   = tostring(utility.datemonth(startdate))
iyear   = tostring(utility.dateyear(startdate))

fday = utility.dateday(enddate)
fmonth   = utility.datemonth(enddate)
fyear   = utility.dateyear(endadate)

Come prima cosa recupero i valori di data dalla tabella dei filtri e li preparo per essere utilizzati all’interno della ricerca.

sql = "SELECT * FROM invoices WHERE eli=0 AND year(date) >=" .. iyear .. " AND month(date) >=" .. imonth .. " AND day(date) >=" .. iday
sql = sql .. " AND year(date) <=" .. fyear .. " AND month(date) <=" .. fmonth .. " AND day(date) <=" .. fday 

-- I recover the remaining filters
rowcustomer = filtertable.getvalue("CUSTOMER")
if rowcustomer ~= nil then 
    sql = sql .. " AND gguid_name='" .. rowcustomer.getvalue("gguid") .. "'"
end

Preparamos la cadena sql para realizar la búsqueda comprobando si un cliente ha sido seleccionado de la tabla de filtros. En caso afirmativo, lo agregamos a la cadena sql para la búsqueda.

reporttable.clearrows()

table_rows= database.getsql(sql)
rows   = table_rows.getrows()
for i   = 1,table_rows.countrows() do
    --output.print(rows[i].getvalue("date"))
    row = reporttable.adddatarow()
    row.setvalue("date",rows[i].getvalue("date"))
    row.setvalue("customer",rows[i].getvalue("name"))
end

Realizamos la búsqueda y comenzamos a compilar la tabla de reporte con los valores encontrados.