Sei que você quer reduzir código no .prg, mas abaixo coloquei uma soluçãp que eu uso e que até agora funcionou comigo. Pode ser, então, que lhe seja útil!
Código: Selecionar todos
SET KEY -7 TO EMPGOP
DO WHILE .T.
cNUMERO = SPACE(4)
cNOME = SPACE(50)
cATIVO = SPACE(3)
cPONTUAL = SPACE(4)
cMATRICULA = SPACE(4)
cENTREVISTA = SPACE(10)
cADMISSAO = SPACE(10)
cTIPOADM = SPACE(40)
cCBO = SPACE(7)
cCARGO = SPACE(40)
cDEPTO = SPACE(20)
cCATEGORIA = SPACE(40)
nSALARIO = 0
cFORMAPAGTO = SPACE(20)
cBANCO = SPACE(50)
cAGENCIA = SPACE(50)
cCONTA = SPACE(50)
cSINDICATO = SPACE(40)
nTAXASOCIO = 0
cCESTA = SPACE(3)
cMESCESTA = SPACE(7)
nVALETRANSP = 0
nNOFILHOS = 0
nNODEPEND = 0
nPENSAO = 0
cPENSOBRE = SPACE(20)
cPENBANCO = SPACE(50)
cPENAGENCIA = SPACE(50)
cPENCONTA = SPACE(50)
cPENTITULAR = SPACE(50)
cDEMISSAO = SPACE(10)
cTIPODEM = SPACE(40)
cNASCIMENTO = SPACE(10)
cLOCAL = SPACE(30)
cNACIONALID = SPACE(20)
cRACA = SPACE(20)
cPELE = SPACE(20)
cOLHOS = SPACE(20)
cCABELOS = SPACE(20)
cBARBA = SPACE(3)
cBIGODE = SPACE(3)
cDEFICIENTE = SPACE(3)
cTIPODEF = SPACE(10)
cSEXO = SPACE(9)
cNOMEPAI = SPACE(40)
cNACIOPAI = SPACE(20)
cNOMEMAE = SPACE(40)
cNACIOMAE = SPACE(20)
cESTCIVIL = SPACE(10)
cCONJUGE = SPACE(50)
cINSTRUCAO = SPACE(40)
cRG = SPACE(20)
cCPF = SPACE(20)
cTITELEITOR = SPACE(20)
cRESERVISTA = SPACE(20)
cCTPSNO = SPACE(5)
cCTPSSERIE = SPACE(3)
cCTPSUF = SPACE(2)
cPISPASEP = SPACE(20)
cHABILITACA = SPACE(20)
cENDERECO = SPACE(50)
cBAIRRO = SPACE(40)
cCEP = SPACE(9)
cCIDADE = SPACE(40)
cUF = SPACE(2)
cTEL = SPACE(50)
cCEL = SPACE(50)
cFAX = SPACE(50)
cEMAIL = SPACE(50)
cDOM_ENTR1 = "00:00"
cDOM_SAID1 = "00:00"
cDOM_ENTR2 = "00:00"
cDOM_SAID2 = "00:00"
cSEG_ENTR1 = "00:00"
cSEG_SAID1 = "00:00"
cSEG_ENTR2 = "00:00"
cSEG_SAID2 = "00:00"
cTER_ENTR1 = "00:00"
cTER_SAID1 = "00:00"
cTER_ENTR2 = "00:00"
cTER_SAID2 = "00:00"
cQUA_ENTR1 = "00:00"
cQUA_SAID1 = "00:00"
cQUA_ENTR2 = "00:00"
cQUA_SAID2 = "00:00"
cQUI_ENTR1 = "00:00"
cQUI_SAID1 = "00:00"
cQUI_ENTR2 = "00:00"
cQUI_SAID2 = "00:00"
cSEX_ENTR1 = "00:00"
cSEX_SAID1 = "00:00"
cSEX_ENTR2 = "00:00"
cSEX_SAID2 = "00:00"
cSAB_ENTR1 = "00:00"
cSAB_SAID1 = "00:00"
cSAB_ENTR2 = "00:00"
cSAB_SAID2 = "00:00"
cDIADSR = SPACE(3)
cVALORDSR = SPACE(5)
cNOTA01 = SPACE(76)
cNOTA02 = SPACE(76)
cNOTA03 = SPACE(76)
cNOTA04 = SPACE(76)
SETCOLOR("B/W")
CLEAR SCREEN
SET CURSOR ON
@ 02,01 SAY "NUMERO: "
@ 02,14 SAY "NOME: "
@ 03,01 SAY "ATIVO?" + CHR(31)
@ 03,12 SAY "MATRICULA: "
@ 03,28 SAY "PONTO ELETRONICO: "
@ 03,51 SAY "ENTREVISTA: "
@ 04,01 SAY "ADMISSAO: "
@ 04,22 SAY "TIPO:" + CHR(31)
@ 05,01 SAY "C.B.O.: "
@ 05,17 SAY "CARGO: "
@ 06,01 SAY "DEPTO: "
@ 06,29 SAY "CATEG:" + CHR(31)
@ 07,01 SAY "SALARIO: "
@ 07,21 SAY "FORMA DE PAGAMENTO:" + CHR(31)
@ 09,00 TO 13,79
@ 09,01 SAY "DADOS BANCARIOS PARA DEPOSITO EM CONTA"
@ 10,01 SAY "BANCO: "
@ 11,01 SAY "AGENCIA: "
@ 12,01 SAY "CONTA: "
@ 15,01 SAY "SINDICATO:" + CHR(31)
@ 15,53 SAY "TAXA SOCIO: "
@ 17,01 SAY "RECEBE CESTA BASICA?" + CHR(31)
@ 17,26 SAY "CESTA BASICA A RECEBER: "
@ 19,01 SAY "VALE TRANSPORTE (INFORMAR VALOR POR DIA, IDA + VOLTA): "
@ 21,01 SAY "DEMISSAO: "
@ 21,22 SAY "MOTIVO:" + CHR(31)
@ 02,09 GET cNUMERO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 02,20 GET cNOME PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 03,08 GET cATIVO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 03,23 GET cMATRICULA PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 03,46 GET cPONTUAL PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 03,63 GET cENTREVISTA PICTURE "99/99/9999" SEND COLORSPEC := "N/W,W+/N"
@ 04,11 GET cADMISSAO PICTURE "99/99/9999" SEND COLORSPEC := "N/W,W+/N"
@ 04,28 GET cTIPOADM PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 05,09 GET cCBO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 05,24 GET cCARGO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 06,08 GET cDEPTO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 06,36 GET cCATEGORIA PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 07,10 GET nSALARIO PICTURE "@E 9999999.99" SEND COLORSPEC := "N/W,W+/N"
@ 07,41 GET cFORMAPAGTO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 10,08 GET cBANCO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 11,10 GET cAGENCIA PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 12,08 GET cCONTA PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 15,12 GET cSINDICATO PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 15,65 GET nTAXASOCIO PICTURE "@E 9999999.99" SEND COLORSPEC := "N/W,W+/N"
@ 17,22 GET cCESTA PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
@ 17,50 GET cMESCESTA PICTURE "99/9999" SEND COLORSPEC := "N/W,W+/N"
@ 19,56 GET nVALETRANSP PICTURE "@E 9999999.99" SEND COLORSPEC := "N/W,W+/N"
@ 21,11 GET cDEMISSAO PICTURE "99/99/9999" SEND COLORSPEC := "N/W,W+/N"
@ 21,30 GET cTIPODEM PICTURE "@!" SEND COLORSPEC := "N/W,W+/N"
READ
IF LASTKEY() = 27
EXIT
ENDIF
ENDDO
SET COLOR TO
CLEAR SCREEN
RETURN
FUNCTION EMPGOP
LOCAL aOPCAO := {}
LOCAL nOPCAO
LOCAL nATUAL
LOCAL cEMPGTEL := SAVESCREEN(00,00,24,79)
LOCAL cEMPGCOR := SETCOLOR()
IF READVAR() = LEFT("CATIVO",10)
AADD(aOPCAO,"SIM")
AADD(aOPCAO,"NAO")
SETCOLOR("W+/B,W+/N")
@ 03,08 CLEAR TO 06,12
DBGSHADOW(03,08,06,12)
@ 03,08 TO 06,12
nOPCAO = ACHOICE(04,09,05,11,aOPCAO)
IF nOPCAO <> 0
cATIVO = aOPCAO[nOPCAO]
ENDIF
ELSEIF READVAR() = LEFT("CTIPOADM",10)
AADD(aOPCAO,"10-PRIMEIRO EMPREGO ")
AADD(aOPCAO,"20-EMPREGO ANTERIOR / REEMPREGO ")
AADD(aOPCAO,"25-CONTRATO POR PRAZO DETERMINADO ")
AADD(aOPCAO,"35-REINTEGRACAO ")
AADD(aOPCAO,"70-TRANSFERENCIA DE ENTRADA ")
SETCOLOR("W+/B,W+/N")
@ 04,28 CLEAR TO 09,69
DBGSHADOW(04,28,09,69)
@ 04,28 TO 09,69
nOPCAO = ACHOICE(05,29,08,68,aOPCAO)
IF nOPCAO <> 0
cTIPOADM = aOPCAO[nOPCAO]
ENDIF
ELSEIF READVAR() = LEFT("CFORMAPAGTO",10)
AADD(aOPCAO,"01-MENSAL ")
AADD(aOPCAO,"02-QUINZENAL ")
AADD(aOPCAO,"03-SEMANAL ")
AADD(aOPCAO,"04-DIARIO ")
AADD(aOPCAO,"05-POR HORA ")
AADD(aOPCAO,"06-POR TAREFA ")
AADD(aOPCAO,"07-POR PECA ")
AADD(aOPCAO,"08-POR AULA ")
SETCOLOR("W+/B,W+/N")
@ 07,41 CLEAR TO 12,63
DBGSHADOW(07,41,12,63)
@ 07,41 TO 12,63
nOPCAO = ACHOICE(08,42,11,62,aOPCAO)
IF nOPCAO <> 0
cFORMAPAGTO = aOPCAO[nOPCAO]
ENDIF
ELSEIF READVAR() = LEFT("CCESTA",10)
AADD(aOPCAO,"SIM")
AADD(aOPCAO,"NAO")
SETCOLOR("W+/B,W+/N")
@ 17,22 CLEAR TO 20,26
DBGSHADOW(17,22,20,26)
@ 17,22 TO 20,26
nOPCAO = ACHOICE(18,23,19,25,aOPCAO)
IF nOPCAO <> 0
cCESTA = aOPCAO[nOPCAO]
ENDIF
ELSEIF READVAR() = LEFT("CTIPODEM",10)
AADD(aOPCAO,"00-SEM DEFINICAO ")
AADD(aOPCAO,"31-DISPENSA SEM JUSTA CAUSA ")
AADD(aOPCAO,"32-DISPENSA POR JUSTA CAUSA ")
AADD(aOPCAO,"40-PEDIDO DE DEMISSAO ")
AADD(aOPCAO,"43-FIM DE CONTRATO POR PRAZO DETERMINADO")
AADD(aOPCAO,"45-TERMINO DE CONTRATO ")
AADD(aOPCAO,"50-APOSENTADORIA ")
AADD(aOPCAO,"60-FALECIMENTO ")
AADD(aOPCAO,"80-TRANSFERENCIA DE SAIDA ")
SETCOLOR("W+/B,W+/N")
@ 15,30 CLEAR TO 21,72
DBGSHADOW(15,30,21,72)
@ 15,30 TO 21,72
nOPCAO = ACHOICE(16,31,20,71,aOPCAO)
IF nOPCAO <> 0
cTIPODEM = aOPCAO[nOPCAO]
ENDIF
ENDIF
SET COLOR TO cEMPGCOR
CLEAR SCREEN
RESTSCREEN(00,00,24,79,cEMPGTEL)
RETURN(.T.)