Versões comparadas

Chave

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

Índice

01. 

...

VISIÓN GENERAL

Ejecución

...

Execução automática (ExecAuto) da rotina de liquidação a receber de la rutina de liquidación por cobrar (FINA460).

02. 

...

PARÁMETROS


Posição

Posición

Tipo

Nome

Nombre

DescriçãoDescripción

1

Numérico

nPosArotina

Utilizado Se utiliza para indicar a operação a ser executada. Utilizada apenas pela chamada da rotina padrão pelo menula operación que se ejecutará. Solamente se utiliza por la llamada de la rutina estándar por el menú. Enviar NIL ou o 0 (zerocero).

2

Vetor

Vector

aAutoCab

Utilizado

Se utiliza para enviar

dados referentes ao processo

datos referente al proceso, como:

  • Condição Condición 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
  • pago (Si se envía, se graba en el encabezado de la liquidación, sin embargo la rutina no reprocesa ni valida el vector aAutoItens de acuerdo con la condición de pago, es decir, la personalización del cliente debe crear el vector aAutoItens de acuerdo con la condición y enviar a ExecAuto debidamente parametrizado - vea el ejemplo 1 de este documento).
  • Modalidad del título que se generará
  • Tipo del título que se generará
  • Cliente del título que se generará
  • Moneda del título que se generará
  • Tienda del cliente del título que se generaráLoja do cliente do título a ser gerado
  • Pix (default .T.)

3

Vetor

Vector

aAutoItens

Vetor Vector utilizado para envio dos dados referentes aos títulos a serem geradosenvío de los datos referentes a los títulos que se generarán, como:

  • Prefijo
  • Número del título
  • Prefixo
  • Numero do Título
  • Parcela (Se não enviado, sistema irá calcular automaticamente as parcelas de acordo com parâmetro Cuota (Si no se envía, el sistema calculará automáticamente las cuotas de acuerdo con el parámetro MV_1DUP)
  • Banco
  • Agencia
  • ContaCuenta
  • Numero do Número del cheque (dará origem ao numero do título a ser gerado)
  • Emitente do cheque
  • Data de vencimento do título
  • origen al número del título que se generará)
  • Emisor del cheque
  • Fecha de vencimiento del título
  • Valor del Valor do cheque/título
  • Valor do acréscimo (quando houverdel aumento (si hubiera)
  • Valor do decréscimo (quando houverdel descuento (si hubiera)
  • Valor Adicional Negociado: deverá ser utilizada a variável adicional negociado: debe utilizarse la variable nValorJur.

ExemploEjemplo:

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

4

Numérico

nOpcAuto

Processo

Proceso que se

deseja

desea realizar:
3 =

Liquidação

Liquidación
4 =

Re-liquidação

Reliquidación
5 =

Cancelamento

Anulación de

Liquidação

liquidación

5

Caractere

Carácter

cAutoFil

Expressão

Expresión 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

de selección de los títulos generadores de la liquidación (que se liquidarán). Se utilizará si el parámetro cFilSQL no se informara.

Aviso
titleImportante

Recomenda-se o uso do filtro em Se recomienda el uso del filtro en SQL (cFilSQL - posição posición 13), pois o pues el filtro em en ADVPL é está limitado a 2000 caracteres. Mais informações em: Más información en: Filter greater than 2000 bytes

6

Caractere

Carácter

cNumLiqCan

Número

da liquidação

de la liquidación que se

quer cancelar. Enviado apenas em caso de

quiere anular. Solamente se envía si nOpcAuto = 5

7

Vetor

Vector

aRotAutoVA

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

Vector utilizado para envío de los valores adicionales de los títulos que se generarán.

8

Numérico

nOutrMoed

Tratamento

Tratamiento para

outras moedas (idêntico à tela

otras monedas (idéntico a la pantalla de filtro).

1 =

Converte

Convierte
2 =

Não

No considera
3 =

Variação monetária

Variación monetaria

9

Numérico

nTxNegoc

Taxa da moeda da negociaçãoTasa de la moneda de la negociación.

Informações
titleImportante

Obrigatório apenas Es obligatorio solamente para a nOutrMoed = 3 - Variação monetária. É inicializado com a taxa do dia da negociaçãoVariación monetaria. Se inicializa con la tasa del día de la negociación.

10

Numérico

nTpTaxa

Tipo da taxa da negociaçãode tasa de la negociación.

1=FixaFija
2=
VariávelVariable

Informações
titleImportante

Obrigatório apenas Es obligatorio solamente para a nOutrMoed = 3 - Variação monetária. É inicializado com Variación monetaria. Se inicializa con 2 - VariávelVariable.

11

Caractere

Carácter

cFunOrig

O valor desta variável será gravada no El valor de esta variable se grabará en el campo E1_ORIGEM.

Informações
titleImportante

Se esta variável não for informada, será gravada a informação da função chamadora da Si esta variable no se informara, se grabará la información de la función activadora de Execauto.

12

Numérico

nTxCalJur


13

Caractere

Carácter

cFilSQL

Expressão Expresión SQL para filtro de seleção dos títulos geradores da liquidação (a serem liquidados). Substitui o filtro em de selección de los títulos generadores de la liquidación (que se liquidarán). Sustituye el filtro en ADVPL (cAutoFil).

03.

...

CONDICIÓN DE

...

PAGO

1) Se enviado condição de pagamento no Si se envía la condición de pago en el array aAutoCab
A customização do cliente deve criar o La personalización del cliente debe crear el array aAutoItens de acordo com a condição e enviar para acuerdo con la condición y enviar a execauto devidamente debidamente parametrizado. Deve ser utilizada a função Debe utilizarse la función 'Condicao' para retornar a quantidade de parcelasdevolver la cantidad de de cuotas.

2) Se NÃO enviado condição de pagamento no Si NO se envía la condición de pago en el array aAutoCab
A customização do cliente deve criar o La personalización del cliente debe crear el array aAutoItens manualmente e y enviar para a execauto devidamente debidamente parametrizado.

3) Se enviado a) Si se envía(n) la(s) parcelacuota(s) no en el array aAutoItens
A rotina irá gravar essa informação no La rutina grabará esta información en el campo E1_PARCELA dos de los títulos geradosgenerados.

4) Se NÃO enviado parcela no Si NO se envía la cuota en el array aAutoItens
A rotina irá gravar o La rutina grabará el campo E1_PARCELA dos de los títulos gerados de acordo com o parâmetro generados de acuerdo con el parámetro MV_1DUP, DE FORMA sequencialsecuencial.

04. 

...

EJEMPLO DE

...

UTILIZACIÓN


Bloco de código
languagejava
themeMidnight
firstline1
titleExemplo Ejemplo 01 - Montando o vetor aAutoItens de acordo com a condição de pagamentoElaboración del vector aAutoItens de acuerdo con la condición de pago
linenumberstrue
collapsetrue
#include "PROTHEUS.CH"

User Function UFINA460()
	Local cNum := ""
	Local nZ := 0
	Local aCab := {}
	Local aItens := {}
	Local nOpc := 3 //3-LiquidaçãoLiquidación,4-ReliquidacaoReliquidación,5-CancelamentoAnulación de dala liquidaçãoliquidación
	Local cFiltro := ""
	Local cLiqCan := Space(6) //numero da liquidacao a cancelarnúmero de la liquidación que se anulará
	Local aParcelas := {}
	Local nValor := 2000 //Valor aque se liquidarliquidará
	Local cCond := '001' //CondicaoCondición de pagamentopago 1x
	Local nRadio := 1
	Local oRadio
	Local oLiqCan
    Local lAutoPix := .F.

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

	//TelaPantalla utilizada apenassolamente para exemploejemplo
	nOpca := 0
	DEFINE MSDIALOG oDlg FROM 094,1 TO 240,300 TITLE "LiquidaçãoLiquidación Automaticaautomática" PIXEL
	@ 010,010 Radio oRadio VAR nRadio;
	ITEMS "Liquidar",;
	"Reliquidar",;
	"CancelarAnular";
	3D SIZE 50,10 OF oDlg PIXEL ;
	ON CHANGE ( oLiqCan:lReadOnly := If(nRadio != 3, .T., .F.))

	@ 022,070 SAY "Cancel. LiquidaçãoLiquidación:" 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 //liquidacaoliquidación
				nOpc := 3
				//Filtro dodel Usuáriousuario
				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 //reliquidacaoreliquidación
				//Filtro dodel Usuáriousuario
				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 dodel processoproceso automaticoautomático (aAutoCab)
			aCab := { {"cCondicao" ,cCond },;
			{"cNatureza" ,"001" },;
			{"E1_TIPO" ,"NF " },;
			{"cCLIENTE" ,"000100"},;
			{"nMoeda" ,1 },;
			{"cLOJA" ,"01" },;
            {"AUTMRKPIX", lAutoPix }} 
              //------------------------------------------------------------
			//MontaElabora aslas parcelascuotas de acordoacuerdo comcon ala condiçãocondición de pagamentopago
			//------------------------------------------------------------
			aParcelas := CondicaoCondición( nValor, cCond,, dDataBase)

			//--------------------------------------------------------------
			//NãoNo ées possivelposible mandarenviar AcrescimoAumento ey DecrescimoDescuento juntojuntos.
			//SeSi se mandarenvían oslos doisdos valores maioresmayores que zerocero, considera AcrescimoAumento
			//--------------------------------------------------------------
			For nZ := 1 to Len(aParcelas)
				//DadosDatos de daslas parcelascuotas aque seremse geradasgenerarán
				Aadd(aItens,{{ "E1_PREFIXO", "LIQ" },; //PrefixoPrefijo
				{"E1_BCOCHQ" , "CX1" },; //Banco
				{"E1_AGECHQ" , "00001" },; //Agencia
				{"E1_CTACHQ" , "0000000001" },; //ContaCuenta
				{"E1_NUM" , cNum },; //Nro. chequeCheque (dará origemorigen aoal numeronúmero dodel titulotítulo)
				{"E1_EMITCHQ" , "EXECAUTO" },; //EmitenteEmisor dodel cheque
				{"E1_VENCTO" , aParcelas[nZ,1]},; //DataFecha boabuena
				{"E1_VLCRUZ" , aParcelas[nZ,2]},; //Valor dodel cheque/titulotítulo
				{"E1_ACRESC" , 0 },; //AcrescimoAumento
				{"E1_DECRESC" , 0 }}) //DecrescimoDescuento

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

			If Len( aParcelas) > 0
				//LiquidacaoLiquidación ey reliquidacaoreliquidación
				//FINA460(nPosArotina,aAutoCab,aAutoItens,nOpcAuto,cAutoFil,cNumLiqCan)
				FINA460(, aCab, aItens, nOpc, cFiltro) //InclusaoInclusión

				// Este aviso solamente funciona apenas para testeprueba monousuario
				Alert("LiquidacaoLiquidación Incluidaincluida -> " + GetMv("MV_NUMLIQ"))
			Endif
		Else
			nOpc := 5
			//CancelamentoAnulación
			FINA460(,,, nOpc,, cLiqCan) //CancelamentoAnulación
			Alert("LiquidacaoLiquidación Canceladaanulada -> " + cLiqCan)
		Endif
	EndIf

Return

  



1
Bloco de código
languagejava
themeMidnight
firstline
titleExemplo Ejemplo 02 - Montando o vetor Elaboración del vector aAutoItens manualmente, sem sin utilizar uma condição de pagamento
linenumberstrue
collapsetrueuna condición de pago
#INCLUDE 'Protheus.ch'

User Function TST460()
	Local nX        :=  0
	Local aCab      :=  {}
	Local aItens    :=  {}
	Local cFilSQL	:=  ""  //filtro quemque conterácontendrá oslos títulos que serãose liquidadosliquidarán, geradogenerados comcon base en noel 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çãoCondición de pagamentopago
	aAdd(aCab, {"cNatureza", 	cNaturez}) //NaturezaModalidad
	aAdd(aCab, {"E1_TIPO", 		cLiqTipo}) //Tipo
	aAdd(aCab, {"cCliente", 	cLiqCli}) //Cliente
	aAdd(aCab, {"cLoja", 		cLiqLoja}) //LojaTienda
	aAdd(aCab, {"nMoeda",	 	nMoeda}) //MoedaMoneda
 	aAdd(aCab, {"AUTMRKPIX",     lAutoPix}) //Pix

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

Bloco de código
languagejava
themeMidnight
firstline1
titleExemplo Ejemplo 03 - Manipulando Manejo del valor do título a ser liquidadodel título que se liquidará
linenumberstrue
collapsetrue
#Include "Protheus.ch"
#Include "rwmake.ch"
#Include "FWMVCDEF.ch"

Static nValTot      := 0
Static lCpoFK7      := Nil
Static FunName      := Nil
Static aIDDOC       := {}

User Function FINA460A()

Local aParam    := PARAMIXB
Local xRet      := .T.
Local oObj      := NIL
Local cIdPonto  := ''
Local cIdModel  := ''
Local nDescon   := 10
Local nI        := 0
Local cCli460   := ""
Local nValAux   := 0
Local nLenFO2   := 0
Local nValParc  := 0
Local nTxMul    := 10
Local nTxJur    := 1

If FunName == Nil
    FunName   := AllTrim(FunName())
EndIf

If FunName != "FINA460"
    If lCpoFK7 == Nil
        lCpoFK7   := FK7->(ColumnPos("FK7_CLIFOR")) > 0
    EndIf

    /*TaxaTasa de Jurosinterés" (FO1_TXJUR), "TaxaTasa de dala Multamulta" (FO1_TXMUL), "Val. DescontoDescuento" (FO1_DESCON) ey "VlrVal.Adic.Neg" (FO1_VLADIC), */

    If aParam <> NIL
        oObj := aParam[1]

        cIdPonto := aParam[2]
        cIdModel := aParam[3]

        If cIdPonto == 'FORMLINEPOS'
            If cIdModel == 'TITSELFO1'
                cTit    := PosicioneMarque( "FK7", 1, xFilial("FK7") + oObj:GetValue( "FO1_IDDOC" ), "FK7_NUM" )
                cCli460 := PosicioneMarque( "FK7", 1, xFilial("FK7") + oObj:GetValue( "FO1_IDDOC" ), "FK7_CLIFOR" )
                If aScan( aIDDOC, oObj:GetValue( "FO1_IDDOC" ) ) == 0
                    aAdd(aIDDOC, oObj:GetValue( "FO1_IDDOC" ) )
                    For nI := 1 to oObj:Length()
                        oObj:GoLine(nI)
                        nValAux := 0
                        If cCli460 == 'CDESCO' .And. cTit == oObj:GetValue("FO1_NUM") // Cliente comcon descontodescuento
                            nValAux     := oObj:GetValue("FO1_TOTAL") - nDescon
                            oObj:LoadValue("FO1_DESCON", nDescon)
                            oObj:LoadValue("FO1_TOTAL", nValAux)
                        EndIf
                        If cCli460 == 'JURMUL' .And. cTit == oObj:GetValue("FO1_NUM")// Cliente comcon Jurosinterés ey Multamulta
                            nValAux     := oObj:GetValue("FO1_TOTAL")
                            nDias       := dDataBase - FDtVento()
                            oObj:LoadValue("FO1_TXJUR", nTxJur)
                            oObj:LoadValue("FO1_VLJUR", ( nValAux * nTxJur * nDias ) / 100 )
                            oObj:LoadValue("FO1_TXMUL", nTxMul)
                            oObj:LoadValue("FO1_VLMUL", ( nValAux * nTxMul ) / 100 )
                            oObj:LoadValue("FO1_VLADIC", 14.5)
                            nValAux     := nValAux + oObj:GetValue("FO1_VLADIC") + oObj:GetValue("FO1_VLMUL") + oObj:GetValue("FO1_VLJUR")
                            oObj:LoadValue("FO1_TOTAL", nValAux)
                        EndIf
                        nValTot += nValAux
                    Next
                EndIf
                
            EndIf
        ElseIf cIdPonto == 'MODELPOS'

            If cIdModel == "FINA460A"
                oObjFO2 := oObj:GetModel("TITGERFO2")
                nLenFO2 := oObjFO2:Length()
                nValParc := ( nValTot / nLenFO2 )
                For nI := 1 to nLenFO2
                    oObjFO2:GoLine(nI)
                    oObjFO2:LoadValue("FO2_TXJUR", 2 )
                    oObjFO2:LoadValue("FO2_VALOR", nValTot)
                    oObjFO2:LoadValue("FO2_TOTAL", nValTot)
                Next
            EndIf
        EndIf
    EndIf
EndIf

Return xRet

Static Function FDtVento()

    Local dData := CTOD("  /  /  ")
    Local aArea := SE1->(GetArea())

    dData   := Posicione( "SE1", 1, xFilial("SE1") + FK7->(FK7_PREFIXO + FK7_NUM + FK7_PARCELA + FK7_TIPO + FK7_CLIFOR + FK7_LOJA ), "E1_VENCREA" )

    RestArea(aArea)

Return dData