Utilizar a rotina de Liquidação CR de forma automática, isto é, sem apresentação de telas.
FINA460(nPosArotina,aAutoCab,aAutoItens,nOpcAuto,cAutoFil,cNumLiqCan) Parâmetros: 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) aAutoCab Utilizado para enviar dados referentes ao processo, como: - Condições de pagamento - Natureza do título a ser gerado - Tipo do título a ser gerado - Cliente do título a ser gerado - Loja do cliente do título a ser gerado - Moeda do título a ser gerado aAutoItens Array utilizado para envio dos dados referentes aos títulos a serem gerados, como: - Prefixo - Numero do Titulo a ser gerado - Parcela - Banco - Agencia - Conta - 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) nOpcAuto Processo que se deseja realizar: 3 = Liquidação 4 = Reliquidação 5 = Cancelamento de Liquidação cAutoFil Expressão ADVPL para filtro de seleção dos títulos geradores da liquidação (a serem liquidados). cNumLiqCan Número da liquidação que se quer cancelar. Enviado apenas em caso de nOpcAuto = 5 Exemplo de utilização: #include "PROTHEUS.CH" #include "TBICONN.CH" User Function UFINA460() Local cNumLiq := "" Local nZ := 0 Local aCab := {} Local aItens := {} Local nOpc := 3 // 3 - Liquidação, 4 - Reliquidação, 5 - Cancelamento da liquidação Local cFiltro := "" Local cLiqCan := Space(6) //numero da liquidação a cancelar Local aParcelas := {} Local nValor := 3000 //Valor a liquidar Local cCond := '006' //Condição de pagamento 4x Local nRadio := 1 Local oRadio Local oLiqCan //Titulo que será liquidado pela rotina automática Local cPref := "FIN" Local cNum := "FINA46080" Local cParc := " " Local cTipo := "NF " Local cCliente := "000010" Local cLoja := "01" Prepare Environment Empresa '99' Filial '01' cNumLiq := PADR("LIQ001000",TamSx3("E1_NUM")[1]) //Tela utilizada apenas para exemplo nOpca := 0 DEFINE MSDIALOG oDlg FROM 094,1 TO 240,300 TITLE "Liquidação Automática" 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 += " (" cFiltro += " E1_FILIAL == '" + xFilial("SE1") + "' .And. " cFiltro += " E1_PREFIXO == '" + cPref + "' .And. E1_NUM == '" + cNum + "' .And. " cFiltro += " E1_PARCELA == '" + cParc + "' .And. E1_TIPO == '" + cTipo + "' .And. " cFiltro += " E1_CLIENTE == '" + cCliente + "' .And. E1_LOJA == '" + cLoja + "' )" cFiltro += " .And. E1_SITUACA $ '0FG' .And. E1_SALDO > 0 .And. Empty(E1_NUMLIQ) " Else nOpc := 4 //reliquidacao //Filtro do Usuário cFiltro += " (" cFiltro += " E1_FILIAL == '" + xFilial("SE1") + "' .And. " cFiltro += " E1_PREFIXO == '" + cPref + "' .And. E1_NUM == '" + cNum + "' .And. " cFiltro += " E1_PARCELA == '" + cParc + "' .And. E1_TIPO == '" + cTipo + "' .And. " cFiltro += " E1_CLIENTE == '" + cCliente + "' .And. E1_LOJA == '" + cLoja + "' )" cFiltro += " .And. E1_SITUACA $ '0FG' .And. E1_SALDO > 0 .And. !Empty(E1_NUMLIQ) " Endif //Array do processo automatico (aAutoCab) aCab:={; {"cCondicao" ,cCond },; {"cNatureza" ,"003 " },; {"E1_TIPO" ,"FT " },; {"cCLIENTE" ,"000010" },; {"cLOJA" ,"01" },; {"nMoeda" ,1 }} //------------------------------------------------------------ //Monta as parcelas de acordo com a condição de pagamento //------------------------------------------------------------ aParcelas := Condicao(nValor,cCond,,dDataBase) //-------------------------------------------------------------- //Não é possível mandar Acréscimo e Decréscimo junto. //Se mandar os dois valores maiores que zero considera Acréscimo //-------------------------------------------------------------- For nZ := 1 to Len(aParcelas) //Dados das parcelas a serem geradas Aadd(aItens,{; {"E1_PREFIXO","LIQ" },;//Prefixo {"E1_NUM" ,cNumLiq },;//Numero do titulo {"E1_TIPO" ,"FT " },;//Código do tipo {"E1_PARCELA",cValToChar(nZ) },;//Numero Parcela {"E1_BCOCHQ" ,"756" },;//Codigo Banco {"E1_AGECHQ" ,"4264" },;//Numero Agencia {"E1_CTACHQ" ,"34359" },;//Numero da Conta Corrente {"E1_EMITCHQ","Jose Pedro" },;//Emitente do cheque {"E1_VENCTO" ,aParcelas[nZ,1]},;//Data do Vencimento {"E1_VLCRUZ" ,aParcelas[nZ,2]},;//Valor do cheque/titulo {"E1_ACRESC" ,0 },;//Acréscimo {"E1_DECRESC",0 }})//Decréscimo Next nZ If Len(aParcelas) > 0 //Liquidação e reliquidação DbSelectArea("SE1") FINA460(,aCab,aItens,nOpc,cFiltro) //Inclusão //Este aviso funciona apenas para teste mono usuário Alert("Liquidação Incluída -> " + GetMv("MV_NUMLIQ")) Endif Else nOpc := 5 //Cancelamento FINA460(,,,nOpc,,cLiqCan) //Cancelamento Alert("Liquidação Cancelada -> " + cLiqCan) Endif EndIf Reset Environment Return |