CALCULO DE FALTAS INJUSTIFICADA MUITO CHATO

LUCIANORW 27/10/2009 15:31:55
#326370
Boa tarde!!!
Estou com pequeno problema para resolver, e está me dando nó na cabeça.
Tenho as semanas do mês em uma tabela:
semana..data_ini........data_fin
1............01/10/2009...03/10/2009
2............04/10/2009...10/10/2009
3............11/10/2009...17/10/2009
4............18/10/2009...24/10/2009
5............25/10/2009...31/10/2009
Vamos supor que tenho as seguintes datas:
faltas:02/10, semana 1
faltas:06/10, 08/10 e 09/10, semana 2
faltas:26/10, 28/10 e 30/10, semana 5
O que me foi passado, é que se o funcionário tiver 01 falta injustificada na semana, ele perde o fim de semana.
O que estou encontrando dificuldade é justamente em encontrar estes dias de acordo com a semana em que ocorreu o evento, no caso ficaria assim na tabela de calculos
Codigo:103 - Falta injustifica => Qtde = 3 => Valor R$ 1,00
Isto tudo em um período entre datas, pois o calculo é feito 2 vezes ao mês (de 01 a 15 e de 16 a 30/31).
Se alguem tiver uma idéia e puder me ajudar, fico grato.
[]s
Luciano
Access 2003
MARCELO.TREZE 27/10/2009 18:26:12
#326381
Resposta escolhida
quais os nomes dos campos da tabela?

qual o Banco de Dados?
MARCELO.TREZE 27/10/2009 18:34:02
#326382
mas tente isto

sql = [Ô]SELECT COUNT(semana), CodFalta FROM tabela WHERE CodFalta = 103 BETWEEN dataini = #[Ô] & dataini.txt & [Ô]# And DataFim = #[Ô] & DataFim.Text & [Ô]# GROUP BY semana[Ô]

LUCIANORW 28/10/2009 06:42:29
#326399
Bom dia Marcelo!!!
Grato pela atenção.
Fiz um POG de como preciso, mas falar a verdade, ficou muuuito feio, apesar de funcionar, veja como ficou e se puder me dar uma idéia de como reduzir, fico grato.
[]s
Luciano
 
Function teste()
[ô]/// cod 103 - perca do dia de descanso
Dim vi As Integer, vii As Integer
Dim qtde_110 As Integer, qtde_semana As Integer, v_qtde103 As Integer
Dim v_semana_1 As Integer, v_semana_2 As Integer, v_semana_3 As Integer, v_semana_4 As Integer, v_semana_5 As Integer, v_semana_6 As Integer, v_semana_7 As Integer
v_semana_1 = 0
v_semana_2 = 0
v_semana_3 = 0
v_semana_4 = 0
v_semana_5 = 0
v_semana_6 = 0
v_qtde103 = 0
vi = 0
vii = 0
Set tbl3 = CurrentDb.OpenRecordset([Ô]SELECT tbl_lanc_provdesc.cod_func, tbl_lanc_provdesc.data_lanc, tbl_lanc_provdesc.cod_provdesc [Ô] & _
[Ô]FROM tbl_lanc_provdesc [Ô] & _
[Ô]WHERE (((tbl_lanc_provdesc.cod_func) = [Ô] & tbl!id_func & [Ô]) And ((tbl_lanc_provdesc.data_lanc) >= #[Ô] & Format(Form_frm_outros_calc_adtomensal.data_ini, [Ô]mm/dd/yyyy[Ô]) & [Ô]# And (tbl_lanc_provdesc.data_lanc) <= #[Ô] & Format(Form_frm_outros_calc_adtomensal.data_fin, [Ô]mm/dd/yyyy[Ô]) & [Ô]#) And ((tbl_lanc_provdesc.cod_provdesc) = 110)) [Ô] & _
[Ô]ORDER BY tbl_lanc_provdesc.data_lanc;[Ô])
If tbl3.EOF = False Then
tbl3.MoveLast
tbl3.MoveFirst
qtde_110 = tbl3.RecordCount
For vi = 1 To qtde_110
Set tbl4 = CurrentDb.OpenRecordset([Ô]SELECT tbl_outros_parametros_semana.num_semana, tbl_outros_parametros_semana.data_ini, tbl_outros_parametros_semana.data_fin [Ô] & _
[Ô]FROM tbl_outros_parametros_semana [Ô] & _
[Ô]ORDER BY tbl_outros_parametros_semana.num_semana;[Ô])
tbl4.MoveLast
tbl4.MoveFirst
qtde_semana = tbl4.RecordCount
For vii = 1 To qtde_semana
If Format(tbl3!data_lanc, [Ô]mm/dd/yyyy[Ô]) >= Format(tbl4!data_ini, [Ô]mm/dd/yyyy[Ô]) And Format(tbl3!data_lanc, [Ô]mm/dd/yyyy[Ô]) <= Format(tbl4!data_fin, [Ô]mm/dd/yyyy[Ô]) Then
If tbl4!num_semana = 1 And v_semana_1 = 0 Then
v_qtde103 = v_qtde103 + 1
v_semana_1 = 1
ElseIf tbl4!num_semana = 2 And v_semana_2 = 0 Then
v_qtde103 = v_qtde103 + 1
v_semana_2 = 1
ElseIf tbl4!num_semana = 3 And v_semana_3 = 0 Then
v_qtde103 = v_qtde103 + 1
v_semana_3 = 1
ElseIf tbl4!num_semana = 4 And v_semana_4 = 0 Then
v_qtde103 = v_qtde103 + 1
v_semana_4 = 1
ElseIf tbl4!num_semana = 5 And v_semana_5 = 0 Then
v_qtde103 = v_qtde103 + 1
v_semana_5 = 1
ElseIf tbl4!num_semana = 6 And v_semana_6 = 0 Then
v_qtde103 = v_qtde103 + 1
v_semana_6 = 1
ElseIf tbl4!num_semana = 7 And v_semana_7 = 0 Then
v_qtde103 = v_qtde103 + 1
v_semana_7 = 1
End If
End If
tbl4.MoveNext
Next vii
tbl3.MoveNext
Next vi

Set tbl2 = CurrentDb.OpenRecordset([Ô]tbl_temp_calculo_adto[Ô])
With tbl2
.AddNew
!cod_func = tbl!id_func
!cod_provdesc = 103
!qtde = v_qtde103
!vr = Round((tbl!vr_salario / 30) * v_qtde103, 2)
.Update
End With
tbl2.Close
Set tbl2 = Nothing
tbl4.Close
Set tbl4 = Nothing
End If
tbl3.Close
Set tbl3 = Nothing
End Function
Tópico encerrado , respostas não são mais permitidas