Iniciante em xHarbour pede ajuda
Enviado: 10 Mar 2008 16:43
por locio
Segue o fonte do programa:
//
// FUNCAO QUE PREPARA A IMPRESSAO EM TELA
//
ImpressoraOK()
SELE EMPRESAS
WCGCCEI = 'CNPJ:'
WEMPTPINS = STR(EMPTINS,1)
DO CGCCEI77B WITH WEMPTPINS, WCGCCEI
NPAG = 0
LL = 70
SELE FPEMPREG
SET ORDER TO 1
SEEK CODEMPRESA
DO WHILE !EOF() .AND. EMEMPR = CODEMPRESA
IF SUBSTR(WINI,1,1) <> SPACE(1)
WDTADMS = DTOS(EMDTADMS)
WDTADMS = SUBSTR(WDTADMS,1,6)
IF !(WDTADMS >= WINI .AND. WDTADMS <= WFIM)
sele fpempreg
SKIP
LOOP
ENDIF
ENDIF
IF wop1 = 'S' .OR. (wop1 = 'N' .AND. EMSITC < '70')
SELE FPEMPREG
DO CAB19D1
LL = LL + 1
@ LL,01 SAY 'MATRICULA: '
@ LL,12 SAY EMMATR PICT '999999'
@ LL,20 SAY 'NOME: ' + EMNOME
@ LL,75 SAY 'SITUACAO: ' + EMSITC + '-' + TRADUZ_TAB('05',EMSITC)
LL = LL + 1
SELE FPEMPREG
@ LL,01 SAY 'SEXO: ' + EMSEXO
@ LL,10 SAY 'EST.CIVIL: ' + EMCIVIL + '-' + TRADUZ_TAB('12',EMCIVIL)
SELE FPEMPREG
@ LL,50 SAY 'GRAU INSTR.: ' + EMGRINS + '-' + TRADUZ_TAB('13',EMGRINS)
SELE FPEMPREG
@ LL,90 SAY 'SANGUE: ' + EMSANGUE
LL = LL + 1
@ LL,01 SAY 'DATA NASC.: ' + DTOC(EMDTNASC)
@ LL,25 SAY 'DATA ADM.: ' + DTOC(EMDTADMS)
@ LL,50 SAY 'DATA RESC.: ' + DTOC(EMDTRESC)
@ LL,75 SAY 'HRS TRAB.: ' + EMHRSTRB
SELE FPEMPREG
@ LL,95 SAY 'MODO PAGTO: ' + TRIM(EMMODPAG) + '-' + TRADUZ_TAB ('25',EMMODPAG)
LL = LL + 1
SELE FPEMPREG
@ LL,01 SAY 'DEPEND.: IR ' + STR(EMDEPIR,2) + ' SF ' + STR(EMDEPSF,2)
@ LL,26 SAY '%INSAL.: ' + STR(EMINSAL,2)
@ LL,40 SAY '%PERIC.: ' + STR(EMPERIC,2)
@ LL,55 SAY 'SINDIC.: ' + TRIM(EMSIND) + '-' + TRADUZ_TAB('22',EMSIND)
SELE FPEMPREG
@ LL,85 SAY 'VALE TRANSP.: ' + EMVALE
@ LL,105 SAY 'TRAB.SAB.: ' + EMSAB
LL = LL + 1
@ LL,01 SAY 'BCO/AGEN: '
@ LL,11 SAY EMBCO PICT '999/99999'
@ LL,21 SAY 'CONTA: ' + EMCONTA
@ LL,50 SAY 'FGTS-BCO/AGEN: '
@ LL,65 SAY EMFGTSBCO PICT '999/99999'
@ LL,75 SAY 'CONTA: ' + EMFGTSCTA
@ LL,94 SAY 'DEPTO: ' + TRIM(EMDEPTO) + '-' + TRADUZ_TAB('18',EMDEPTO)
SELE FPEMPREG
LL = LL + 1
@ LL,01 SAY 'FUNCAO: ' + EMFUNCAO + '-' + TRADUZ_TAB('23',EMFUNCAO)
SELE FPEMPREG
@ LL,45 SAY 'CBO: ' + EMCBO + '-' + TRADUZ_TAB('21',EMCBO)
SELE FPEMPREG
@ LL,85 SAY 'CPF: '
@ LL,90 SAY EMCPF PICT '@ZE 999,999,999/99'
@ LL,108 SAY 'PIS/PASEP: '
@ LL,119 SAY EMPIS
LL = LL + 1
@ LL,01 SAY 'IDENT.: '
@ LL,09 SAY EMID
@ LL,21 SAY 'ORG.: ' + EMIDEXP
@ LL,31 SAY 'UF: ' + EMIDUF
@ LL,38 SAY 'DT.EMIS.: ' + DTOC(EMIDDAT)
@ LL,58 SAY 'CART.PROF.: '
@ LL,70 SAY EMCP
@ LL,78 SAY 'SERIE: '
@ LL,85 SAY EMCPSER
@ LL,90 SAY 'UF: ' + EMCPUF
@ LL,98 SAY 'VINC.: ' + TRIM(EMVINC) + '-' + TRADUZ_TAB('07',EMVINC)
SELE FPEMPREG
LL = LL + 1
@ LL,01 SAY 'PONTO: '
@ LL,08 SAY EMPONTO
@ LL,15 SAY 'GRAT.TEMPO SERV.(%): '
@ LL,36 SAY EMANOS
@ LL,40 SAY 'SALARIO: '
@ LL,49 SAY EMSALARIO PICT '@ZE 99,999.99'
@ LL,60 SAY 'SALARIO SEMANAL: '
@ LL,78 SAY EMSALSEM PICT '@ZE 99,999.99'
@ LL,90 SAY 'HORARIO TRAB.: ' + EMENTRADA + ' ' + EMINTERSAI + ' ' + EMINTERENT + ' ' + EMSAIDA + ' ' + EMREPSEM
LL = LL + 1
@ LL,01 SAY 'ENDERECO: ' + EMENDER + ' ' + embairro + ' ' + EMCIDADE +;
' CEP: ' + STR(EMCEP,8)
@ LL,98 SAY 'NAC.: ' + EMNAC + '-' + TRADUZ_TAB('20',EMNAC)
SELE FPEMPREG
@ LL,118 SAY 'ANO CHEG.: '
@ LL,128 SAY EMANOCHEG
LL = LL + 1
@ LL,01 SAY 'TIPO ADM.: ' + TRIM(EMTPADMS) + '-' + TRADUZ_TAB('30',EMTPADMS)
SELE FPEMPREG
@ LL,60 SAY 'MAE: ' + EMPMAE
LL = LL + 1
@ LL,00 SAY REPL ('-',132)
ENDIF
SELE FPEMPREG
SKIP
ENDDO
EJECT
//
// FUNCAO PARA APRESENTAR O RELATORIO NA TELA
//
SAIREL('CADASTRO COMPLETO DOS EMPREGADOS ', 133)
SET DEVICE TO SCREEN
MENS(COR3,'EMISSAO DE RELATORIO ENCERRADA')
RETURN
PROCEDURE CAB19D1
IF LL > 48
NPAG = NPAG + 1
@ 01,00 SAY TRIM(EMPRESA)
@ 01,45 SAY 'CADASTRO COMPLETO DOS EMPREGADOS '
// @ 01,45 SAY 'CADASTRO COMPLETO DOS EMPREGADOS '
@ 01,123 SAY 'PG.:'
@ 01,127 SAY NPAG PICT '9999'
@ 02,00 SAY WCGCCEI + CGC
@ 02,123 SAY DATE()
@ 03,00 SAY REPL ('-',132)
LL = 03
ENDIF
***********************
FUNCTION IMPRESSORAOK()
***********************
public _nomerel, _linhas, _pagina, _tamrel
_nomerel := fGeraNomeArq()
_linhas := 0
_pagina := 1
set device to printer
set printer on
set console off
set printer to ( _nomerel )
setprc(0,0)
RETURN NIL
******************************************
FUNCTION SAIREL( cTitulo, tamrel, lFinal )
******************************************
default lFinal to .T.
// if lFinal
// @ prow()+2, 0 say padc( " Fim normal do processamento ", tamrel, '=')
// endif
// @ prow()+1, 00 say ""
eject
set printer off
set printer to
set device to screen
set console on
ShowRel( cTitulo, _nomerel, tamrel )
RETURN NIL
*****************************************
FUNCTION ShowRel( cTitulo, cArq, tamrel )
*****************************************
local cOPENFILE := cArq, lUNIPAG := .F.
local cCor := setcolor(), nCursor := setcursor(), lMudouFonte := .F.
private nWIN, nPG, nLASTPG, cTEXTO := space(30), nLPT := 1
private aFONTIMP := {"Lucida Console", 9, 0, 0, 0 }
_tamrel := tamrel
if at(".",cOPENFILE) == 0
cOPENFILE += ".PRN"
endif
cIMPFILE := cOPENFILE
cIMPTITLE := cTITULO
if !file( cImpFile )
fAlerta("Problemas com a impressao do relatorio")
return NIL
endif
if tamrel > 80 .and. len(aFONTIMP) > 0
WVW_SetFont(,aFONTIMP[1],aFONTIMP[2],aFONTIMP[3],aFONTIMP[4],aFONTIMP[5])
lMudouFonte := .T.
endif
wvw_setmaincoord(.F.)
SetInkeyAfterBlock({|nkey| fAfterInkeyPRN( nkey ) })
setcolor("0/N*")
nWIN := OpenWinRel( 0, 0, 25, 98, cTITULO )
wvw_centerwindow()
setmode(wvw_maxmaxrow()-1,wvw_maxmaxcol())
wvw_enablemaximize(nWIN, .T.)
wvw_maximize(nWIN)
wvw_tbcreate( nWIN, .F., NIL, 1)
wvw_tbAddButton( nWIN )
wvw_tbAddButton( nWIN )
wvw_tbAddButton( nWIN, IDM_PRINT , 14 , "Imprimir (I)" , 1 )
wvw_tbAddButton( nWIN, IDM_FONTPRINT , IMG_FONTE , "Alterar Fonte", 0, .T. )
wvw_tbAddButton( nWIN )
wvw_tbAddButton( nWIN, IDM_BACK , IMG_VOLTAR , "Voltar" , 1 )
wvw_tbAddButton( nWIN, IDM_FORWARD , IMG_AVANCAR , "Avancar", 1 )
wvw_tbAddButton( nWIN )
wvw_tbAddButton( nWIN, IDM_PROCURAR , IMG_PROCURAR , "Procurar (F)" , 0, .T. )
wvw_tbAddButton( nWIN, IDM_IRPARA , IMG_IRPARA , "Pagina (P)" , 0, .T. )
wvw_tbAddButton( nWIN )
wvw_tbAddButton( nWIN, IDM_SAIR , IMG_SAIR , "Sair" , 0, .T. )
//
// APRESENTAR TODOS OS system bitmaps possiveis
//
// wvw_tbAddButton( nWIN, 401, 0, "401", 1 )
// wvw_tbAddButton( nWIN, 402, 1, "402", 1 )
// wvw_tbAddButton( nWIN, 403, 2, "403", 1 )
// wvw_tbAddButton( nWIN, 404, 3, "404", 1 )
// wvw_tbAddButton( nWIN, 405, 4, "405", 1 )
// wvw_tbAddButton( nWIN, 406, 5, "406", 1 )
// wvw_tbAddButton( nWIN, 407, 6, "407", 1 )
// wvw_tbAddButton( nWIN, 408, 7, "408", 1 )
// wvw_tbAddButton( nWIN, 409, 8, "409", 1 )
// wvw_tbAddButton( nWIN, 410, 9, "410", 1 )
// wvw_tbAddButton( nWIN, 411, 10, "411", 1 )
// wvw_tbAddButton( nWIN, 412, 11, "412", 1 )
// wvw_tbAddButton( nWIN, 413, 12, "413", 1 )
// wvw_tbAddButton( nWIN, 414, 13, "414", 1 )
// wvw_tbAddButton( nWIN, 415, 14, "415", 1 )
// wvw_tbAddButton( nWIN, 416, 15, "416", 1 )
// wvw_tbAddButton( nWIN, 417, 16, "417", 1 )
// wvw_tbAddButton( nWIN, 418, 17, "418", 1 )
// wvw_tbAddButton( nWIN, 419, 18, "419", 1 )
// wvw_tbAddButton( nWIN, 420, 19, "420", 1 )
// wvw_tbAddButton( nWIN, 421, 20, "421", 1 )
// wvw_tbAddButton( nWIN, 422, 21, "422", 1 )
// wvw_tbAddButton( nWIN, 423, 22, "423", 1 )
// wvw_tbAddButton( nWIN, 424, 23, "424", 1 )
// wvw_tbAddButton( nWIN, 425, 24, "425", 1 )
// wvw_tbAddButton( nWIN, 426, 25, "426", 1 )
// wvw_tbAddButton( nWIN, 427, 26, "427", 1 )
// wvw_tbAddButton( nWIN, 428, 27, "428", 1 )
// wvw_tbAddButton( nWIN, 429, 28, "429", 1 )
// wvw_tbAddButton( nWIN, 430, 29, "430", 1 )
// wvw_tbAddButton( nWIN, 430, 29, "430", 1 )
// wvw_tbAddButton( nWIN, 431, 30, "431", 1 )
// wvw_tbAddButton( nWIN, 432, 31, "432", 1 )
WVW_SBcreate()
WVW_SBaddPart(nWin,space(10))
//
// CRIACAO DO ARQUIVO TEMPORARIO ( EM CADA ESTACAO DE TRABALHO )
//
fErase("PREVIEW.DBF")
if !file("PREVIEW.DBF")
dbcreate("PREVIEW.DBF", STRU_REL)
endif
if select("PREVIEW") > 0
select("PREVIEW")
else
use ("PREVIEW.DBF") exclusive new
endif
append from (cIMPFILE) sdf
dbGoTop()
nPG := 1
nLINHA := 0
preview->config := "I"
while !preview->(eof())
nLINHA++
if substr(preview->coluna1,1,1) == SALTO_PAGINA .and. !lUNIPAG
preview->config := "I"
nPG++
nLINHA := 0
preview->(dbSkip(-1))
preview->config := "F"
preview->(dbSkip())
endif
preview->pagina := nPG
preview->(dbSkip())
enddo
//
// ELIMINANDO ESPACO DO EJECT NO FINAL
//
preview->(dbGoBottom())
if preview->config == "I"
preview->(dbDelete())
nPG--
endif
//
// ACERTANDO O FINAL DA PAGINA
//
if lUNIPAG
preview->(dbGoBottom())
preview->config := "F"
endif
dbGoTop()
nLASTPG := nPG
nPG := 1
if lUNIPAG
set filter to preview->pagina == nPG .and. alltrim(preview->coluna1) # SALTO_PAGINA
endif
preview->(Imp_Video_PG( lUNIPAG ))
if select("PREVIEW") # 0
preview->(dbCloseArea())
endif
wvw_lCloseWindow()
SetInkeyAfterBlock({|nkey| fAfterInkey( nkey ) })
wvw_setmaincoord(.T.)
if lMudouFonte
WVW_SetFont(,'Ms Sans Serif', 16, 8 )
endif
RETURN NIL
Estas são as principais rotinas envolvidas no processo. O problema é: quando retorno da linha
SAIREL('CADASTRO COMPLETO DOS EMPREGADOS ', 133)
e retorno para o programa principal, a tela apresentada vem com um tamanho reduzido. Isso só ocorre quando o tamanho do relatório é maior que 80.
Atenciosamente,