Fontes de dados



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?!

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.

 

Como fazer uso delas e otimizar a performance de seus artefatos

Clique na fonte de dados que deseja e conheça os detalhes de como utilizá-la.

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:

Dica!

Uma recomendação especial, é a utilização de maior números de filtros possíveis para as fontes mencionadas.
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.