Como fazer regra no advpl?

Como fazer regra seguindo as determinadas informações:

Para Títulos "À Vencer", considere que a Data de Vencimento (E1_VENCREA) é superior a data informada nos parâmetros do relatório, e o saldo do títulos (E1_SALDO) é diferente de zero.

Para Títulos "Vencidos", considere que a Data de Vencimento (E1_VENCREA) é inferior a data informada nos parâmetros do relatório, e o saldo do títulos (E1_SALDO) é maior que zero.

É para acrescentar duas colunas dentro de um relatório já existente, e até então desenvolvi o fonte abaixo. Mas não está funcionando. Essas colunas são de títulos vencidos e títulos á vencer, Onde títulos á vencer retornariam SIM ou NÃO e Títulos Vencidos retornariam todos os títulos vencidos daquele cliente. Sou iniciante em advpl e quem puder estar me ajudando, desde já agradeço :3

static function fTitulos(cCodCli,cLjCli)

    Local aArea        :=    GetArea()                                    //GetArea: Armazena dados de um alias em um array, que pode ser restaurado depois com a função RestArea
    Local aRet        :=    {}
    Local cAlias    :=    GetNextAlias()                                //GetNextAlias: Busca um alias disponível para utilização.
    Local cStat        :=    ""
    Local cStat1    :=    ""

    BeginSql Alias cAlias

        // SELECT E1_PREFIXO, E1_NUM, E1_VENCREA, E1_SALDO
        // FROM %TABLE:SE1%
        // WHERE %NOTDEL% AND
        // E1_CLIENTE = %EXP:cCodCli% AND 
        // E1_LOJA = %EXP:cLjCli% AND
        // E1_SALDO > 0

        //"À Vencer"
         SELECT E1_PREFIXO, E1_NUM, E1_VENCREA, E1_SALDO, ZZI_DATA            //seleciona os campos necessários da tabela
         FROM     SE1010, ZZI010                                                 //seleciona as tabelas
         WHERE     E1_VENCREA > ZZI_DATA AND                                     //data é superior a data informada nos parâmetros do relatório
                 E1_SALDO <> 0                                                  //saldo é diferente de zero
                 //D_E_L_E_T_ <> '*'

        UNION ALL //Faz a união das query

        //"Vencidos"
        SELECT     E1_PREFIXO, E1_NUM, E1_VENCREA, E1_SALDO, ZZI_DATA             //seleciona os campos necessários da tabela
        FROM     SE1010, ZZI010                                                 //seleciona as tabelas
        WHERE     E1_VENCREA < ZZI_DATA AND                                     //data é inferior a data informada nos parâmetros do relatório
                E1_SALDO > 0                                                  //saldo é maior que zero
                //D_E_L_E_T_ <> '*'
    EndSql

    dbSelectArea(cAlias)                                                     //dbSelectArea: seleciona a area 
    (cAlias)->(dbGoTop())                                                    //DBGoTop: Posiciona no primeiro registro lógico.    
    While (cAlias)->(!eof())                                                //EoF: Verifica se um alias se encontra no fim do arquivo

        //If (cAlias)->E1_VENCREA <= DToC(DATE(  ))
        If (cAlias)->E1_VENCREA <= DTOC(ddatabase)
        //If (cAlias)->E1_VENCREA <= ZZI_DATA
            cStat    :=    "SIM"
        Else
            cStat    :=    "NÃO"
        EndIf
            //cStat1    +=    (cAlias)->E1_PREFIXO +"/"+ (cAlias)->E1_NUM +"/"+ CTOD((cAlias)->E1_VENCREA) + "/" + Transform(E1_SALDO,"@E 999,999,999.99")
            cStat1    +=    (cAlias)->E1_PREFIXO +"/"+ (cAlias)->E1_NUM +"/"+ ((cAlias)->E1_VENCREA) + "/" + Transform(E1_SALDO,"@E 999,999,999.99")

        (cAlias)-> (DBSKIP( ))
    EndDo    
    aAdd(aRet,{cStat,cStat1})
    RestArea(aArea) 
    (cAlias)->(dbCloseArea())
return aRet
compartilhar
  • Olá Agnes, pode me dar mais informações? Essa regra é em uma query ou pegando diretamente da tabela que está posicionada?

    Roberta Soares dos Santos Alves   05 de Dec de 2023
  • Boa tarde Agnes, o que seria isso ? Relatorio , fonte padrao , customizações

    Lucas de Paulo Santos   05 de Dec de 2023
  • Coloquei o código fonte para melhor interpretação do problema

    Agnes_Vitoria_Dev   12 de Dec de 2023
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags advpl regra ou faça a sua própria pergunta.