FUNCAO QUE VERIFIQUE FERIADOS MOVEIS E FIXOS

THAYSE 15/08/2010 17:15:14
#350315
Pessoal, to fazendo um sistema de cartão ponto...
e todos os dias quando os funcionãrios batem o ponto, junto com todas as verificações de horas de entrada e saída
preciso que o progrma verifique se aquele dia é feriado ou não, gravando na tabela [Ô]horários[Ô], se é feriado, e qual feriado é.

Como posso fazer isso em VB6?
sendo que existem feriados móveis.

Obrigado desde já.
JAMESBOND007 16/08/2010 08:15:07
#350338
http://www.macoratti.net/dica65.htm
Veja se isto pode te ajudar


Uma dica diminua esta foto.
EDERMIR 16/08/2010 08:38:41
#350340
Citação:

:
Uma dica diminua esta foto.


Concordo!!!

Os feriados FIXOS são:
01/01 - Confraternização Universal
21/04 - Tiradentes
01/05 - Dia do Trabalho
07/09 - Independência
02/11 - Finados
15/11 - Proclamação da República
25/12 - Natal

Os feriados ESTADUAIS são:
09/07 - Revolução Contitucionalista (SP)
???? - Revolução Farroupilha (RS)
Etc

Os feriados MUNICIPAIS são:
20/01 - São Sebastião do Rio de Janiro (RJ)
25/01 - Fundação de São Paulo (SP)
20/11 - Conciência Nêgra (depende do município)
Etc

Os feriados MÓVEIS (Carnaval, Sexta-feira Santa, Corpus Cristi, Etc) devem ser cadastrados em uma banco de dados a cada ano. Você pode cadastrar os feriados fixos no banco também e solicitar a alteração apenas dos feriados MÓVEIS.

Então você pode fazer algo [Ô]parecido[Ô] com:
public funcion fFeriado(Wdata)
select function right(Wdata,5)
case [Ô]01/01[Ô]
msgbox([Ô]Confraternização Universal[Ô])
case [Ô]21/04[Ô]
msgbox([Ô]Tiradentes[Ô])
case [Ô]01/05[Ô]
msgbox([Ô]Dia do Trabalho[Ô])
case [Ô]07/09[Ô][Ô]
msgbox([Ô]Independência[Ô])
end select
FEDERHEN 16/08/2010 08:57:48
#350344
Tem outros ainda, como aniversário de emancipação de município e dia da reforma (em apenas alguns municipios)

Pode acontecer de uma empresa ter a matriz em um municipio (e ali é processada a folha de pagamento) e ela ter filiais em vários municipios onde cada um tem feriados que não coinsidem com os demais.

Neste caso você precisa criar uma tabela de feriados por unidade de operação.
FFCOUTO 16/08/2010 19:55:55
#350423
Abaixo segue rotina para calcular feriados móveis no Brasil

Function FeriadoMovel(ByVal Ano As Long, ByRef Carnaval As Date, ByRef SextaFeiraSanta As Date, ByRef Pascoa As Date, ByRef CorpusChristi As Date) As Boolean
On Local Error GoTo errHandle
Dim a, b, c, d, e, f, g, h, i, k, l, m, p, q As Integer
Dim feriado(1 To 4) As Date

FeriadoMovel = False

a = Ano Mod 19
b = Int(Ano / 100)
c = Ano Mod 100
d = Int(b / 4)
e = b Mod 4
f = Int((b + 8) / 25)
g = Int((b - f + 1) / 3)
h = (19 * a + b - d - g + 15) Mod 30
i = Int(c / 4)
k = c Mod 4
l = (32 + 2 * e + 2 * i - h - k) Mod 7
m = Int((a + 11 * h + 22 * l) / 451)
p = Int((h + l - 7 * m + 114) / 31)
q = (h + l - 7 * m + 114) Mod 31

[ô] *** A Páscoa será no dia Q + 1, do mês P ***
feriado(1) = CDate((q + 1) & [Ô]/[Ô] & p & [Ô]/[Ô] & Ano)

[ô] *** Carnaval: 47 dias antes da Páscoa ***
feriado(2) = feriado(1) - 47

[ô] *** Sexta Feira Santa (Paixão): 2 dias antes da Páscoa ***
feriado(3) = feriado(1) - 2

[ô] *** Corpus Christi: 60 dias após a Páscoa ***
feriado(4) = feriado(1) + 60

Carnaval = feriado(2)
SextaFeiraSanta = feriado(3)
Pascoa = feriado(1)
CorpusChristi = feriado(4)

FeriadoMovel = True
Exit Function

errHandle:
Debug.Print Err.Number & vbTab & Err.Description
FeriadoMovel = False
End Function


Para chamar a função faça

Private Sub Command1_Click()
Dim lAno As Long
Dim b As Boolean
Dim dCarnaval As Date, d6FeiraSanta As Date, dPascoa As Date, dCorpusChristi As Date

lAno = 2010
b = FeriadoMovel(lAno, dCarnaval, d6FeiraSanta, dPascoa, dCorpusChristi)

If b Then
MsgBox [Ô]Feriados móveis em [Ô] & lAno [Ô].[Ô] & vbCr & vbCr & _
[Ô]Carnaval: [Ô] & Format(dCarnaval, [Ô]dd/mm/yyyy[Ô]) & vbCr & _
[Ô]Sexta-feira Santa: [Ô] & Format(d6FeiraSanta, [Ô]dd/mm/yyyy[Ô]) & vbCr & _
[Ô]Páscoa: [Ô] & Format(dPascoa, [Ô]dd/mm/yyyy[Ô]) & vbCr & _
[Ô]Corpus Christi: [Ô] & Format(dCorpusChristi, [Ô]dd/mm/yyyy[Ô])
Else
MsgBox [Ô]Não foi possível determinar os feriados para o ano de [Ô] & lAno & [Ô].[Ô], vbCritical
End If
End Sub



Espero ter ajudado.
THAYSE 23/08/2010 10:39:48
#350968
Valeeeeeu pessoal!
Vou teste aqui.

PS: Tirei a foto, axo melhor né ^-^
Tópico encerrado , respostas não são mais permitidas