Primeira impressão LaserJet em modo console

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Primeira impressão LaserJet em modo console

Mensagem por Taciane »

Olá, Jairo

Me perdoe mas creio que não entendi.

No meu fonte cArq recebe o conteúdo do aquivo TXT, ou seja, cArq = "EXTRATO_PROVISORIO.TXT"

Código: Selecionar todos

cARQ := DiskName()+":\"+CurDir()+"\EXTRATO_PROVISORIO.TXT"
Se eu tentar compilar alinha abaixo esta dando erro de "Syntax at '.' "


Código: Selecionar todos

Function Imprime_EXTRATO_PROVISORIO( "EXTRATO_PROVISORIO.TXT" )
Tinha alterado outro relatório seguindo o mesmo exemplo e gera o relatório com mais de uma página corretamente. Outros 4 relatórios foram alterados seguindo o seu exemplo e todos estão funcionando. Em todos segui o mesmo procedimento, usei imprime ( "algumacoisa.txt") e na Function Imprime_algumacoisa (cArq)

Código: Selecionar todos

Imprime( "SALDO_DEVEDORES.TXT" )  // envia para impressão
RETURN 
******************************************
Function Imprime_SALDO_DEVEDORES( cArq )
******************************************
Toledo, obrigada por estar ajudando. Seu exemplo para uma leiga como eu parece meio complicado. Baixei o PRG vou tentar usar no meu fonte para testar.

Desde já agradeço aos dois pelo apoio e paciência.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

Primeira impressão LaserJet em modo console

Mensagem por Jairo Maia »

Olá Taciane,

Onde eu coloquei: Function Imprime_EXTRATO_PROVISORIO( "EXTRATO_PROVISORIO.TXT" ), foi um lapso. Coloquei como fiz no exemplo de texte, mas realmente tem razão, o correto é: Function Imprime_EXTRATO_PROVISORIO( cArq )

Por outro lado, penso que você não precisa de uma função especifica para imprimir o extrato. Acho que se você fizer a alteração sugerida mais acima, a saber:

Código: Selecionar todos

If "CONTA CORRENTE" $ Upper( cLinha ) .Or. "***" $ cLinha
Fazendo essa alteração na própria função Imprime(), e enviando o arquivo para ela vai funcionar. Fiz teste aqui usando seu TXT e funcionou tanto para extrato como para o relatório. Exemplo:

Código: Selecionar todos

cARQ := DiskName()+":\"+CurDir()+"\EXTRATO_PROVISORIO.TXT"
Imprime( cARQ )

// e também

cARQ := DiskName()+":\"+CurDir()+"\TESTE.TXT"
Imprime( cARQ )
Também, como o arquivo a ser impresso está na mesma pasta do executável: DiskName()+":\"+CurDir(), você pode configurar a variável cArq direto. Exemplo:

Código: Selecionar todos

cArq := "EXTRATO_PROVISORIO.TXT"
OBS: Testei a função do Toledo e funcionou também.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Primeira impressão LaserJet em modo console

Mensagem por Taciane »

Olá, Jairo.

Fiz as alterações, mas sempre esta gerando somente uma folha e sem observar a questão do salto de página.

Baixei mais cedo o exemplo do Toledo, o executável funciona. mas se pego o fonte dele e coloco no meu PRG, o relatório é gerado da mesma forma de antes, somente uma página sem observar os espaços no final da página conforme consta no TXT, vou re-conferir novamente o exemplo dele no meu prg.


Até pensei que pudesse ser alguma coisa com a função () que é chamada duas vezes no fonte, comentei as linhas e mandei gerar somente para ver o que iria aparecer, e novamente foi gerado apenas uma página na impressora.

Estranho que se retiro as instruções para imprimir na USB e compilo com o Blinker e mando na FX1050 imprime todas as páginas.

Vou postar o fonte completo, depois de feitas as alterações mencionadas no seu post anterior.

SET PRINTER TO EXTRATO_PROVISORIO.TXT
SET DEVICE TO PRINT
cARQ := "EXTRATO_PROVISORIO.TXT"
Imprime ( cARQ )

...
....
.....

@ pRow() + 1, 0 SAY ""
SET DEVICE TO SCREEN
SET PRINTER TO
CLOSE ALL

Imprime ( cARQ ) // envia para impressão

...
....
.....

While HB_FReadLine( nHandler, @cLinha ) = 0
If "CONTA CORRENTE" $ Upper( cLinha ) .Or. "***" $ cLinha

Código: Selecionar todos

*EMITIR EXTRATO PROVISORIO        

#define WIN_DMPAPER_A4 9

