Árvore de páginas

01. VISÃO GERAL

Essa documentação contem detalhes para realizar execuções automáticas (MsExecAuto) de movimentações bancárias, através da rotina FINA100.

Essa funcionalidade possibilita automatizar o processo de movimentação bancária de entrada, saída ou transferência entre contas.

02. PARÂMETROS DA MSEXECAUTO

Devem ser passados 3 parâmetros na chamada da MsExecAuto da rotina FINA100, sendo eles:

1º parâmetro: Passar o conteúdo "0" (zero) para execuções automáticas;

2º parâmetro: Array contendo as informações para preenchimento dos campos para realizar a operação desejada. Dependendo da operação o array terá características diferentes, portanto consulte a sessão "Exemplos de utilização" para mais informações.

3º parâmetro: Opção a ser executada via rotina automática (se será uma movimentação a pagar, transferência, estorno, etc.). Seguem as opções disponíveis:

CódigoDescrição
3Movimentação Bancária a Pagar (saída)
4Movimentação Bancária a Receber (entrada)
5Excluir Movimentação Bancária
6Cancelar Movimentação Bancária 
7Transferência entre contas ou caixas
8Estorno de Transferências
9Classificação

03. EXEMPLOS DE UTILIZAÇÃO


Exemplo contendo diversas operações
#INCLUDE "Protheus.ch"

User Function TST100()
Local nOpc     := 0
Local aFINA100 := {}

Private lMsErroAuto := .F.

