USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Apropriação de valores - LOOP
MARCONE
Pontos: 2843
BRASÍLIA
DF - BRASIL
Postada em 03/08/2005 00:13 hs            
INTRODUÇÃO: Tenho uma tabela de internações (área médica) com a seguinte estrutura:
 
Mes_Ano|CodPaciente|CodMedicamento|Vr_Medic|Vr_Pagar
01/2005|00000000200|00000000000002|1.000,00|
01/2005|00000000200|00000000000003|1.100,00|
01/2005|00000000200|00000000000004|1.200,00|
---------------------------------------------------------
01/2005|00000000300|00000000000002|1.000,00|
01/2005|00000000300|00000000000003|2.000,00|
01/2005|00000000300|00000000000004|1.200,00|
---------------------------------------------------------
02/2005|00000000200|00000000000002|3.000,00|
02/2005|00000000200|00000000000003|1.000,00|
01/2005|00000000200|00000000000004|1.200,00|
---------------------------------------------------------
02/2005|00000000300|00000000000002|1.000,00|
02/2005|00000000300|00000000000003|1.000,00|
02/2005|00000000300|00000000000004|1.200,00|
---------------------------------------------------------
(...)
---------------------------------------------------------
 
SITUAÇÃO: Os pacientes medicados, tem um custo mensal lançado
na coluna (Vr_Medic); no entanto, tendo em vista um convênio firmado
entre pacientes e Clínica, o valor máximo que cada paciente paga por mês
É DE NO MÁXIMO R$ 3.000,00.

Exemplo: se o custo, no mês de janeiro/2005, de um paciente for R$ 5.000,00,
este pagará, no máximo, R$ 3.000,00.
 
PROBLEMA: Preciso fazer um loop, atualizando o campo "Vr_Pagar" da tabela acima,
de forma a apropriar os valores a serem pagos pelos pacientes (limite máximo de R$ 3.000,00) por ordem de código do medicamento (CodMedicamento), da seguinte forma:
 
Mes_Ano|CodPaciente|CodMedicamento|Vr_Medic|Vr_Pagar
01/2005|00000000200|00000000000002|1.000,00|1.000,00
01/2005|00000000200|00000000000003|1.100,00|1.100,00
01/2005|00000000200|00000000000004|1.200,00|..900,00
---------------------------------------------------------
01/2005|00000000300|00000000000002|1.000,00|1.000,00
01/2005|00000000300|00000000000003|2.000,00|2.000,00
01/2005|00000000300|00000000000004|1.200,00|....0,00
---------------------------------------------------------
02/2005|00000000200|00000000000002|3.000,00|3.000,00
02/2005|00000000200|00000000000003|1.000,00|....0,00
01/2005|00000000200|00000000000004|1.200,00|....0,00
---------------------------------------------------------
02/2005|00000000300|00000000000002|1.000,00|1.000,00
02/2005|00000000300|00000000000003|..500,00|..500,00
02/2005|00000000300|00000000000004|..200,00|..200,00
---------------------------------------------------------
(...)
---------------------------------------------------------
 
METODOLOGIA UTILIZADA: Estou tentando resolver da seguinte forma:
...
Dim sMesAno As String
Dim sCodPaciente As String ´Código do paciente
Dim sTeto As Currency ´Valor máximo a ser cobrado
Do while rst.EOF
If rst!Mes_Ano <> sMesAno AND rst!CodPaciente <> sPaciente then
sTeto = 3000.00 ´Valor máximo a ser cobrado
End If
 
If sTeto > rst!Vr_Medic Then
  rst!Vr_Pagar = rst!Vr_Medic
   sTeto= sTeto - rst!Vr_Medic
ElseIf sTeto < rst!Vr_Medic Then
  rst!Vr_Pagar = sTeto
End If
rst.Update
rst.Move_Next
Loop
O algorítimo acima não está dando certo, se alguém tiver alguma idéia,
desde já agradeço..

