by Mike Serra » Wed May 25, 2016 8:53 am
Buenos días aferra:
No he probado nunca, pero intenta esto:
oFrPrn:SetUserDataset(<Recordset>,<Cadena de caracteres separados por comas con los nombre de los campos>,<bloque de código para ir al principio>,<bloque de código para incrementar uno>,<bloque de código para disminuir uno>,<bloque de código para obtener el valor del campo>)
Te pongo un ejemplo con un array de datos. Imaginate un array (aVentas) de 2 columnas con nombre de cliente y total de ventas:
{
{"CLIENTE 1",1000},
{"CLIENTE 2",500},
{"CLIENTE 3",250}
}
Yo lo uso asi:
local aNombreCampos:{"NombreCliente","TotalVentas"}
oFrnPrn:SetUserDataset(aVentas,"NombreCliente;TotalVentas",{||i:=1},{||i:=i+1},{||i:=i-1},{||i > len(aVentas)},{|cField| xx:=frGetValue(cField,aNombreCampos), aVentas[i,xx]})
Código de FrGetValue:
Cometido: devolver la posición de cada campo, es decir:
Si es NombreCliente -> devolverá 1
Si es TotalVentas-> devolverá 2
function frGetValue(cField,aFrItems)
local nPos:=0
nPos:=ascan(aFrItems,{|v| upper(alltrim(v))=upper(alltrim(cField))})
if nPos=0
nPos:=1
end if
return nPos
Fundamentalmente seria sustituir lo que te he indicado por los bloques de código de movimiento del recordset y como el recordset obtiene el valor de los campos.
Un Saludo,