Uma mudança de hoje: FOR EACH
Enviado: 13 Jan 2016 23:19
Alterei uma rotina pra FOR EACH, e na hora de decidir se simplifiquei ou não, só sobrou rir... rs
Gostei principalmente dos GETs, eliminando problemas com array
Na parte de cima são extratos pra pagamento
Na parte de baixo são cheques emitidos
A intenção é mostrar em cada extrato, quanto os cheques causaram de baixa, e qual o saldo restante.
antes da alteração
depois da alteração
Nota:
Aqui funcionou, mas cai naquilo da minha GETSYS atualizar os GETs automaticamente, afinal toda tela é atualizada durante a digitação.
Pra ficar igual, teria que passar GetList como parâmetro nos VALID, e na rotina de cálculo fazer o get:Display() pra toda GetList.
Mas a intenção é mostrar a mudança do fonte usando FOR EACH.
É um fonte totalmente fora do normal.
Gostei principalmente dos GETs, eliminando problemas com array
Na parte de cima são extratos pra pagamento
Na parte de baixo são cheques emitidos
A intenção é mostrar em cada extrato, quanto os cheques causaram de baixa, e qual o saldo restante.
antes da alteração
Código: Selecionar todos
CREATE CLASS CalculaBaixaExtratoClass
VAR mExtrato
VAR mBaixa
VAR mSaldo
VAR mCheque
VAR mTexto INIT Space(50)
VAR mSomaExtrato INIT 0
VAR mSomaBaixa INIT 0
VAR mSomaSaldo INIT 0
VAR mSomaCheque INIT 0
VAR mSaldoCheque INIT 0
METHOD Init()
METHOD Calcula()
END CLASS
METHOD Init() CLASS CalculaBaixaExtratoClass
::mExtrato := Array(10)
::mBaixa := Array(10)
::mSaldo := Array(10)
::mCheque := Array(10)
Afill( ::mExtrato, 0 )
Afill( ::mBaixa, 0 )
Afill( ::mSaldo, 0 )
Afill( ::mCheque, 0 )
RETURN SELF
METHOD Calcula() CLASS CalculaBaixaExtratoClass
LOCAL mTotal := 0, nCont
FOR nCont = 1 TO 10
mTotal += ::mCheque[ nCont ]
NEXT
FOR nCont = 1 TO 10
IF ::mExtrato[ nCont ] == mTotal
::mBaixa[ nCont ] := mTotal
::mSaldo[ nCont ] := 0
mTotal := 0
ELSEIF ::mExtrato[ nCont ] > mTotal
::mBaixa[ nCont ] := mTotal
::mSaldo[ nCont ] := ::mExtrato[ nCont ] - ::mBaixa[nCont ]
mTotal := 0
ELSE
::mBaixa[ nCont ] := ::mExtrato[ nCont ]
::mSaldo[ nCont ] := 0
mTotal -= ::mBaixa[ nCont ]
ENDIF
NEXT
::mSomaExtrato := 0
::mSomaBaixa := 0
::mSomaCheque := 0
::mSomaSaldo := 0
FOR nCont = 1 TO Len( ::mExtrato )
::mSomaExtrato += ::mExtrato[ nCont ]
::mSomaBaixa += ::mBaixa[ nCont ]
::mSomaSaldo += ::mSaldo[ nCont ]
::mSomaCheque += ::mCheque[ nCont ]
NEXT
::mSaldoCheque := ::mSomaCheque - ::mSomaBaixa
IF ::mSaldoCheque != 0
::mTexto := Pad( "FALTA OU SOBRA VALOR DE CHEQUE", 50 )
ELSE
::mTexto := Space(50)
ENDIF
RETURN .T.
FUNCTION CalculaBaixaExtrato()
LOCAL GetList := {}, oVal := CalculaBaixaExtratoClass():New()
wSave()
Cls()
@ 2, 1 SAY "Valor extrato 1.:" GET oVal:mExtrato[ 1 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row(), Col() + 2 SAY "Baixar:" GET oVal:mBaixa[ 1 ] PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 2 SAY "Saldo:" GET oVal:mSaldo[ 1 ] PICTURE "999,999,999.99" WHEN .F.
@ Row() + 1, 1 SAY "Valor extrato 2.:" GET oVal:mExtrato[ 2 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row(), Col() + 2 SAY "Baixar:" GET oVal:mBaixa[ 2 ] PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 2 SAY "Saldo:" GET oVal:mSaldo[ 2 ] PICTURE "999,999,999.99" WHEN .F.
@ Row() + 1, 1 SAY "Valor extrato 3.:" GET oVal:mExtrato[ 3 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row(), Col() + 2 SAY "Baixar:" GET oVal:mBaixa[ 3 ] PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 2 SAY "Saldo:" GET oVal:mSaldo[ 3 ] PICTURE "999,999,999.99" WHEN .F.
@ Row() + 1, 1 SAY "Valor extrato 4.:" GET oVal:mExtrato[ 4 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row(), Col() + 2 SAY "Baixar:" GET oVal:mBaixa[ 4 ] PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 2 SAY "Saldo:" GET oVal:mSaldo[ 4 ] PICTURE "999,999,999.99" WHEN .F.
@ Row() + 1, 1 SAY "Valor extrato 5.:" GET oVal:mExtrato[ 5 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row(), Col() + 2 SAY "Baixar:" GET oVal:mBaixa[ 5 ] PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 2 SAY "Saldo:" GET oVal:mSaldo[ 5 ] PICTURE "999,999,999.99" WHEN .F.
@ Row() + 2, 1 SAY "Somas"
@ Row(), Col() + 13 GET oVal:mSomaExtrato PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 10 GET oVal:mSomaBaixa PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 9 GET oVal:mSomaSaldo PICTURE "999,999,999.99" WHEN .F.
@ Row() + 2, 1 SAY "Cheque 1........:" GET oVal:mCheque[ 1 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row() + 1, 1 SAY "Cheque 2........:" GET oVal:mCheque[ 2 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row() + 1, 1 SAY "Cheque 3........:" GET oVal:mCheque[ 3 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row() + 1, 1 SAY "Cheque 4........:" GET oVal:mCheque[ 4 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row() + 1, 1 SAY "Cheque 5........:" GET oVal:mCheque[ 5 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row() + 1, 1 SAY "Cheque 6........:" GET oVal:mCheque[ 6 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row() + 1, 1 SAY "Cheque 7........:" GET oVal:mCheque[ 7 ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row() + 2, 5 SAY "Soma Cheque:" GET oVal:mSomaCheque PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 3 SAY "Saldo em cheque:" GET oVal:mSaldoCheque PICTURE "999,999,999.99" WHEN .F.
@ Row() + 2, 20 GET oVal:mTexto WHEN .F.
READ
wRestore()
RETURN NIL
Código: Selecionar todos
#define V_EXTRATO 1
#define V_BAIXA 2
#define V_SALDO 3
#define V_CHEQUE 4
CREATE CLASS CalculaBaixaExtratoClass
VAR mLancto
VAR mSoma INIT { 0, 0, 0, 0 }
VAR mTexto INIT Space(50)
METHOD Init()
METHOD Calcula()
END CLASS
METHOD Init() CLASS CalculaBaixaExtratoClass
LOCAL oElement
::mLancto := Array(10)
FOR EACH oElement IN ::mLancto
oElement := { 0, 0, 0, 0 }
NEXT
RETURN SELF
METHOD Calcula() CLASS CalculaBaixaExtratoClass
LOCAL mTotal := 0, oElement
FOR EACH oElement IN ::mLancto
mTotal += oElement[ V_CHEQUE ]
NEXT
FOR EACH oElement IN ::mLancto
IF oElement[ V_EXTRATO ] == mTotal
oElement[ V_BAIXA ] := mTotal
oElement[ V_SALDO ] := 0
mTotal := 0
ELSEIF oElement[ V_EXTRATO ] > mTotal
oElement[ V_BAIXA ] := mTotal
oElement[ V_SALDO ] := oElement[ V_EXTRATO ] - oElement[ V_BAIXA ]
mTotal := 0
ELSE
oElement[ V_BAIXA ] := oElement[ V_EXTRATO ]
oElement[ V_SALDO ] := 0
mTotal -= oElement[ V_BAIXA ]
ENDIF
NEXT
::mSoma := { 0, 0, 0, 0 }
FOR EACH oElement IN ::mLancto
::mSoma[ V_EXTRATO ] += oElement[ V_EXTRATO ]
::mSoma[ V_BAIXA ] += oElement[ V_BAIXA ]
::mSoma[ V_CHEQUE ] += oElement[ V_CHEQUE ]
::mSoma[ V_SALDO ] += oElement[ V_SALDO ]
NEXT
::mSoma[ V_SALDO ] := ::mSoma[ V_CHEQUE ] - ::mSoma[ V_BAIXA ]
IF ::mSoma[ V_SALDO ] != 0
::mTexto := Pad( "FALTA OU SOBRA VALOR DE CHEQUE", 50 )
ELSE
::mTexto := Space(50)
ENDIF
RETURN .T.
FUNCTION CalculaBaixaExtrato()
LOCAL GetList := {}, oElement, oVal := CalculaBaixaExtratoClass():New()
wSave()
Cls()
@ 1, 0 SAY ""
FOR EACH oElement IN oVal:mLancto
@ Row() + 1, 1 SAY "Valor extrato:" GET oElement[ V_EXTRATO ] PICTURE "999,999,999.99" VALID oVal:Calcula()
@ Row(), Col() + 2 SAY "Baixar:" GET oElement[ V_BAIXA ] PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 2 SAY "Saldo:" GET oElement[ V_SALDO ] PICTURE "999,999,999.99" WHEN .F.
NEXT
@ Row() + 2, 1 SAY "Somas"
@ Row(), Col() + 10 GET oVal:mSoma[ V_EXTRATO ] PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 10 GET oVal:mSoma[ V_BAIXA ] PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 9 GET oVal:mSoma[ V_SALDO ] PICTURE "999,999,999.99" WHEN .F.
@ Row() + 1, 0 SAY ""
FOR EACH oElement IN oVal:mLancto
@ Row() + 1, 1 SAY "Cheque .........:" GET oElement[ V_CHEQUE ] PICTURE "999,999,999.99" VALID oVal:Calcula()
NEXT
@ Row() + 2, 5 SAY "Soma Cheque:" GET oVal:mSoma[ V_CHEQUE ] PICTURE "999,999,999.99" WHEN .F.
@ Row(), Col() + 3 SAY "Saldo em cheque:" GET oVal:mSoma[ V_SALDO ] PICTURE "999,999,999.99" WHEN .F.
@ Row() + 2, 20 GET oVal:mTexto WHEN .F.
READ
wRestore()
RETURN NIL
Aqui funcionou, mas cai naquilo da minha GETSYS atualizar os GETs automaticamente, afinal toda tela é atualizada durante a digitação.
Pra ficar igual, teria que passar GetList como parâmetro nos VALID, e na rotina de cálculo fazer o get:Display() pra toda GetList.
Mas a intenção é mostrar a mudança do fonte usando FOR EACH.
É um fonte totalmente fora do normal.