Prezados a muito tempo tento modificar um código, que não e meu para gerar parcelas que atendam a um intervalo de dias.
Bom o código funciona perfeitamente se o intervalo for com um numero igual de dias por exemplo 7/14/21 15/30/45 30/60/90 .
Porem se eu preciso por exemplo de um intervalo de 28/42 dias, vejam que o primeiro intervalo é de 28 dias, mas o segundo e de apenas 14.
E é ai ai que o código não fica exatamente como queria, pois ele pega o valor do pedido divide em duas parcelas , mas lança ambas com 28 dias :
Exemplo: digamos que mau compra feita hoje 20/09/2016
Teria de ter a primeira parcela vencendo dia 18/102016 e a segunda dia 01/11/2016, porem ele joga a segunda parcela para 15/11/2016.
ou seja joga mais 28 dias.
Tentando resolver isso eu criei na tabela um campo com um segundo intervalo, minha ideia e fazer o Código pegar primeiro intervalo para gerar a primeira parcela, e as demais não importa quantas parcelas sejam pegue o segundo .
abaixo segue o código:
Private Sub Gerar_Click()
On Error GoTo Err_Gerar
Mensagem = "Lançamento de Contas"
Dim ValorParcela As Integer
If IsNull([CpDtEmissao]) Then [CpDtEmissao] = Date
If IsNull(CpCdCliente) Then
MsgBox "Digite o código do cliente", 64, Mensagem
[CpCdCliente].SetFocus
Exit Sub
End If
If IsNull([Selecionar Vendedor]) Then
MsgBox "Selecione um vendedor", 64, Mensagem
[Selecionar Vendedor].SetFocus
Exit Sub
End If
If IsNull([Selecionar Condicao]) Then
MsgBox "Selecione uma condição", 64, Mensagem
[Selecionar Condicao].SetFocus
Exit Sub
End If
If IsNull([cpValorTotal]) Then
MsgBox "Digite o valor total da compra", 64, Mensagem
[cpValorTotal].SetFocus
Exit Sub
End If
If IsNull([Selecionar FormaDePag]) Then
MsgBox "Selecione uma forma de pagamento", 64, Mensagem
[Selecionar FormaDePag].SetFocus
Exit Sub
End If
Dim Bd As Database
Dim Usuario As Recordset
Set Bd = DBEngine.Workspaces(0).Databases(0)
Set Usuario = Bd.OpenRecordset("Usuario", DB_OPEN_TABLE)
Usuario.Index = "IndiceNumero"
Usuario.Seek "=", 1
If Not Usuario.NoMatch Then 'usado para gravar o usuario
SalvaUsuario = Usuario("CdUsuario")
Usuario.Close
End If
Dim MeuCliente As Database
Dim Cliente As Recordset
Dim ÁreaCliente As Workspace
Set ÁreaCliente = DBEngine.Workspaces(0)
Set MeuCliente = ÁreaCliente.OpenDatabase("F:\access\Sistema\Dados\DadosE.mdb")
Set Cliente = MeuCliente.OpenRecordset("Cliente")
Cliente.Index = "Índice do Cliente"
Cliente.Seek "=", [CpCdCliente]
Dim Meubd As Database
Dim Receber As Recordset
Dim Área As Workspace
Set Área = DBEngine.Workspaces(0)
Set Meubd = Área.OpenDatabase("F:\access\Sistema\Dados\DadosE.mdb")
Set Receber = Meubd.OpenRecordset("Receber")
Receber.Index = "IndiceCdDoc"
Receber.Seek "=", [Selecionar Documento]
Dim Y As Variant
Y = DMax("[CdDoc]", "Receber")
If IsNull(Y) Then
Y = 0
End If
If Not Receber.NoMatch Then
Receber.Close
[Selecionar Documento].SetFocus
Exit Sub
Else
Receber.AddNew
Receber("CdDoc") = (Y + 1)
Receber("CdCliente") = Me.CpCdCliente
Receber("NumSaida") = [CpNota]
If IsNull([CpDtEmissao]) Or ([CpDtEmissao]) = " " Then
Receber("DtEmissao") = Date
Else
Receber("DtEmissao") = [CpDtEmissao]
End If
Receber("CdCliente") = Me.CpCdCliente
Receber("CdVendedor") = [Selecionar Vendedor]
Receber("CdPagamento") = [Selecionar Condicao]
Receber("ValorTotal") = [cpValorTotal]
Receber("CdFormaDePag") = [Selecionar FormaDePag]
Receber("CdUsuario") = SalvaUsuario
If Not Cliente.NoMatch Then 'Atualiza o nº de compra do cliente
Cliente.Edit
If IsNull(Cliente("NumCompra")) Then
Cliente("NumCompra") = 0
End If
Cliente("NumCompra") = (Cliente("NumCompra") + 1)
Cliente.Update
End If
[Selecionar Documento] = (Y + 1) ' Receber("CdDoc")
Forms![LancaReceber]![CpDtEmissao] = Receber("DtEmissao")
If ([Selecionar Condicao] = 1) Then
If ([Selecionar FormaDePag] = 1) Or ([Selecionar FormaDePag] = 2) Then
Receber("Extracao") = 1
End If
Else
Receber("Extracao") = 0
End If
Receber("Exclusao") = 0
Receber.Update
End If
Receber.Close
Cliente.Close
Dim Meu As Database
Dim Parcela As Recordset
Dim ÁreaParcela As Workspace
Set ÁreaParcela = DBEngine.Workspaces(0)
Set Meu = ÁreaParcela.OpenDatabase("F:\access\Sistema\Dados\DadosE.mdb")
Set Parcela = Meubd.OpenRecordset("ParcelaReceber")
Parcela.Index = "IndiceCdDoc"
Parcela.Seek "=", [Selecionar Documento], Forms![LancaReceber]![Selecionar Condicao].Column(2)
Contador = Forms![LancaReceber]![Selecionar Condicao].Column(2) 'Nº parcelas
[size=16]dias = Forms![LancaReceber]![Selecionar Condicao].Column(3) 'intervalos( creio que seria aqui onde deveria começar a mudança do codigo aqui ele pega o primeiro intervalo)[/size]
Entrada = Forms![LancaReceber]![Selecionar Condicao].Column(4) 'entrada
If Not Parcela.NoMatch Then
Exit Sub
Else
Valor = [cpValorTotal] / Contador
ValorParcela = Int(Valor)
AcumulaParcela = 0
If Entrada = False Then
DtVenc = Forms![LancaReceber]![CpDtEmissao]
Else
DtVenc = DateAdd("d", (-dias), Forms![LancaReceber]![CpDtEmissao])
End If
For i = 1 To Contador
Parcela.AddNew
Parcela("CdUsuario") = SalvaUsuario
Parcela("DtVenc") = DtVenc
Parcela("CdDoc") = [Selecionar Documento]
Parcela("CdParcela") = i
DtVenc = DateAdd("d", (dias), Parcela("DtVenc"))
DiaSemana = WeekDay(DtVenc)
If (DiaSemana = 1) Then
DtVenc = DateAdd("d", 1, DtVenc)
End If
Parcela("DtVenc") = DtVenc
Parcela("ValorReceber") = ValorParcela
If ([Selecionar FormaDePag] = 1) Then
Parcela("DtRecebido") = Parcela("DtVenc")
Parcela("ValorRecebido") = Valor
Parcela("Situacao") = "Pago"
Parcela("Especie") = "Dinheiro"
End If
If ([Selecionar FormaDePag] = 4) Then
Parcela("Situacao") = "Emitido Duplicata" 'Campo situação recebe Emitido Duplicata
Parcela("Especie") = "Duplicata"
Parcela("Bancos") = Me.Bancos
End If
If ([Selecionar FormaDePag]) = 2 Then
Parcela("Especie") = "Cartão"
Parcela("Situacao") = "Emitido"
End If
If [Selecionar FormaDePag] = 3 Then
Parcela("Especie") = "Cheque- Pré"
Parcela("Situacao") = "Emitido" 'Campo situação recebe emitido
End If
If ([Selecionar FormaDePag]) = 5 Then
Parcela("Especie") = "Depósito em C/C"
Parcela("Situacao") = "Emitido"
End If
If ([Selecionar FormaDePag]) = 6 Or ([Selecionar FormaDePag]) = 7 Then
Parcela("Situacao") = "Emitido"
Parcela("Especie") = "Cheque"
End If
If ([Selecionar FormaDePag]) = 8 Then
Parcela("Situacao") = "Emitido"
Parcela("Especie") = "Boleto e Cheque"
Parcela("Bancos") = Me.Bancos
End If
AcumulaParcela = AcumulaParcela + Parcela("ValorReceber")
Parcela.Update
Next i
If AcumulaParcela <> [cpValorTotal] Then
Parcela.Seek "=", [Selecionar Documento], 1
If Not Parcela.NoMatch Then
DiferencaParcela = [cpValorTotal] - AcumulaParcela
Parcela.Edit
Parcela("ValorReceber") = (Parcela("ValorReceber") + DiferencaParcela)
Parcela.Update
End If
End If
End If
[ListaParcelas].Requery
Parcela.Close
[CpCdParcela].SetFocus
If IsNull(Me.CpNota) = True Then
Dim stDocName As String
DoCmd.SetWarnings False
stDocName = "Atduplicatas"
DoCmd.OpenQuery stDocName, acNormal, acEdit
DoCmd.SetWarnings True
End If
Exit_Gerar:
Exit Sub
Err_Gerar:
MsgBox Error$
Resume Exit_Gerar
End Sub
Espero ter explicado bem.
Att
Ney Santos