Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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;
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.
Clever , muito obrigado pela dica vou fazer !!!!
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:
Holiday | Desc |
1/1/2011 | Confraternização Universal |
1/25/2011 | Aniversário São Paulo |
4/21/2011 | Tiradentes |
5/1/2011 | Dia do Trabalho |
6/15/2011 | Aniversário Itajaí |
9/7/2011 | Independência do Brasil |
10/12/2011 | Nossa Sra. Aparecida - Padroeira do Brasil |
11/2/2011 | Finados |
11/15/2011 | Proclamação da República |
12/24/2011 | Véspera de Natal |
12/25/2011 | Natal |
12/31/2011 | Véspera de Ano Novo |
Pascoa | Vespera | Carnaval | Cinzas | CorpusChristi | SextaFeiraSanta |
4/24/2011 | 3/7/2011 | 3/8/2011 | 3/9/2011 | 6/23/2011 | 4/22/2011 |
Todos esses dados estão em uma unica tablea
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')
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;
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.