Fontes de dados

Como fazer uso delas e otimizar a performance de seus artefatos



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.

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:

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: