Árvore de páginas

Versões comparadas

Chave

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

...

PosiçãoTipoNome

Descrição

1NumériconPosArotina

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

2VetoraAutoCabUtilizado para enviar dados referentes ao processo, como:
  • Condição de pagamento (Se enviado é gravado no cabeçalho da liquidação, porém a rotina não reprocessa nem valida o vetor aAutoItens de acordo com a condição de pagamento, ou seja, a customização do cliente deve criar o vetor aAutoItens de acordo com a condição e enviar para a ExecAuto devidamente parametrizado - vide exemplo 1 desse documento).
  • Natureza do título a ser gerado
  • Tipo do título a ser gerado
  • Cliente do título a ser gerado
  • Moeda do título a ser gerado
  • Loja do cliente do título a ser gerado
  • Pix (default .T.)
3VetoraAutoItens

Vetor utilizado para envio dos dados referentes aos títulos a serem gerados, como:

  • Prefixo
  • Numero do Título
  • Parcela (Se não enviado, sistema irá calcular automaticamente as parcelas de acordo com parâmetro MV_1DUP)
  • Banco
  • Agencia
  • Conta
  • Numero do cheque (dará origem ao numero do título a ser gerado)
  • 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)
  • Valor Adicional Negociado: deverá ser utilizada a variável nValorJur.

Exemplo:

Aadd(aItens,{;
{"E1_PREFIXO" ,'LIQ' },;
{'E1_NUM' , '300' },;
{'E1_PARCELA' , 'A' },;
{'E1_VENCTO' , STOD('20210215') },;
{'E1_VLCRUZ' , 1000.00 },;
{'nValorJur', 10}})

4NumériconOpcAutoProcesso que se deseja realizar:
3 = Liquidação
4 = Re-liquidação
5 = Cancelamento de Liquidação
5CaracterecAutoFil

Expressão ADVPL para filtro de seleção dos títulos geradores da liquidação (a serem liquidados). Será utilizado se o parâmetro cFilSQL não for informado.

Aviso
titleImportante

Recomenda-se o uso do filtro em SQL (cFilSQL - posição 13), pois o filtro em ADVPL é limitado a 2000 caracteres. Mais informações em: Filter greater than 2000 bytes

6CaracterecNumLiqCanNúmero da liquidação que se quer cancelar. Enviado apenas em caso de nOpcAuto = 5
7VetoraRotAutoVA

Vetor utilizado para envio dos valores acessórios dos títulos que serão gerados.

8NumériconOutrMoed

Tratamento para outras moedas (idêntico à tela de filtro).

1 = Converte
2 = Não considera
3 = Variação monetária

9NumériconTxNegoc

Taxa da moeda da negociação.

Informações
titleImportante

Obrigatório apenas para a nOutrMoed = 3 - Variação monetária. É inicializado com a taxa do dia da negociação.

10NumériconTpTaxa

Tipo da taxa da negociação.

1=Fixa
2=Variável

Informações
titleImportante

Obrigatório apenas para a nOutrMoed = 3 - Variação monetária. É inicializado com 2 - Variável.

11CaracterecFunOrig

O valor desta variável será gravada no campo E1_ORIGEM.

Informações
titleImportante

Se esta variável não for informada, será gravada a informação da função chamadora da Execauto.

12NumériconTxCalJur
13CaracterecFilSQL

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

...

Bloco de código
languagejava
themeMidnight
firstline1
titleExemplo 01 - Montando o vetor aAutoItens de acordo com a condição de pagamento
linenumberstrue
collapsetrue
#include "PROTHEUS.CH"

User Function UFINA460()
	Local cNum := ""
	Local nZ := 0
	Local aCab := {}
	Local aItens := {}
	Local nOpc := 3 //3-Liquidação,4-Reliquidacao,5-Cancelamento da liquidação
	Local cFiltro := ""
	Local cLiqCan := Space(6) //numero da liquidacao a cancelar
	Local aParcelas := {}
	Local nValor := 2000 //Valor a liquidar
	Local cCond := '001' //Condicao de pagamento 1x
	Local nRadio := 1
	Local oRadio
	Local oLiqCan
    Local lAutoPix := .F.

	cNum := padr("200", tamSx3("E1_NUM")[1])

	//Tela utilizada apenas para exemplo
	nOpca := 0
	DEFINE MSDIALOG oDlg FROM 094,1 TO 240,300 TITLE "Liquidação Automatica" 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 := "E1_FILIAL == '"+xFilial("SE1") + "' .And. "
				cFiltro += "E1_CLIENTE == '000100' .And. E1_LOJA == '01' .And. "
				cFiltro += "E1_SITUACA $ '0FG' .And. E1_SALDO > 0 .and. "
				cFiltro += 'Empty(E1_NUMLIQ)'
			Else
				nOpc := 4 //reliquidacao
				//Filtro do Usuário
				cFiltro := "E1_FILIAL == '"+xFilial("SE1") + "' .And. "
				cFiltro += "E1_CLIENTE == '000100' .And. E1_LOJA == '01' .And. "
				cFiltro += "E1_SITUACA $ '0FG' .And. E1_SALDO > 0 .and. "
				cFiltro += '!Empty(E1_NUMLIQ)'
			Endif

			//Array do processo automatico (aAutoCab)
			aCab := { {"cCondicao" ,cCond },;
			{"cNatureza" ,"001" },;
			{"E1_TIPO" ,"NF " },;
			{"cCLIENTE" ,"000100"},;
			{"nMoeda" ,1 },;
			{"cLOJA" ,"01" },;
            {"AUTMRKPIX", lAutoPix }}

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

			//--------------------------------------------------------------
			//Não é possivel mandar Acrescimo e Decrescimo junto.
			//Se mandar os dois valores maiores que zero considera Acrescimo
			//--------------------------------------------------------------
			For nZ := 1 to Len(aParcelas)
				//Dados das parcelas a serem geradas
				Aadd(aItens,{{ "E1_PREFIXO", "LIQ" },; //Prefixo
				{"E1_BCOCHQ" , "CX1" },; //Banco
				{"E1_AGECHQ" , "00001" },; //Agencia
				{"E1_CTACHQ" , "0000000001" },; //Conta
				{"E1_NUM" , cNum },; //Nro. cheque (dará origem ao numero do titulo)
				{"E1_EMITCHQ" , "EXECAUTO" },; //Emitente do cheque
				{"E1_VENCTO" , aParcelas[nZ,1]},; //Data boa
				{"E1_VLCRUZ" , aParcelas[nZ,2]},; //Valor do cheque/titulo
				{"E1_ACRESC" , 0 },; //Acrescimo
				{"E1_DECRESC" , 0 }}) //Decrescimo

				cNum := Soma1(cNum, Len( Alltrim(cNum)))
			Next nZ

			If Len( aParcelas) > 0
				//Liquidacao e reliquidacao
				//FINA460(nPosArotina,aAutoCab,aAutoItens,nOpcAuto,cAutoFil,cNumLiqCan)
				FINA460(, aCab, aItens, nOpc, cFiltro) //Inclusao

				// Este aviso funciona apenas para teste monousuario
				Alert("Liquidacao Incluida -> " + GetMv("MV_NUMLIQ"))
			Endif
		Else
			nOpc := 5
			//Cancelamento
			FINA460(,,, nOpc,, cLiqCan) //Cancelamento
			Alert("Liquidacao Cancelada -> " + cLiqCan)
		Endif
	EndIf

