Árvore de páginas

Versões comparadas

Chave

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

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


Bloco de código
languagejava
themeMidnight
titleExemplo contendo diversas operações
linenumberstrue
collapsetrue
#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},;
           

02. SITUAÇÃO/REQUISITO

Exemplo de uma forma simples de se efetuar uma movimentação bancária a pagar, a receber ou transferências entre contas correntes de forma automática (sem a apresentação de telas).

03. EXEMPLO DE UTILIZAÇÃO

Bloco de código
languagejava
themeMidnight
titleExemplo de rotina automatica
collapsetrue
INCLUDE "Protheus.ch"

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

	Private lMsErroAuto := .F.

    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.","Fechar"})
    
    If nOpc == 1   
        aFINA100 := {    {"E5_DATA"   BENEF"       ,"TESTE AUTO - BENEF"     ,dDataBase,Nil},;
                         {"E5_HISTOR"      ,"TESTE AUTO - AUTO"      ,Nil},;
                         {"NCTBONLINE"     ,1  {"E5_MOEDA"        ,"M1"              ,Nil}} //1=Sim;2=Não
    
        MSExecAuto({|x,y,z| ,Nil},;FinA100(x,y,z)},0,aFINA100,3)
    
        If lMsErroAuto
            MostraErro()
     {"E5_VALOR"   Else
      ,500      MsgAlert("Movto. Bancario Pagar incluido com sucesso !!!")
         EndIf       ,Nil},;
    
	//RECEBER   
    ElseIf nOpc == 2
        aFINA100 := {    {"E5_NATUREZDATA"    ,"001"   ,dDataBase                 ,Nil},;
                            {"E5_BANCOMOEDA"        ,"001M1"                        ,Nil},;
                            {"E5_AGENCIAVALOR"    ,"001"  ,1500                      ,Nil},;
                            {"E5_CONTANATUREZ"        ,"001"                        ,Nil},;
                         {"E5_BANCO"   {"E5_BENEF"   ,"001"              ,"TESTE AUTO - BENEF"    ,Nil},;
                            {"E5_HISTORAGENCIA"    ,"TESTE AUTO - AUTO"001"                     ,Nil}},;
       
          MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,3)
    
   {"E5_CONTA"     If lMsErroAuto
 ,"001"            MostraErro()
         Else
 ,Nil},;
						 {"E5_VENCTO"     ,dDataBase      MsgAlert("Movto. Bancario Pagar incluido com sucesso !!!")
     ,Nil},;
						 {"E5_BENEF"    EndIf  ,"TESTE AUTO - BENEF"  
    ,Nil},;
    
    ElseIf nOpc == 2
        aFINA100 := {    {"E5_DATAHISTOR"     ,"TESTE AUTO - ,dDataBaseAUTO"       ,Nil}}
    
        MSExecAuto({|x,y,z| ,Nil},;FinA100(x,y,z)},0,aFINA100,4)
    
        If lMsErroAuto
            MostraErro()
       {"E5_MOEDA" Else
            ,"M1"MsgAlert("Movto. Bancario Receber incluido com sucesso !!!")
        EndIf       

	//EXCLUIR     
    ElseIf nOpc   ,Nil},;== 3
        dbSelectArea("SE5")
        SE5->(dbSetOrder(1))
        SE5->(dbSeek(xFilial("SE5")+DToS(dDataBase) ))
   {"E5_VALOR"      aFINA100 := { ,1500      {"E5_DATA"             ,SE5->E5_DATA         ,Nil},;
                            {"E5_NATUREZMOEDA"    ,"001"        ,SE5->E5_MOEDA                ,Nil},;
                            {"E5_BANCOVALOR"        ,"001" ,SE5->E5_VALOR                        	 ,Nil},;
                            {"E5_AGENCIANATUREZ"    ,"001"           ,SE5->E5_NATUREZ             ,Nil},;
                            {"E5_CONTA"        ,"001BANCO"             ,SE5->E5_BANCO           ,Nil},;
                            {"E5_HISTORAGENCIA"     ,"TESTE AUTO ,SE5->E5_AGENCIA AUTO"        ,Nil}},;
    
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,4)
    
        If lMsErroAuto
  {"E5_CONTA"          MostraErro()
        Else
,SE5->E5_CONTA           ,Nil},;
   MsgAlert("Movto. Bancario Receber incluido com sucesso !!!")
        EndIf       
    
{"E5_HISTOR"    ElseIf nOpc == 3
  ,SE5->E5_HISTOR       dbSelectArea("SE5")
   ,Nil},;
     SE5->(dbSetOrder(1))
        SE5->(dbSeek(xFilial("SE5")+DToS(dDataBase) ))
        aFINA100 := {    {"E5_DATATIPOLAN"             ,SE5->E5_DATATIPOLAN            ,Nil},; }
    
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,5)
    
        If lMsErroAuto
  {"E5_MOEDA"          MostraErro()
        ,SE5->E5_MOEDAElse
            ,Nil},;
    MsgAlert("Exclusão realizada com sucesso !!!")
        EndIf       

	//CANCELAR
    ElseIf nOpc == 4
  {"E5_VALOR"      dbSelectArea("SE5")
        ,SE5->E5_VALOR>(dbSetOrder(1))
        SE5->(dbSeek(xFilial("SE5")+DToS(dDataBase) ))
     ,Nil},;
   dbSkip() //colocado apenas para esta sequencia de testes
        aFINA100 :=  {       {"E5_NATUREZDATA"          ,SE5->E5_NATUREZDATA            ,Nil},;
                            {"E5_BANCOMOEDA"            ,SE5->E5_BANCOMOEDA            ,Nil},;
                            {"E5_AGENCIAVALOR"         ,SE5->E5_AGENCIAVALOR       	 ,Nil},;
                            {"E5_CONTANATUREZ"         ,SE5->E5_CONTANATUREZ            ,Nil},;
                            {"E5_HISTORBANCO"         ,SE5->E5_HISTORBANCO           ,Nil},;
                            {"E5_TIPOLANAGENCIA"        ,SE5->E5_TIPOLANAGENCIA         ,Nil} }
,;
       
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,5)
            
 {"E5_CONTA"       If lMsErroAuto
  ,SE5->E5_CONTA           MostraErro(),Nil},;
        Else
            MsgAlert("Exclusão realizada com sucesso !!!")
    {"E5_HISTOR"    EndIf    ,SE5->E5_HISTOR   

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

    //TRANSFERENCIA BANCARIA
    ElseIf nOpc  ,Nil},;== 5
        aFINA100  := {    {"CBCOORIG"             {,"E5_VALOR001"             ,SE5->E5_VALOR            ,Nil},;
                            {"E5_NATUREZCAGENORIG"         ,SE5->E5_NATUREZ"001"                     ,Nil},;
                            {"E5_BANCOCCTAORIG"            ,SE5->E5_BANCO,"001"                     ,Nil},;
                            {"E5_AGENCIA"CNATURORI"         ,"001"             ,SE5->E5_AGENCIA        ,Nil},;
                            {"E5_CONTACBCODEST"          ,SE5->E5_CONTA"002"                     ,Nil},;
                            {"E5_HISTORCAGENDEST"        ,SE5->E5_HISTOR ,"002"        ,Nil},;
               ,Nil},;
             {"E5_TIPOLAN"        ,SE5->E5_TIPOLAN        ,Nil} }
{"CCTADEST"      
    ,"002"    MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,6)
    
        If lMsErroAuto
   ,Nil},;
         MostraErro()
        Else
            MsgAlert("Cancelamento realizada com sucesso !!!")
{"CNATURDES"         ,"002"   EndIf       

    
    ElseIf nOpc == 5 ,Nil},;
        aFINA100  := {    {"CBCOORIG"             ,{"001CTIPOTRAN"         ,"CH"                      ,Nil},;
                            {"CAGENORIGCDOCTRAN"          ,"001123456"                            ,Nil},;
                            {"CCTAORIGNVALORTRAN"             ,"001",2500                            ,Nil},;
                            {"CNATURORICHIST100"          ,"001"TESTE TRF VIA EXECAUTO"  ,Nil},;
                            {"CBENEF100"         ,"TESTE TRF VIA EXECAUTO"   ,Nil},;
                            {"CBCODESTNAGLUTINA"            ,"002"2                            		,Nil},; //1=Sim;2=Não
                            {"CAGENDESTNCTBONLINE"         ,"002"1                            		,Nil},;
; //1=Sim;2=Não
							{"DDATACRED"         ,CTOD("25/09/20")     		,Nil}; 
               {"CCTADEST"     }
    ,"002"
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,7)
    
        If lMsErroAuto
      ,Nil},;
      MostraErro()
        Else
              {"CNATURDES"        ,"002"MsgAlert("Transferência executada com sucesso !!!")
        EndIf       
               ,Nil},;
     
    //Estorno da Transferencia
    ElseIf nOpc == 6
        aFINA100 := {"CTIPOTRAN"        ,{"CHAUTNRODOC"          ,"123456"                      ,Nil},;
                            {"CDOCTRANAUTDTMOV"            ,"123456"          ,dDataBase              ,Nil},;
                            {"NVALORTRANAUTBANCO"         ,2500              "001"                  ,Nil},;
                            {"CHIST100AUTAGENCIA"       ,"001"           ,"TESTE TRF VIA EXECAUTO"    ,Nil},;
                            {"CBENEF100AUTCONTA"         ,"TESTE TRF VIA EXECAUTO""001"                  ,Nil} }
                    
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,78)
    
        If lMsErroAuto
            MostraErro()
        Else
            MsgAlert("Transferência executada com sucesso !!!")"Transferência cancelada com sucesso !!!")
        EndIf       
    EndIf
    EndIfIf nOpc == 0 .OR. nOpc == 7
        Exit
    Endif
Enddo
    
Return(Nil)


Bloco de código
languagejava
themeMidnight
titleExemplo de movimentação bancária a pagar com rateio contábil
linenumberstrue
collapsetrue
#INCLUDE "Protheus.ch"

/*/{Protheus.doc} TST102
MsExecauto do FINA100 para movimentação 
bancária a pagar com ElseIf nOpc == 6
        aFINA100 := {    {"AUTNRODOC"         ,"123456"                ,Nil},;
                            {"AUTDTMOV"            ,dDataBase                ,Nil},;
              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 := {    {"AUTBANCO"     E5_DATA"        ,"001"dDataBase                    ,Nil},;
                            {"AUTAGENCIAE5_MOEDA"       ,"001M1"                     ,Nil},;
                            {"AUTCONTAE5_VALOR"       ,500     ,"001"                    ,Nil} },;
                    
        MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,8)
       
        If lMsErroAuto
 {"E5_NATUREZ"     ,"001"       MostraErro()
        Else
     ,Nil},;
       MsgAlert("Transferência cancelada com sucesso !!!")
        EndIf      {"E5_BANCO" 
    EndIf
    
Return
Bloco de código
languagejava
themeMidnight
titleExemplo de rotina automática entre filiais
collapsetrue
#include "rwmake.ch"
#include 'tbiconn.ch'
  
User Function Auto450()
,"001"                 Local aAutoCab := {,Nil}
	Local aArea,;
                     := GetArea()
   {"E5_AGENCIA" Local cTabSe1  := ,"TMPSE1A"
001"        Local cTabSe2  := "TMPSE2A"
    Local aSE1450  := {,Nil},;
      Local  aSE2450  := {}
    Local aFilCmp  := {}

    Private lMsHelpAuto := .F.
 {"E5_CONTA"     Private lMsErroAuto := .F.

 ,"001"     BeginSql Alias cTabSe1
		SELECT R_E_C_N_O_ as RECNO
			FROM %Table:SE1% SE1
			WHERE SE1.E1_FILIAL = 'D MG 01 '
				AND SE1.E1_PREFIXO = 'CPT'
				AND SE1.E1_NUM = 'VT001'
				AND SE1.E1_TIPO = 'NF'
				AND SE1.E1_CLIENTE = 'FIN001'
				AND SE1.E1_LOJA    = '01'
				AND SE1.%NotDel%
	EndSql

    While (cTabSe1)->(!EOF())
          ,Nil},;
                         {"E5_VENCTO"       SE1->(DbGoto((cTabSe1)->RECNO))
,dDataBase         AAdd(aSE1450, {SE1->E1_FILIAL+SE1->E1_PREFIXO+SE1->E1_NUM+SE1->E1_PARCELA+SE1->E1_TIPO})       ,Nil},;
        If ascan(aFilCmp,SE1->E1_FILIAL) == 0
                  Aadd(aFilCmp, SE1->E1_FILIAL){"E5_BENEF"       ,"TESTE AUTO - BENEF"     ,Nil},;
        EndIf    
        (cTabSe1)->(DbSkip())    
  {"E5_HISTOR"  Enddo

    (cTabSe1)->(DbCloseArea())

    BeginSql Alias cTabSe2
		SELECT R_E_C_N_O_ as RECNO
			FROM %Table:SE2% SE2
			WHERE SE2.E2_FILIAL = 'D MG 02 '
				AND SE2.E2_PREFIXO = 'CPT'
				AND SE2.E2_NUM = 'VT001'
				AND SE2.E2_TIPO = 'NF'
				AND SE2.E2_FORNECE = 'FIN001'
				AND SE2.E2_LOJA    = '01'
				AND SE2.%NotDel%
	EndSql

    While (cTabSe2)->(!EOF())
,"TESTE AUTO - AUTO"      ,Nil},;
                         {"E5_RATEIO"      ,"S"              SE2->(DbGoto((cTabSe2)->RECNO))
        AAdd(aSE2450, {SE2->E2_FILIAL+SE2->E2_PREFIXO+SE2->E2_NUM+SE2->E2_PARCELA+SE2->E2_TIPO+SE2->E2_FORNECE+SE2->E2_LOJA})
,Nil},;         If ascan(aFilCmp,SE2->E2_FILIAL) == 0
            Aadd(aFilCmp, SE2->E2_FILIAL)
        EndIf    
        (cTabSe2)->(DbSkip())  
   {"NCTBONLINE" Enddo
    
,1    (cTabSe2)->(DbCloseArea())

    aAutoCab :={  {"AUTDVENINI450", cTod('27/08/19') , nil},;
           ,Nil}} 

    {"AUTDVENFIM450", cTod('27/08/19') , nil},;MSExecAuto({|x,y,z| FinA100(x,y,z)},0,aFINA100,3)

    If lMsErroAuto
        MostraErro()
     {"AUTNLIM450" ,8000, nil},;
Else
        Conout(" *********** Inclusão realizada com sucesso       {"AUTCCLI450" , "FIN001" , nil},;!!! Doc: "+CVALTOCHAR(nDoc)+"*****************")
    EndIf      
   
Return(Nil)

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

User Function F050RAUT()

    Local aRet := {}

    {"AUTLTITFUTURO"AADD(aRet, .F. , nil},;2) //2-Rateio Pre-Configurado
    AADD(aRet, "GCT001") // Codigo do Rateio
    AADD(aRet, "Rateio automático {"AUTARECCHAVE" ,aSE1450, nil},;
      F050RAUT") //Historico
    AADD(aRet, "001") //Conta Contábil débito
    AADD(aRet, "002") //Conta Contábil crédito  {"AUTAPAGCHAVE" , aSE2450 , nil},;
                {"AUTAFILCOMP" , aFilCmp , nil}}

    MSExecAuto({|x,y,z| Fina450(x,y,z)}, nil , aAutoCab , 3 )

    If !lMsErroAuto
        ConOut("Incluido com sucesso! ")
        confirmsx8()
    Else
        ConOut("Erro na inclusao!")
        rollbacksx8()
        MostraErro()
    EndIf

	RestArea(aArea)
Return

Card documentos
InformacaoPara que a compensação funcione entre filiais se faz necessário o uso do parâmetro AUTAFILCOMP, caso contrario não ha a necessidade de informa-lo
TituloIMPORTANTE!

04. DEMAIS INFORMAÇÕES

Não há.

05. ASSUNTOS RELACIONADOS



Return aRet
   


04. DEMAIS INFORMAÇÕES

Informações
titlePerguntas 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.

Informações
titleMovimentaçã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 FINA100Não há



Templatedocumentos


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

...