PARCELAR VALOR EM VB.NET

SANROMAN 25/07/2017 13:40:33
#475392
Boa tarde

Gostaria de dividir um valor em parcelas e salvar cada parcela em um linha de uma tabela firebird.

Se alguém saber de algum tutorial a respeito ou algum código que me dê uma luz para chegar aonde quero desde já agradeço.

KERPLUNK 25/07/2017 13:43:58
#475393
Resposta escolhida
Você não tem nada que salva em banco na sua aplicação?
SANROMAN 25/07/2017 13:52:46
#475394
Olá Kerplunk

Não entendi direito mas, sim tenho. Acho que não me expressei direito

O que quero e salvar um valor parcelado em digamos 5 vezes.

valor 1.000,00
parcela 1 - 200,00
parcela 2 - 200,00

e assim sucessivamente.

Para cada parcela uma linha na tabela, é isso que não sei fazer, partindo de um valor único.

Espero ter me expressado corretamente.


KERPLUNK 25/07/2017 14:02:00
#475395
Receitinha de bolo... você já fez coisas bem parecidas em outros tópicos.

abre_banco()
for ()
{
criacomando(valor / numer_parcelas)
executacomando()
}
fecha_banco()
SANROMAN 25/07/2017 15:20:34
#475398
é Kerplunk às vezes mesmo com a receita o bolo desanda kkk. E aqui desandou...

Uso o seguinte código para fazer a inserção no banco de dados.

 Private Sub inserirReceita()

Using con As FbConnection = conectarFirebird()

con.Open()

Try
Using strCom As FbCommand = New FbCommand([Ô]INSERT INTO tbReceita (DataMovimento, DataEfetiva, Titular, Login, NumDoc, Situacao, FormaPgto, Conta, Categoria, SubCategoria, Itens, Pagador, Valor, Obs, Parcela, Periodicidade ) [Ô] & _
[Ô]VALUES (@DataMovimento, @DataEfetiva, @Titular, @Login, @NumDoc, @Situacao, @FormaPgto, @Conta, @Categoria, @SubCategoria, @Itens, @Pagador, @Valor, @Obs, @Parcela, @Periodicidade)[Ô], con)

With strCom
.Parameters.Add(New FbParameter([Ô]@DataMovimento[Ô], FbDbType.Date)).Value = dtpDataMovimentoFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@DataEfetiva[Ô], FbDbType.Date)).Value = dtpDataPgtoFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Titular[Ô], FbDbType.VarChar)).Value = frmLogin.txtNome.Text
.Parameters.Add(New FbParameter([Ô]@Login[Ô], FbDbType.VarChar)).Value = frmLogin.cbNome.Text
.Parameters.Add(New FbParameter([Ô]@NumDoc[Ô], FbDbType.BigInt)).Value = txtNumDocFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Situacao[Ô], FbDbType.VarChar)).Value = cbSituacaoFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@FormaPgto[Ô], FbDbType.VarChar)).Value = cbFormaFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Conta[Ô], FbDbType.VarChar)).Value = cbContaFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Categoria[Ô], FbDbType.VarChar)).Value = cbCategoriaFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@SubCategoria[Ô], FbDbType.VarChar)).Value = cbSubCategoriaFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Itens[Ô], FbDbType.VarChar)).Value = cbItensFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Pagador[Ô], FbDbType.VarChar)).Value = txtPagadorFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Valor[Ô], FbDbType.Decimal)).Value = CDec(txtValorFrmRec.Text)
.Parameters.Add(New FbParameter([Ô]@Obs[Ô], FbDbType.VarChar)).Value = txtObsFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Parcela[Ô], FbDbType.VarChar)).Value = txtParcelasFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Periodicidade[Ô], FbDbType.VarChar)).Value = cbPeriodicidadeFrmRec.Text
End With

strCom.ExecuteNonQuery()
strCom.Parameters.Clear()

End Using

Catch ex As Exception
MsgBox(ex.ToString)
End Try

End Using

End Sub


E para calcular o parcelamento o seguinte código:

 Dim i As Integer
Dim numeroParcelas As Integer = Val(txtPagadorFrmRec.Text)
Dim valor As Decimal = Decimal.Parse(txtPagadorFrmRec.Text).ToString([Ô]N[Ô], nfi)
Dim parcela As Decimal

parcela = valor / numeroParcelas


Sou um entusiasta em programação vb.net, basicamente um aprendiz. E admito que não faço a menor ideia de como unir os trechos de código.

Dei uma olhada em meus post anteriores. Em todos populei listviews e datagridviews, com a ajuda dos membros da vbmania, com valores já gravados em banco.

Agora quero aprender a gravar no banco de dados várias linhas ao mesmo tempo com valores e datas distintas de um valor único.

KERPLUNK 25/07/2017 15:39:14
#475399
Amigo desculpa ae, mas tem posts seus com dúvidas quase iguais que são de mais de 4 anos atrás. Não é possível que você ainda não sacou como fazer esse tipo de coisa...
Você vai fazer um for...next, dentro de cada interação você vai inserir um registro:

for i = 1 to parcelas
gravaregistro()
next i
MESTRE 25/07/2017 16:32:22
#475401
Colega,

Kerplunk já te deu a solução para o problema basta juntar teu código na lógica que ele passou e pronto..



NICKOSOFT 25/07/2017 22:05:16
#475408
  
 Dim numeroParcelas As Integer = Val(txtPagadorFrmRec.Text)
                Dim valor As Decimal = Decimal.Parse(txtPagadorFrmRec.Text).ToString([Ô]N[Ô], nfi)
                Dim parcela As Decimal

                parcela = valor / numeroParcelas
Using strCom As FbCommand = New FbCommand([Ô]INSERT INTO tbReceita (DataMovimento, DataEfetiva, Titular, Login, NumDoc, Situacao, FormaPgto, Conta, Categoria, SubCategoria, Itens, Pagador, Valor, Obs, Parcela, Periodicidade ) [Ô] & _
                                                          [Ô]VALUES (@DataMovimento, @DataEfetiva, @Titular, @Login, @NumDoc, @Situacao, @FormaPgto, @Conta, @Categoria, @SubCategoria, @Itens, @Pagador, @Valor, @Obs, @Parcela, @Periodicidade)[Ô], con)
for parcelas=1 to parcela

                    With strCom
                        .Parameters.Add(New FbParameter([Ô]@DataMovimento[Ô], FbDbType.Date)).Value = dtpDataMovimentoFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@DataEfetiva[Ô], FbDbType.Date)).Value = dtpDataPgtoFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@Titular[Ô], FbDbType.VarChar)).Value = frmLogin.txtNome.Text
                        .Parameters.Add(New FbParameter([Ô]@Login[Ô], FbDbType.VarChar)).Value = frmLogin.cbNome.Text
                        .Parameters.Add(New FbParameter([Ô]@NumDoc[Ô], FbDbType.BigInt)).Value = txtNumDocFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@Situacao[Ô], FbDbType.VarChar)).Value = cbSituacaoFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@FormaPgto[Ô], FbDbType.VarChar)).Value = cbFormaFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@Conta[Ô], FbDbType.VarChar)).Value = cbContaFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@Categoria[Ô], FbDbType.VarChar)).Value = cbCategoriaFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@SubCategoria[Ô], FbDbType.VarChar)).Value = cbSubCategoriaFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@Itens[Ô], FbDbType.VarChar)).Value = cbItensFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@Pagador[Ô], FbDbType.VarChar)).Value = txtPagadorFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@Valor[Ô], FbDbType.Decimal)).Value = CDec(txtValorFrmRec.Text)
                        .Parameters.Add(New FbParameter([Ô]@Obs[Ô], FbDbType.VarChar)).Value = txtObsFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@Parcela[Ô], FbDbType.VarChar)).Value = txtParcelasFrmRec.Text
                        .Parameters.Add(New FbParameter([Ô]@Periodicidade[Ô], FbDbType.VarChar)).Value = cbPeriodicidadeFrmRec.Text
.Parameters.add(new fbparameter([Ô]@parcela[Ô],fbdbtype.decimal)).value=parcela..........
                    End With

                    strCom.ExecuteNonQuery()
next
                    strCom.Parameters.Clear()

                End Using

acho q já deve melhorar sua vida, ou te enrolar de vez.......joguei nesse pedaço de código q diz q usa pra inserir dados, vai de vc usar a criatividade pra acertar, mas eu acho q ta faltando um pouco de logica pra vc desenvolver as coisas, não pense e queira criar a roda, se vc pode com pouquíssimo código resolver um grande mistério....
se vc quer inserir varias vezes uma mesma coisa, vc precisa fazer essas varias repetições, ai vc ve como controlar o numero de repetições, e pronto, cria a repetição, e poe a logica de inclusão dentro do código q controla a repetição.....

tenho códigos prontinhos pra inclusão de parcelas ao longo do ano, seja 12 no caso de inicio do ano, ou o numero q faltar até dezembro conforme a matricula....mas essa nova pincelada já serve pra vc pensar um pouco....
SANROMAN 26/07/2017 11:27:17
#475426
Bom dia amigos e muito obrigado pela atenção.

Seguindo as orientações passadas montei o código da seguinte maneira:

 Private Sub inserirReceita()

Using con As FbConnection = conectarFirebird()

con.Open()

Try
Dim i As Integer
Dim numeroParcela As Integer = txtParcelasFrmRec.Text
Dim dataMovimento As Date
Dim dataVencimento As Date

If numeroParcela = 1 Then
dataMovimento = dtpDataMovimentoFrmRec.Text
dataVencimento = dtpDataVctoFrmRec.Text
ElseIf numeroParcela > 1 Then
dataMovimento = DateAdd(DateInterval.Month, 1, dtpDataMovimentoFrmRec.Value)
dataVencimento = DateAdd(DateInterval.Month, 1, dtpDataMovimentoFrmRec.Value)
End If

Using strCom As FbCommand = New FbCommand([Ô]INSERT INTO tbReceita (DataMovimento, DataEfetiva, Titular, Login, NumDoc, Situacao, FormaPgto, Conta, Categoria, SubCategoria, Itens, Pagador, Valor, Obs, Parcela, Periodicidade ) [Ô] & _
[Ô]VALUES (@DataMovimento, @DataEfetiva, @Titular, @Login, @NumDoc, @Situacao, @FormaPgto, @Conta, @Categoria, @SubCategoria, @Itens, @Pagador, @Valor, @Obs, @Parcela, @Periodicidade)[Ô], con)

