CRIANDO PARCELAS - ERRO NA CONTAGEM DE DIAS

WEBIER 10/02/2011 16:41:15
#365007
Uso o seguinte código para criar parcelas:

        var_Vencimento = CDate(mskInicio.Text)
var_NumParc = 1
For i = 1 To CInt(cboQuantParc)
Autonumeracao_Parcelas
execSQL [Ô]INSERT INTO PARCELAS (CODIGO, COD_PEDIDO, NUMERO, DATA, VALOR) VALUES([Ô] & X & [Ô], [Ô] & txtCodPedido.Text & [Ô], [Ô] & var_NumParc & [Ô], #[Ô] & Format(var_Vencimento, [Ô]mm/dd/yyyy[Ô]) & [Ô]#, [ô][Ô] & txtValorParc.Text & [Ô][ô])[Ô]
var_Vencimento = Format(DateAdd([Ô]m[Ô], Val(1), var_Vencimento), [Ô]dd/mm/yy[Ô])
var_NumParc = var_NumParc + 1
Next


ele pega a quantidade de parcelas que eu quero (cboQuantParc) e cria uma parcela para cada mes baseado na data do mskInicio.Text.

O problema tá no mês de fevereiro (28 dias) e nos meses de 31 dias.

hoje são 10/01 se eu mandar ele cria e parcelas ele vai cria assim:

12/03
12/04
12/05

ou seja, ele conta 30 dias certinho... 28 dias de fevereiro e mais 2 dias que não existe...

o que eu quero é que se eu colocar para criar 3 parcelas e hj for 10/02... ele deve criar assim:
10/03
10/04
10/05

indenpende se o mes tem 28 dias ou 31 dias...
MARCELO.TREZE 10/02/2011 17:51:33
#365011
Tente assim

 var_Vencimento = CDate(mskInicio.Text)
var_NumParc = 1
For i = 1 To CInt(cboQuantParc)
Autonumeracao_Parcelas
execSQL [Ô]INSERT INTO PARCELAS (CODIGO, COD_PEDIDO, NUMERO, DATA, VALOR) VALUES([Ô] & X & [Ô], [Ô] & txtCodPedido.Text & [Ô], [Ô] & var_NumParc & [Ô], #[Ô] & Format(var_Vencimento, [Ô]mm/dd/yyyy[Ô]) & [Ô]#, [ô][Ô] & txtValorParc.Text & [Ô][ô])[Ô]
var_Vencimento = Format(DateAdd([Ô]m[Ô], i, var_Vencimento), [Ô]dd/mm/yy[Ô])
var_NumParc = var_NumParc + 1
Next i


acho que a modificação simples que fiz resolve


PAULOOLIVEIRA 10/02/2011 21:52:29
#365032
Companheiro, eu trabalho assim:

Tenho uma tabela parcelas: codigo, descricao,periodicidade,qtde_parcelas ok!

o usuario quando faz o pedido , ou nfe ele seleciona qual a forma de pagamento.. por ex.

Código descricao periodicidade tot. parcelas
0001 30/45/60 dias 030.045.060 3


dai eu faco um loop , dividindo o valor e criando as parcelas de acordo com a periodicidade , entende ?

Por ex:

Valor 750,00, data emissao 10/02/2011
mqtde = tabela_prazos!qtde_parcelas

If mqtde > 0 Then
mtotal = rsvenda!totalliquido [ô] valor da venda
mparcelas = (mtotal / mqtde)
mvenci = rsvenda!Data [ô] data da emissao
i = 1
x = 1
mvalorgravado = 0
Soma = 0
valor = 0
While i <= mqtde
If i = mqtde Then
mparcelas = Round((mtotal - mvalorgravado), 2)
End If
If Mid(mdescrprazo, x, 3) <> [Ô]_[Ô] Then
[ô] no meu exemplo a descricao seria 030.045.060
[ô] na primeira passagem seria 030, na segunda 045, e na terceira 060...

Soma = Val(Mid(mdescrprazo, x, 3))
End If
x = x + 4
[ô] grava na tabela de parcelas do sistema pelo adnew ou pelo instrucao sql
rsparcelas.AddNew
rsparcelas!codigo = Venda
rsparcelas!cliente = rsVENDA!cliente
rsparcelas!numero = Venda & [Ô]/[Ô] & Format(i, [Ô]00[Ô])
rsparcelas!vencto = rsVENDA!Data + Soma
rsparcelas!valor = Round(mparcelas, 2)
rsparcelas!empresa = [Ô]001[Ô]
rsparcelas!referencia = Venda
rsparcelas.UpdateBatch adAffectCurrent
mvalorgravado = mvalorgravado + Round(mparcelas, 2)
i = i + 1
Wend
rsparcelas.Requery
End If

Meio burocratico, mais funfa direitinf


flw

WEBIER 11/02/2011 11:30:35
#365111
Citação:

:
Tente assim

 var_Vencimento = CDate(mskInicio.Text)
var_NumParc = 1
For i = 1 To CInt(cboQuantParc)
Autonumeracao_Parcelas
execSQL [Ô]INSERT INTO PARCELAS (CODIGO, COD_PEDIDO, NUMERO, DATA, VALOR) VALUES([Ô] & X & [Ô], [Ô] & txtCodPedido.Text & [Ô], [Ô] & var_NumParc & [Ô], #[Ô] & Format(var_Vencimento, [Ô]mm/dd/yyyy[Ô]) & [Ô]#, [ô][Ô] & txtValorParc.Text & [Ô][ô])[Ô]
var_Vencimento = Format(DateAdd([Ô]m[Ô], i, var_Vencimento), [Ô]dd/mm/yy[Ô])
var_NumParc = var_NumParc + 1
Next i


acho que a modificação simples que fiz resolve




hoje são 11/02... criei 5 parcelas usando seu código e ficaram assim:

11/03 (certo)
11/04 (certo)
11/06 (errado: era para ser 11/05)
11/09 (errado: era para ser 11/06)
11/01/12 (errado: era para ser 11/07)

O que poderia ser?


CHARLESTON10 11/02/2011 12:17:51
#365127
Tenho um codigo fonte para criar parcelas

http://www.megaupload.com/?d=CXDUCQN0

Adapta no seu projeto e feito...
funciona perfeitamtente

faça o teste..

WEBIER 11/02/2011 15:44:31
#365166
baseado no exemplo, eu fiz assim:

varValorParc = txtValorParc
varQuantParc = cboQuantParc
Dim MyArray(32) As Date
MyArray(0) = CDate(mskInicio.Text)
var_NumParc = 1
For i = 1 To varQuantParc
Autonumeracao_Parcelas
execSQL [Ô]INSERT INTO PARCELAS (CODIGO, COD_PEDIDO, NUMERO, DATA, VALOR) VALUES([Ô] & X & [Ô], [Ô] & txtCodPedido.Text & [Ô], [Ô] & var_NumParc & [Ô], #[Ô] & Format(MyArray(i), [Ô]mm/dd/yyyy[Ô]) & [Ô]#, [ô][Ô] & varValorParc & [Ô][ô])[Ô]
MyArray(i) = DateAdd([Ô]m[Ô], i, mskInicio.Text)
var_NumParc = var_NumParc + 1
Next


e no lugar da data tah aparecendo assim no banco de dados [Ô]00:00:00[Ô]... ele coloca isso no lugar da data
MARCELO.TREZE 11/02/2011 17:45:51
#365181
este

autonumeracao_parcelas pode estar interferindo em algo

pois fiz o teste sem a query com seu codigo inicial

veja

Dim var_Vencimento As Date
Dim var_NumParc As Integer

var_Vencimento = CDate([Ô]11/02/2011[Ô])
var_NumParc = 1
For i = 1 To CInt(10)
[ô]Autonumeracao_Parcelas
[ô]execSQL [Ô]INSERT INTO PARCELAS (CODIGO, COD_PEDIDO, NUMERO, DATA, VALOR) VALUES([Ô] & X & [Ô], [Ô] & txtCodPedido.Text & [Ô], [Ô] & var_NumParc & [Ô], #[Ô] & Format(var_Vencimento, [Ô]mm/dd/yyyy[Ô]) & [Ô]#, [ô][Ô] & txtValorParc.Text & [Ô][ô])[Ô]
var_Vencimento = Format(DateAdd([Ô]m[Ô], 1, var_Vencimento), [Ô]dd/mm/yy[Ô])
var_NumParc = var_NumParc + 1
List1.AddItem var_NumParc & [Ô] - [Ô] & var_Vencimento
Next i


exibi o resultado em um listbox e foi correto

veja a imagem


CHARLESTON10 11/02/2011 19:03:54
#365191
WEBIER
e no lugar da data tah aparecendo assim no banco de dados [Ô]00:00:00[Ô]... ele coloca isso no lugar da data



Ja aconteceu comigo esse erro
Esta aparecendo 00:00:00, porque voce tem que declarar a variavel de data vencimento como Date

ve o exemplo do marcelo..
FININHO 12/02/2011 01:07:29
#365220
Experimenta dessa forma

Private Function fParc(dtaBase As Date, numParcela As Integer) As Date

Dim diaBase As Integer
Dim mesBase As Integer
Dim anoBase As Long

Dim dia As Integer
Dim mes As Integer
Dim ano As Long

diaBase = Format(CDate(dtaBase), [Ô]dd[Ô])
mesBase = Format(CDate(dtaBase), [Ô]mm[Ô])
anoBase = Format(CDate(dtaBase), [Ô]yyyy[Ô])

Dim arrayDiasMes As Variant

arrayDiasMes = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)


mes = mesBase + numParcela
ano = anoBase
If mes > 12 Then
mes = mes - 12
ano = anoBase + 1
End If

If ano Mod 4 = 0 Then
arrayDiasMes(1) = 29
Else
arrayDiasMes(1) = 28
End If

If diaBase > arrayDiasMes(mes - 1) Then
dia = arrayDiasMes(mes - 1)
Else
dia = diaBase
End If
fParc = CDate(dia & [Ô]/[Ô] & mes & [Ô]/[Ô] & ano)
End Function
[ô]-------------------------------------------------------------------------------------------

var_DtaBase = CDate(mskInicio.Text)
[txt-color=#e80000]For[/txt-color] i = 1 To CInt(cboQuantParc)
execSQL [Ô]INSERT INTO PARCELAS (CODIGO, COD_PEDIDO, NUMERO, DATA, VALOR) VALUES ([Ô] & X & [Ô], [Ô] & txtCodPedido.Text &
[Ô], [Ô] & i & [Ô], #[Ô] & Format(fParc(var_DtaBase,i), [Ô]mm/dd/yyyy[Ô]) & [Ô]#, [ô][Ô] & txtValorParc.Text & [Ô][ô])[Ô]
[txt-color=#e80000]Next[/txt-color]
Página 1 de 2 [12 registro(s)]
Tópico encerrado , respostas não são mais permitidas