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: