PARCELAR VALOR EM VB.NET
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.
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.
Você não tem nada que salva em banco na sua aplicação?
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.
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.
Receitinha de bolo... você já fez coisas bem parecidas em outros tópicos.
abre_banco()
for ()
{
criacomando(valor / numer_parcelas)
executacomando()
}
fecha_banco()
é 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.
E para calcular o parcelamento o seguinte código:
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.
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.
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:
Você vai fazer um for...next, dentro de cada interação você vai inserir um registro:
for i = 1 to parcelas
gravaregistro()
next i
Colega,
Kerplunk já te deu a solução para o problema basta juntar teu código na lógica que ele passou e pronto..
Kerplunk já te deu a solução para o problema basta juntar teu código na lógica que ele passou e pronto..
 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....
Bom dia amigos e muito obrigado pela atenção.
Seguindo as orientações passadas montei o código da seguinte maneira:
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
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
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
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.
.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.
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
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
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
Tópico encerrado , respostas não são mais permitidas