While .T.

    nOpc := 0
    nOpc := Aviso("TESTE EXECAUTO DO FINA100", "Escolha a opção do menu da rotina FINA100 a ser executada via EXECAUTO",{"PAGAR","RECEBER","EXCLUIR","CANCELAR","TRANSF.","EST. TRANSF.","SAIR"})
    
	//PAGAR
    If nOpc == 1   
        aFINA100 := {    {"E5_DATA"        ,dDataBase                ,Nil},;
                         {"E5_MOEDA"       ,"M1"                     ,Nil},;
                         {"E5_VALOR"       ,500                      ,Nil},;
                         {"E5_NATUREZ"     ,"001"                    ,Nil},;
                         {"E5_BANCO"       ,"001"                    ,Nil},;
                         {"E5_AGENCIA"     ,"001"                    ,Nil},;
                         {"E5_CONTA"       ,"001"                    ,Nil},;
						 {"E5_VENCTO"      ,dDataBase                ,Nil},;
                         {"E5_BENEF"       ,"TESTE AUTO - BENEF"     ,Nil},;
                         {"E5_HISTOR"      ,"TESTE AUTO - AUTO"      ,Nil},;
                         {"NCTBONLINE"     ,1                        ,Nil}} //1=Sim;2=Não
    
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,3)
    
        If lMsErroAuto
            MostraErro()
        Else
            MsgAlert("Movto. Bancario Pagar incluido com sucesso !!!")
        EndIf       
    
	//RECEBER   
    ElseIf nOpc == 2
        aFINA100 := {    {"E5_DATA"       ,dDataBase                 ,Nil},;
                         {"E5_MOEDA"      ,"M1"                      ,Nil},;
                         {"E5_VALOR"      ,1500                      ,Nil},;
                         {"E5_NATUREZ"    ,"001"                     ,Nil},;
                         {"E5_BANCO"      ,"001"                     ,Nil},;
                         {"E5_AGENCIA"    ,"001"                     ,Nil},;
                         {"E5_CONTA"      ,"001"                     ,Nil},;
						 {"E5_VENCTO"     ,dDataBase                 ,Nil},;
						 {"E5_BENEF"      ,"TESTE AUTO - BENEF"      ,Nil},;
                         {"E5_HISTOR"     ,"TESTE AUTO - AUTO"       ,Nil}}
    
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,4)
    
        If lMsErroAuto
            MostraErro()
        Else
            MsgAlert("Movto. Bancario Receber incluido com sucesso !!!")
        EndIf       

	//EXCLUIR     
    ElseIf nOpc == 3
        dbSelectArea("SE5")
        SE5->(dbSetOrder(1))
        SE5->(dbSeek(xFilial("SE5")+DToS(dDataBase) ))
        aFINA100 := {       {"E5_DATA"             ,SE5->E5_DATA         ,Nil},;
                            {"E5_MOEDA"         ,SE5->E5_MOEDA           ,Nil},;
                            {"E5_VALOR"         ,SE5->E5_VALOR       	 ,Nil},;
                            {"E5_NATUREZ"       ,SE5->E5_NATUREZ         ,Nil},;
                            {"E5_BANCO"         ,SE5->E5_BANCO           ,Nil},;
                            {"E5_AGENCIA"       ,SE5->E5_AGENCIA         ,Nil},;
                            {"E5_CONTA"         ,SE5->E5_CONTA           ,Nil},;
                            {"E5_HISTOR"        ,SE5->E5_HISTOR          ,Nil},;
                            {"E5_TIPOLAN"       ,SE5->E5_TIPOLAN         ,Nil} }
    
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,5)
    
        If lMsErroAuto
            MostraErro()
        Else
            MsgAlert("Exclusão realizada com sucesso !!!")
        EndIf       

	//CANCELAR
    ElseIf nOpc == 4
        dbSelectArea("SE5")
        SE5->(dbSetOrder(1))
        SE5->(dbSeek(xFilial("SE5")+DToS(dDataBase) ))
        dbSkip() //colocado apenas para esta sequencia de testes
        aFINA100 := {       {"E5_DATA"          ,SE5->E5_DATA            ,Nil},;
                            {"E5_MOEDA"         ,SE5->E5_MOEDA           ,Nil},;
                            {"E5_VALOR"         ,SE5->E5_VALOR       	 ,Nil},;
                            {"E5_NATUREZ"       ,SE5->E5_NATUREZ         ,Nil},;
                            {"E5_BANCO"         ,SE5->E5_BANCO           ,Nil},;
                            {"E5_AGENCIA"       ,SE5->E5_AGENCIA         ,Nil},;
                            {"E5_CONTA"         ,SE5->E5_CONTA           ,Nil},;
                            {"E5_HISTOR"        ,SE5->E5_HISTOR          ,Nil},;
                            {"E5_TIPOLAN"       ,SE5->E5_TIPOLAN         ,Nil} }
    
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,6)
    
        If lMsErroAuto
            MostraErro()
        Else
            MsgAlert("Cancelamento realizada com sucesso !!!")
        EndIf       

    //TRANSFERENCIA BANCARIA
    ElseIf nOpc == 5
        aFINA100 := {    {"CBCOORIG"             ,"001"                     ,Nil},;
                            {"CAGENORIG"         ,"001"                     ,Nil},;
                            {"CCTAORIG"          ,"001"                     ,Nil},;
                            {"CNATURORI"         ,"001"                     ,Nil},;
                            {"CBCODEST"          ,"002"                     ,Nil},;
                            {"CAGENDEST"         ,"002"                     ,Nil},;
                            {"CCTADEST"          ,"002"                     ,Nil},;
                            {"CNATURDES"         ,"002"                     ,Nil},;
                            {"CTIPOTRAN"         ,"CH"                      ,Nil},;
                            {"CDOCTRAN"          ,"123456"                  ,Nil},;
                            {"NVALORTRAN"        ,2500                      ,Nil},;
                            {"CHIST100"          ,"TESTE TRF VIA EXECAUTO"  ,Nil},;
                            {"CBENEF100"         ,"TESTE TRF VIA EXECAUTO"  ,Nil},;
                            {"NAGLUTINA"         ,2                    		,Nil},; //1=Sim;2=Não
                            {"NCTBONLINE"        ,1                    		,Nil}; //1=Sim;2=Não
							{"DDATACRED"         ,CTOD("25/09/20")     		,Nil}; 
                    }
    
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,7)
    
        If lMsErroAuto
            MostraErro()
        Else
            MsgAlert("Transferência executada com sucesso !!!")
        EndIf       
                    
    //Estorno da Transferencia
    ElseIf nOpc == 6
        aFINA100 := {       {"AUTNRODOC"        ,"123456"               ,Nil},;
                            {"AUTDTMOV"         ,dDataBase              ,Nil},;
                            {"AUTBANCO"         ,"001"                  ,Nil},;
                            {"AUTAGENCIA"       ,"001"                  ,Nil},;
                            {"AUTCONTA"         ,"001"                  ,Nil} }
                    
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,8)
    
        If lMsErroAuto
            MostraErro()
        Else
            MsgAlert("Transferência cancelada com sucesso !!!")
        EndIf       
    EndIf
    If nOpc == 0 .OR. nOpc == 7
        Exit
    Endif
Enddo
    
Return(Nil)


Exemplo de movimentação bancária a pagar com rateio contábil
#INCLUDE "Protheus.ch"

