Foi criada uma rotina com o intuito de realizar consultas nos lançamentos orçamentários (tabela AKD).
O objetivo dessa rotina é padronizar e otimizar o desenvolvimento de relatórios gerenciais no módulo SIGAPCO (planejamento e controle orçamentário).
As consultadas na tabela AKD serão realizadas utilizando os filtros recebidos por parâmetro.
Esses filtros podem ser passados em formato de intervalo (range de valores de/até) ou por visão gerencial orçamentária previamente cadastrada (PCOA170).
O retorno esperado é um arquivo temporário com todos os registros retornados pela consulta na tabela de lançamentos (AKD).
Lista de parâmetros disponíveis na função PCGerPlan():
| Parâmetro | Tipo | Obrigatório | Obrigatório Por Visão | Descrição |
|---|---|---|---|---|
| oMeter | Objeto | Objeto de controle da régua | ||
| oText | Objeto | Objeto de controle da régua | ||
| oDlg | Objeto | Janela da régua | ||
| lEnd | Lógico | Controle finalizar da régua | ||
| cArqtmp | Caracter | Sim | Sim | Alias em que será montado o arquivo temporário |
| cMoeda | Caracter | Sim | Sim | Moeda referência para o relatório |
| lPorVisao | Lógico | Sim | Sim | Define se o relatório será gerado por visão o por parâmetros |
| cCodVisao | Caracter | Sim | Código da visão gerêncial para filtro da tabela AKD | |
| dDataIni | Data | Sim | Sim | Data inicial para filtro dos movimentos |
| dDataFim | Data | Sim | Sim | Data final para filtro dos movimentos |
| aFiltros | Array | Sim | Array com range de filtros para query | |
aFiltAd | Array | Array com filtros de entidades adicionais |
Importante: O intervalo máximo que poderá ser utilizado nos parâmetros de data inicial e data final (dDataIni e dDataFim) é de um ano |
A variável lPorVisao deve ser declarada como .F. - Falso.
Os intervalos para filtro devem ser passados pelo array aFiltros da seguinte forma:
| Posição do Array | Tipo | Conteúdo |
|---|---|---|
| aFiltros[01] | C | Conta Orçamentária De |
| aFiltros[02] | C | Conta Orçamentária Até |
| aFiltros[03] | C | Classe Orçamentária De |
| aFiltros[04] | C | Classe Orçamentária Até |
| aFiltros[05] | C | Tipo de Saldo |
| aFiltros[06] | C | Centro de Custo De |
| aFiltros[07] | C | Centro de Custo Até |
| aFiltros[08] | C | Item De |
| aFiltros[09] | C | Item Até |
| aFiltros[10] | C | Classe de Valor De |
| aFiltros[11] | C | Classe de Valor Até |
O Array de filtros de entidades adicionais aFiltAd, deve ser passado na ordem das entidades.
Exemplo de array montado com 5 entidades adicionais:
| Posição do Array | Tipo | Conteúdo |
|---|---|---|
| aFiltAd[01] | C | Entidade adicional 01 De |
| aFiltAd[02] | C | Entidade adicional 01 Até |
| aFiltAd[03] | C | Entidade adicional 02 De |
| aFiltAd[04] | C | Entidade adicional 02 Até |
| aFiltAd[05] | C | Entidade adicional 03 De |
| aFiltAd[06] | C | Entidade adicional 03 Até |
| aFiltAd[07] | C | Entidade adicional 04 De |
| aFiltAd[08] | C | Entidade adicional 04 Até |
| aFiltAd[09] | C | Entidade adicional 05 De |
| aFiltAd[10] | C | Entidade adicional 05 Até |
Importante: mesmo seja necessário fazer o filtro somente na entidade 05, por exemplo, o array deve ser passado completo. |
Local cTblName := "" //Nome do arquivo temporário no banco de dados
Local cArqTmp := GetNextAlias()
Local cMoeda := "01"
Local lPorVisao := .F.
Local dDataIni := STOD("20190101")
Local dDataFim := STOD("20191231")
Local aFiltros := { " ","ZZZZZZZ",; //Conta Orçamentária De / Até
" ","ZZZZZZZ",; //Classe Orçamentária De / Até
" ",; //Tipo de Saldo
" ","ZZZZZZZ",; //Centro de Custo De / Até
" ","ZZZZZZZ",; //Item De / Até
" ","ZZZZZZZ" } //Classe de Valor De / Até
cTblName := PCGerPlan(nil,nil,nil,nil,cArqtmp,cMoeda,lPorVisao,nil,dDataIni,dDataFim,aFiltros) |
Importante 1: É importante que as posições pré definidas sejam respeitadas, pois o programa está preparado para receber os valores nessa ordem. |
Importante 2: Não utilizar filtros genéricos como no exemplo deste documento, pois isso afetará diretamente a performance da rotina. |
A variável lPorVisao deve ser declarada como .T. - Verdadeiro
Os filtros serão feitos posicionando na visão gerencial passada por parâmetro pela variável cCodVisao.
Local cTblName := "" //Nome do arquivo temporário no banco de dados
Local cArqTmp := GetNextAlias()
Local cMoeda := "01"
Local lPorVisao := .T.
Local cCodVisao := "001" //Visão pré cadastrada na rotina PCOA170-Visão Gerencial Orçamentária
Local dDataIni := STOD("20190101")
Local dDataFim := STOD("20191231")
cTblName := PCGerPlan(nil,nil,nil,nil,cArqtmp,cMoeda,lPorVisao,cCodVisao,dDataIni,dDataFim) |
User Function ChamaXSAL()
Local cArqTmp := GetNextAlias()
Local lPorVisao := .F.
Local cCodVisao := "001"
Local cMoeda := ""
Local dDataIni := STOD("")
Local dDataFim := STOD("")
Local oMeter
Local oText
Local oDlg
Local lEnd
dDataIni := STOD("20190101")
dDataFim := STOD("20190131")
aFiltros := {" ","ZZZZZZZ",; //Conta Orçamentária De / Até
" ","ZZZZZZZ",; //Classe Orçamentária De / Até
" ",; //Tipo de Saldo
" ","ZZZZZZZ",; //Centro de Custo De / Até
" ","ZZZZZZZ",; //Item De / Até
" ","ZZZZZZZ" } //Classe de Valor De / Até
aFiltAd := {" ","ZZZZZZZ",; //Entidade adicional 01 De / Até
" ","ZZZZZZZ",; //Entidade adicional 02 De / Até
" ","ZZZZZZZ",; //Entidade adicional 03 De / Até
" ","ZZZZZZZ",; //Entidade adicional 04 De / Até
" ","ZZZZZZZ" } //Entidade adicional 05 De / Até
//A função pode ser chamada com ou sem régua de processamento MsgMeter()
//Neste exemplo estamos utilizando
If (Aviso("Atenção","Como quer executar a rotina?",{"Parâmetro","Visão"},1)==1)
//Método por parâmetro
//A variável cCodVisão não será considerada
//Serão utilizados os arrays de filtro
lPorVisao := .F.
MsgMeter({| oMeter, oText, oDlg, lEnd |;
PCGerPlan(oMeter,oText,oDlg,lEnd,cArqtmp,cMoeda,lPorVisao,cCodVisao,dDataIni,dDataFim,aFiltros,aFiltAd);
},"Processando dados...","Aguarde")
Else
//Método por visão
//A variável cCodVisão será considerada
//Os arrays de filtro serão desconsiderados
lPorVisao := .T.
MsgMeter({| oMeter, oText, oDlg, lEnd |;
PCGerPlan(oMeter,oText,oDlg,lEnd,cArqtmp,cMoeda,lPorVisao,cCodVisao,dDataIni,dDataFim,aFiltros,aFiltAd);
},"Processando dados...","Aguarde")
EndIf
//Exibe em tela a quantidade de registros inseridos no arquivo de trabalho
If (cArqTmp)->(Select()) > 0
Aviso("Atenção",cValToChar((cArqTmp)->(RecCount()))+" registros inseridos na tabela temporária",{"Ok"},1)
(cArqTmp)->(dbCloseArea())
EndIf
Return |

<!-- esconder o menu -->
<style>
div.theme-default .ia-splitter #main {
margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
display: none;
}
#main {
padding-left: 10px;
padding-right: 10px;
overflow-x: hidden;
}
.aui-header-primary .aui-nav, .aui-page-panel {
margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
margin-left: 0px !important;
}
</style>
|