CRIANDO PARCELAS - ERRO NA CONTAGEM DE DIAS
Uso o seguinte código para criar parcelas:
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...
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...
Tente assim
acho que a modificação simples que fiz resolve
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
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
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
Citação::
Tente assimvar_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?
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..
http://www.megaupload.com/?d=CXDUCQN0
Adapta no seu projeto e feito...
funciona perfeitamtente
faça o teste..
baseado no exemplo, eu fiz assim:
e no lugar da data tah aparecendo assim no banco de dados [Ô]00:00:00[Ô]... ele coloca isso no lugar da data
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
este
autonumeracao_parcelas pode estar interferindo em algo
pois fiz o teste sem a query com seu codigo inicial
veja
exibi o resultado em um listbox e foi correto
veja a imagem
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
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..
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]
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]
Tópico encerrado , respostas não são mais permitidas