MarconeEmoções

 

     
Semmer
CURITIBA
PR - BRASIL
ENUNCIADA !
Postada em 03/08/2005 09:50 hs            
Dim sMesAno As String
Dim sCodPaciente As String ´Código do paciente
Dim sTeto As Currency ´Valor máximo a ser cobrado
Dim sValor as Currency
sTeto = 3000
sValor = 0
Do while rst.EOF
   sMesAno = rst!Mes_Ano
   sPaciente = rst!CodPaciente
   rst.Edit
   If sValor >= sTeto Then
      rst!Vr_Pagar = 0
   ElseIf rst!Vr_Medic > (sTeto - sValor) Then
      rst!Vr_Pagar = (sTeto - sValor)
   Else
      rst!Vr_Pagar = rst!Vr_Medic
   End If
   sValor = sValor + rst!Vr_Medic 
   rst.Update
   rst.Move_Next
   If Not rst.EOF Then
      If rst!Mes_Ano <> sMesAno And rst!CodPaciente <> sPaciente Then
         sValor = 0
      End If
   End If
Loop
   
Martini
Pontos: 2843 Pontos: 2843
PAROBÉ
RS - BRASIL
ENUNCIADA !
Postada em 03/08/2005 10:19 hs         

testa assim:

 

Private Sub Command1_Click()
  Screen.MousePointer = vbHourglass
  Dim strABC As String
  Dim strNovo As String
  Dim strPacienteAtual As String
  Dim strPacienteAntigo As String
  Dim strPeriodoAtual As String
  Dim strPeriodoAntigo As String
  Dim dblTotalPaciente As Double
  Dim dblValorPagar As Double
  Open "C:Temp     esteval.txt" For Input As #1
  Open "C:Temp     esteval_novo.txt" For Output As #2
  Do While Not EOF(1)
    dblValorPagar = 0
    Line Input #1, strABC
    If Left(strABC, 1) <> "-" Then
      'verifica se é a primeira entrada
      If strPacienteAtual = "" Then
        strPacienteAtual = Mid(strABC, 9, 11)
        strPacienteAntigo = Mid(strABC, 9, 11)
        strPeriodoAtual = Mid(strABC, 1, 7)
        strPeriodoAntigo = Mid(strABC, 1, 7)
      End If
      'atualiza paciente e periodo atual
      strPacienteAtual = Mid(strABC, 9, 11)
      strPeriodoAtual = Mid(strABC, 1, 7)
      'verifica se mudou de paciente or periodo
      If (strPacienteAtual <> strPacienteAntigo) Or (strPeriodoAtual <> strPeriodoAntigo) Then
        'strNovo = strNovo & Mid(strABC, 1, Len(strABC)) & Chr(13) & Chr(10)
        dblTotalPaciente = CDbl(Mid(strABC, 36, 8))
        dblValorPagar = CDbl(Mid(strABC, 36, 8))
      Else
        'se o total ja chegou em 3000, não precisa mais pagar
        If dblTotalPaciente >= 3000 Then
          dblTotalPaciente = 3000
          dblValorPagar = 0
        Else
          'se o total + o valor atual superar os 3000, paga somente a diferença
          If dblTotalPaciente + CDbl(Mid(strABC, 36, 8)) >= 3000 Then
            dblValorPagar = 3000 - dblTotalPaciente
            dblTotalPaciente = 3000
          Else
            'se não, soma o valor atual ao total
            dblTotalPaciente = dblTotalPaciente + CDbl(Mid(strABC, 36, 8))
            dblValorPagar = CDbl(Mid(strABC, 36, 8))
          End If
        End If
      End If
      If dblValorPagar > 0 Then
        If dblValorPagar >= 1000 Then
          strNovo = strNovo & Mid(strABC, 1, 35) & Format(dblValorPagar, "#,##0.00") & Chr(13) & Chr(10)
        Else
          strNovo = strNovo & Mid(strABC, 1, 35) & "0." & Format(dblValorPagar, "#,##0.00") & Chr(13) & Chr(10)
        End If
      Else
        strNovo = strNovo & Mid(strABC, 1, 35) & "0.000.00" & Chr(13) & Chr(10)
      End If
      'atualiza paciente e periodo antigo
      strPacienteAntigo = Mid(strABC, 9, 11)
      strPeriodoAntigo = Mid(strABC, 1, 7)
    Else
      strPacienteAntigo = ""
      strPeriodoAntigo = ""
      strNovo = strNovo & Mid(strABC, 1, Len(strABC)) & Chr(13) & Chr(10)
    End If
  Loop
  Close #1
  Print #2, strNovo
  Close #2
  Screen.MousePointer = vbNormal
  MsgBox "Ok"
