Ultimo dia do mes

Discussão em 'Progress 4GL' iniciado por eder.luca2012, Julho 20, 2012.

  1. eder.luca2012

    eder.luca2012 Membro Participativo

    Pessoal boa noite

    Alguém sabe me dizer se existe alguma função do progress que se eu passar o ano e o mês ela me retorna o ultimo dia desse mês?
  2. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Função pronta não existe (pelo menos que eu saiba), mas existe sempre os "jeitinhos", segue um deles:

    Código:
    
    def var dt-ult-mes      as date     no-undo.
    
    assign  dt-ult-mes = today 
            dt-ult-mes = dt-ult-mes - day(dt-ult-mes) + 32
            dt-ult-mes = dt-ult-mes - day(dt-ult-mes).
    
    message dt-ult-mes view-as alert-box.
    
    
    01) Primeramente seto uma variavel com a data que desejo;
    02) Depois subtraio desta data os dias da data, por exemplo: Se escolhi 10/08/2012, tiro 10 da data e fica 31/07/2012, ai somo 32 a esta data, dando 01/09/2012;
    03) Então tiro os dias desta nova data e chego a data do ultimo dia do mes.
  3. TrombiniSP

    TrombiniSP Membro Participativo

    Olá,

    Com este cáculo vc já pode criar sua própria função.

    Código:
    def var dt-ult-mes      as date     no-undo.
    
    assign  dt-ult-mes = today
            dt-ult-mes = DATE(MONTH(dt-ult-mes) + 1,01,YEAR(dt-ult-mes)) - 1.
    
    message dt-ult-mes view-as alert-box.
    
    Abraço.
  4. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Cuidado apenas quando o mês for 12, pois assim ele somara 12 + 1 que será igual a 13 e nao mudará o ANO, desta maneira tem que testar o mês, se for 12 será então igual a 01 e o ano somará +1.

    Código:
    
    def var dt-ult-mes      as date     no-undo.
    
    assign  dt-ult-mes = 12/15/2012
            dt-ult-mes = if month(dt-ult-mes) <> 12 then date(month(dt-ult-mes) + 1,01,year(dt-ult-mes)) - 1 else date(01,01,year(dt-ult-mes) + 1) - 1 .
    
    message dt-ult-mes view-as alert-box.
    
    
  5. TrombiniSP

    TrombiniSP Membro Participativo

    Assim se resolve sem precisar testar.
    Valeu pela observação. Obrigado.

    Código:
    DEF VAR dt-ult-mes      AS DATE     NO-UNDO.
    
    ASSIGN  dt-ult-mes = 12.06.2012
            dt-ult-mes = ADD-INTERVAL(dt-ult-mes,1,"months")
            dt-ult-mes = DATE(MONTH(dt-ult-mes),01,YEAR(dt-ult-mes)) - 1.
    
    MESSAGE dt-ult-mes
        VIEW-AS ALERT-BOX INFO BUTTONS OK.
    

  6. eduardo.leite

    eduardo.leite Equipe de Suporte Moderador Equipe de Suporte

    Legal Trombini,

    Vamos reduzir mais ainda a lógica, escrevendo menos (ja testei até para os anos bisexto e sempre pega o ultimo dia)

    Código:
    
    def var dt-ult-mes      as date     no-undo init 12.06.2012.
    
    assign dt-ult-mes = add-interval(dt-ult-mes,1,"months") - day(dt-ult-mes).
    
    message dt-ult-mes view-as alert-box info buttons ok.
    
    

Compartilhe esta Página