For i = 1 To numeroParcela
With strCom
.Parameters.Add(New FbParameter([Ô]@DataMovimento[Ô], FbDbType.Date)).Value = dataMovimento
.Parameters.Add(New FbParameter([Ô]@DataEfetiva[Ô], FbDbType.Date)).Value = dataVencimento
.Parameters.Add(New FbParameter([Ô]@Titular[Ô], FbDbType.VarChar)).Value = frmLogin.txtNome.Text
.Parameters.Add(New FbParameter([Ô]@Login[Ô], FbDbType.VarChar)).Value = frmLogin.cbNome.Text
.Parameters.Add(New FbParameter([Ô]@NumDoc[Ô], FbDbType.BigInt)).Value = txtNumDocFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Situacao[Ô], FbDbType.VarChar)).Value = cbSituacaoFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@FormaPgto[Ô], FbDbType.VarChar)).Value = cbFormaFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Conta[Ô], FbDbType.VarChar)).Value = cbContaFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Categoria[Ô], FbDbType.VarChar)).Value = cbCategoriaFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@SubCategoria[Ô], FbDbType.VarChar)).Value = cbSubCategoriaFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Itens[Ô], FbDbType.VarChar)).Value = cbItensFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Pagador[Ô], FbDbType.VarChar)).Value = txtPagadorFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Valor[Ô], FbDbType.Decimal)).Value = CDec(txtValorFrmRec.Text)
.Parameters.Add(New FbParameter([Ô]@Obs[Ô], FbDbType.VarChar)).Value = txtObsFrmRec.Text
.Parameters.Add(New FbParameter([Ô]@Parcela[Ô], FbDbType.VarChar)).Value = numeroParcela
.Parameters.Add(New FbParameter([Ô]@Periodicidade[Ô], FbDbType.VarChar)).Value = cbPeriodicidadeFrmRec.Text
End With
strCom.ExecuteNonQuery()
strCom.Parameters.Clear()
Next i
End Using

Catch ex As Exception
MsgBox(ex.ToString)
End Try

End Using

End Sub


Já grava com o número correto de lançamentos colocados em txtParcelasFrmRec.text.

Mas as datas de movimento e vencimento e número de parcelas ficam com a mesma data e o mesmo numero de parcelas, ou seja, um mês após a data informada para o primeiro vencimento e o mesmo numero de parcelas informado em txtParcelasFrmRec.text.

Quando na verdade gostaria que retornasse assim:

No caso de três parcelas mensais com vencimento do primeiro lançamento para 25/07/2017

Primeiro lançamento:
Data Movimento: 25/07/2017
Data Vencimento: 25/07/2017
Parcela 1/3

Segundo lançamento:
Data Movimento: 25/08/2017
Data Vencimento: 25/08/2017
Parcela 2/3

Segundo lançamento:
Data Movimento: 25/09/2017
Data Vencimento: 25/09/2017
Parcela 3/3

KERPLUNK 26/07/2017 12:10:04
#475429
As linhas abaixo são as que passam os parâmetros de data para seu banco de dados. Basta adicionar um mês ao valor do parâmetro que já é do tipo Date então nem precisa conversão

.Parameters.Add(New FbParameter([Ô]@DataMovimento[Ô], FbDbType.Date)).Value = dataMovimento
.Parameters.Add(New FbParameter([Ô]@DataEfetiva[Ô], FbDbType.Date)).Value = dataVencimento


Acho que você na verdade não está prestando bem atenção no que está fazendo. Tente [Ô]ler[Ô] o código e ver o que ele está fazendo. Ajuda muito usar a Watch Window.
NICKOSOFT 27/07/2017 06:16:45
#475448
Cara, as perguntas nao condizem com o codigo, as perguntas parecem de quem nunca programou
Pq vc verifica numero de parcela e faz o add na data totalmente fora do laço q adiciona de fato as prestacoes?
vc nao acha q esse add na data deve estar junto onde passa os parametros de data pra efetiva inserção na base de dados?
Veja se por acaso isso nao esta bem fora do lugar

   
For i = 1 To numeroParcela
With strCom
dataMovimento = DateAdd(DateInterval.Month, 1, dtpDataMovimentoFrmRec.Value)
dataVencimento = DateAdd(DateInterval.Month, 1, dtpDataMovimentoFrmRec.Value)

.Parameters.Add(New FbParameter([Ô]@DataMovimento[Ô], FbDbType.Date)).Value = dataMovimento
.Parameters.Add(New FbParameter([Ô]@DataEfetiva[Ô], FbDbType.Date)).Value = dataVencimento


E antes q pergunte novamente, ja adianto q esse 1 estatico deve ser mudado e vc deve pensar como funciona o dateadd e pelo q deve mudar, nao é algo estático
E la no comeco onde cria e verifica essas variaveis precisa de mudanca tmb
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas