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