[EDITANDO] RESTO DE DIVISAO EM PARCELAMENTO

SACOFRITO 13/09/2010 13:45:01
#352882
Bom dia galera, ontem fiz um topico mas acabei conseguindo resolver pois era erro dentro do .rpt
Mas hj estaava testando a programaçao de parcelamento que fiz ontem, e reparei um problema.. esta na divisao onde existe um resto dessa divisao....
Ex : valor da venda = 14 / qtd de parcelas = 6
Se for somando os valores da divisao o final chegara a 13,98, nesse caso o rsto é 0,02
e a impressao nao inicia se nao tiver valor final = valor da compra
Oq eu pensei em fazer, usar o mod para calcular o resto e armazenar em uma variavel e assi mque fosse imprimir, move para ultimo registro na tabela caixa e edita o valor + variavel com resto.
Ate ai tudo bem, eu conseguiria sem problemas... mas nao to conseguindo usar a funçao mod :l
ja procurei no google mas nao achei nd satisfatorio

vou postar como esta o codigo que da pra ter uma idéia do q eu penso em fazer
  Set dsconfig1 = db.OpenRecordset([Ô]config[Ô], dbOpenDynaset)
[ô]aqui eu verificaria se o valor em txtvlparcela12 é menor que VarValorTotal
[ô]se sim abriria a tabela caixa e editava o valor da ultima parcela acrescentando a ela oq faltou para igualar o valro total [ô]das parcelas ao valor total do parcelamento movendo para o ultimo registro....

If txtvlparcela12 = varValorTotal Then
op = MsgBox([Ô]Deseja imprimir os comprovantes do parcelamento?[Ô], vbYesNo, [Ô]ATENÇÃO![Ô])
If op = vbYes Then
volta:
varAuxiliar = InputBox([Ô]Qtd de cópias de cada comprovante..[Ô])
If varAuxiliar = [Ô][Ô] Then Exit Sub
If Not IsNumeric(varAuxiliar) Then GoTo volta
Set dsDetOrcamentoos = db.OpenRecordset([Ô]select * from detorcamentos where codorc =[Ô] & orcamento, dbOpenDynaset)
If dsDetOrcamentoos.RecordCount > 0 Then
Set dsauxdet = db.OpenRecordset([Ô]select * from detorcamentos where codorc =[Ô] & orcamento, dbOpenDynaset)
vartotalitem123 = 0
Do While Not dsauxdet.EOF
vartotalitem123 = 1 + vartotalitem123
dsauxdet.MoveNext
Loop
varTotalItem = vartotalitem123
If varTotalItem <= 14 Then
For varTotalItem = vartotalitem123 To 14 Step 1
dsDetOrcamentoos.AddNew
dsDetOrcamentoos!CODORC = orcamento
dsDetOrcamentoos!CODPRO = Null
dsDetOrcamentoos.Update
Next
End If
Set dscaixaa = db.OpenRecordset([Ô]select * from caixa where codorc =[Ô] & orcamento, dbOpenDynaset)
If dscaixaa.RecordCount > 0 Then
[ô]Do While Not dscaixaa.EOF
Report3.SelectionFormula = [Ô]{caixa.CODORC} = [Ô] & Val(orcamento)
Report3.ReportFileName = App.Path & [Ô]\parcelamento.RPT[Ô]
Report3.CopiesToPrinter = varAuxiliar
[ô]Report3.destination = crptToPrinter
Report3.WindowShowProgressCtls = True
Report3.WindowShowExportBtn = True
Report3.WindowShowPrintBtn = True
Report3.WindowShowPrintSetupBtn = True
Report3.WindowShowRefreshBtn = True
Report3.WindowShowZoomCtl = True
Report3.WindowShowSearchBtn = True
Report3.Action = 1
dscaixaa.MoveNext
[ô]Loop
Report3.SelectionFormula = [Ô][Ô]
db.Execute [Ô]delete * from detorcamentos where isnull(codpro) and codorc =[Ô] & orcamento
End If
End If
End If
Frame17.Visible = False
txtQtdParcelas = [Ô][Ô]
Frame5.Visible = False
End If



Obrigado
SACOFRITO 14/09/2010 10:10:34
#352944
dando um up aki
MARCOSLING 14/09/2010 10:40:59
#352946
Geralmente vc joga o resto na primeira parcela
SACOFRITO 14/09/2010 10:48:17
#352949
Hum... tava matutando aqui e acabei chegando a outra conclusão mais facil sem precisar usar o Mod
Fiz assim logo acima, no inicio do botao imprimir


  If txtvlparcela12 < varValorTotal Then
varAux = 0
varAux = CDbl(varValorTotal) - CDbl(txtvlparcela12)
Set dsAuxCaixa = db.OpenRecordset([Ô]select * from caixa where codorc =[Ô] & ORCAMENTO, dbOpenDynaset)
dsAuxCaixa.MoveLast
dsAuxCaixa.Edit
dsAuxCaixa!valor = CDbl(dsAuxCaixa!valor) + CDbl(varAux)
dsAuxCaixa.Update
txtvlparcela12 = txtvlparcela12 + varAux
End If


Nao sabia que o normal era jogar o resto na primeira parcela, obrigado vou perguntar ao cliente qual o melhor procedimento

Mas de qualquer forma obrigado por enquanto Marcos, vou fechar o tópico.. qqr coisa reabrirei

Abraços
GERARDA 14/09/2010 16:52:45
#352982
essa é solução que eu achei
da uma olhada
FEDERHEN 14/09/2010 17:40:37
#352987
A função MOD é assim:

msgbox (14 MOD 6)

resultado = 2


SACOFRITO 15/09/2010 08:52:34
#353010
Eu consegui fazer assim FEDERHEN...Mas 14 dividido em 6 parcelas nao sei como fazer pois os resultados nao batem
mas nao achei soluçao lgl. vou analisar a soluçao da Gerarda depois
mas por enquanto oq eu fiz sanou o problema..
MARCOSLING 15/09/2010 10:16:29
#353014
Sinceramente, eu acho que não há muito que discutir sobre isso.
Vc já viu como é feito o parcelamento no cartão de crédito? A diferença vai na primeira parcela.
Quando eu trabalhava numa cia seguradora, o procedimento é esse.

Se vc quiser que o valor seja igual em todas as parcelas, vc vai ter que dar desconto para o cliente.
SACOFRITO 15/09/2010 10:18:58
#353015
Tranquilo Marcos, desculpe mas esqueci de fechar o tópico anteriormente... sozinho consegui resolver o problema da diferença



Abraços
FOXMAN 15/09/2010 10:26:57
#353016
Veja se o exemplo da imagem te ajuda, se ajudar eu posto o processo ok
Tópico encerrado , respostas não são mais permitidas