DATEADD - PARCELAS

MOREIRA 17/11/2014 17:05:36
#442572

Olá pessoal, boa tarde. essa rotina estou gerando parcelas... até aí.. Blz..
Exemplo...: Preciso informar um intervalo a partir da primeiro

numero de parcela = 2

Informar o intervalo 10 dias a partir

1ª - vencimento. 17-11-2014

2ª - vencimento 27-11-2014

3ª etc...






  Private Sub chameleonButton3_Click()

On Error Resume Next
Dim IntContador As Integer
Dim IntNumeroParcelas As Integer
Dim VarDataVencimento As String
Dim ValDataVencimento As String
Dim MeuValorPrincipal As Double
Dim intervalo As Integer

intervalo = 10

IntNumeroParcelas = txtfechavenda_quant_parcelas.text
ValDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
VarDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
MeuValorPrincipal = lblvalor_venda_orcto.Caption
MeuValorPrincipal = CDbl(MeuValorPrincipal) / Val(IntNumeroParcelas)

Call abrir_conexao_base_dados
For IntContador = 1 To IntNumeroParcelas
VarDataVencimento = DateAdd([Ô]m[Ô], IntContador - 1, ValDataVencimento)
Set rst = New ADODB.Recordset
sql = [Ô]Insert Into tb_titulos_receber (titulo_valor_receber, titulo_data_vencto)[Ô]
sql = sql & [Ô]values([Ô]
sql = sql & [Ô][ô][Ô] & Replace(CDbl(MeuValorPrincipal), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô]
sql = sql & [Ô][ô][Ô] & Format(VarDataVencimento, [Ô]yyyy/mm/dd[Ô]) & [Ô][ô])[Ô]
Conexao.Execute sql
Next IntContador

End Sub
LEANDROVIP 17/11/2014 17:17:19
#442573
Boa tarde, se entendi direito.. ficaria assim..

VarDataVencimento - Guarda a primeira data de vencimento? Se sim, é só adicionar depois da inclusão no banco a nova data de vencimento.. no caso

 VarDataVencimento = cDate(VarDataVencimento) + intervalo 


  
On Error Resume Next
Dim IntContador As Integer
Dim IntNumeroParcelas As Integer
Dim VarDataVencimento As String
Dim ValDataVencimento As String
Dim MeuValorPrincipal As Double
Dim intervalo As Integer

intervalo = 10

IntNumeroParcelas = txtfechavenda_quant_parcelas.text
ValDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
VarDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
MeuValorPrincipal = lblvalor_venda_orcto.Caption
MeuValorPrincipal = CDbl(MeuValorPrincipal) / Val(IntNumeroParcelas)

Call abrir_conexao_base_dados
For IntContador = 1 To IntNumeroParcelas
Set rst = New ADODB.Recordset
sql = [Ô]Insert Into tb_titulos_receber (titulo_valor_receber, titulo_data_vencto)[Ô]
sql = sql & [Ô]values([Ô]
sql = sql & [Ô][ô][Ô] & Replace(CDbl(MeuValorPrincipal), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô]
sql = sql & [Ô][ô][Ô] & Format(VarDataVencimento, [Ô]yyyy/mm/dd[Ô]) & [Ô][ô])[Ô]
Conexao.Execute sql

VarDataVencimento = cDate(VarDataVencimento) + intervalo
Next IntContador

End Sub


Abraços
SINCLAIR 17/11/2014 17:29:53
#442574
Prezado,

O intervalo, no exemplo, é 10 dias. Logo o intervalo da primeira parcela é 10 dias (1 * 10). O da segunda parcela será 20 dias (2 * 10). O da terceira parcela será 30 dias (3 * 10). O amigo Leando Ferreira chegou perto, acredito, mas falou multiplicar o intervalo pelo número da parcela.

Seu código ficaria como abaixo (só depende do BD, no postgres funcionou bem). Coloquei em negrito e itálico a mudança que fiz.



    Private Sub chameleonButton3_Click()

On Error Resume Next
Dim IntContador As Integer
Dim IntNumeroParcelas As Integer
Dim VarDataVencimento As String
Dim ValDataVencimento As String
Dim MeuValorPrincipal As Double
Dim intervalo As Integer

intervalo = 10

IntNumeroParcelas = txtfechavenda_quant_parcelas.text
ValDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
VarDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
MeuValorPrincipal = lblvalor_venda_orcto.Caption
MeuValorPrincipal = CDbl(MeuValorPrincipal) / Val(IntNumeroParcelas)

Call abrir_conexao_base_dados
For IntContador = 1 To IntNumeroParcelas
VarDataVencimento = DateAdd([Ô]m[Ô], IntContador - 1, ValDataVencimento)
Set rst = New ADODB.Recordset
sql = [Ô]Insert Into tb_titulos_receber (titulo_valor_receber, titulo_data_vencto)[Ô]
sql = sql & [Ô]values([Ô]
sql = sql & [Ô][ô][Ô] & Replace(CDbl(MeuValorPrincipal), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô]
sql = sql & [Ô][ô][Ô] & Format(VarDataVencimento + (IntContador * IntNumeroParcelas), [Ô]yyyy/mm/dd[Ô]) & [Ô][ô])[Ô]
Conexao.Execute sql
Next IntContador

End Sub
MARCELO.TREZE 17/11/2014 21:00:10
#442580
Resposta escolhida
bom vamos lá, primeiro a simplicidade é o caminho mais curto e correto

então a estrutura básica é:

