CONVERTER FORMULA CLIPPER PARA VB6

OLAFEKORKAN 11/10/2009 13:00:23
#325026
Aí galera!
Estou desenvolvendo uma aplicação em VB que irá substituir alguns programas do DATASUS que são em DOS e estou às voltas com algumas fórmulas do DATASUS. Por isso estou sempre pedindo a ajuda para conversão de algumas fórmulas para VB

***ESSA ABAIXO é EM CLIPPER***
Será que alguém me ajuda passando ela pra VB



nSMT := 0


WHILE .NOT. APAL->(EOF())

nSoma := 0

IF APAL->APA_CONT = [Ô]1[Ô]
nSoma := nSoma + (VAL(APAL->APA_NUM ) % 1111)
ENDIF

nSoma += VAL( APAL->PAP_PA1) % 1111
nSoma += VAL( APAL->PAP_PA2) % 1111
nSoma += VAL( APAL->PAP_PA3) % 1111
nSoma += VAL( APAL->PAP_PA4) % 1111
nSoma += VAL( APAL->PAP_PA5) % 1111
nSoma += VAL( APAL->PAP_PA6) % 1111
nSoma += VAL( APAL->PAP_PA7) % 1111
nSoma += VAL( APAL->PAP_PA8) % 1111
nSoma += VAL( APAL->PAP_PA9) % 1111
nSoma += VAL( APAL->PAP_PA10) % 1111
nSoma += VAL(APAL->PAP_QT_P1 )% 1111
nSoma += VAL(APAL->PAP_QT_P2 )% 1111
nSoma += VAL(APAL->PAP_QT_P3 )% 1111
nSoma += VAL(APAL->PAP_QT_P4 )% 1111
nSoma += VAL(APAL->PAP_QT_P5 )% 1111
nSoma += VAL(APAL->PAP_QT_P6 )% 1111
nSoma += VAL(APAL->PAP_QT_P7 )% 1111
nSoma += VAL(APAL->PAP_QT_P8 )% 1111
nSoma += VAL(APAL->PAP_QT_P9 )% 1111
nSoma += VAL(APAL->PAP_QT_P10)% 1111

nSMT += nSoma

APAL->(DBSKIP(+1))

ENDDO

nSMT := nSMT % 1111 + 1111
OLAFEKORKAN 12/10/2009 13:04:06
#325082
Citação:

RCMRO escreveu:
Se ainda me lembro do Clipper, é mais ou menos assim (VB6)
PS.: Só não entendi o uso do MOD (ou %), principalmente a última mas, deve ter sua explicação para a rotina em questão...

    Public Sub Calcula(ByVal rs As Rescordset)
Dim nSMT As Double
Dim nSoma As Double

nSMT = 0

rs.MoveFirst()
Do While Not rs.EOF
nSoma = 0
If rs.fields() = [Ô]1[Ô] Then
nSoma = nSoma + (CDbl(rs.Fields([Ô]APA_NUM[Ô])) Mod 1111)
End If

nSoma = nSoma + (CDbl(rs.Fields([Ô]PAP_PA1[Ô])) Mod 1111)
: [ô]Põe o resto das
: [ô]somas aqui
nSMT = nSMT + nSoma
rs.MoveNext()
Loop
nSMT = nSMT MOD 1111 + 1111

End Sub



E aí RCMRO blz?
Seguinte: E ssa fórmula é um cálculo de um item que se chama Campo de Controle. pegando os dados em uma tabela.
A sintaxe é a seguinte: Conforme Ministério da Saúde/DATASUS

O [Ô]CAMPO DE CONTROLE[Ô] permite a validação das informações contidas no disquete . Está implementado no Sistema APAC do MS/DATASUS, com o seguinte cálculo:
Encontrar o resto da divisão do somatório das quantidades de procedimentos + o somatório dos códigos de procedimento + CPF do paciente + Número do APAC por 1111(mil cento e onze) .
Somar 1111(mil cento e onze) ao resto.

[txt-color=#0404B4]Dê uma olhada pra ver se é isso mesmo que a fórmula tá fazendo. Não entendo nada de Clipper.[/txt-color]
OLAFEKORKAN 12/10/2009 13:10:11
#325083
Citação:

RCMRO escreveu:
Se ainda me lembro do Clipper, é mais ou menos assim (VB6)
PS.: Só não entendi o uso do MOD (ou %), principalmente a última mas, deve ter sua explicação para a rotina em questão...

    Public Sub Calcula(ByVal rs As Rescordset)
Dim nSMT As Double
Dim nSoma As Double

nSMT = 0

rs.MoveFirst()
Do While Not rs.EOF
nSoma = 0
If rs.fields() = [Ô]1[Ô] Then
nSoma = nSoma + (CDbl(rs.Fields([Ô]APA_NUM[Ô])) Mod 1111)
End If

nSoma = nSoma + (CDbl(rs.Fields([Ô]PAP_PA1[Ô])) Mod 1111)
: [ô]Põe o resto das
: [ô]somas aqui
nSMT = nSMT + nSoma
rs.MoveNext()
Loop
nSMT = nSMT MOD 1111 + 1111

End Sub



Nessas duas linhas onde você colocou
[txt-color=#0404B4] : [ô]Põe o resto das
: [ô]somas aqui[/txt-color]

Eu que tenho que colocar alguma coisa?
Óu é sú um informativo das linhas:
[txt-color=#B4045F]nSoma = nSoma + (CDbl(rs.Fields([Ô]PAP_PA1[Ô])) Mod 1111)[/txt-color]
e
[txt-color=#B4045F]nSMT = nSMT + nSoma[/txt-color]

Pode explicar melhor?
FOXMAN 19/03/2011 00:35:59
#368522
[txt-color=#0000f0][txt-size=2]CAMPANHA DEIXE NOSSO SITE LIMPO, FECHE SEU TÓPICO ASSIM QUE TIVER UMA RESPOSTA SATISFATÓRIA.[/txt-size][/txt-color]
Tópico encerrado , respostas não são mais permitidas