CONTEÚDO

  1. Visão Geral
  2. Exemplo de utilização
    1. Por parâmetros
    2. Por visão gerêncial
  3. Exemplo funcional de código
  4. Fluxo de chamada das Funções


01. VISÃO GERAL

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).

02. EXEMPLO DE UTILIZAÇÃO

Lista de parâmetros disponíveis na função PCGerPlan():

ParâmetroTipo

Obrigatório
Por Parâmetros

Obrigatório Por VisãoDescrição
oMeterObjeto

Objeto de controle da régua
oTextObjeto

Objeto de controle da régua
oDlgObjeto

Janela da régua
lEndLógico

Controle finalizar da régua
cArqtmpCaracterSimSimAlias em que será montado o arquivo temporário
cMoedaCaracterSimSimMoeda referência para o relatório
lPorVisaoLógicoSimSimDefine se o relatório será gerado por visão o por parâmetros
cCodVisaoCaracter
SimCódigo da visão gerêncial para filtro da tabela AKD
dDataIniDataSimSimData inicial para filtro dos movimentos
dDataFimDataSimSimData final para filtro dos movimentos
aFiltrosArraySim
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. Por parâmetros

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 ArrayTipoConteúdo
aFiltros[01]CConta Orçamentária De
aFiltros[02]CConta Orçamentária Até
aFiltros[03]CClasse Orçamentária De
aFiltros[04]CClasse Orçamentária Até
aFiltros[05]CTipo de Saldo
aFiltros[06]CCentro de Custo De
aFiltros[07]CCentro de Custo Até
aFiltros[08]CItem De
aFiltros[09]CItem Até
aFiltros[10]CClasse de Valor De
aFiltros[11]CClasse de Valor Até
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: É importante que as posições pré definidas sejam respeitadas, pois o programa está preparado para receber os valores nessa ordem.

b. Por visão gerêncial

A variável lPorVisao deve ser declarada como .T. - Verdadeiro
Os filtros serão feitos posicionando na visão gerêncial 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)

03. EXEMPLO FUNCIONAL DE CÓDIGO


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

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.
    dDataIni  := STOD("20190101")
    dDataFim  := STOD("20190131")
    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.
    dDataIni  := STOD("20190101")
    dDataFim  := STOD("20190131")
    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

04. FLUXO DE CHAMADA DE FUNÇÕES






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