Page tree

Assunto

Produto:

Microsiga Protheus

Versões:

12.1.17

Ocorrência:

Liquidação automática - CR, quando chamado através de User Function ) - Função do Usuário

Passo a passo:

Utilizar a rotina de Liquidação CR de forma automática, isto é, sem apresentação de telas.


FINA460(nPosArotina,aAutoCab,aAutoItens,nOpcAuto,cAutoFil,cNumLiqCan)

 

Parâmetros:

 

nPosArotina
Utilizado para indicar a operação a ser executada. Utilizada apenas pela chamada da rotina padrão pelo menu. Enviar NIL ou 0 (zero)

 

aAutoCab 
Utilizado para enviar dados referentes ao processo, como:
- Condições de pagamento
- Natureza do título a ser gerado
- Tipo do título a ser gerado
- Cliente do título a ser gerado
- Loja do cliente do título a ser gerado
- Moeda do título a ser gerado

 

aAutoItens
Array utilizado para envio dos dados referentes aos títulos a serem gerados, como:
- Prefixo
- Numero do Titulo a ser gerado
- Parcela
- Banco
- Agencia
- Conta
- Emitente do cheque
- Data de vencimento do título 
- Valor do cheque/título
- Valor do acréscimo (quando houver)
- Valor do decréscimo (quando houver)

 

nOpcAuto
Processo que se deseja realizar:
3 = Liquidação
4 = Reliquidação
5 = Cancelamento de Liquidação 

 

cAutoFil
Expressão ADVPL para filtro de seleção dos títulos geradores da liquidação (a serem liquidados).

 

cNumLiqCan
Número da liquidação que se quer cancelar.
Enviado apenas em caso de nOpcAuto = 5

 

Exemplo de utilização:

#include "PROTHEUS.CH"
#include "TBICONN.CH"

User Function UFINA460()

Local cNumLiq := ""
Local nZ := 0
Local aCab := {}
Local aItens := {}
Local nOpc := 3 // 3 - Liquidação, 4 - Reliquidação, 5 - Cancelamento da liquidação
Local cFiltro := ""
Local cLiqCan := Space(6) //numero da liquidação a cancelar
Local aParcelas := {}
Local nValor := 3000 //Valor a liquidar
Local cCond := '006' //Condição de pagamento 4x
Local nRadio := 1
Local oRadio
Local oLiqCan

//Titulo que será liquidado pela rotina automática

Local cPref := "FIN"
Local cNum := "FINA46080"
Local cParc := " "
Local cTipo := "NF "
Local cCliente := "000010"
Local cLoja := "01"

Prepare Environment Empresa '99' Filial '01'

cNumLiq := PADR("LIQ001000",TamSx3("E1_NUM")[1])

//Tela utilizada apenas para exemplo
nOpca := 0
DEFINE MSDIALOG oDlg FROM 094,1 TO 240,300 TITLE "Liquidação Automática" PIXEL
@ 010,010 Radio oRadio VAR nRadio;
ITEMS "Liquidar",;
"Reliquidar",;
"Cancelar";
3D SIZE 50,10 OF oDlg PIXEL ;
ON CHANGE (oLiqCan:lReadOnly := If(nRadio != 3 ,.T.,.F.))

@ 022,070 SAY "Cancel. Liquidação:" SIZE 49, 07 OF oDlg PIXEL
@ 030,070 MSGET oLiqCan VAR cLiqCan Valid !Empty(cLiqCan) SIZE 49, 11 OF oDlg PIXEL hasbutton

DEFINE SBUTTON FROM 55,085 TYPE 1 ENABLE OF oDlg ACTION (nOpca := 1, oDlg:End())
DEFINE SBUTTON FROM 55,115 TYPE 2 ENABLE OF oDlg ACTION (nOpca := 0, oDlg:End())

ACTIVATE MSDIALOG oDlg CENTERED

If nOpca == 1
If nRadio == 1 .or. nRadio == 2
If nRadio == 1 //liquidacao
nOpc := 3
//Filtro do Usuário
cFiltro += " ("
cFiltro += " E1_FILIAL == '" + xFilial("SE1") + "' .And. "
cFiltro += " E1_PREFIXO == '" + cPref + "' .And. E1_NUM == '" + cNum + "' .And. "
cFiltro += " E1_PARCELA == '" + cParc + "' .And. E1_TIPO == '" + cTipo + "' .And. "
cFiltro += " E1_CLIENTE == '" + cCliente + "' .And. E1_LOJA == '" + cLoja + "' )"
cFiltro += " .And. E1_SITUACA $ '0FG' .And. E1_SALDO > 0 .And. Empty(E1_NUMLIQ) "
Else
nOpc := 4 //reliquidacao
//Filtro do Usuário
cFiltro += " ("
cFiltro += " E1_FILIAL == '" + xFilial("SE1") + "' .And. "
cFiltro += " E1_PREFIXO == '" + cPref + "' .And. E1_NUM == '" + cNum + "' .And. "
cFiltro += " E1_PARCELA == '" + cParc + "' .And. E1_TIPO == '" + cTipo + "' .And. "
cFiltro += " E1_CLIENTE == '" + cCliente + "' .And. E1_LOJA == '" + cLoja + "' )"
cFiltro += " .And. E1_SITUACA $ '0FG' .And. E1_SALDO > 0 .And. !Empty(E1_NUMLIQ) "
Endif

//Array do processo automatico (aAutoCab)
aCab:={;
{"cCondicao" ,cCond },;
{"cNatureza" ,"003 " },;
{"E1_TIPO" ,"FT " },;
{"cCLIENTE" ,"000010" },;
{"cLOJA" ,"01" },;
{"nMoeda" ,1 }}

//------------------------------------------------------------
//Monta as parcelas de acordo com a condição de pagamento
//------------------------------------------------------------
aParcelas := Condicao(nValor,cCond,,dDataBase)

//--------------------------------------------------------------
//Não é possível mandar Acréscimo e Decréscimo junto.
//Se mandar os dois valores maiores que zero considera Acréscimo
//--------------------------------------------------------------
For nZ := 1 to Len(aParcelas)
//Dados das parcelas a serem geradas
Aadd(aItens,{;
{"E1_PREFIXO","LIQ" },;//Prefixo
{"E1_NUM" ,cNumLiq },;//Numero do titulo
{"E1_TIPO" ,"FT " },;//Código do tipo
{"E1_PARCELA",cValToChar(nZ) },;//Numero Parcela
{"E1_BCOCHQ" ,"756" },;//Codigo Banco
{"E1_AGECHQ" ,"4264" },;//Numero Agencia
{"E1_CTACHQ" ,"34359" },;//Numero da Conta Corrente
{"E1_EMITCHQ","Jose Pedro" },;//Emitente do cheque
{"E1_VENCTO" ,aParcelas[nZ,1]},;//Data do Vencimento
{"E1_VLCRUZ" ,aParcelas[nZ,2]},;//Valor do cheque/titulo
{"E1_ACRESC" ,0 },;//Acréscimo
{"E1_DECRESC",0 }})//Decréscimo
Next nZ

If Len(aParcelas) > 0
//Liquidação e reliquidação
DbSelectArea("SE1")
FINA460(,aCab,aItens,nOpc,cFiltro) //Inclusão

//Este aviso funciona apenas para teste mono usuário
Alert("Liquidação Incluída -> " + GetMv("MV_NUMLIQ"))
Endif
Else
nOpc := 5

//Cancelamento
FINA460(,,,nOpc,,cLiqCan) //Cancelamento
Alert("Liquidação Cancelada -> " + cLiqCan)
Endif
EndIf

Reset Environment

Return