Dentre o roll de fontes de dados disponibilizadas pelo sistema Contábil, algumas fontes possibilitam valores já computados e auxiliam fortemente a construção de relatórios e scripts, não é mesmo?!
Utilização obrigatória de Filtros das Fontes de Dados
Antes de conhecer algumas das fontes de dados do sistema Contábil, citadas abaixo, é essencial conhecer também como utilizá-las. Para melhor performance na construção dos artefatos e na busca rápida de informações provenientes das fontes de dados, é primordial que você utilize os Filtros da respectiva fonte.
Assim, a partir do dia 30/04/2022, para a utilização da fonte de dados movimentacaoBalanceteMensalDespesa será obrigatório seu uso. Isso porque sem eles, a performance da fonte fica extremamente comprometida durante a execução de outros artefatos que fazem seu uso.
Quais filtros serão obrigatórios?
- despesa.id
- entidade.id
- exercicio.ano
A partir do momento que é utilizado nos artefatos, como critério de busca, a despesa.id, será obrigatório o uso dos demais critérios: entidade e exercício.
Para aqueles que já utilizam os filtros na construção de seus artefatos, não serão necessárias alterações, pois assumiram as recomendações repassadas no início com as liberações das fontes de dados. Mas, para os que ainda não fazem seu uso, esses deverão adequar seus artefatos e tonar tal processo uma boa prática na construção de novos. |
Assim, uma recomendação especial, é a utilização de maior números de filtros possíveis para as fontes mencionadas.
Vale lembrar, por exemplo, que o campo id no Contábil são únicos. Para tanto, ressaltamos novamente que 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.
Conheça outras fontes de dados do sistema Contábil!
- 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)