CLEAR
mlinha     = 69
mconta     = SPACE(5)
msal_ini   = 0.00
mdat_ini   = CTOD('  /  /  ')
mdata      = CTOD('  /  /  ')
mdat_sal   = CTOD('  /  /  ')
mpag       = 1 
USE CLIENTES INDEX ICLIENTE
SELECT 2
USE MOVIM   INDEX IMOVIM 
SELECT 3
USE HISTOR INDEX IHISTOR

DO WHILE .T.
 mconta = SPACE(5)
 CLEAR 
 @3,10  SAY 'C O N T A  C O R R E N T E'
 @4,10  SAY 'EXTRATO PROVISORIO'
 @08,08 TO 15,47 DOUBLE  
 @10,10 SAY 'INFORME CONTA'
 @18,10 SAY '99999 PARA ENCERRAR' 
 @10,34 GET  mconta
 READ
 IF mconta = '99999'
  CLOSE ALL      
  CLEAR    
  RETURN
 ENDIF
 SELECT 1
 SEEK mconta
 IF EOF()
  @22,1 SAY 'CONTA NAO CADASTRADA'
  WAIT ', ENTER'
  LOOP
 ELSE
  EXIT
 ENDIF
ENDDO

SELECT 2
SEEK mconta
IF EOF()
 @22,1 SAY 'CONTA SEM MOVIMENTO'
 WAIT ', ENTER PARA CONTINUAR'
ELSE 

 @12,10 SAY 'INFORME DATA DE INICIO'
 @12,34 GET mdata 
 READ
ENDIF
   SET PRINTER TO EXTRATO_PROVISORIO.TXT
    SET DEVICE TO PRINT
     cARQ := "EXTRATO_PROVISORIO.TXT"
     Imprime ( cARQ )
	 
SELECT 1
CLEAR
CAB()
msal_ini = SAL_INI
mdat_sal = DAT_INI

SELECT 2
DO WHILE mconta = CONTA .AND. DATA < mdata .AND. .NOT. EOF() 
 IF CT < 10
  msal_ini = msal_ini - VALOR
 ELSE
  msal_ini = msal_ini + VALOR
 ENDIF
 mdat_sal = DATA
 SKIP
ENDDO
SET CENTURY ON
@6,1  SAY mdat_sal 
@6,13 SAY 'SALDO ANT.'
IF msal_ini < 0.00
 @6,39 SAY -msal_ini PICTURE '9,999,999,999.99D'
ELSE
 @6,39 SAY  msal_ini PICTURE '9,999,999,999.99C'
ENDIF

SELECT 2
DO WHILE mconta = CONTA .AND. .NOT. EOF()

 @mlinha,1 SAY DATA 
 mdat_sal = DATA
 mct = CT
 SELECT 3
 SEEK mct
 IF EOF()
   @22,1  SAY 'CODIGO DE TRANSACAO INEXISTENTE,'
   @22,32 SAY mct PICTURE '99'
   WAIT ', ENTER PARA ENCERRAR'
   CLOSE ALL       
   RETURN
 ENDIF

 @mlinha,13 SAY HISTORICO
 SELECT 2
 @mlinha,25 SAY DOC
 @mlinha,39 SAY VALOR PICTURE '9,999,999,999.99'
 IF CT < 10
  msal_ini = msal_ini - VALOR
  @mlinha,55 SAY 'D'
 ELSE
  @mlinha,55 SAY 'C'
  msal_ini = msal_ini + VALOR
 ENDIF
 
 mlinha = mlinha + 1 
  IF mlinha > 61
     SELECT 1
     CAB()
     SELECT 2
 ENDIF
 SKIP
 
ENDDO

@mlinha,1  SAY mdat_sal 
@mlinha,13 SAY 'SALDO ATUAL'
IF msal_ini < 0.00
 @mlinha,39 SAY -msal_ini PICTURE '9,999,999,999.99D'
ELSE
 @mlinha,39 SAY  msal_ini PICTURE '9,999,999,999.99C'
ENDIF
SET CENTURY OFF    
	
  	 @ pRow() + 1, 0 SAY ""                 
       SET DEVICE TO SCREEN
         SET PRINTER TO
          CLOSE ALL
  		
            Imprime ( cARQ )  // envia para impressão  
							  
RETURN 
 
 FUNCTION CAB()
 @1,01 SAY '*** TESTE - MEU CABECALHO *** - EXTRATO PROVISORIO'
 @1,65 SAY 'PAGINA'
 @1,72 SAY mpag PICTURE '99'
 mpag = mpag + 1 
 @2,09 SAY 'CONTA :'
 @2,17 SAY CONTA
 @2,23 SAY '-'
 @2,25 SAY NOME
 @4,03 SAY 'DATA'
 @4,13 SAY 'HISTORICO'
 @4,25 SAY 'DOCUMENTO'
 @4,39 SAY 'V A L O R'
 @5,1  SAY REPLICATE('-',78)
 mlinha = 7   


