Configurar o IDSV para trazer uma coluna calculada com a média ponderada

Data de postagem: Jul 07, 2010 5:54:5 AM

As colunas do IDSV possuem a propriedade simpleLayoutAggregate, que indica seu uso para agregação. Elas possuem também a propriedade simpleLayoutWeight, na qual pode ser informada uma coluna de pesos para calculo da média ponderada.

Segue abaixo um exemplo:

No IDS:

{

includes: [

-1897036629 /* /products/INTEQengine/library/iquery/IQuery.ijs */

],

help: "Help do DataSource",

availableFilters: [

{classKey: -2008879000 /* Pedidos ou Provisões */, prefix: "PED"}

],

availableColumns: [

{classKey: -2008879000 /* Pedidos ou Provisões */, prefix: "PED" }

],

onCreate: function Exemplo001_onCreate(dataSource) {

var flt = dataSource.filters.filter("PED_EMISSAO_START")

flt.help = "Data de Emissão Inicial"

var flt = dataSource.filters.filter("PED_EMISSAO_END")

flt.help = "Data de Emissão Final"

},

onGetQuery: function Exemplo001_onGetQuery(dataSource, filters, columns) {

var flts = filters.getIQueryFilters( "PED_*", "and" )

var cols = columns.getIQueryColumns( "PED_*" )

var iquery = IQuery.from( -2008879000 /* Pedidos ou Provisões */ )

.where(flts)

.column(cols)

return iquery.toSql()

},

//Método opcional usado para alterar o o DataSet gerado pelo SQL do onGetQuery

//Neste caso específico, o DataSet gerado pelo SQL do onGetQuery está sendo

//totalmente ignorado, sendo retornado outro DataSet.

onMountDataSet: function Exemplo001_onMountDataSet(dataSource, ds) {

ds = new DataSet()

ds.createField( "PED_RECURSO_NOME", "string", 20 )

ds.createField( "PED_QUANTIDADE", "number" )

ds.createField( "PED_UNITARIO", "number" )

ds.create()

ds.append()

ds.ped_recurso_nome = "Prod A"

ds.ped_quantidade = 2

ds.ped_unitario = 10

ds.post()

ds.append()

ds.ped_recurso_nome = "Prod A"

ds.ped_quantidade = 1

ds.ped_unitario = 30

ds.post()

ds.append()

ds.ped_recurso_nome = "Prod B"

ds.ped_quantidade = -1

ds.ped_unitario = 20

ds.post()

ds.append()

ds.ped_recurso_nome = "Prod B"

ds.ped_quantidade = 1

ds.ped_unitario = 20

ds.post()

ds.append()

ds.ped_recurso_nome = "Prod C"

ds.ped_quantidade = 2

ds.ped_unitario = -20

ds.post()

ds.append()

ds.ped_recurso_nome = "Prod C"

ds.ped_quantidade = 1

ds.ped_unitario = -20

ds.post()

return ds

}

}

Como podemos verificar, o IDS força o retorno do seguinte DataSet:

No IDSQ:

{

dataSourceKey: 41295126, /* /products/custom/Testes/paulorogerio/datasource/Exemplo 001.ids */

filters: [

{name: "PED_EMISSAO_START"},

{name: "PED_EMISSAO_END"}

],

columns: [

{name: "PED_RECURSO.NOME"},

{name: "PED_QUANTIDADE"},

{name: "PED_UNITARIO"}

],

orderBy: "PED_RECURSO.NOME"

}

No IDSV:

{

dataSourceQueryKey: 41294976, /* /.../datasource/Exemplo 006 - Media Ponderada no IDSV.idsq */

type: "simpleLayout",

filters: [

{name: "PED_EMISSAO_START", label: "Inicial", group: "Emissão"},

{name: "PED_EMISSAO_END", column: 1, label: "Final", group: "Emissão"}

],

columns: [

{name: "PED_RECURSO.NOME", label: "Recurso", useToGroup: true},

{name: "PED_UNITARIO", label: "Valor. Medio",

simpleLayoutAggregate: "avg", simpleLayoutWeight: "PED_QUANTIDADE"}

]

}

O resultado destes códigos é o seguinte relatório:

É possível também gerar o mesmo relatório em forma de árvore. Para isso basta fazer uso da propriedade groupExpansionLevel. Vide o exemplo do IDSV abaixo:

{

dataSourceQueryKey: 41294976, /* /.../datasource/Exemplo 006 - Media Ponderada no IDSV.idsq */

type: "simpleLayout",

groupExpansionLevel: 3,

filters: [

{name: "PED_EMISSAO_START", label: "Inicial", group: "Emissão"},

{name: "PED_EMISSAO_END", column: 1, label: "Final", group: "Emissão"}

],

columns: [

{name: "PED_RECURSO.NOME", label: "Recurso", useToGroup: true},

{name: "PED_UNITARIO", label: "Valor. Medio",

simpleLayoutAggregate: "avg", simpleLayoutWeight: "PED_QUANTIDADE"}

]

}

O resultado é o seguinte relatório: