...
Bloco de código | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#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 | ||
---|---|---|
| ||
#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 |
...