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