Reparem como ajuda:
- #define
- formatação do fonte
- FOR-EACH
- Reescrever um pouco
Como exemplo, tente alterar uma alÃquota de cálculo do imposto, em cada um dos fontes, ou tente entender o que grava no replace.
Mas preste atenção no motivo que faz ficar mais simples alterar.
E depois repare que o primeiro, é um bloco de fonte, enquanto o segundo é um fonte independente, o que facilita mais ainda.
DO CASE
CASE nOpcao = 1
AbreArquivos( "locad00" )
AbreArquivos( "leao" )
TELE01 = 0
SELECT locad00
UF00 = 1.0641
UF01 = 1.0641
AL00 = 7.50
AL01 = 15.00
ALL00 = 22.50
ALL01 = 27.50
PA00 = 117.49
PA01 = 293.58
PPA00 = 528.37
PPA01 = 723.95
PARA00 = 1566.61
PARA01 = 2347.85
PARA02 = 2347.86
PARA03 = 3130.51
PARA04 = 3130.52
PARA05 = 3911.63
PARA06 = 3911.64
PARA07 = 35000.00
@ 04, 00, 21, 79 BOX Space( 9 )
@ 04, 24 SAY "+-------------------------------+"
@ 05, 24 SAY "| UFIR ANTERIOR > |"
@ 06, 24 SAY "+-------------------------------+"
@ 07, 24 SAY "| UFIR ATUAL > |"
@ 08, 24 SAY "+-------------------------------+"
@ 10, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 11, 05 SAY "| DE | | A | ||ALIQ || DEDUZIR |"
@ 12, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 13, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 14, 05 SAY "| DE | | A | ||ALIQ || DEDUZIR |"
@ 15, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 16, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 17, 05 SAY "| DE | | A | ||ALIQ || DEDUZIR |"
@ 18, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 19, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 20, 05 SAY "| DE | | A | ||ALIQ || DEDUZIR |"
@ 21, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 05, 43 GET UF00 PICTURE "######.####"
@ 07, 43 GET UF01 PICTURE "######.####"
@ 11, 11 GET PARA00 PICTURE "999999999.99"
@ 11, 28 GET PARA01 PICTURE "999999999.99"
@ 11, 47 GET AL00 PICTURE "##.##"
@ 11, 63 GET PA00 PICTURE "999999999.99"
@ 14, 11 GET PARA02 PICTURE "999999999.99"
@ 14, 28 GET PARA03 PICTURE "999999999.99"
@ 14, 47 GET AL01 PICTURE "##.##"
@ 14, 63 GET PA01 PICTURE "999999999.99"
@ 17, 11 GET PARA04 PICTURE "999999999.99"
@ 17, 28 GET PARA05 PICTURE "999999999.99"
@ 17, 47 GET ALL00 PICTURE "##.##"
@ 17, 63 GET PPA00 PICTURE "999999999.99"
@ 20, 11 GET PARA06 PICTURE "999999999.99"
@ 20, 28 GET PARA07 PICTURE "999999999.99"
@ 20, 47 GET ALL01 PICTURE "##.##"
@ 20, 63 GET PPA01 PICTURE "999999999.99"
READ
DO WHILE TELE01 < 9999
@ 04, 00, 21, 79 BOX Space( 9 )
TELE01 = 9999
Mensagem( "Qual o código do locador:" )
@ Row(), Col() + 2 GET TELE01 PICTURE "9999"
READ
Mensagem()
IF TELE01 >= 9999
EXIT
ENDIF
SEEK TELE01
IF Eof()
MsgStop( "Locador não cadastrado" )
LOOP
ENDIF
NOME00 = locad00->NOME
CIC00 = locad00->CIC
ENDE00 = locad00->ENDERECO
CIDA00 = locad00->CIDADE
CEP00 = locad00->CEP
UF10 = locad00->UF
VALO00 = 0
VALI = 0
VAIR = 0
PE00 = 0
PAR0 = 0
RESU00 = 0
RESU01 = 0
DO WHILE VALO00 = 0
Mensagem( "Locador " + StrZero( TELE01, 4 ) + ". Qual valor base:" )
@ Row(), Col() + 2 GET VALO00 PICTURE "999999.99"
READ
Mensagem()
ENDDO
IF VALO00 > PARA00 .AND. VALO00 <= PARA01
PE00 = AL00
PAR0 = PA00
RESU01 = VALO00 * PE00 / 100
RESU00 = RESU01 - PAR0
RESU01 = RESU00
ELSEIF VALO00 > PARA02 .AND. VALO00 <= PARA03
PE00 = AL01
PAR0 = PA01
RESU01 = VALO00 * PE00 / 100
RESU00 = RESU01 - PAR0
RESU01 = RESU00
ELSEIF VALO00 > PARA04 .AND. VALO00 <= PARA05
PE00 = ALL00
PAR0 = PPA00
RESU01 = VALO00 * PE00 / 100
RESU00 = RESU01 - PAR0
RESU01 = RESU00
ELSEIF VALO00 > PARA06 .AND. VALO00 <= PARA07
PE00 = ALL01
PAR0 = PPA01
RESU01 = VALO00 * PE00 / 100
RESU00 = RESU01 - PAR0
RESU01 = RESU00
ENDIF
RESU00 = RESU00 / UF00 * UF01
SELECT leao
SEEK TELE01
IF Found()
Reclock( 0 )
REPLACE leao->COD WITH TELE01, leao->NOME WITH NOME00, leao->CIC WITH CIC00, leao->ENDERECO WITH ENDE00, ;
leao->CIDADE WITH CIDA00, leao->CEP WITH CEP00, leao->UF WITH UF10, leao->VALOR WITH VALO00
REPLACE leao->VALIMP WITH RESU00, leao->AIR WITH RESU00 * 5 / 100, leao->PERC WITH PE00, leao->RESU WITH RESU01, ;
leao->ORIGINAL WITH RESU01
ELSE
RecAppend()
REPLACE leao->COD WITH TELE01, leao->NOME WITH NOME00, leao->CIC WITH CIC00, leao->ENDERECO WITH ENDE00, ;
leao->CIDADE WITH CIDA00, leao->CEP WITH CEP00, leao->UF WITH UF10, leao->VALOR WITH VALO00
REPLACE leao->VALIMP WITH RESU00, leao->AIR WITH RESU00 * 5 / 100, leao->PERC WITH PE00, leao->RESU WITH RESU01, ;
leao->ORIGINAL WITH RESU01
ENDIF
RecUnlock()
SELECT locad00
ENDDO
CLOSE DATABASES
#define TABELA_DE 1
#define TABELA_ATE 2
#define TABELA_ALIQUOTA 3
#define TABELA_DEDUCAO 4
STATIC PROCEDURE PLOCLEAO2Digita
LOCAL nLocador, nUfirAnterior := 1.0641, nUfirAtual := 1.0641
LOCAL nValor, UF10, CEP00, NOME00, CIC00, ENDE00, CIDA00, GetList := {}
LOCAL aTabela, nImposto, nImpostoUfir, nPercentual, oElement
aTabela := { ;
{ 1566.61, 2347.85, 7.5, 117.49 }, ;
{ 2347.86, 3130.51, 15.0, 293.58 }, ;
{ 3130.52, 3911.63, 22.5, 528.37 }, ;
{ 3911.64, 35000.00, 27.5, 723.95 } }
IF ! AbreArquivos( "locad00", "leao" )
RETURN
ENDIF
SELECT locad00
Cls()
@ 04, 24 SAY "+-------------------------------+"
@ 05, 24 SAY "| UFIR ANTERIOR > |"
@ 06, 24 SAY "+-------------------------------+"
@ 07, 24 SAY "| UFIR ATUAL > |"
@ 08, 24 SAY "+-------------------------------+"
@ 10, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 11, 05 SAY "| DE | | A | ||ALIQ || DEDUZIR |"
@ 12, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 13, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 14, 05 SAY "| DE | | A | ||ALIQ || DEDUZIR |"
@ 15, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 16, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 17, 05 SAY "| DE | | A | ||ALIQ || DEDUZIR |"
@ 18, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 19, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 20, 05 SAY "| DE | | A | ||ALIQ || DEDUZIR |"
@ 21, 05 SAY "+----+------------+---+------------++----------++----------------------+"
@ 05, 43 GET nUfirAnterior PICTURE "######.####"
@ 07, 43 GET nUfirAtual PICTURE "######.####"
@ 08, 0 SAY ""
FOR EACH oElement IN aTabela
@ Row() + 3, 11 GET oElement[ TABELA_DE ] PICTURE "999999999.99"
@ Row(), 28 GET oElement[ TABELA_ATE ] PICTURE "999999999.99"
@ Row(), 47 GET oElement[ TABELA_ALIQUOTA ] PICTURE "##.##"
@ Row(), 63 GET oElement[ TABELA_DEDUCAO ] PICTURE "999999999.99"
NEXT
READ
DO WHILE .T.
Cls()
nLocador := 0
Mensagem( "Qual o código do locador:" )
@ Row(), Col() + 2 GET nLocador PICTURE "9999"
READ
Mensagem()
IF nLocador >= 9999 .OR. LastKey() == K_ESC
EXIT
ENDIF
SEEK nLocador
IF Eof()
MsgStop( "Locador não cadastrado" )
LOOP
ENDIF
NOME00 := locad00->NOME
CIC00 := locad00->CIC
ENDE00 := locad00->ENDERECO
CIDA00 := locad00->CIDADE
CEP00 := locad00->CEP
UF10 := locad00->UF
nValor := 0
Mensagem( "Locador " + StrZero( nLocador, 4 ) + ". Qual valor base:" )
@ Row(), Col() + 2 GET nValor PICTURE "999999.99" VALID nValor > 0
READ
Mensagem()
IF nValor == 0 .OR. LastKey() == K_ESC
LOOP
ENDIF
nImposto := 0
nPercentual := 0
FOR EACH oElement IN aTabela
IF nValor > oElement[ TABELA_DE ] .AND. nValor <= oElement[ TABELA_ATE ]
nPercentual := oElement[ TABELA_ALIQUOTA ]
nImposto := nValor * nPercentual / 100 - oElement[ TABELA_DEDUCAO ]
IF nImposto < 0
nImposto := 0
ENDIF
EXIT
ENDIF
NEXT
nImpostoUfir := nImposto / nUfirAnterior * nUfirAtual
SELECT leao
SEEK nLocador
IF Eof()
RecAppend()
ENDIF
Reclock( 0 )
REPLACE ;
leao->COD WITH nLocador, ;
leao->NOME WITH NOME00, ;
leao->CIC WITH CIC00, ;
leao->ENDERECO WITH ENDE00, ;
leao->CIDADE WITH CIDA00, ;
leao->CEP WITH CEP00, ;
leao->UF WITH UF10, ;
leao->VALOR WITH nValor, ;
leao->VALIMP WITH nImpostoUfir, ;
leao->AIR WITH nImpostoUfir * 5 / 100, ;
leao->PERC WITH nPercentual, ;
leao->RESU WITH nImposto, ;
leao->ORIGINAL WITH nImposto
RecUnlock()
SELECT locad00
ENDDO
CLOSE DATABASES
RETURN