Return

Bloco de código
languagejava
themeMidnight
firstline1
titleExemplo 02 - Montando o vetor aAutoItens manualmente, sem utilizar uma condição de pagamento
linenumberstrue
collapsetrue
#INCLUDE 'Protheus.ch'

User Function TST460()
	Local nX        :=  0
	Local aCab      :=  {}
	Local aItens    :=  {}
	Local cFilSQL	:=  ""  //filtro quem conterá os títulos que serão liquidados, gerado com base no array aTitOri
	Local aTitOri   :=  {}     
	Local cNaturez  :=  '000001'
	Local nMoeda    :=  1
	Local cTipoLiq  :=  'FT '
	Local cCond     :=  ""

	local cLiqPref		:= 'FIN'
	local cLiqNum		:= '000000242'
	local cLiqParcela 	:= 'A'
	Local cLiqTipo 		:= "FT "
	local cLiqCli		:= '000001'
	local cLiqLoja		:= '01'
	local nValLiq		:= 2000
    Local lAutoPix := .F.

	Private lMsErroAuto     := .F.
	Private lAutoErrNoFile  := .T.
	
	Aadd(aTitOri,{'D MG 01 ', 'FIN', '000000001', 'A', 'NF ', '000001', '01'})
	Aadd(aTitOri,{'D MG 01 ', 'FIN', '000000001', 'B', 'NF ', '000001', '01'})

	Aadd(aItens,{{"E1_PREFIXO",cLiqPref}, {'E1_NUM', cLiqNum}, {'E1_PARCELA', cLiqParcela}, {'E1_VENCTO', dDatabase}, {'E1_VLCRUZ', nLiqVal}})	

	cFilSQL := " (" 
	For nX := 1 To Len(aTitOri)
		If nX > 1
			cFilSQL += " OR "
		EndIf 
		cFilSQL += " (" 
		cFilSQL += " E1_FILIAL  = '" + aTitOri[nX][1] + "' AND "
		cFilSQL += " E1_PREFIXO = '" + aTitOri[nX][2] + "' AND E1_NUM  = '" + aTitOri[nX][3] + "' AND "
		cFilSQL += " E1_PARCELA = '" + aTitOri[nX][4] + "' AND E1_TIPO = '" + aTitOri[nX][5] + "' AND "
		cFilSQL += " E1_CLIENTE = '" + aTitOri[nX][6] + "' AND E1_LOJA = '" + aTitOri[nX][7] + "' )"	
	Next nX
	cFilSQL += ") AND E1_SITUACA IN ('0','F','G') AND E1_SALDO > 0 AND LTRIM(E1_NUMLIQ) = '' "

	aCab := {}
	aAdd(aCab, {"cCondicao", 	cCond}) //Condição de pagamento
	aAdd(aCab, {"cNatureza", 	cNaturez}) //Natureza
	aAdd(aCab, {"E1_TIPO", 		cLiqTipo}) //Tipo
	aAdd(aCab, {"cCliente", 	cLiqCli}) //Cliente
	aAdd(aCab, {"cLoja", 		cLiqLoja}) //Loja
	aAdd(aCab, {"nMoeda",	 	nMoeda}) //Moeda
 	aAdd(aCab, {"AUTMRKPIX",    lAutoPix}) //Pix

	Fina460(/*nPosArotina*/,aCab,aItens,3,/*cFiltroADVPL*/,/*xNumLiq*/,/*xRotAutoVa*/,/*xOutMoe*/,/*xTxNeg*/,/*xTpTaxa*/,/*xFunOrig*/,/*xTxCalJur*/,cFilSQL)
Return

...