PARCELAR VALOR EM VB.NET

SANROMAN 27/07/2017 10:02:50
#475455
Bom dia.

Nicksoft tenha calma irmão.

Se sei programar, lógico que não, e acho, ainda, que poucos profissionais dessa área do conhecimento humano são capazes de afirmar que sabem programar sem a ajuda e o conhecimento de outros profissionais da área. Deixei claro que sou apenas um entusiasta que dedica poucas horas por semana a esse hobby.

Bem, vamos voltar ao que interessa. Partindo das dicas, principalmente do Kerplunk, montei o código a seguir:

 Private Sub inserirReceita()

Using con As FbConnection = conectarFirebird()

con.Open()

Try
Dim i As Integer
Dim numeroParcela As Integer = txtParcelasFrmRec.Text

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 = DateAdd(DateInterval.Month, i - 1, dtpDataMovimentoFrmRec.Value)
.Parameters.Add(New FbParameter([Ô]@DataEfetiva[Ô], FbDbType.Date)).Value = DateAdd(DateInterval.Month, i - 1, dtpDataMovimentoFrmRec.Value)
.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 = (i & [Ô]/[Ô] & numeroParcela).ToString
.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


O código insere múltiplos lançamentos na base de dados acrescentando 1 (um) mês para cada lançamento.

   .Parameters.Add(New FbParameter([Ô]@DataMovimento[Ô], FbDbType.Date)).Value = DateAdd(DateInterval.Month, i - 1, dtpDataMovimentoFrmRec.Value)
.Parameters.Add(New FbParameter([Ô]@DataEfetiva[Ô], FbDbType.Date)).Value = DateAdd(DateInterval.Month, i - 1, dtpDataMovimentoFrmRec.Value)


Aqui fraciono as parcelas para visualização de qual é a parcela.

 .Parameters.Add(New FbParameter([Ô]@Parcela[Ô], FbDbType.VarChar)).Value = (i & [Ô]/[Ô] & numeroParcela).ToString  


Agora vou, tentar, incrementar o mesmo inserte para parcelas por dia, quinzena, bimestral, trimestral, semestral e anual.

Espero conseguir sem atormentar os membros do fórum...

Deixarei o tópico em aberto para, quando o código estiver completo, postar o resultado final.

Se tiverem alguma sugestão para melhorar o código, ou notarem algum erro, sintam-se a vontade para opinarem.

Um abraço e tenham um lindo dia.
KERPLUNK 27/07/2017 14:19:38
#475462
Amigo, você não atormenta. O caso é que o que queremos dizer é que você entenda a lógica e tente fazer o código por si. Se toda vez que você tiver uma dúvida nós dermos o código prontinho, você não vai ter bom proveito disso e vai te prejudicar mais que ajudar. Por isso [Ô]forçamos[Ô] você à tentar fazer sozinho. O ideal é que você consiga fazer esse tipo de coisa(que é bem simples) sem grandes esforços.
O que pode melhorar no seu código? Bem, pra começar você ter uma abstração dessa parte de dados, ficando algo parecido com isso:

Dim pag As New Pagamento(199)
Dim parcelas As List(Of Parcela) = pag.Parcelar(4, PeriodoParcelamento.Mensal)
parcelas.Gravar()


Toda a parte de banco de dados, conexão, parâmetros, comandos, tudo isso ficaria em abstraído e você se preocupa apenas com a lógica do seu sistema. Essa parte de gravação é o [Ô]feijão com arroz[Ô] e deve estar dominada para você poder construir algo realmente profissional.
NICKOSOFT 27/07/2017 19:20:27
#475472
eu disse pq vejo um código sem erros, elaborado bonitinho, mas na hora de pensar como girar a roda empaca.....por isso disse q o código não condiz com a duvida.....
mas é isso ai, gostei de ver q colocou as linhas no lugar correto e fez os devidos ajustes pra variável andar junto com o código....

mesmo tendo formação na área, q não quer dizer nada, eu não vivo exclusivamente de programar.....
Página 2 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas