Versões comparadas

Chave

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

...

Bloco de código
languagejava
themeMidnight
firstline1
titleEjemplo 01 - Elaboració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-Liquidación,4-Reliquidación,5-Anulación de la liquidación
	Local cFiltro := ""
	Local cLiqCan := Space(6) //número de la liquidación que se anulará
	Local aParcelas := {}
	Local nValor := 2000 //Valor que se liquidará
	Local cCond := '001' //Condición de pago 1x
	Local nRadio := 1
	Local oRadio
	Local oLiqCan
    Local lAutoPix := .F.

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

	//Pantalla utilizada solamente para ejemplo
	nOpca := 0
	DEFINE MSDIALOG oDlg FROM 094,1 TO 240,300 TITLE "Liquidación automática" PIXEL
	@ 010,010 Radio oRadio VAR nRadio;
	ITEMS "Liquidar",;
	"Reliquidar",;
	"Anular";
	3D SIZE 50,10 OF oDlg PIXEL ;
	ON CHANGE ( oLiqCan:lReadOnly := If(nRadio != 3, .T., .F.))

	@ 022,070 SAY "Cancel. Liquidació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 //liquidación
				nOpc := 3
				//Filtro del usuario
				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 //reliquidación
				//Filtro del usuario
				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 del proceso automático (aAutoCab)
			aCab := { {"cCondicao" ,cCond },;
			{"cNatureza" ,"001" },;
			{"E1_TIPO" ,"NF " },;
			{"cCLIENTE" ,"000100"},;
			{"nMoeda" ,1 },;
			{"cLOJA" ,"01" },;
            {"AUTMRKPIX", lAutoPix }} 
            //------------------------------------------------------------
			//Elabora las cuotas de acuerdo con la condición de pago
			//------------------------------------------------------------
			aParcelas := Condición( nValor, cCond,, dDataBase)

			//--------------------------------------------------------------
			//No es posible enviar Aumento y Descuento juntos.
			//Si se envían los dos valores mayores que cero, considera Aumento
			//--------------------------------------------------------------
			For nZ := 1 to Len(aParcelas)
				//Datos de las cuotas que se generarán
				Aadd(aItens,{{ "E1_PREFIXO", "LIQ" },; //Prefijo
				{"E1_BCOCHQ" , "CX1" },; //Banco
				{"E1_AGECHQ" , "00001" },; //Agencia
				{"E1_CTACHQ" , "0000000001" },; //Cuenta
				{"E1_NUM" , cNum },; //Nº Cheque (dará origen al número del título)
				{"E1_EMITCHQ" , "EXECAUTO" },; //Emisor del cheque
				{"E1_VENCTO" , aParcelas[nZ,1]},; //Fecha buena
				{"E1_VLCRUZ" , aParcelas[nZ,2]},; //Valor del cheque/título
				{"E1_ACRESC" , 0 },; //Aumento
				{"E1_DECRESC" , 0 }}) //Descuento

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

			If Len( aParcelas) > 0
				//Liquidación y reliquidación
				//FINA460(nPosArotina,aAutoCab,aAutoItens,nOpcAuto,cAutoFil,cNumLiqCan)
				FINA460(, aCab, aItens, nOpc, cFiltro) //Inclusión

				// Este aviso solamente funciona para prueba monousuario
				Alert("Liquidación incluida -> " + GetMv("MV_NUMLIQ"))
			Endif
		Else
			nOpc := 5
			//Anulación
			FINA460(,,, nOpc,, cLiqCan) //Anulación
			Alert("Liquidación anulada -> " + 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
Bloco de código
titleEjemplo 02 - Elaboración del vector aAutoItens manualmente, sin utilizar una condición de pago
#INCLUDE 'Protheus.ch'

User Function TST460()
	Local nX        :=  0
	Local aCab      :=  {}
	Local aItens    :=  {}
	Local cFilSQL	:=  ""  //filtro que contendrá los títulos que se liquidarán, generados con base en el 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}) //Condición de pago
	aAdd(aCab, {"cNatureza", 	cNaturez}) //Modalidad
	aAdd(aCab, {"E1_TIPO", 		cLiqTipo}) //Tipo
	aAdd(aCab, {"cCliente", 	cLiqCli}) //Cliente
	aAdd(aCab, {"cLoja", 		cLiqLoja}) //Tienda
	aAdd(aCab, {"nMoeda",	 	nMoeda}) //Moneda
 	aAdd(aCab, {"AUTMRKPIX",    lAutoPix}) //Pix

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

...