Prezados,
Após várias pesquisas, não consegui encontrar uma solução para a seguinte questão:
Em um formulário, preciso demonstrar os valores a receber para quatro semanas seguintes à data de referencia. Exemplo:
Semana 1 : Data Data Data Data Data Data Data Total
Valor Valor Valor Valor Valor Valor Valor soma
Semana 2 : Data Data Data Data Data Data Data Total
Valor Valor Valor Valor Valor Valor Valor soma
Semana 3 : Data Data Data Data Data Data Data Total
Valor Valor Valor Valor Valor Valor Valor soma
Semana 4 : Data Data Data Data Data Data Data Total
Valor Valor Valor Valor Valor Valor Valor soma
Porém, tem um problema: A semana financeira da empresa, começa na 6ª Feira de uma semana e vai até a 5ª Feira da outra semana. Creio que isso não seria problema, pois eu escolheria, como data de referencia, a sexta-feira.
Gostaria, também, no caso de algum dia não tiver nada a receber, que o formulário, constasse aquele dia com o valor "zero".
Sei que o código pode estar ligado com o número da semana do ano,
DatePart("ww", DataVencimento), porém não estou conseguindo fazer com que o formulário traga as informações do jeito que preciso. Com a ajuda do Avelino, cheguei ao seguinte código:
Private Sub dta0_AfterUpdate()
Dim rs As DAO.Recordset
Dim strsSql As String
Dim strFiltro As String
Dim p As Byte
Dim dblTotal As Double
Call fncLimparCampos
strFiltro = "DataVencimento Between #" & Format(Me!dta0, "mm/dd/yyyy") & "# AND #" & DateAdd("d", 28, Format(Me!dta0, "mm/dd/yyyy")) & "#;"
strSql = " SELECT * FROM qryValoresReceber WHERE " & strFiltro
Set rs = CurrentDb.OpenRecordset(strSql)
p = 1
Do While Not rs.EOF
Me("val" & p) = rs!SomadeValorReceber
Me("dta" & p) = rs!DataVencimento
dblTotal = dblTotal + rs!SomadeValorReceber
p = p + 1
rs.MoveNext
Loop
Me!totgeral = dblTotal
rs.Close
Set rs = Nothing
End Sub
Private Sub fncLimparCampos()
Dim j As Byte
For j = 1 To 28
Me("val" & j) = Null
Me("dta" & j) = Null
Next
Me!totgeral = Null
End Sub
Private Sub Form_Timer()
On Error Resume Next
If DatePart("ww", IData) <> Me!sem1.Value Then
IData = DateAdd("d", 1, IData)
If Me!sem1.Value = DatePart("ww", IData) Then
Me!dta1 = IData
Me!txt0.SetFocus
End If
End If
End Sub
Alguém poderia dar uma luz?
Agradeço antecipadamente.
Após várias pesquisas, não consegui encontrar uma solução para a seguinte questão:
Em um formulário, preciso demonstrar os valores a receber para quatro semanas seguintes à data de referencia. Exemplo:
Semana 1 : Data Data Data Data Data Data Data Total
Valor Valor Valor Valor Valor Valor Valor soma
Semana 2 : Data Data Data Data Data Data Data Total
Valor Valor Valor Valor Valor Valor Valor soma
Semana 3 : Data Data Data Data Data Data Data Total
Valor Valor Valor Valor Valor Valor Valor soma
Semana 4 : Data Data Data Data Data Data Data Total
Valor Valor Valor Valor Valor Valor Valor soma
Porém, tem um problema: A semana financeira da empresa, começa na 6ª Feira de uma semana e vai até a 5ª Feira da outra semana. Creio que isso não seria problema, pois eu escolheria, como data de referencia, a sexta-feira.
Gostaria, também, no caso de algum dia não tiver nada a receber, que o formulário, constasse aquele dia com o valor "zero".
Sei que o código pode estar ligado com o número da semana do ano,
DatePart("ww", DataVencimento), porém não estou conseguindo fazer com que o formulário traga as informações do jeito que preciso. Com a ajuda do Avelino, cheguei ao seguinte código:
Private Sub dta0_AfterUpdate()
Dim rs As DAO.Recordset
Dim strsSql As String
Dim strFiltro As String
Dim p As Byte
Dim dblTotal As Double
Call fncLimparCampos
strFiltro = "DataVencimento Between #" & Format(Me!dta0, "mm/dd/yyyy") & "# AND #" & DateAdd("d", 28, Format(Me!dta0, "mm/dd/yyyy")) & "#;"
strSql = " SELECT * FROM qryValoresReceber WHERE " & strFiltro
Set rs = CurrentDb.OpenRecordset(strSql)
p = 1
Do While Not rs.EOF
Me("val" & p) = rs!SomadeValorReceber
Me("dta" & p) = rs!DataVencimento
dblTotal = dblTotal + rs!SomadeValorReceber
p = p + 1
rs.MoveNext
Loop
Me!totgeral = dblTotal
rs.Close
Set rs = Nothing
End Sub
Private Sub fncLimparCampos()
Dim j As Byte
For j = 1 To 28
Me("val" & j) = Null
Me("dta" & j) = Null
Next
Me!totgeral = Null
End Sub
Private Sub Form_Timer()
On Error Resume Next
If DatePart("ww", IData) <> Me!sem1.Value Then
IData = DateAdd("d", 1, IData)
If Me!sem1.Value = DatePart("ww", IData) Then
Me!dta1 = IData
Me!txt0.SetFocus
End If
End If
End Sub
Alguém poderia dar uma luz?
Agradeço antecipadamente.