|
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..
Marcone
|
|
|
|
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
|
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
|
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..
Marcone
|
|
|
Martini
|
PAROBÉ RS - BRASIL
|
|
ENUNCIADA !
|
|
|
Postada em 04/08/2005 08:10 hs
manda a estrutura da tabela para eu tentar te ajudar ...
|
|
|
|
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!!
Marcone
|
|
|
|