******************************************
Function Imprime_EXTRATO_PROVISORIO ( cARQ )
******************************************
local nHandler, cLinha
local oPrinter, lPrimeira:=.t.

If Empty( cARQ ) .Or. !File( cARQ )
 Hb_Alert( "Arquivo de impressao nao encontrado!" )
 Return Nil
EndIf

cPrinter := WIN_PRINTERGETDEFAULT()
If Empty( cPrinter )
 Hb_Alert( "Nenhuma impressora Instalada!" )
 Return Nil
EndIf

oPrinter := win_prn():New(cPrinter)

oPrinter:Landscape := .F.
oPrinter:FormType  := WIN_DMPAPER_A4  // Formato A4
oprinter:SetPrintQuality(-1) // qualidade da impressao

oPrinter:Copies    := 1

oPrinter:Create()
IF !oPrinter:Create()
   Hb_Alert( "ATENÇÃO!!! Não foi possível Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada." )
   return 
ELSE
   IF !oPrinter:StartDoc("Extrato Provisorio - Impressao Pelo Sistema")
      Hb_Alert( "ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar o Spoll da Impressora" )
      Return 
   endif
   
   oPrinter:SetFont("Courier New",10,{ 1, 16 }) // Comprime em 16 caracteres por polegada
   
   nHandler := FOpen( cARQ )

   While HB_FReadLine( nHandler, @cLinha ) = 0
        If "CONTA CORRENTE" $ Upper( cLinha )  .Or. "***" $ cLinha
        If lPrimeira  // nao abre nova pagina na primeira sequencia
          lPrimeira := .f.
          oPrinter:NewLine()  // pula 1 linha
          oPrinter:NewLine()  // pula + 1 linha
        ElseIf oPrinter:pRow() > 61  // formato A4 tem 69 linhas. Menos 6 do cabeçalho e 2 do rodapé = 61
          oPrinter:NewPage()  // inicia nova pagina
          oPrinter:NewLine()  // pula 1 linha
          oPrinter:NewLine()  // pula + 1 linha
        Else  // cabe na mesma pagina...
         oPrinter:NewLine()  // pula 1 linha
         oPrinter:NewLine()  // pula + 1 linha
        EndIf
      EndIf

      oPrinter:TextOut( HB_OemToAnsi( cLinha ), .t. )

   EndDo
   
   oPrinter:EndDoc()
   oPrinter:Destroy()
   
ENDIF
RETURN NIL
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Primeira impressão LaserJet em modo console

Mensagem por asimoes »

Olá Ticiane,

Você tem alguma impressora PDF instalada na sua máquina?

Se tem, deixa ela como impressora padrão, vai ser gerado o pdf da impressão fica mais fácil de saber o que está acontecendo.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Primeira impressão LaserJet em modo console

Mensagem por Toledo »

Taciane, sobre o seu código que você colocou na sua mensagem anterior, segue algumas observações:

1 - não é necessário a linha 059, onde consta: Imprime ( cARQ )

2 - na linha 138 você está chamando a função Imprime ( cARQ ), mas na linha 159 o nome da função é outro: Imprime_EXTRATO_PROVISORIO ( cARQ )

Bom, para corrigir o item 2 acima, ou você muda a linha 138 para Imprime_EXTRATO_PROVISORIO ( cARQ ) ou muda o nome da função na linha 159 para: Imprime ( cARQ )

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Taciane
Usuário Nível 1
Usuário Nível 1
Mensagens: 28
Registrado em: 14 Nov 2015 16:28
Localização: Buritizeiro/MG

Primeira impressão LaserJet em modo console

Mensagem por Taciane »

Olá, Jairo | Toledo | asimoes

Deixei desta forma :

Código: Selecionar todos

Imprime_EXTRATO_PROVISORIO ( cARQ )

Código: Selecionar todos

Function Imprime_EXTRATO_PROVISORIO ( cARQ )
Toledo agora fechou, esta gerando no pdf corretamente. :))

A linha 59 nos meus fontes postados antes ela não existia não, mas entre um teste e outro acabei colocando.

Agora vem a dúvida, cruel. :-o

Usei este mesmo procedimento em 5 outros relatórios

Exemplo o relatório abaixo, é impresso perfeitamente na impressora todas as páginas igualzinho ao que consta no TXT. Porque ?


Código: Selecionar todos

SET PRINTER TO SALDO_DEVEDORES.TXT
                               SET DEVICE TO PRINT
                               cARQ := DiskName()+":\"+CurDir()+"\SALDO_DEVEDORES.TXT"

Código: Selecionar todos

Imprime( "SALDO_DEVEDORES.TXT" )  // envia para impressão

Código: Selecionar todos

Function Imprime_SALDO_DEVEDORES( cArq )
Responder