Página 1 de 2
Relatorios em WordPad
Enviado: 17 Mar 2010 18:21
por Laudelino Scarmagnani
Ola pessoal
tenho o seguinte comando no sistema para impressão em arquivo
run("start wordpad.exe RECIBOS.TXT /mfileprintdefault")
porém, em alguns computadores, aparece o seguinte erro:
C:\WINDOWS\RECIBOS.TXT
Não é possível encontrar este arquivo
Verifique se o caminho e o nome do arquivo estão corretos
Como devo prodecer para acertar isso, pois, com o mesmo comando, na maioria dos computadores da rede, funciona normalmente.
Laudelino.
Re: Relatorios em WordPad
Enviado: 17 Mar 2010 18:25
por Laudelino Scarmagnani
Ou se há uma saída diferente que esta para impressão em arquivo, seria benvinda
Laudelino.
Re: Relatorios em WordPad
Enviado: 17 Mar 2010 19:21
por alxsts
Olá!
O teu aplicativo gera esse arquivo sempre no mesmo lugar?
Já tentou informando o caminho completo do arquivo Recibos.Txt?
Re: Relatorios em WordPad
Enviado: 17 Mar 2010 19:26
por alxsts
Olá!
Tem uma opção que muita gente usa: o Win32PRN. Nunca usei.
Veja
Win32prn para Iniciantes neste fórum.
Re: Relatorios em WordPad
Enviado: 17 Mar 2010 22:53
por gvc
Vc pode usar o NODOSIMP para imprimir o arquivo e não o notepad como vc esta fazendo.
run nodosimp C:\WINDOWS\RECIBOS.TXT 80
Com o WIN32PRN vc pode montar todo o relatório dentro do sistema, sem precisar usar programas externos.
Sobre o seu problema inicial, vc já verificou se o arquivo é realmente criado nessa pasta. Dependendo da configuração do windows, seu usuário pode não ter direito de gravar arquivos nela.
Re: Relatorios em WordPad
Enviado: 18 Mar 2010 08:06
por Laudelino Scarmagnani
O arquivo é gerado sempre na pasta do sistema. So muda de nome: de .prn para .txt. Na rede, 4 computadores abrem o arquivo, somente não.
O comando
run nodosimp C:\WINDOWS\RECIBOS.TXT 80
é para visualização do relatorio antes da impressão?
Tenho uma idéia inicial o Win32prn, mas tenho que reprogramar todos os relatrorios para usá-lo, e para impressão em impressoras matricias, a impressão fica lenta. Como a tendencia é o uso de impressoras laser função da NFe, vou implementar o sin32prn logo que terminhar a NFe.
Laudelino.
Re: Relatorios em WordPad
Enviado: 18 Mar 2010 11:18
por gvc
[Laudelino Scarmagnani]
O comando é para mandar a impressão do arquivo texto direto para a impressora. Junto com o programa vem um arquivo texto explicando os parâmetros de funcionamento.
Para "ver" o arquivo antes eu uso o readme (borland) que abre o arquivo texto.
Com esses dois programas eu consigo fazer o preview e imprimir em qq impressora instalada no windows do usuário.
O problema é que o readme é DOS e não windows.
Preview em programas gráficos podem ter distorção quando usada uma fonte proporcional.
Ah! O WIN32PRN não tem preview tb.
Pq vc colocou que na rede 4 computadores abrem o arquivo. Vc deve colocar esse tipo de arquivo na máquina do usuário e dela mandar a impressão. Colocar o mesmo arquivo texto compartilhado para várias máquinas só vai te arranjar problemas.
Re: Relatorios em WordPad
Enviado: 18 Mar 2010 13:30
por Laudelino Scarmagnani
E que faco o seguinte:
Se escolha foi arquivo
Set printer to relatorio.txt
Senao
Set printer to relatorio.prn
endif
ao final
se escolha foi arquivo
se escolha = arquivo
set printer to
run("start wordpad.exe arquivo.TXT /mfileprintdefault")
ELSE
if empty(sgportare).OR..NOT.EMPTY(SGPRINTERRE)
SAVE SCREEN TO TELA
IF EMPTY(SGPRINTERRE)
Sele_Impressora(SGPRINTERRE)
SGPRINTERRE = SGPRINTERNF
ENDIF
cFile := "arquivo.PRN"
@24,00 clear to 24,79
SET PRINTER OFF
set printer to
nResult := PRINTFILERAW(SGPRINTERRE, cFile, "Relatorio " )
SWITCH nResult
CASE -1
@24,05 say cMsg += "Invalid parameters passed to function"
CASE -2
@24,05 say cMsg += "WinAPI OpenPrinter() call failed" && ; EXIT
CASE -3
@24,05 say cMsg += "WinAPI StartDocPrinter() call failed" && ; EXIT
CASE -4
@24,05 say cMsg += "WinAPI StartPagePrinter() call failed" && ; EXIT
CASE -5
@24,05 say cMsg += "WinAPI malloc() of memory failed" && ; EXIT
CASE -6
@24,05 say cMsg += "File " + cFile + " Nao Encontrado" && ; EXIT
DEFAULT
@24,05 say cMsg += cFile + " IMPRESSAO OK!!!"
END
inkey(0)
RESTORE SCREEN FROM TELA
ENDIF
endif
SGPRINTERNF = space(1)
RETURN
Mas vou pensar em gerar no micro que está efetuando a operacao. Realmente evita problemas no caso de dois pedidos ao mesmo tempo.
Re: Relatorios em WordPad
Enviado: 18 Mar 2010 20:46
por rochinha
Amiguinho,
Nunca coloque arquivos de nome fixo na rede para compartilhar, se voce tem estações e envia arquivos para um unico lugar para imprimir, enumere-os, tipo RECIBO.001, RECIBO.002, etc.
Ao passar comandos via RUN passe o caminho completo, use CurDIR() e CurDrive() para obter os componentes e monte o arquivo de lote ou comando RUN para executar.
Re: Relatorios em WordPad
Enviado: 18 Mar 2010 22:15
por Laudelino Scarmagnani
Ok. Estou ajustando a rotina de impressão para informar o caminho copleto na busca do arquivo.
Quanto a usar nomes diferentes, não havia pensado nisso, e é bem melhor que fazer um algoritmo para verificar se o arquivo está sendo usado por alguem, esperar.
Valeu!
Laudelino
Re: Relatorios em WordPad
Enviado: 19 Mar 2010 11:56
por gvc
Depois de montar o arquivo texto eu coloco o seguinte código:
Código: Selecionar todos
y_arq := 'readme ' + x_arq
run (y_arq)
if alert('Confirma Imprimir Relatorio?', {'Sim', 'Nao'}) = 1
y_arq := 'nodosimp ' + x_arq + ' 120 /apa'
run (y_arq)
end
Re: Relatorios em WordPad
Enviado: 20 Mar 2010 23:27
por sygecom
Se servir via Word posso postar um exemplo, acho que até já postei aqui no fórum, mas não achei o link
Re: Relatorios em WordPad
Enviado: 21 Mar 2010 02:03
por rochinha
Amiguinhos,
Será que usando OLE não seria possivel?
Código: Selecionar todos
...
LOCAL QueTexto := "C:\AUTOEXEC.BAT", QueroVer := .f.
...
function MostraTexto( QueTexto, QueroVer )
local oWord
oWord:=TOleAuto():New( "Word.Application" )
oWord:Documents:Open( QueTexto )
oWord:WindowState := 0
if QueroVer
oWord:Visible := .t.
else
oWord:Visible := .f.
oWord:PrintOut()
endif
oWord:Quit()
oWord:End()
return nil
Faça uma adaptação para CreateObject() ao invés de TOleAuto() caso este não exista no xHarbour.
Quanto ao que o GVC postou sobre a Win32PRN não ter preview acho que é possivel criar um usando MemoEdit() que abra o arquivo de resultado.
Re: Relatorios em WordPad
Enviado: 26 Ago 2010 00:23
por fladimir
Tentei compilar o exemplo do Rochinha e compilou sem problemas mas esta dando o erro abaixo:
Código: Selecionar todos
hbmk2 -omesclar @teste.hbp
Harbour 2.1.0beta2 (Rev. 15281)
Copyright (c) 1999-2010, http://harbour-project.org/
Compiling 'MESCLAR.PRG'...
Lines 1052, Functions/Procedures 2
Generating C source output to 'C:\DOCUME~1\Familia\CONFIG~1\Temp\hbmk_uaudkh.dir
\MESCLAR.c'... Done.
MESCLAR.c
mesclar.exe
Error WINOLE/1007 Argument error: OPEN (DOS Error -2147352571)
Called from WIN_OLEAUTO:OPEN(0)
Called from MOSTRATEXTO(20)
Called from MAIN(12)
Segue código:
Código: Selecionar todos
Proc Main
LOCAL QueTexto := "doc.doc", QueroVer := .f.
MostraTexto()
Return
*******************************************
Function MostraTexto( QueTexto, QueroVer )
local oWord
oWord:=TOleAuto():New( "Word.Application" )
oWord:Documents:Open( QueTexto )
oWord:WindowState := 0
if QueroVer
oWord:Visible := .t.
else
oWord:Visible := .f.
oWord:PrintOut()
endif
oWord:Quit()
oWord:End()
return nil
Uso o Harbour 2.1.0
Alguém saberia....
Obs. tentei tb com CreateObject("Word.Application")
Sds.
Re: Relatorios em WordPad
Enviado: 26 Ago 2010 21:14
por Euclides
fladimir,
Esse número que V ´achou´ (-2147352571), verificando no winerror.h é:
Hex (80020005) Type mismatch.
Portanto tem a ver com o arquivo sendo aberto.
O exemplo do Rochinha funciona perfeitamente.
Dependendo da versão, talvez dê algum erro no End/quit, mas isso é outro assunto.
T+
Euclides