6 Replies Latest reply: Apr 24, 2014 5:26 PM by Aderlan Rodrigues RSS

    Período especiais no ano

      Preciso criar uma espécie de um calendário anual com alguns períodos especiais. Ex:

      Dia das mães

      Dia dos pais

      Dia dos namorados

      Carnaval

      Natal

      Etc...

       

      Assim consigo medir as vendas em algum peíodo em especial.

        • Período especiais no ano
          Clever Anjos

          Carnaval e Semana Santa não tem uma regra específica (na verdade tem, mas é baseado em ciclo lunar, etc).
          Sugiro que crie uma tabela em seu sistema com o campo data como chave e um flag indicando se é dia util ou não.

            • Período especiais no ano

              Clever  , muito obrigado pela dica vou fazer !!!!

                • Período especiais no ano

                  Senhores boa tarde.

                   

                  Estou no mesmo dilema a verificação de dias uteis ou não, considernado os feriados no Brazil.

                   

                  Só que não quero fazer a atualização ano a ano,  assim criei o script a seguir (ainda nao finalizado) para achar as datas dos feriados fixos e móveis do Brasil.

                   

                   

                  Exite um calculo para verificar a pascoa e consequentemente depois de Achar a Pascoa encontrar os demais feriados móveis do ano corrente.

                   

                  Vespera de Carnaval  = Pascoa - 48 dias

                  Carnaval  = Pascoa - 47 dias

                  Cinzas = Pascoa - 46 dias

                  Sexta Feira Santa = Pascoa - 2 dias

                  Corpus Christi = Pascoa + 60 dias

                   

                   

                  Para os feriados fixos criei os dados em in line, criei os aniverários de cidade para Itajaí e São Paulo pois são os dias que os banco não funcionam nas filiais da emrpesa que eu presto serviço.

                   

                   

                  Até ai tudo bem cheguei no resultados dos campos

                   

                  Porem ainda preciso popular todos os campos em uma unica tabela.  Maiores detalhes depois do código do script.

                   

                  Cote:

                   

                  Calendar:

                   

                  LOAD * INLINE [

                      Holiday, Desc

                      01/01/, Confraternização Universal

                      01/25/, Aniversário São Paulo

                      04/21/, Tiradentes

                      05/01/, Dia do Trabalho

                      06/15/, Aniversário Itajaí

                      09/07/, Independência do Brasil

                      10/12/, Nossa Sra. Aparecida - Padroeira do Brasil

                      11/02/, Finados

                      11/15/, Proclamação da República

                      12/24/, Véspera de Natal

                      12/25/, Natal

                      12/31/, Véspera de Ano Novo];

                     

                         // {Feriados Móveis}

                   

                  Calendario:

                     

                  Load

                  Date((Holiday&(Year(Today()))),'M/DD/YYYY') As Holiday,

                  //Para anos entre 1901 e 2099: X = 24 e Y = 5 para anos de 10

                  if(((if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

                  + // +

                  (Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

                  >=10 // Maior que 9

                      ),

                      (

                  '4/'& // Abril

                      (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

                  + // +

                  (Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

                    -9 // Menos 9

                      ) &'/'&(year(Today())) // YYYY

                      ), ('3/'& // Março

                        (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

                  + // +

                  (Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

                    +22 // Mais 22

                      )&'/'&(year(Today())) // YYYY

                      )))

                      ='4/26/2076'), '4/19/2049',

                  if(((if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

                  + // +

                  (Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

                  >=10 // Maior que 9

                      ),

                      (

                  '4/'& // Abril

                      (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

                  + // +

                  (Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

                    -9 // Menos 9

                      ) &'/'&(year(Today())) // YYYY

                      ), ('3/'& // Março

                        (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

                  + // +

                  (Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

                    +22 // Mais 22

                      )&'/'&(year(Today())) // YYYY

                      )))    ='4/25/2049'), '4/18/2049',

                  (if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

                  + // +

                  (Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

                  >=10 // Maior que 9

                      ),

                      (

                  '4/'& // Abril

                      (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

                  + // +

                  (Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

                    -9 // Menos 9

                      ) &'/'&(year(Today())) // YYYY

                      ), ('3/'& // Março

                        (((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d

                  + // +

                  (Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e

                    +22 // Mais 22

                      )&'/'&(year(Today())) // YYYY

                      ))))) As Pascoa,  // Se (d + e) > 9 então DIA = (d + e - 9) e MES = Abril senão DIA = (d + e + 22) e MES = Março

                  Desc

                  Resident Calendar;

                  Drop Table Calendar;

                   

                  Calendarios:

                   

                  Load

                  Date(if( Year(today())>1, Pascoa - 48, ''),'M/DD/YYYY') As Vespera,

                  Date(if( Year(today())>1, Pascoa - 47, ''),'M/DD/YYYY') As Carnaval,

                  Date(if( Year(today())>1, Pascoa - 46, ''),'M/DD/YYYY') As Cinzas,

                  Date(if( Year(today())>1, Pascoa - 2, ''),'M/DD/YYYY') As SextaFeiraSanta,

                  Date(if( Year(today())>1, Pascoa + 60, ''),'M/DD/YYYY') As CorpusChristi,

                  Pascoa,

                  Holiday,

                  Desc

                  Resident Calendario;

                  Drop Table Calendario;

                   

                  Calendarios:

                   

                  Load

                   

                   

                   

                   

                  Vespera,

                  Carnaval,

                  Cinzas,

                  SextaFeiraSanta,

                  CorpusChristi,

                  Pascoa,

                  Holiday,

                   

                   

                  Desc,

                  networkdays('01/01/2011', Today(), Holiday) As NetWorkDay // Calula os dias uteis de 01-Jan-2011 até Hoje considerando os feriados (Holyday).

                  Resident Calendarios;

                  Drop Table Calendarios;

                   

                  Unquote

                   

                  Resultado:

                   

                  HolidayDesc
                  1/1/2011Confraternização  Universal
                  1/25/2011Aniversário São Paulo
                  4/21/2011Tiradentes
                  5/1/2011Dia do Trabalho
                  6/15/2011Aniversário Itajaí
                  9/7/2011Independência do  Brasil
                  10/12/2011Nossa Sra. Aparecida  - Padroeira do Brasil
                  11/2/2011Finados
                  11/15/2011Proclamação da  República
                  12/24/2011Véspera de Natal
                  12/25/2011Natal
                  12/31/2011Véspera de Ano Novo

                   

                   

                   

                  PascoaVesperaCarnavalCinzasCorpusChristiSextaFeiraSanta
                  4/24/20113/7/20113/8/20113/9/20116/23/20114/22/2011

                   

                   

                  Todos esses dados estão em uma unica tablea

                  export.png

                   

                  Pergunto diante da realidade ai vai a pergunta para finalizar este assunto de calendário com feriados fixos e móveis no Brasil.

                   

                  Como colocar todas as colunas em apenas 01 coluna ?

                   

                  Colunas ( Vespera, Carnaval, Cinzas, SextaFeiraSanta, CorpusChristi, Pascoa, Holiday) As nova Coluna

                   

                  Desde já agradeço

                   

                  ps: observem que trabalho com a data em Mes/Dia/Ano ('M/DD/YYYY')

                    • Período especiais no ano

                      Boa Tarde,

                       

                      Você consegue manipular as informações utilizando funções do sistema: (FieldName() e NoOfFields() )

                       

                      Assumindo que no seu script a ultima tabela "Calendarios" alterei para "CALENDARIO_TMP", o tratamento que consegui realizar segue abaixo. (crie uma nova aba e copie e cole):

                       

                      FERIADO_FIXO:
                      LOAD
                        Holiday,
                        Desc
                      RESIDENT CALENDARIO_TMP;

                      FERIADO_VARIAVEL_TMP:
                      LOAD
                      Vespera,
                      Carnaval,
                      Cinzas,
                      SextaFeiraSanta,
                      CorpusChristi,
                      Pascoa
                      RESIDENT CALENDARIO_TMP;

                      LET qtde_fields = NoOfFields('FERIADO_VARIAVEL_TMP');

                      FOR i=1 TO qtde_fields

                      LET campo=FieldName($(i), 'FERIADO_VARIAVEL_TMP');
                        FERIADO:
                      LOAD
                        $(campo) AS Holiday,
                        '$(campo)' AS Desc
                      RESIDENT FERIADO_VARIAVEL_TMP;

                      NEXT
                      // a tabela anterior contem a mesma qtde de campos, o concatenate é realizado automaticamente.
                      FERIADO:
                      LOAD *
                      RESIDENT FERIADO_FIXO;

                       

                      DROP TABLE CALENDARIO_TMP;
                      DROP TABLE FERIADO_VARIAVEL_TMP;

                        • Re: Período especiais no ano
                          Eduaro Correa muito obrigado por sua ajuda.
                          Realizei algumas adaptações para a minha realidade e tenho o resultado final que eu esperava.  Ponto para você!
                          Abaixo compartilho o código todos para quem desejar ter uma tabela anual com os calendários do Brasil.
                          ___________________________________________________________________________________________________________________________
                          SET
                          ThousandSep=',';
                          SET
                          DecimalSep='.';
                          SET
                          MoneyThousandSep=',';
                          SET
                          MoneyDecimalSep='.';
                          SET
                          MoneyFormat='$#,##0.00;($#,##0.00)';
                          SET
                          TimeFormat='h:mm:ss TT';
                          SET
                          DateFormat='M/D/YYYY';
                          SET
                          TimestampFormat='M/D/YYYY h:mm:ss[.fff] TT';
                          SET
                          MonthNames='Jan;Feb;Mar;Apr;May;Jun;Jul;Aug;Sep;Oct;Nov;Dec';
                          SET
                          DayNames='Mon;Tue;Wed;Thu;Fri;Sat;Sun';
                          //*****************************************************Feriados*************************************************************************************
                          // Feriados Fixos
                          Calendar:
                          LOAD
                          * INLINE [
                          ;
                          // {Feriados Móveis}
                          Pascoa:
                          Load
                          ((Holiday&(Year(Today()))),'M/DD/YYYY') As Holiday,
                          //Para anos entre 1901 e 2099: X = 24 e Y = 5 para anos de 10
                          if(((if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
                          +
                          // +
                          (
                          Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
                          >=
                          10 // Maior que 9
                          ),
                          (
                          '4/'
                          & // Abril
                          (((
                          Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
                          +
                          // +
                          (
                          Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
                          -
                          9 // Menos 9
                          ) &
                          '/'&(year(Today())) // YYYY
                          ), (
                          '3/'& // Março
                          (((
                          Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
                          +
                          // +
                          (
                          Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
                          +
                          22 // Mais 22
                          )&
                          '/'&(year(Today())) // YYYY
                          )))
                          =
                          '4/26/2076'), '4/19/2049',
                          if
                          (((if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
                          +
                          // +
                          (
                          Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
                          >=
                          10 // Maior que 9
                          ),
                          (
                          '4/'
                          & // Abril
                          (((
                          Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
                          +
                          // +
                          (
                          Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
                          -
                          9 // Menos 9
                          ) &
                          '/'&(year(Today())) // YYYY
                          ), (
                          '3/'& // Março
                          (((
                          Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
                          +
                          // +
                          (
                          Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
                          +
                          22 // Mais 22
                          )&
                          '/'&(year(Today())) // YYYY
                          )))     =
                          '4/25/2049'), '4/18/2049',
                          (
                          if((((Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
                          +
                          // +
                          (
                          Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
                          >=
                          10 // Maior que 9
                          ),
                          (
                          '4/'
                          & // Abril
                          (((
                          Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
                          +
                          // +
                          (
                          Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
                          -
                          9 // Menos 9
                          ) &
                          '/'&(year(Today())) // YYYY
                          ), (
                          '3/'& // Março
                          (((
                          Mod(((19)*(Mod(Year(Today()),19)))+(24),30)) // d
                          +
                          // +
                          (
                          Mod((2*(Mod(Year(Today()),4))+4*(Mod(Year(Today()),7))+6*(Mod(((19)*(Mod(Year(Today()),19)))+(24),30))+5),7)))// e
                          +
                          22 // Mais 22
                          )&
                          '/'&(year(Today())) // YYYY
                          )))))
                          As Pascoa, // Se (d + e) > 9 então DIA = (d + e - 9) e MES = Abril senão DIA = (d + e + 22) e MES = Março
                          Desc
                          Resident
                          Calendar;
                          Drop
                          Table Calendar;
                          Calendario_Temporario:
                          Load
                          Date
                          (if( Year(today())>1, Pascoa - 48, ''),'M/DD/YYYY') As Vespera_de_Carnaval,
                          Date
                          (if( Year(today())>1, Pascoa - 47, ''),'M/DD/YYYY') As Carnaval,
                          Date
                          (if( Year(today())>1, Pascoa - 46, ''),'M/DD/YYYY') As Cinzas,
                          Date
                          (if( Year(today())>1, Pascoa - 2, ''),'M/DD/YYYY') As Sexta_Feira_Santa,
                          Date
                          (if( Year(today())>1, Pascoa + 60, ''),'M/DD/YYYY') As Corpus_Christi,
                          Date
                          (Pascoa, 'M/DD/YYYY') As Pascoa,
                          Holiday
                          ,
                          Desc
                          Resident
                          Pascoa;
                          Drop
                          Table Pascoa;
                          Feriados_Fixo:
                          load
                          Holiday
                          ,
                          Desc
                          Resident
                          Calendario_Temporario;
                          Feriado_Variavel:
                          Load
                          Vespera_de_Carnaval
                          ,
                          Carnaval
                          ,
                          Cinzas
                          ,
                          Sexta_Feira_Santa
                          ,
                          Corpus_Christi
                          ,
                          Pascoa
                          Resident
                          Calendario_Temporario;
                          Drop
                          Table Calendario_Temporario;
                          LET
                          qtde_fields = NoOfFields('Feriado_Variavel');
                          FOR
                          i=1 TO qtde_fields
                          LET
                          campo = FieldName($(i) , 'Feriado_Variavel');
                          Feriado:
                          Load
                          $(campo)
                          As Holiday,
                          if
                          (upper('$(campo)' )='VESPERA_DE_CARNAVAL', 'Véspera de Carnaval',
                          if
                          (upper('$(campo)' )='SEXTA_FEIRA_SANTA', 'Sexta Feira Santa',
                          if
                          (upper('$(campo)' )='CORPUS_CHRISTI', 'Corpus Christi',
                          if
                          (upper('$(campo)' )='CINZAS', 'Quarta Feira de Cinzas', '$(campo)' )))) As Desc
                          Resident
                          Feriado_Variavel;
                          Next
                          Feriado:
                          // a tabela anterior contem a mesma qtde de campos, o concatenate é realizado automaticamente.
                          Load
                          Date
                          (Holiday, 'M/DD/YYYY') As Holiday,
                          Desc
                          Resident
                          Feriados_Fixo;
                          Drop
                          Table Feriado_Variavel;
                          ___________________________________________________________________________________________________________________________
                          Muito obrigado
                          Abraços Weslley!
                          Date
                          • Re: Período especiais no ano
                            Aderlan Rodrigues

                            Já que o Evandro não marcou, marquei sua resposta como certa.

                             

                            O código é muito bom, você não tem interesse de fazer um QVW de exemplo e postar aqui na comunidade como arquivo? #ficaadica

                             

                            Abraço.