Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

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 ArrayTipoConteúdo
aFiltAd[01]CEntidade adicional 01 De
aFiltAd[02]CEntidade adicional 01 Até
aFiltAd[03]CEntidade adicional 02 De
aFiltAd[04]CEntidade adicional 02 Até
aFiltAd[05]CEntidade adicional 03 De
aFiltAd[06]CEntidade adicional 03 Até
aFiltAd[07]CEntidade adicional 04 De
aFiltAd[08]CEntidade adicional 04 Até
aFiltAd[09]CEntidade adicional 05 De
aFiltAd[10]CEntidade adicional 05 Até
Nota

Importante: mesmo seja necessário fazer o filtro somente na entidade 05, por exemplo, o array deve ser passado completo.

Bloco de código
languagec#
themeMidnight
titleExemplo Prático por Parâmetros
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)
Nota

Importante 1: É importante que as posições pré definidas sejam respeitadas, pois o programa está preparado para receber os valores nessa ordem.
Não

Nota

Importante 2: Não utilizar filtros abertos genéricos como no exemplo deste documento, pois isso afetará diretamente a performance da rotina.
Os exemplos foram desenvolvido com intuito apenas didático.
Quanto É importante observar que quanto mais específico for o filtro, mais performática a rotina será.

...

A variável lPorVisao deve ser declarada como .T. - Verdadeiro
Os filtros serão feitos posicionando na visão gerêncial gerencial passada por parâmetro pela variável cCodVisao.

...

Bloco de código
languagec#
themeMidnight
titleExemplo Funcional de Código
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.
    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

...