Histórico da Página
...
Posição | Tipo | Nome | Descrição | |||||
---|---|---|---|---|---|---|---|---|
1 | Numérico | 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). | |||||
2 | Vetor | aAutoCab | Utilizado para enviar dados referentes ao processo, como:
| |||||
3 | Vetor | aAutoItens | Vetor utilizado para envio dos dados referentes aos títulos a serem gerados, como:
Exemplo: Aadd(aItens,{; | |||||
4 | Numérico | nOpcAuto | Processo que se deseja realizar: 3 = Liquidação 4 = Re-liquidação 5 = Cancelamento de Liquidação | |||||
5 | Caractere | cAutoFil | 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.
| |||||
6 | Caractere | cNumLiqCan | Número da liquidação que se quer cancelar. Enviado apenas em caso de nOpcAuto = 5 | |||||
7 | Vetor | aRotAutoVA | Vetor utilizado para envio dos valores acessórios dos títulos que serão gerados. | |||||
8 | Numérico | nOutrMoed | Tratamento para outras moedas (idêntico à tela de filtro). 1 = Converte | |||||
9 | Numérico | nTxNegoc | Taxa da moeda da negociação.
| |||||
10 | Numérico | nTpTaxa | Tipo da taxa da negociação. 1=Fixa
| |||||
11 | Caractere | cFunOrig | O valor desta variável será gravada no campo E1_ORIGEM.
| |||||
12 | Numérico | nTxCalJur | ||||||
13 | Caractere | cFilSQL | 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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#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 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||
#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 Private lMsErroAuto Local lAutoPix := .F. Private lAutoErrNoFilelMsErroAuto := . := .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#Include '"Protheus.ch'" User Function FINA460A() Local nX #Include "rwmake.ch" #Include "FWMVCDEF.ch" Static nValTot := 0 LocalStatic aCablCpoFK7 := {} Local aItensNil Static FunName := {} Local cFilSQL := Nil Static ""aIDDOC //filtro quem conterá os títulos que serão liquidados, gerado com base no array aTitOri Local aTitOri:= {} User Function FINA460A() Local aParam := PARAMIXB Local xRet := .T. Local oObj {} := NIL Local cNaturezcIdPonto := '000001' Local nMoedacIdModel := 1'' Local cTipoLiqnDescon := 'FT ' Local cCond10 Local nI := 0 Local cCli460 := "" local cLiqPref Local nValAux := 'FIN' local cLiqNum 0 Local nLenFO2 := '000000242' local cLiqParcela 0 Local nValParc := 'A'0 Local cLiqTiponTxMul := "FT " local cLiqCli := '000001' local cLiqLoja 10 Local nTxJur := '01' local nValLiq := 2000 Private lMsErroAuto1 If FunName == Nil FunName := .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 Fina460(/*nPosArotina*/,aCab,aItens,3,/*cFiltroADVPL*/,/*xNumLiq*/,/*xRotAutoVa*/,/*xOutMoe*/,/*xTxNeg*/,/*xTpTaxa*/,/*xFunOrig*/,/*xTxCalJur*/,cFilSQL) ReturnAllTrim(FunName()) EndIf If FunName != "FINA460" If lCpoFK7 == Nil lCpoFK7 := FK7->(ColumnPos("FK7_CLIFOR")) > 0 EndIf /*Taxa de Juros" (FO1_TXJUR), "Taxa da Multa" (FO1_TXMUL), "Val. Desconto" (FO1_DESCON) e "Vlr.Adic.Neg" (FO1_VLADIC), */ If aParam <> NIL oObj := aParam[1] cIdPonto := aParam[2] cIdModel := aParam[3] If cIdPonto == 'FORMLINEPOS' If cIdModel == 'TITSELFO1' cTit := Posicione( "FK7", 1, xFilial("FK7") + oObj:GetValue( "FO1_IDDOC" ), "FK7_NUM" ) cCli460 := Posicione( "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 com desconto 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 com Juros e Multa 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 |