/*/{Protheus.doc} TST102
MsExecauto do FINA100 para movimentação bancária a pagar com RATEIO CONTABIL
Obs: O ponto de entrada F050RAUT precisa estar compilado para o rateio funcionar via ExecAuto (está no final do exemplo).     
@author		Totvs
@param		Nil
@return		Nil
/*/
User Function TST102()

    Local aFINA100 := {}
    Local nDoc := 1
    Private lMsErroAuto := .F.
    Private cRecPag := "P" //P=Mov.Pagar ou R=Mov.Receber
    Private lF050Auto := .T.  //Manipula variavel privada do FINA050, devido o rateio do FINA100 se utilizar do mesmo componente

    PREPARE ENVIRONMENT EMPRESA 'T1' FILIAL 'D MG 01' USER 'Administrador' PASSWORD '1234' 

    Conout("TST102 *********** INICIANDO O PROCESSAMENTO! *****************")

        aFINA100 := {    {"E5_DATA"        ,dDataBase                ,Nil},;
                         {"E5_MOEDA"       ,"M1"                     ,Nil},;
                         {"E5_VALOR"       ,500                      ,Nil},;
                         {"E5_NATUREZ"     ,"001"                    ,Nil},;
                         {"E5_BANCO"       ,"001"                    ,Nil},;
                         {"E5_AGENCIA"     ,"001"                    ,Nil},;
                         {"E5_CONTA"       ,"001"                    ,Nil},;
                         {"E5_VENCTO"      ,dDataBase                ,Nil},;
                         {"E5_BENEF"       ,"TESTE AUTO - BENEF"     ,Nil},;
                         {"E5_HISTOR"      ,"TESTE AUTO - AUTO"      ,Nil},;
                         {"E5_RATEIO"      ,"S"                      ,Nil},;                         
                         {"NCTBONLINE"     ,1                        ,Nil}} 

    MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,3)

    If lMsErroAuto
        MostraErro()
    Else
        Conout(" *********** Inclusão realizada com sucesso !!! Doc: "+CVALTOCHAR(nDoc)+"*****************")
    EndIf      
   
Return(Nil)

/*/{Protheus.doc} F050RAUT
Ponto de entrada que permite a gravação do rateio contabil pre-configurado.
Valido para MsExecAuto de: 
    - Inclusão do contas a pagar (FINA050);
    - Movimentação bancária a pagar (FINA100);
@author		Totvs
@param		Nil
@return		Array com os valores a serem gravados na tabela de rateio CV4
    aRet[1] = Tipo rateio: 1 Digitado, 2 - Pre-Configurado
    aRet[2] = Código de rateio
    aRet[3] = Histórico
    aRet[4] = Conta Contábil débito
    aRet[5] = Conta Contábil crédito  
/*/

User Function F050RAUT()

    Local aRet := {}

    AADD(aRet, 2) //2-Rateio Pre-Configurado
    AADD(aRet, "GCT001") // Codigo do Rateio
    AADD(aRet, "Rateio automático F050RAUT") //Historico
    AADD(aRet, "001") //Conta Contábil débito
    AADD(aRet, "002") //Conta Contábil crédito  

Return aRet
   


04. DEMAIS INFORMAÇÕES

Perguntas da rotina (botão F12)

Em relação a manipulação das perguntas da rotina Movimentação Bancária (tabela SX1) via execução automática, algumas delas estarão disponíveis no array do 2º parâmetro, que são:

  • Na inclusão de Movimentos a Pagar e Movimentos a Receber é possível  alterar a pergunta "Contabiliza On Line?", passando no array o identificador NCTBONLINE com o conteúdo 1 (Sim) ou 2 (Não);
  • Na Transferência Bancária é possível controlar a pergunta "Contabiliza On Line ?", passando no array o identificador NCTBONLINE com o conteúdo 1 (Sim) ou 2 (Não);
  • Também na Transferência Bancária é possível controlar a pergunta "Aglut Lancamentos ?", passando no array o identificador NAGLUTINA com o conteúdo 1 (Sim) ou 2 (Não);

Para as demais perguntas serão respeitados os conteúdos salvos no perfil do usuário utilizado para realizar a execução automática.

Movimentação Bancária com Rateio Contábil

Para disponibilizar a funcionalidade de Rateio Contábil (E5_RATEIO=S) na execução automática do FINA100, é necessário que seja utilizado o ponto de entrada F050RAUT.

Como a rotina FINA100 se utilizada do componente de rateio da rotina FINA050, é necessário que seja utilizado esse ponto de entrada, conforme informado nessa FAQ (ver exemplo na sessão EXEMPLOS DE UTILIZAÇÃO desta página)

O ponto de entrada permitirá definir qual o rateio pré-configurado deve ser considerado.

05. ASSUNTOS RELACIONADOS

Documento de referencia FINA100