Dim Parcelas As Integer
Dim Intervalo As Integer
Dim datas As String
Parcelas = 2
Intervalo = 10
For i = 0 To Parcelas - 1
datas = datas & DateAdd([Ô]d[Ô], i * Intervalo, Date) & vbCrLf
Next i
MsgBox datas


baseado no código acima bastaria adaptar para o seguinte

Private Sub chameleonButton3_Click()

[ô] On Error Resume Next <-- tome cuidado com esta linha ela pode camuflar algum erro do código
Dim IntContador As Integer
Dim IntNumeroParcelas As Integer
Dim VarDataVencimento As Date
Dim MeuValorPrincipal As Currency
Dim intervalo As Integer

intervalo = 10

IntNumeroParcelas = txtfechavenda_quant_parcelas.text
ValDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
VarDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
MeuValorPrincipal = CCur(lblvalor_venda_orcto.Caption) / IntNumeroParcelas


Call abrir_conexao_base_dados
For IntContador = 0 To IntNumeroParcelas -1
VarDataVencimento = DateAdd([Ô]d[Ô], IntContador * Intervalo, ValDataVencimento)
Set rst = New ADODB.Recordset
sql = [Ô]Insert Into tb_titulos_receber (titulo_valor_receber, titulo_data_vencto)[Ô]
sql = sql & [Ô]values([Ô]
sql = sql & [Ô][ô][Ô] & CCur(Replace(MeuValorPrincipal, [Ô],[Ô], [Ô].[Ô])) & [Ô][ô],[Ô]
sql = sql & [Ô][ô][Ô] & Format(VarDataVencimento, [Ô]yyyy/mm/dd[Ô]) & [Ô][ô])[Ô]
Conexao.Execute sql
Next IntContador

End Sub



repare que alterei duble para currency e CDbl para CCur, desta forma você terá maiorprecisão no valor das parcelas.

bom teste ai


MOREIRA 17/11/2014 21:12:19
#442582
bom. pessoal é o seguinte...

conforme o código abaixo...
funcionando

  [ô]On Error Resume Next
Dim IntContador As Integer
Dim IntNumeroParcelas As Integer
Dim VarDataVencimento As Date
Dim ValDataVencimento As Date
Dim MeuValorPrincipal As Double
Dim intervalo As Integer

IntNumeroParcelas = txtfechavenda_quant_parcelas.text
ValDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
VarDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
MeuValorPrincipal = lblvalor_venda_orcto.Caption
MeuValorPrincipal = CDbl(MeuValorPrincipal) / Val(IntNumeroParcelas)

intervalo = 10

Call abrir_conexao_base_dados
For IntContador = 1 To IntNumeroParcelas
VarDataVencimento = DateAdd([Ô]m[Ô], IntContador - 1, ValDataVencimento)
Set rst = New ADODB.Recordset
sql = [Ô]Insert Into tb_titulos_receber (titulo_valor_receber, titulo_data_vencto)[Ô]
sql = sql & [Ô]values([Ô]
sql = sql & [Ô][ô][Ô] & Replace(CDbl(MeuValorPrincipal), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô]
sql = sql & [Ô][ô][Ô] & Format(VarDataVencimento + (IntContador * intervalo), [Ô]yyyy/mm/dd[Ô]) & [Ô][ô])[Ô]
Conexao.Execute sql
Next IntContador


porem, preciso que fique assim

hoje: 1ª parcela --> 17-11-2014
--> 2ª 27-11-2014, parcelas 10 dias contando a partir da primeira
3ª etc....


da forma que está, ele já conta logo a primeira parcelas, 10 dias, preciso que fica a segunda, terceira etc......




MARCELO.TREZE 17/11/2014 21:18:08
#442583
testou meu código acima
MOREIRA 17/11/2014 21:24:06
#442584
testar agora
SINCLAIR 18/11/2014 00:10:26
#442585
Boa noite colega,

Vi que o código que lhe passei quase chegou no que você precisava, porém começou já colocando 10 dias na primeira parcela e a primeira parcela não pode já sair adicionada de 10 dias. Neste caso, bastará uma troca no seu código, no For, que deixo em negrito e itálico.

    [ô]On Error Resume Next
Dim IntContador As Integer
Dim IntNumeroParcelas As Integer
Dim VarDataVencimento As Date
Dim ValDataVencimento As Date
Dim MeuValorPrincipal As Double
Dim intervalo As Integer

IntNumeroParcelas = txtfechavenda_quant_parcelas.text
ValDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
VarDataVencimento = txtfechavenda_data_vencto.text [ô]Variável
MeuValorPrincipal = lblvalor_venda_orcto.Caption
MeuValorPrincipal = CDbl(MeuValorPrincipal) / Val(IntNumeroParcelas)

intervalo = 10

Call abrir_conexao_base_dados
[i]For IntContador = 0 To (IntNumeroParcelas - 1)[/i]
VarDataVencimento = DateAdd([Ô]m[Ô], IntContador - 1, ValDataVencimento)
Set rst = New ADODB.Recordset
sql = [Ô]Insert Into tb_titulos_receber (titulo_valor_receber, titulo_data_vencto)[Ô]
sql = sql & [Ô]values([Ô]
sql = sql & [Ô][ô][Ô] & Replace(CDbl(MeuValorPrincipal), [Ô],[Ô], [Ô].[Ô]) & [Ô][ô],[Ô]
sql = sql & [Ô][ô][Ô] & Format(VarDataVencimento + (IntContador * intervalo), [Ô]yyyy/mm/dd[Ô]) & [Ô][ô])[Ô]
Conexao.Execute sql
Next IntContador


Tudo de bom.
Tópico encerrado , respostas não são mais permitidas