End Sub

 

 

 

arquivo utilizado:

--------------------------------------------
01/2005|00000000200|00000000000002|1.000,00|
01/2005|00000000200|00000000000003|1.100,00|
01/2005|00000000200|00000000000004|1.200,00|
--------------------------------------------
01/2005|00000000300|00000000000002|1.000,00|
01/2005|00000000300|00000000000003|2.000,00|
01/2005|00000000300|00000000000004|1.200,00|
--------------------------------------------
02/2005|00000000200|00000000000002|3.000,00|
02/2005|00000000200|00000000000003|1.000,00|
01/2005|00000000200|00000000000004|1.200,00|
--------------------------------------------
02/2005|00000000300|00000000000002|1.000,00|
02/2005|00000000300|00000000000003|1.000,00|
02/2005|00000000300|00000000000004|1.200,00|
--------------------------------------------

arquivo retornado:

--------------------------------------------
01/2005|00000000200|00000000000002|1.000,00
01/2005|00000000200|00000000000003|1.100,00
01/2005|00000000200|00000000000004|0.900,00
--------------------------------------------
01/2005|00000000300|00000000000002|1.000,00
01/2005|00000000300|00000000000003|2.000,00
01/2005|00000000300|00000000000004|0.000.00
--------------------------------------------
02/2005|00000000200|00000000000002|3.000,00
02/2005|00000000200|00000000000003|0.000.00
01/2005|00000000200|00000000000004|1.200,00
--------------------------------------------
02/2005|00000000300|00000000000002|1.000,00
02/2005|00000000300|00000000000003|1.000,00
02/2005|00000000300|00000000000004|1.000,00
--------------------------------------------

 

   
MARCONE
Pontos: 2843
BRASÍLIA
DF - BRASIL
ENUNCIADA !
Postada em 04/08/2005 00:49 hs            
Valeu pela força, galera,
 
mas ainda não está funcionando.
 
a tabela está em ACCESS, e não em arquivos texto.
 
Se alguém tiver mais alguma idéia, agradeço..

MarconeEmoções

 

   
Martini
Pontos: 2843 Pontos: 2843
PAROBÉ
RS - BRASIL
ENUNCIADA !
Postada em 04/08/2005 08:10 hs         
manda a estrutura da tabela para eu tentar te ajudar ...
   
MARCONE
Pontos: 2843
BRASÍLIA
DF - BRASIL
Postada em 04/08/2005 10:11 hs            
Bom dia, Martini,
 
A estrutura da tabela é a seguinte:
Nome da tabela: tblPacientes
Campos:
Mes_Ano (string)
CodPaciente (string)
CodMedicamento (string)
Vr_Medic (unidade monetária)
Vr_Pagar (unidade monetária)
 
Dados lançados:
Mes_Ano|CodPaciente|CodMedicamento|Vr_Medic|Vr_Pagar
01/2005|00000000200|00000000000002|1.000,00|
01/2005|00000000200|00000000000003|1.100,00|
01/2005|00000000200|00000000000004|1.200,00|
---------------------------------------------------------
01/2005|00000000300|00000000000002|1.000,00|
01/2005|00000000300|00000000000003|2.000,00|
01/2005|00000000300|00000000000004|1.200,00|
---------------------------------------------------------
02/2005|00000000200|00000000000002|3.000,00|
02/2005|00000000200|00000000000003|1.000,00|
01/2005|00000000200|00000000000004|1.200,00|
---------------------------------------------------------
02/2005|00000000300|00000000000002|1.000,00|
02/2005|00000000300|00000000000003|1.000,00|
02/2005|00000000300|00000000000004|1.200,00|
---------------------------------------------------------
(...)
---------------------------------------------------------
 
Estou fazendo alguns testes aqui, mas minha lógica anda meio enferrujada e o resultado ainda não foi alcançado.
 
Valeu!!

MarconeEmoções

 

     
Página(s): 1/2      PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página