Árvore de páginas

Exemplo de uma Execauto que pode ser utilizada na rotina de Baixa Pagar Manual.

Parâmetros:
Para o correto funcionamento da rotina automática é necessário informar os seguintes parâmetros:

1 - Matriz com os títulos a serem baixados - Obrigatório
2 - Numérico com a operação e ser realizada (3 - Baixa, 5 - Cancelamento, 6 - Exclusão) - Obrigatório
3 - Lógico que determina se o browse será exibido. (Uso Interno não preencher) 
4 - Numérico com a sequência de baixa a ser cancelada/excluída quando o título possuir mais de uma baixa.
5 - Lógico que determina se deve apresentar a tela de lançamentos contábeis quando utilizado a opção contabiliza on line. A tela será apresentada quando o processo é iniciado apartir de uma opção do menu, caso contrário esse parâmetro não terá efeito. 
6 - Lógico que determina se deve contabilizar os movimento de maneira On ou Off Line 


1- aBaixa: é possível informar o array com os dados referentes ao título a ser baixado e as informações necessárias para esta baixa:

aBaixa[1]   = Filial
aBaixa[2]   = Prefixo
aBaixa[3]   = Número
aBaixa[4]   = Parcela
aBaixa[5]   = Tipo
aBaixa[6]   = Fornecedor
aBaixa[7]   = Loja
aBaixa[8]   = Descrição do Motivo da Baixa (AUTMOTBX)
aBaixa[9]   = Banco (AUTBANCO)
aBaixa[10] = Agência (AUTAGENCIA)
aBaixa[11] = Conta (AUTCONTA)
aBaixa[11] = Cheque (AUTCHEQUE)
aBaixa[13] = Data da Baixa. (AUTDTBAIXA)
aBaixa[14] = Data de Crédito (AUTDTDEB)
aBaixa[15] = Histórico (AUTHIST)
aBaixa[16] = Taxa da Moeda (AUTTXMOEDA)
aBaixa[17] = Valor Juros (AUTJUROS)
aBaixa[18] = Valor Multa (AUTMULTA)
aBaixa[19] = Valor Desconto (AUTDESCONT)
aBaixa[20] = Valor do pagamento (AUTVLRPG)
aBaixa[21] = Valor em moeda estrangeira (AUTVLRME)
aBaixa[22] = Beneficiário (AUTBENEF)
aBaixa[23] = Tipo de Desconto (AUTTPDESC)



Operação de Baixa

Para as operações de baixa (nOpc=3) foram implementados ajustes para melhoria de performance conforme o link abaixo. 

Recomenda-se que após o processamento dos Execautos, seja chamada a função F080ClearM() que faz a limpeza de variáveis e objetos de controle na rotina FINA080.

Havendo processamento em lote (mais de uma execução da rotina automática), a rotina F080ClearM() poderá ser chamada somente ao final do processamento.

DT Melhoria de performance FINA080 e FINA430 

Exemplo
#Include 'Protheus.ch'
#include "tbiconn.ch"

User Function BxFINA080(nOpc, nVlrPag, nSeqBx)
	Local cChave := ""
	Local lRet   := .T.
	Local lExibeLanc := .T. 
	Local lOnline    := .T. 

	//Operação a ser realizada (3 = Baixa, 5 = cancelamento, 6 = Exclusão)
	Default nOpc := 3
	//Valor a ser baixado
	Default nVlrPag := 0
	//Sequência de baixa a ser cancelada.
	Default nSeqBx := 1

	Private lMsErroAuto := .F.
	Private cHistBaixa := "Texto de Hist. da baixa"

	DbSelectArea("SE2")
	SE2->(dbSetOrder(1))
	SE2->(dbGoTop())
	SE2->(DbSeek(xFilial("SE2") + "FIN" + "052600002"))

	cChave := SE2->(E2_FILIAL+E2_PREFIXO+E2_NUM+E2_PARCELA+E2_TIPO+E2_FORNECE+E2_LOJA)

	If SE2->(dbSeek(cChave))
    	If nOpc == 3
	        If lRet := (nVlrPag + SE2->E2_SALDO) > 0
    	        nVlrPag := If(nVlrPag > 0, nVlrPag, SE2->E2_SALDO)
				// Caso deseje realizar a baixa total de um título com acréscimo ou decréscimo 
				// deve-=se compor o valor do saldo do título: SE2->E2_SALDO+SE2->E2_SDACRES-E2_SDDECRE

	        EndIf
    	ElseIf SE2->E2_VALOR >= SE2->E2_SALDO
        	nVlrPag := 0
	    EndIf
    
    	If lRet
        	aBaixa := {}        
			
			Aadd(aBaixa, {"E2_FILIAL", SE2->E2_FILIAL  , nil})
			aadd(aBaixa, {"E2_PREFIXO", SE2->E2_PREFIXO, nil})
	        aadd(aBaixa, {"E2_NUM"    , SE2->E2_NUM    , nil})
    	    aadd(aBaixa, {"E2_PARCELA", SE2->E2_PARCELA, nil})
	        aadd(aBaixa, {"E2_TIPO"   , SE2->E2_TIPO   , nil})
    	    aadd(aBaixa, {"E2_FORNECE", SE2->E2_FORNECE, nil})
        	aadd(aBaixa, {"E2_LOJA"   , SE2->E2_LOJA   , nil})
	        aadd(aBaixa, {"AUTMOTBX"  , "DEB"          , nil})
    	    aadd(aBaixa, {"AUTBANCO"  , "001"          , nil})
        	aadd(aBaixa, {"AUTAGENCIA", "AG001"        , nil})
	        aadd(aBaixa, {"AUTCONTA"  , "CTA001 "      , nil})
    	    aadd(aBaixa, {"AUTDTBAIXA", dDataBase      , nil})
        	aadd(aBaixa, {"AUTDTDEB"  , dDataBase      , nil})
	        aadd(aBaixa, {"AUTHIST"   , cHistBaixa     , nil})
			aadd(aBaixa, {"AUTVLRPG"  , nVlrPag        , nil})

 			// A posição AUTVLRPG poderá utilizada quando for desejável realizar baixas parciais,
			// caso essa posição não seja informada, será realizada uma baixa total,
			// considerando valores existentes no título como juros, multa, desconto, acréscimo, decréscimo,  impostos, etc.
			// Se esta posição for utilizada e desejar que seja realizado a baixa total é necessário que todos os 
			// valores envolvidos no título sejam considerados para compor o valor a ser informado.

           //Pergunte da rotina
       		AcessaPerg("FINA080", .F.)                  
        
	        //Chama a execauto da rotina de baixa manual (FINA080)
    	    MsExecauto({|a,b,c,d,e,f,| FINA080(a,b,c,d,e,f)}, aBaixa, nOpc, .F., nSeqBx, lExibeLanc, lOnline)
        
	        If lMsErroAuto
    	        MostraErro()
	        Else
    	        If nOpc == 3
        	        Alert("Baixa efetuada com sucesso")
	            Else
    	            Alert("Exclusão realizada com sucesso")
	            EndIf
    	    EndIf

			 F080ClearM()
	    Else
    	    Alert("O título não possui saldo a pagar em aberto")
	    EndIf
	Else
    	Alert("O título a pagar não foi localizado")
	EndIf

Return



Exemplo de rotina automática de título em outra moeda informando a taxa no momento da baixa
#Include 'Protheus.ch'
#include "tbiconn.ch"

User Function BxFINA080(nOpc, nVlrPag, nSeqBx, nTxMoeda)
	Local cChave := ""
	Local lRet   := .T.
	Local lExibeLanc := .T. 
	Local lOnline    := .T. 

	//Operação a ser realizada (3 = Baixa, 5 = cancelamento, 6 = Exclusão)
	Default nOpc := 3
	//Valor a ser baixado
	Default nVlrPag := 0
	//Sequência de baixa a ser cancelada.
	Default nSeqBx := 1
	//Taxa da moeda estrangeira do título
	Default nTxMoeda := 0

	Private lMsErroAuto := .F.
	Private cHistBaixa := "Texto de Hist. da baixa"

	DbSelectArea("SE2")
	SE2->(dbSetOrder(1))
	SE2->(dbGoTop())
	SE2->(DbSeek(xFilial("SE2") + "FIN" + "052600002"))

	cChave := SE2->(E2_FILIAL+E2_PREFIXO+E2_NUM+E2_PARCELA+E2_TIPO+E2_FORNECE+E2_LOJA)

	If SE2->(dbSeek(cChave))
    	If nOpc == 3
	        If lRet := (nVlrPag + SE2->E2_SALDO) > 0
    	        nVlrPag := If(nVlrPag > 0, nVlrPag, SE2->E2_SALDO)
				// Caso deseje realizar a baixa total de um título com acréscimo ou decréscimo 
				// deve-=se compor o valor do saldo do título: SE2->E2_SALDO+SE2->E2_SDACRES-E2_SDDECRE

	        EndIf
    	ElseIf SE2->E2_VALOR >= SE2->E2_SALDO
        	nVlrPag := 0
	    EndIf
    
    	If lRet
        	aBaixa := {}        

			Aadd(aBaixa, {"E2_FILIAL", SE2->E2_FILIAL  , nil})
			aadd(aBaixa, {"E2_PREFIXO", SE2->E2_PREFIXO, nil})
	        aadd(aBaixa, {"E2_NUM"    , SE2->E2_NUM    , nil})
    	    aadd(aBaixa, {"E2_PARCELA", SE2->E2_PARCELA, nil})
	        aadd(aBaixa, {"E2_TIPO"   , SE2->E2_TIPO   , nil})
    	    aadd(aBaixa, {"E2_FORNECE", SE2->E2_FORNECE, nil})
        	aadd(aBaixa, {"E2_LOJA"   , SE2->E2_LOJA   , nil})
	        aadd(aBaixa, {"AUTMOTBX"  , "DEB"          , nil})
    	    aadd(aBaixa, {"AUTBANCO"  , "001"          , nil})
        	aadd(aBaixa, {"AUTAGENCIA", "AG001"        , nil})
	        aadd(aBaixa, {"AUTCONTA"  , "CTA001 "      , nil})
    	    aadd(aBaixa, {"AUTDTBAIXA", dDataBase      , nil})
        	aadd(aBaixa, {"AUTDTDEB"  , dDataBase      , nil})
	        aadd(aBaixa, {"AUTHIST"   , cHistBaixa     , nil})
 	        aadd(aBaixa, {"AUTTXMOEDA", nTxMoeda       , nil})
			aadd(aBaixa, {"AUTVLRPG"  , nVlrPag        , nil})

		    // A posição AUTVLRPG poderá utilizada quando for desejável realizar baixas parciais,
			// caso essa posição não seja informada, será realizada uma baixa total,
			// considerando valores existentes no título como juros, multa, desconto, acréscimo, decréscimo,  impostos, etc.
			// Se esta posição for utilizada e desejar que seja realizado a baixa total é necessário que todos os 
			// valores envolvidos no título sejam considerados para compor o valor a ser informado.

  			// A posição AUTTXMOEDA poderá ser utilizada quando for desejável informar a taxa contratada 
			// para pagamento de título em moeda estrangeira.
			// Caso essa posição não seja informada em baixas de títulos em moeda estrangeira, será considerada: 
			//		- A taxa contratada informada na inclusão do título, se houver.
			//		- A taxa do dia (SM2) caso a taxa contratada não tenha sido informada no título.

            //Pergunte da rotina
       		AcessaPerg("FINA080", .F.)                  
        
	        //Chama a execauto da rotina de baixa manual (FINA080)
    	    MsExecauto({|a,b,c,d,e,f,| FINA080(a,b,c,d,e,f)}, aBaixa, nOpc, .F., nSeqBx, lExibeLanc, lOnline)
        
	        If lMsErroAuto
    	        MostraErro()
	        Else
    	        If nOpc == 3
        	        Alert("Baixa efetuada com sucesso")
	            Else
    	            Alert("Exclusão realizada com sucesso")
	            EndIf
    	    EndIf

			 F080ClearM()
	    Else
    	    Alert("O título não possui saldo a pagar em aberto")
	    EndIf
	Else
    	Alert("O título a pagar não foi localizado")
	EndIf

Return