Fontes de dados
Como fazer uso delas e otimizar a performance de seus artefatos
Então prepare-se! Elaboramos algumas dicas de como deixar a construção dos seus artefatos com uma melhor performance ao fazer uso dessas fontes.
Clique na fonte de dados que deseja e conheça os detalhes de como utilizá-la.
- Fonte Balancete Mensal de Recursos (balanceteMensalRecuso)
As fontes de dados que proporcionam uma visão mensal funcionam melhor quando os dados são solicitados por mês. O exemplo abaixo, mostra como fazer essa paginação (quebra) mensalmente.
def fields = “mes, enquadramento, valorArrecadacaoOrcamentaria, valorArrecadacaoExtraorcamentaria”
def filter = “exercicio.ano = 2020”
def count = 0
// def range = 1..4
// def range = 1..6
def range = 1..12 // criamos um range de meses, podendo ser o ano todo ou um intervalo fixo
for(mes in range){
def fonteBalanceteMensalRecurso = Dados.contabilidade.v1.balanceteMensalRecurso.busca(
campos : fields,
criterio : filter.concat(” and mes = $mes”)) // resultado : exercicio.ano = 2020 and mes = 1
for(i in fonteBalanceteMensalRecurso){
count++
}
}
imprimir “Quantidade de Registros : $count”
A implementação demonstrada, funcionaria da mesma forma para as seguintes fontes:
- Balancete mensal de disponibilidades (balanceteMensalDisponibilidade);
- Balancete mensal da despesa (movimentacaoBalanceteMensalDespesa);
- Balancete mensal da receita (movimentacaoBalanceteMensalReceita).
- Fonte Movimentações dos empenhos/restos (movimentacaoContabilEmpenho)
Algumas fontes de movimentação tem uma visão diária dela, a qual apresenta os valores computados por dia e por isso, o modo de paginar (quebrar) os dados fica diferente.
Abaixo, um modelo de quebra por mês é apresentado, porém é utilizado a data inicial do mês e data final do mesmo. Foram criadas algumas funções que auxiliarão na identificação destas datas.
def ultimoDiaMes(param){ // função para pegar o último dia do mês informado no parâmetro
mes = Integer.valueOf(String.valueOf(param.mes))
ano = Integer.valueOf(String.valueOf(param.ano))
if(mes == 12){
ultimoDia = Datas.data(ano,mes,31)
}else{
ultimoDia = (Datas.data(ano,(mes+1),1) – 1.dia)
}
return ultimoDia
}
def getPageDate(param){ // função responsável por gerar a data inicial e final dos meses
def range = []
for(mes in param.meses){
range.add([
mes : mes,
dtIni : Datas.data(param.exercicio,mes,1),
dtFim : ultimoDiaMes(mes : mes , ano : param.exercicio)
]);
}
return range
}
dtEmpenho = Datas.data(2020,11,10) // essa seria a data do empenho
def intervalDate = getPageDate(meses:1..(dtEmpenho.mes),exercicio : 2020)
imprimir intervalDate
count = 0
for(mes in intervalDate){
def between = ” and dataMovimentacao >= ${mes.dtIni.formatar(‘yyyy-MM-dd’)}”
between += “and dataMovimentacao <= ${(mes.mes == dtEmpenho.mes) ? dtEmpenho.formatar(‘yyyy-MM-dd’) : mes.dtFim.formatar(‘yyyy-MM-dd’)}”
fonteMovEmpenho = Dados.contabilidade.v1.movimentacaoContabilEmpenho
camposMovEmpenho = “empenho(id,data),empenho.despesa.id,valorEmpenhadoBruto,valorEmpenhadoAnulado”
criterioMovEmpenho = “tipoRegistro = ‘EMPENHO’ and despesa.id = 62812 and empenho.numero < 2437 and entidade.id = 239 and exercicio.ano = 2020”
imprimir criterioMovEmpenho.concat(between)
fonteMovEmpenho = fonteMovEmpenho.busca(campos: camposMovEmpenho, criterio: criterioMovEmpenho.concat(between))
for(i in fonteMovEmpenho){
count++
}
}
imprimir “Registros : $count”
A implementação demonstrada, funcionaria da mesma forma para as seguintes fontes:
- Fonte movimentação contábil receita (movimentacaoContabilReceita);
- Fonte movimentação contábil receita natureza (movimentacaoContabilDespesaNatureza)
- Fonte movimentação contábil despesa natureza (movimentacaoContabilReceitaNatureza)
Dica!
Vale lembrar, por exemplo, que os campos id no Contábil são únicos. Para tanto, é apropriado a utilização de filtros como entidade e exercício para que os dados sejam buscados com maior velocidade. Quanto maior a restrição aplicada por meio dos filtros, maior será a celeridade para retorno das fontes.