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á,

Preciso aposentar minha FX1050 e passar usar minha HP1102W, até fiz alguns testes com o DOS2USB, mas pesquisando baixei o Harbour3.2 e andei vendo algumas opções para gerar meu relatório inicial usando PrintFileRAW, não tive êxito, o relatório aparece com Status de imprimindo na HP Laser mas nada de imprimir.

Estou usando em modo console, e comentei algumas linhas para poder ir testando com as dicas que tenho pesquisando no Fórum.

Olhei na pasta Contrib\HbWin\Tests, mas ainda estou perdida nos exemplos.

Código: Selecionar todos

CLEAR

  Set Century On   // ano com 4 digitos
  Set Date Brit    // data no formato dd/mm/yyyy
   mdata = CToD( ' / / ' )

   DO WHILE .T.
      @ 10, 10 SAY 'INFORME DATA DO MOVIMENTO'
      @ 10, 36 GET mdata PICTURE '@D'
     
      READ
      IF mdata = CToD( ' / / ' )
         @ 20, 1 SAY 'DATA EM BRANCO'
         WAIT ', ENTER'
         LOOP
      ENDIF
      EXIT
   ENDDO

   SELECT 0
   USE CLIENTES
   INDEX ON nome TO Temp1 
   SELECT 0
   USE MOVIM
   INDEX ON Conta + Dtos( Data ) TO Temp2
   SELECT 0
   USE HISTOR INDEX IHISTOR

   SET PRINTER TO TESTE.TXT
   SET DEVICE TO PRINT
   @ 0, 0 SAY Chr( 27 ) + Chr( 15 )
   mlinha = 66
   mfolha = 1
   mtotcre = 0.00
   mtotdeb = 0.00
   mtotvap = 0.00
   mtotvales = 0.00
   mtotodeb = 0.00
   mtotrest = 0.00
   mtotven = 0.00
   SELECT clientes
   GOTO TOP
   DO WHILE .NOT. Eof() // clientes em ordem alfabética
      SELECT movim
      SET SOFTSEEK ON // pra encontrar data igual ou acima (apesar que parece usar data única)
      SEEK clientes->Conta + Dtos( mData )
      SET SOFTSEEK OFF
      DO WHILE movim->Conta == clientes->Conta .AND. .NOT. Eof() // movimentos referentes ao cliente
         // IF movim->Dat_Lanc < mData // Pra que isto, se o SEEK já pulou datas menores?
         //    SKIP
         //    LOOP
         // ENDIF
         IF movim->Dat_Lanc > mdata 
            EXIT
         ENDIF
         IF mlinha > 58
            DO CCCABP20  WITH mfolha, mdata, mlinha
         ENDIF
         @ mlinha, 4  SAY clientes->Conta
         @ mlinha, 10 SAY clientes->Nome
         @ mlinha, 44 SAY clientes->Tipo
         SELECT histor
         SEEK movim->CT
         IF Eof()
            @ mlinha, 66 SAY '*******'
         ELSE
            @ mlinha, 66 SAY histor->Historico
         ENDIF
         SELECT movim
         @ mlinha, 78 SAY movim->Doc
         IF movim->CT < 10
            mtotdeb += movim->Valor
            DO CASE
            CASE movim->CT = 01 ; mtotvap   += movim->Valor
            CASE movim->CT = 02 ; mtotvales += movim->Valor
            CASE movim->CT = 06 ; mtotrest  += movim->Valor
            OTHERWISE           ; mtotodeb  += movim->Valor
            ENDCASE
            @ mlinha, 94 SAY movim->Valor PICTURE '9,999,999,999.99'
         ELSE
            mtotcre += movim->Valor
            @ mlinha, 111 SAY movim->Valor PICTURE '9,999,999,999.99'
         ENDIF
         mlinha += 1
         SKIP
      ENDDO
      SELECT clientes // retorna pra clientes, que é com o que este do while externo trabalha
      SKIP
   ENDDO   
   IF mlinha > 55
      DO CCCABP20 WITH mfolha, mdata, mlinha
   ENDIF
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE VENDAS A PRAZO = >'
   @ mlinha, 94 SAY mtotvap PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE VALES ....... = >'
   @ mlinha, 94 SAY mtotvales PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE RESTAURANTE  = >'
   @ mlinha, 94 SAY mtotrest PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE OUTROS DEBITOS = >'
   @ mlinha, 94 SAY mtotodeb PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 35 SAY 'T O T A L  = >'
   @ mlinha, 94 SAY mtotdeb PICTURE '9,999,999,999.99'
   @ mlinha, 111 SAY mtotcre PICTURE '9,999,999,999.99'

   @ pRow() + 1, 0 SAY Chr( 27 ) + Chr( 15 )

* EJECT

   @ 0, 0 SAY Chr( 27 ) + '@'
   SET DEVICE TO SCREEN
*  SET PRINTER TO
*  CLOSE ALL
   fErase( "temp1.ntx" )
   fErase( "temp2.ntx" )
*   CLEAR
*   RETURN

FUNC IMPRESSORA
LOCAL aPrn := PRINTERPORTTONAME( "PDF", .T. )   // usa a impressora PDF criator para imprimir via PDF ( Uso impressora PDF para teste )
IF EMPTY( PRINTERPORTTONAME( "PDF", .T. ) )
   aPrn := GETDEFAULTPRINTER() //  caso a PDFCREATOR não exista ele vai pegar a impressora padrão
 ENDIF

   cFILE := ("teste.txt")  // Aqui achei sem sentido informar o arquivo já que a impressora não aceita imprimir modo "RAW" - Creio que o correção então seria imprimir mlinha 
   cPrinter := GETDEFAULTPRINTER()


FUNC Imprime( cFILE,cPrinter )  
local cTexto, nLinhas, nA, mlinha
local oPrinter := win32prn():New(cPrinter)
oPrinter:Landscape := .F.
oPrinter:FormType  := 9
oprinter:SetPrintQuality(-1)
oPrinter:Copies    := 1

   oPrinter:SetFont("Courier New",11,{3,-50})
   oPrinter:Bold(0)
   oPrinter:newline()
      oPrinter:SetFont("Courier New",11,{3,-50})
      oPrinter:TextOut(mlinha)
      oPrinter:Bold(0)

	  if (oPrinter:MaxRow() - 2) <= oPrinter:Prow()
            oPrinter:NewPage()   // nova pagina
            FOR TT=1 TO aTamlog
               oPrinter:newline()
            NEXT
         endif
RETURN NIL
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Primeira impressão LaserJet em modo console

Mensagem por Kapiaba »

talvez, ajude usando WIN32PRN():

Código: Selecionar todos

Function CHAMAIMP()
 
   LOCAL cPrinterName, cPrinterPort, cCopias
   LOCAL aPrn    := GetPrinters(.t.,.f.)
   LOCAL nResult := -1
   LOCAL cMsg    := ""
 
   PARA TAM,cARQ   // S=136 N=79
 
   cARQ := "\TESTE.TXT"
 
   IF TAM=Nil
      TAM="S"
   ENDIF
 
   If Empty(aPrn)
      OBRIGA11()
      Return
   EndIf
 
   IF !EMPTY(cARQ)
      cFILE := cARQ
   ELSE
      MsgInfo("Não foi possivel Gerar arquivo de impressão, Tente Novamente.","Aviso do Sistema")
      Return
   ENDIF
 
   nPrn:=New_PRINTSETUP( @cPrinterName, @cCopias )
   *nPrn:=PRINTSETUP( @cPrinterName, @cCopias )
 
   for i=1 to len(aPrn)
      IF aPrn[i,1] = cPrinterName
         cPrinterPort = aPrn[i,2]
         exit
      ENDIF
   next
 
   IF cPrinterPort#Nil
 
      IF SY_IsPrint( cPrinterName ) # "Impressora OK"  // teste usando função da fivewin
         MsgInfo(SY_IsPrint(cPrinterName),"Aviso do Sistema")
         Return
      ENDIF
 
      IF LEFT(UPPER(cPrinterPort),3)="LPT"
         nResult := PrintFileRaw( cPrinterName, cFile, "Impressao Pelo Sistema SCM" )
         IF nResult = -1
            cMsg = "Parametros Invalido, Favor Tentar Novamente"
         ELSEIF nResult = -2
            cMsg = "Falha na chamada da Impressora, Favor Verificar a Impressora"
         ELSEIF nResult = -3
            cMsg = "Falha ao Iniciar Impressão, Favor Verificar a Impressora"
         ELSEIF nResult = -4
            cMsg = "Falha ao Iniciar a Primeira Pagina, Favor Verificar a Impressora"
         ELSEIF nResult = -5
            cMsg = "Falha de Memoria da Impressora, Favor Verificar a Impressora"
         ELSEIF nResult = -6
            cMsg = "Não foi Possivel localizar o arquivo de Impressão, Favor Tentar Novamente"
         ENDIF
         IF len(alltrim(cMsg)) > 1
            MsgInfo(cMsg,"Aviso do Sistema")
            Return
         ENDIF
      ELSE
         IF TAM="S"
            IF !EMPTY(cPrinterName)
               Imprime(cFILE,136,cPrinterName,cCopias)
            ENDIF
         ELSE
            IF !EMPTY(cPrinterName)
               Imprime(cFILE,80,cPrinterName,cCopias)
            ENDIF
         ENDIF
      ENDIF
   ENDIF
 
RETURN NIL
 
#pragma BEGINDUMP
#include "windows.h"
#include "hbapi.h"
 
HB_FUNC( NEW_PRINTSETUP )
   {
     PRINTDLG   pd;
        LPDEVNAMES lpDevNames;
        LPDEVMODE lpDevMode;
        HWND hwnd;
  LPSTR lpPrinterName;
 
      // setting the handle
 // hwnd =(HWND) hb_parnl(1);
 
        // Initialize PRINTDLG
  ZeroMemory(&pd, sizeof(pd));
 
  pd.lStructSize = sizeof(pd);
  pd.hwndOwner = GetActiveWindow();
  pd.hDevMode    = NULL;
  pd.hDevNames   = NULL;
  pd.Flags       = PD_USEDEVMODECOPIESANDCOLLATE | PD_RETURNDC;
  pd.nCopies     = 1;
 
  if (PrintDlg(&pd)==TRUE)
  {
     lpDevMode = (LPDEVMODE) GlobalLock( pd.hDevMode );
     GlobalUnlock( pd.hDevMode );
 
     lpDevNames = (LPDEVNAMES) GlobalLock( pd.hDevNames );
     if( lpDevNames )
     {
        GlobalUnlock( pd.hDevNames );
        lpPrinterName = ( LPSTR ) lpDevNames + lpDevNames->wDeviceOffset;
        hb_storc( (LPSTR)lpPrinterName, 1 );
        hb_storni( lpDevMode->dmCopies, 2 );
        if (pd.hDevMode)
            GlobalFree( pd.hDevMode );
            if (pd.hDevNames)
                GlobalFree( pd.hDevNames );
     }
     else
        hb_retc( "" );
  }
  else
     hb_retc( "" );
   }
#pragma ENDDUMP
 
Function SY_IsPrint( QuePrinter )
 
   LOCAL eStatus
 
   DEFAULT QuePrinter := "LPT1:"
 
   eStatus := PrnStatus( QuePrinter )
 
   if     eStatus <        1 ; return "Impressora OK"
   elseif eStatus =        1 ; return "Impressora Pausada"
   elseif eStatus =        2 ; return "Impressora com Erro"
   elseif eStatus =        4 ; return "Impressora Deletando"
   elseif eStatus =        8 ; return "Impressora em Modo Bandeja"
   elseif eStatus =       16 ; return "Impressora Sem Papel"
   elseif eStatus =       32 ; return "Impressora em Modo Manual"
   elseif eStatus =       64 ; return "Impressora com Problema no Papel"
   elseif eStatus =      128 ; return "Impressora OffLine"
   elseif eStatus =      256 ; return "Impressora com IO Ativo"
   elseif eStatus =      512 ; return "Impressora Ocupada"
   elseif eStatus =     1024 ; return "Impressora Imprimindo"
   elseif eStatus =     2048 ; return "Impressora Memoria Lotada"
   elseif eStatus =     4096 ; return "Impressora Nao Instalada"
   elseif eStatus =     8192 ; return "Impressora Aguardando"
   elseif eStatus =    16384 ; return "Impressora Processando"
   elseif eStatus =    32768 ; return "Impressora Inicializando"
   elseif eStatus =    65536 ; return "Impressora em Atencao"
   elseif eStatus =   131072 ; return "Impressora Toner Baixo"
   elseif eStatus =   262144 ; return "Impressora Sem Toner"
   elseif eStatus =   524288 ; return "Impressora PAGE_PUNT"
   elseif eStatus =  1048576 ; return "Impressora Intervencao do Usuario"
   elseif eStatus =  2097152 ; return "Impressora Sem Memoria"
   elseif eStatus =  4194304 ; return "Impressora Tampa Aberta"
   elseif eStatus =  8388608 ; return "Impressora Servidor Desconhecido"
   elseif eStatus = 16777217 ; return "Impressora POWER_SAVE"
   endif
return nil
 
*****************
Function OBRIGA11
   *****************
   IF MsgYesNo("ATENÇÃO !!! Não foi possivel localizar Nenhuma impressora Instalada no Windows, Deseja Instalar uma Agora ?","Aviso do Sistema")
 
   Endif
 
Return(Nil)
 
**************************************************
Function Imprime( cArq, tamrel ,cPrinter, cCopias)
 
   **************************************************
   local cTexto, nLinhas, nA, cLinha, oBMP
 
   #ifdef __XHARBOUR__
       local oPrinter := win32prn():New(cPrinter)
   #else
       local oPrinter := win_prn():New(cPrinter)
   #endif
 
   TAMREL := 80
 
   cText := memoread( cArq )
   oPrinter:Landscape:= .F.
   oPrinter:FormType:= 9
   oprinter:SetPrintQuality(-1) // qualidade da impressão
   oPrinter:Copies:=cCopias
 
   IF !oPrinter:Create()
      MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada.","Aviso do Sistema")
      return NIL
   else
      IF !oPrinter:StartDoc("Impressao Pelo Sistema SCM")
         MsgStop("ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar a Impressora","Aviso do Sistema")
         Return NIL
      endif
 
      IF File("logo.bmp")  // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
         #ifdef __XHARBOUR__
          oBMP:= Win32BMP():new()
         #else
          oBMP:= Win_BMP():new()
         #endif
         oBmp:loadFile( "logo.bmp" )
         oBmp:Draw( oPrinter,  { 15,15,60,60 } )
         aTamlog := 9
      else
         aTamlog := 2
      endif
 
      FOR TT=1 TO aTamlog
         oPrinter:newline()
      NEXT
      //oPrinter:CharSet( 255 )
 
      IF TAMREL=80
         oPrinter:setfont('Courier New',,12,,,,255) // Normal
         nLines2 := 85
      ELSE
         oPrinter:SetFont("Courier New",13,{3,-50},0,.F.,.F.) // Comprimida
         nLines2 := 150
      ENDIF
      oPrinter:Bold(0) // Normal
      *   oPrinter:newline() // Inicia nova linha
 
      nLines := mlcount( cText, nLines2 )
      for nA := 1 to nLines
         cLine := memoline( cText, nLines2, nA, 1, .F. )
         If Left(AllTrim(cLine),1)==Chr(12) //SALTO DA PAGINA
            oPrinter:NewPage()
            IF FILE("logo.bmp")  // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
               #ifdef __XHARBOUR__
                oBMP:= Win32BMP():new()
               #else
                oBMP:= Win_BMP():new()
               #endif
               oBmp:loadFile( "logo.bmp" )
               oBmp:Draw( oPrinter,  { 15,15,60,60 } )
               aTamlog := 9
            else
               aTamlog := 2
            endif
         endif
 
         oPrinter:TextOut( cLine, .T. )
         oPrinter:Bold(0) // Normal
 
         if (oPrinter:MaxRow()-2 ) <= oPrinter:Prow()
            oPrinter:NewPage()
            IF FILE("logo.bmp")  // se tiver o arquivo logo.bmp dentro da mesma pasta ele vai imprimir o logo primeiro
               #ifdef __XHARBOUR__
                oBMP:= Win32BMP():new()
               #else
                oBMP:= Win_BMP():new()
               #endif
               oBmp:loadFile( "logo.BMP" )  // BMP
               oBmp:Draw( oPrinter,  { 15,15,60,60 } )
               aTamlog := 9
            else
               aTamlog := 2
            endif
 
            FOR TT=1 TO aTamlog
               oPrinter:newline()
            NEXT
         endif
      next
 
      oPrinter:EndDoc()
      oPrinter:Destroy()
 
   ENDIF
 
RETURN NIL
Kapiaba
Colaborador
Colaborador
Mensagens: 1908
Registrado em: 07 Dez 2012 16:14
Localização: São Paulo
Contato:

Primeira impressão LaserJet em modo console

Mensagem por Kapiaba »

OU USE A NODOSIMP.EXE
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,

Em sua função Imprime() você está usando WIN32PRN(). Esta função é do xHarbour, para qual você pretende migrar? Para Harbour ou xHarbour? Em Harbour, a classe de impressão chama-se WIN_PRN().
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

É harbour mesmo, peguei de uns exemplos e nem percebi que estava errado. Estranho que compilou sem reclamar.

Código: Selecionar todos

local oPrinter := win_prn():New(cPrinter)
Abaixo estou postando apenas parte final do fonte ( o inicio continua a mesma coisa ) , era para estar pelo menos chamando a impressora e mandar para impressora o conteúdo da variável mlinha. Não ?

Código: Selecionar todos

  mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE VENDAS A PRAZO = >'
   @ mlinha, 94 SAY mtotvap PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE VALES ....... = >'
   @ mlinha, 94 SAY mtotvales PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE RESTAURANTE  = >'
   @ mlinha, 94 SAY mtotrest PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE OUTROS DEBITOS = >'
   @ mlinha, 94 SAY mtotodeb PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 35 SAY 'T O T A L  = >'
   @ mlinha, 94 SAY mtotdeb PICTURE '9,999,999,999.99'
   @ mlinha, 111 SAY mtotcre PICTURE '9,999,999,999.99'

   @ pRow() + 1, 0 SAY Chr( 27 ) + Chr( 15 )

* EJECT

   @ 0, 0 SAY Chr( 27 ) + '@'
   SET DEVICE TO SCREEN
*  SET PRINTER TO
*  CLOSE ALL
   fErase( "temp1.ntx" )
   fErase( "temp2.ntx" )
*   CLEAR
*   RETURN

FUNC IMPRESSORA
  oPrinter := WIN_PRINTERGETDEFAULT()

FUNC Imprime( cPrinter )  
local cTexto, nLinhas, nA, mlinha
local oPrinter := win_prn():New(cPrinter)
oPrinter:Landscape := .F.
oPrinter:FormType := FORM_A4
oprinter:SetPrintQuality(-1)
oPrinter:Copies    := 1

   oPrinter:SetFont("Courier New",11,{3,-50})
   oPrinter:Bold(0)
        
	  oPrinter:NewLine()
         FOR mlinha = 1 TO 45
            oPrinter:SetPrc(oPrinter:Prow()+01, mlinha )
            oPrinter:Textout(ALLTRIM(STR(oPrinter:Prow()))+ "-linha linha linha " +;
                             "linha linha linha",.f.)
         NEXT mlinha
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Primeira impressão LaserJet em modo console

Mensagem por Eolo »

oPrinter := WIN_PRINTERGETDEFAULT()
...
local oPrinter := win_prn():New(cPrinter)
Taciane,

Parece que você misturou oPrinter com cPrinter...

cPrinter:= WIN_PRINTERGETDEFAULT() // pega o nome da impressora
oPrinter := win_prn():New(cPrinter) // cria o job oPrinter direcionado para a printer cPrinter, que é apontada no New()
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 »

Obrigada pela observação Eolo

Fiz a correção no código.

Código: Selecionar todos

FUNC IMPRESSORA
  cPrinter := WIN_PRINTERGETDEFAULT()
 
FUNC Imprime( cPrinter )  
local cTexto, nLinhas, nA, mlinha
local oPrinter := win_prn():New(cPrinter)
oPrinter:Landscape := .F.
oPrinter:FormType := FORM_A4
oprinter:SetPrintQuality(-1)
oPrinter:Copies    := 1
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á,

Tenho pesquisado exemplo aqui no Fórum por exemplos e achei este exemplo do Toledo, peguei meu arquivo txt e alterei para fica como o mesmo nome que foi usado pelo Toledo e imprimiu 100%, fiz vários testes pegando o prg dele para adaptar ao meu mas não tive êxito. Ele usa HwGUI, ainda estou na porta de entrada do modo console.
https://pctoledo.org/forum/fileba ... t=c&page=1

Fui pesquisando vários outros aqui e fui testando e vendo as mensagens de erro nas compilações ajustando e testando.

https://pctoledo.org/forum/viewto ... 7&start=60
viewtopic.php?f=4&t=12841

No exemplo abaixo nas funções chamar_impressora e Imprime não esta sendo enviado nenhum comando para a impressora. Uso em casa uma impressora Virtual PDF para teste. Por acaso estou colocando a função no lugar errado ?

Fico grata por qualquer ajuda,

Código: Selecionar todos

CLEAR

  Set Century On   // ano com 4 digitos
  Set Date Brit    // data no formato dd/mm/yyyy
   mdata = CToD( ' / / ' )

   DO WHILE .T.
      @ 10, 10 SAY 'INFORME DATA DO MOVIMENTO'
      @ 10, 36 GET mdata PICTURE '@D'
     
      READ
      IF mdata = CToD( ' / / ' )
         @ 20, 1 SAY 'DATA EM BRANCO'
         WAIT ', ENTER'
         LOOP
      ENDIF
      EXIT
   ENDDO

   SELECT 0
   USE CLIENTES
   INDEX ON nome TO Temp1 
   SELECT 0
   USE MOVIM
   INDEX ON Conta + Dtos( Data ) TO Temp2
   SELECT 0
   USE HISTOR INDEX IHISTOR

   SET PRINTER TO TESTE.TXT
   SET DEVICE TO PRINT
   
   
   @ 0, 0 SAY Chr( 27 ) + Chr( 15 )
   cARQ := DiskName()+":\"+CurDir()+"\teste.txt"
   mlinha = 66
   mfolha = 1
   mtotcre = 0.00
   mtotdeb = 0.00
   mtotvap = 0.00
   mtotvales = 0.00
   mtotodeb = 0.00
   mtotrest = 0.00
   mtotven = 0.00
   SELECT clientes
   GOTO TOP
   DO WHILE .NOT. Eof() // clientes em ordem alfabética
      SELECT movim
      SET SOFTSEEK ON // pra encontrar data igual ou acima (apesar que parece usar data única)
      SEEK clientes->Conta + Dtos( mData )
      SET SOFTSEEK OFF
      DO WHILE movim->Conta == clientes->Conta .AND. .NOT. Eof() // movimentos referentes ao cliente
         // IF movim->Dat_Lanc < mData // Pra que isto, se o SEEK já pulou datas menores?
         //    SKIP
         //    LOOP
         // ENDIF
         IF movim->Dat_Lanc > mdata 
            EXIT
         ENDIF
         IF mlinha > 58
            DO CCCABP20  WITH mfolha, mdata, mlinha
         ENDIF
         @ mlinha, 4  SAY clientes->Conta
         @ mlinha, 10 SAY clientes->Nome
         @ mlinha, 44 SAY clientes->Tipo
         SELECT histor
         SEEK movim->CT
         IF Eof()
            @ mlinha, 66 SAY '*******'
         ELSE
            @ mlinha, 66 SAY histor->Historico
         ENDIF
         SELECT movim
         @ mlinha, 78 SAY movim->Doc
         IF movim->CT < 10
            mtotdeb += movim->Valor
            DO CASE
            CASE movim->CT = 01 ; mtotvap   += movim->Valor
            CASE movim->CT = 02 ; mtotvales += movim->Valor
            CASE movim->CT = 06 ; mtotrest  += movim->Valor
            OTHERWISE           ; mtotodeb  += movim->Valor
            ENDCASE
            @ mlinha, 94 SAY movim->Valor PICTURE '9,999,999,999.99'
         ELSE
            mtotcre += movim->Valor
            @ mlinha, 111 SAY movim->Valor PICTURE '9,999,999,999.99'
         ENDIF
         mlinha += 1
         SKIP
      ENDDO
      SELECT clientes // retorna pra clientes, que é com o que este do while externo trabalha
      SKIP
   ENDDO   
   IF mlinha > 55
      DO CCCABP20 WITH mfolha, mdata, mlinha
   ENDIF
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE VENDAS A PRAZO = >'
   @ mlinha, 94 SAY mtotvap PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE VALES ....... = >'
   @ mlinha, 94 SAY mtotvales PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE RESTAURANTE  = >'
   @ mlinha, 94 SAY mtotrest PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE OUTROS DEBITOS = >'
   @ mlinha, 94 SAY mtotodeb PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 35 SAY 'T O T A L  = >'
   @ mlinha, 94 SAY mtotdeb PICTURE '9,999,999,999.99'
   @ mlinha, 111 SAY mtotcre PICTURE '9,999,999,999.99'

   @ pRow() + 1, 0 SAY Chr( 27 ) + Chr( 15 )
  
   
*   EJECT

   @ 0, 0 SAY Chr( 27 ) + '@'
    SET DEVICE TO SCREEN
*   SET PRINTER TO
*   CLOSE ALL
   fErase( "temp1.ntx" )
   fErase( "temp2.ntx" )
*  CLEAR
   RETURN 
   
*****************************************************************
#define x_BLUE       16711680
#define x_DARKBLUE   10027008
#define x_WHITE      16777215
#define x_CYAN       16776960
#define x_BLACK             0
#define x_RED             255
#define x_GREEN         32768
#define x_GRAY        8421504
#define x_YELLOW        65535
#define HB_EXT_INKEY

#include "windows.ch"
#include "guilib.ch"
#include "inkey.ch"
#include "hwgui.ch"
#include "common.ch"
#include "hbdll.ch"  
#include "common.ch"

#define ID_TEXTO  300
*****************************************************************
Function Chamar_Impressora
*****************************************************************
LOCAL cPrinterName, cPrinterPort
LOCAL aPrn    := GetPrinters()
cPrinter := WIN_PRINTERGETDEFAULT()
PARA TAM,cARQ      // S=136 N=79

IF TAM=Nil
   TAM="S"
ENDIF

If Empty(aPrn)
   Return
EndIf

IF !EMPTY(cARQ)
   cFILE := cARQ
   Return
ENDIF

 nPrn:= cPrinter

IF TAM="S"
   IF !EMPTY(nPrn)
      Imprime(cFILE,136,cPrinterName)
   ENDIF
ELSE
   IF !EMPTY(nPrn)
      Imprime(cFILE,80,cPrinterName)
   ENDIF
ENDIF
 RETURN 

******************************************
Function Imprime( cArq, tamrel ,cPrinter )
******************************************
local cTexto, nLinhas, nA, cLinha
local oPrinter := win_prn():New(cPrinter)

oPrinter:Landscape := .F.
oPrinter:FormType  := 9
oprinter:SetPrintQuality(-1) // qualidade da impressão

oPrinter:Copies    := 1

oPrinter:Create()
IF !oPrinter:Create()
*   @ 20, 11 SAY 'ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar se a Impressora esta Ligada.","Aviso do Sistema'  // // Dá erro na compilação quando se usa @ ... say '  '  vou procurar uma alternativa
   return 
ELSE
   IF !oPrinter:StartDoc("Impressao Pelo Sistema")
*   @ 20, 12 SAY 'ATENÇÃO !!! Não foi possivel Iniciar a Impressão, Favor Verificar o Spoll da Impressora","Aviso do Sistema'  // Dá erro na compilação quando se usa @ ... say '  '  vou procurar uma alternativa
      Return 
   endif


   FOR TT=1 TO aTamlog
      oPrinter:newline()
   NEXT

   IF TAMREL=80
      oPrinter:setfont('Courier New',,11,,,,255) // Normal
   ELSE
      oPrinter:SetFont("Courier New",11,{3,-50}) // Comprimida
   ENDIF
   oPrinter:Bold(0) // Normal

   dbgotop()
   Do while !eof()
      cLinha := mlinha    // Busca linha de impressao
      oPrinter:newline() // Inicia nova linha

      oPrinter:SetFont("Courier New",11,{3,-50}) // Comprimida

      oPrinter:TextOut(HB_OemToAnsi(cLinha))
      oPrinter:Bold(0) // Normal
      dbskip()

      if !eof()
         if (oPrinter:MaxRow() - 2) <= oPrinter:Prow() // Usa "oPrinter:NewPage()" para iniciar nova pagina
            oPrinter:NewPage()

            FOR TT=1 TO aTamlog
               oPrinter:newline()
            NEXT
         endif
      endif
   enddo
   oPrinter:EndDoc()
   oPrinter:Destroy()
ENDIF
USE
RETURN NIL




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,

Algumas coisas:

1-Você comentou em seu exemplo a linha SET PRINTER TO. Não pode. Tem que descomentar para fechar o arquivo TEXTE.TXT. Mas esse não é o problema porque não está imprimindo. Na verdade, dentro de seu exemplo você não está fazendo a chamada a função de impressão.

2-Como a idéia é imprimir o arquivo gerado, a função de impressão que você pegou não vai funcionar. Tem que adaptar.

3-Você trata a quebra de página assim: DO CCCABP20 WITH mfolha, mdata, mlinha. Poste a função CCCABP20 para saber quando tratar a quebra de página. Ajuda mais ainda se você anexar o arquivo TEXTE.TXT.
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á,

1 - Estava testando vários exemplos e em meio a tantos erro de compilação acho que comentei a linha e mandei gerar o TXT e não vi que tinha ficado com 1k. :% Vacilo mesmo.
Poste a função CCCABP20

Código: Selecionar todos

PARAMETERS mfolha, mdata, mlinha, mNomeEmp

@1,10 SAY mNomeEmp
@1,55 SAY 'CONTA CORRENTE'
@1,95 SAY 'FOLHA'
@1,101 SAY mfolha PICTURE '999'
@2,39 SAY 'RELACAO DO MOVIMENTO DIARIO EM'
SET CENTURY ON
@2,70 SAY mdata 
SET CENTURY OFF
@4,4  SAY 'CONTA'
@4,14 SAY 'NOME'
@4,50 SAY 'TIPO'
@4,66 SAY 'HISTORICO'
@4,78 SAY 'DOCUMENTO'
@4,98 SAY 'DEBITO'
@4,112 SAY 'CREDITO' 
mfolha = mfolha + 1
mlinha = 5
RETURN
Ajuda mais ainda se voc anexar o arquivo TESTE.TXT.
Anexos
TESTE.TXT
(6.97 KiB) Baixado 260 vezes
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,

1 - Como você vai mudar o método de impressão, observe no exemplo que foi comentado todos os comandos para impressora modo RAW. Usando a classe Win_Prn() eles não são reconhecidos e atrapalham. Ex: @ 0, 0 SAY Chr( 27 ) + Chr( 15 ).

2 - Veja que foi incluído no inicio do exemplo a linha: #include "hbwin.ch"

3 - Observe a função Imprime(). Veja e estude como ela foi montada para sua melhor compreenção da classe Win_Prn().

3 - Para compilar, você precisa acrescentar duas novas LIBs em função das funções usadas no exemplo. Elas são: xhb e hbwin. Então para compilar use: Hbmk2 exemplo.prg -lxhb -lhbwin.

Faça um teste, veja se vai funcionar corretamente:

Código: Selecionar todos

/*
  Compilar usando: Hbmk2 exemplo.prg -lxhb -lhbwin
*/

#include "hbwin.ch"

Function Main()
   
   CLEAR

   Set Century On   // ano com 4 digitos
   Set Date Brit    // data no formato dd/mm/yyyy
   mdata = CToD( "")
   
   DO WHILE .T.
      @ 10, 10 SAY 'INFORME DATA DO MOVIMENTO'
      @ 10, 36 GET mdata PICTURE '@D'
     
      READ
      IF mdata = CToD( "" )
         @ 20, 1 SAY 'DATA EM BRANCO'
         WAIT ', ENTER'
         LOOP
      ENDIF
      EXIT
   ENDDO

   SELECT 0
   USE CLIENTES
   INDEX ON nome TO Temp1 
   SELECT 0
   USE MOVIM
   INDEX ON Conta + Dtos( Data ) TO Temp2
   SELECT 0
   USE HISTOR INDEX IHISTOR

   SET PRINTER TO TESTE.TXT
   SET DEVICE TO PRINT
   
   
*   @ 0, 0 SAY Chr( 27 ) + Chr( 15 )
   cARQ := DiskName()+":\"+CurDir()+"\teste.txt"
   mlinha = 66
   mfolha = 1
   mtotcre = 0.00
   mtotdeb = 0.00
   mtotvap = 0.00
   mtotvales = 0.00
   mtotodeb = 0.00
   mtotrest = 0.00
   mtotven = 0.00
   SELECT clientes
   GOTO TOP
   DO WHILE .NOT. Eof() // clientes em ordem alfabÚtica
      SELECT movim
      SET SOFTSEEK ON // pra encontrar data igual ou acima (apesar que parece usar data ·nica)
      SEEK clientes->Conta + Dtos( mData )
      SET SOFTSEEK OFF
      DO WHILE movim->Conta == clientes->Conta .AND. .NOT. Eof() // movimentos referentes ao cliente
         IF movim->Dat_Lanc > mdata 
            EXIT
         ENDIF
         
         IF mlinha > 58
            DO CCCABP20  WITH mfolha, mdata, mlinha
         ENDIF
         
         @ mlinha, 4  SAY clientes->Conta
         @ mlinha, 10 SAY clientes->Nome
         @ mlinha, 44 SAY clientes->Tipo
         SELECT histor
         SEEK movim->CT
         IF Eof()
            @ mlinha, 66 SAY '*******'
         ELSE
            @ mlinha, 66 SAY histor->Historico
         ENDIF
         SELECT movim
         @ mlinha, 78 SAY movim->Doc
         IF movim->CT < 10
            mtotdeb += movim->Valor
            DO CASE
            CASE movim->CT = 01 ; mtotvap   += movim->Valor
            CASE movim->CT = 02 ; mtotvales += movim->Valor
            CASE movim->CT = 06 ; mtotrest  += movim->Valor
            OTHERWISE           ; mtotodeb  += movim->Valor
            ENDCASE
            @ mlinha, 94 SAY movim->Valor PICTURE '9,999,999,999.99'
         ELSE
            mtotcre += movim->Valor
            @ mlinha, 111 SAY movim->Valor PICTURE '9,999,999,999.99'
         ENDIF
         mlinha += 1
         SKIP
      ENDDO
      SELECT clientes // retorna pra clientes, que Ú com o que este do while externo trabalha
      SKIP
   ENDDO   
   
   //IF mlinha > 55
      DO CCCABP20 WITH mfolha, mdata, mlinha
   //ENDIF
   
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE VENDAS A PRAZO = >'
   @ mlinha, 94 SAY mtotvap PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE VALES ....... = >'
   @ mlinha, 94 SAY mtotvales PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE RESTAURANTE  = >'
   @ mlinha, 94 SAY mtotrest PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE OUTROS DEBITOS = >'
   @ mlinha, 94 SAY mtotodeb PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 35 SAY 'T O T A L  = >'
   @ mlinha, 94 SAY mtotdeb PICTURE '9,999,999,999.99'
   @ mlinha, 111 SAY mtotcre PICTURE '9,999,999,999.99'

*   @ pRow() + 1, 0 SAY Chr( 27 ) + Chr( 15 )
*   EJECT
*   @ 0, 0 SAY Chr( 27 ) + '@'

   SET DEVICE TO SCREEN
   SET PRINTER TO
   CLOSE ALL
   fErase( "temp1.ntx" )
   fErase( "temp2.ntx" )
   
   Imprime( "TEXTE.TXT" )  // envia para impressão
   
*  CLEAR
RETURN

Function CCCABP20()
PARAMETERS mfolha, mdata, mlinha, mNomeEmp

@1,10 SAY mNomeEmp
@1,55 SAY 'CONTA CORRENTE'
@1,95 SAY 'FOLHA'
@1,101 SAY mfolha PICTURE '999'
@2,39 SAY 'RELACAO DO MOVIMENTO DIARIO EM'
SET CENTURY ON
@2,70 SAY mdata 
SET CENTURY OFF
@4,4  SAY 'CONTA'
@4,14 SAY 'NOME'
@4,50 SAY 'TIPO'
@4,66 SAY 'HISTORICO'
@4,78 SAY 'DOCUMENTO'
@4,98 SAY 'DEBITO'
@4,112 SAY 'CREDITO' 
mfolha = mfolha + 1
mlinha = 5
RETURN
   
******************************************
Function Imprime( 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("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",12,{ 1, 16 }) // Comprime em 16 caracteres por polegada
   
   nHandler := FOpen( cArq )

   While HB_FReadLine( nHandler, @cLinha ) = 0

      If "CONTA CORRENTE" $ Upper( 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() > 63  // formato A4 tem 69 linhas. Menos 2 do cabeçalho e 2 do rodapé = 65
          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
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

Coloquei -lxhb -lhbwin no meu HBP.

Troquei TEXTE.TXT por TESTE.TXT

Fiz um download da lhbwin e coloquei na pasta Include.

Tive de colocar #define WIN_DMPAPER_A4 9, pois deu erro de compilação. Tinha colocado apenas #define WIN_DMPAPER_A4. Mas achei um tópico onde você menciona que arquivo CH é case sensitive então abrir o CH e coloquei o texto exatamente igual, ou seja com este numero 9 no final. Deu certo a compilação.
viewtopic.php?f=4&t=16076

Estou sem impressora aqui em casa, mandei gerar em impressora PDF, a coluna crédito saiu totalmente fora quando gerado em PDF.

Assim que testar na HP, se ficar fora vou ajustando as colunas, qualquer coisa alterando o tipo de tamanho da fonte.

Jairo muito obrigada por comentar as linhas incluindo orientações tão preciosas. Vou estudar com afinco. Fico muita grata por gastar seu tempo para me ajudar. :))
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á,

Fiz os testes usando uma HP1102W.

Alinhei as colunas pois o teste em PDF realmente esta muito diferente do que vai para a impressora.

Comentei a linha DO CCABP20 pois estava gerando a segunda e a terceira folha tudo junto ( na mesma folha )

Código: Selecionar todos

//IF mlinha > 55
	      DO CCCABP20 WITH mfolha, mdata, mlinha
	   //ENDIF
Apesar de ser gerado corretamente as informações no TXT, a última linha não é impressa de jeito nenhum.

Ou seja deveria sair 5 linhas , é impresso apenas 4 linhas.

Se eu comentar por exemplo @ mlinha, 10 SAY 'TOTAL DE VENDAS A PRAZO = >'
@ mlinha, 94 SAY mtotvap PICTURE '9,999,999,999.99', a última linha Total => é impressa corretamente.

Código: Selecionar todos

mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE VENDAS A PRAZO = >'
   @ mlinha, 94 SAY mtotvap PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE VALES ....... = >'
   @ mlinha, 94 SAY mtotvales PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE RESTAURANTE  = >'
   @ mlinha, 94 SAY mtotrest PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 10 SAY 'TOTAL DE OUTROS DEBITOS = >'
   @ mlinha, 94 SAY mtotodeb PICTURE '9,999,999,999.99'
   mlinha += 1
   @ mlinha, 35 SAY 'T O T A L  = >'
   @ mlinha, 94 SAY mtotdeb PICTURE '9,999,999,999.99'
   @ mlinha, 111 SAY mtotcre PICTURE '9,999,999,999.99'
Mesmo se for gerado um relatório com poucas linhas de modo que caiba tudo na primeira folha a última linha esta que seria o Total => onde é impresso o total dos Debitos e Total dos Créditos não é impresso.
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,

Pelo que você diz, acho que pode estar aqui o problema da última linha:

Código: Selecionar todos

IF mlinha > 58
       DO CCCABP20  WITH mfolha, mdata, mlinha
ENDIF
Por tentativa e erro tente ir diminuindo o 58 até ser impresso todas a linhas.
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

Esta linha eu deixei como 63. Assim na primeira folha será impresso 63 linhas, após isto é impresso um novo cabeçalho no inicio da segunda folha.

Código: Selecionar todos

ElseIf oPrinter:pRow() > 63  // formato A4 tem 69 linhas. Menos 5 do cabeçalho e 1 do rodapé = 69
Alterando IF mlinha > 58 para qualquer valor menor, passará a ser impresso 57, 56,55 , etc linhas na primeira página e logo em seguida será colocado o cabeçalho da próxima página.

Por isto estou usando :
IF mlinha > 63, fica certo na primeira folha, na segunda no teste que estou fazendo é impresso umas 4 linhas e em seguida deveria vir aqueles 5 totalizadores, ou seja bem menos que as 63 linhas por página, mas a danada da última linha não é impressa.

Mesmo em um teste com apenas uma folha com poucas linhas destes 5 totalizadores apenas 4 são impressos.

Pior que no arquivo.txt esta tudo certo, esta saindo as quebras de páginas exatamente do modo que esta sendo impresso, mostra os 5 totalizadores normalmente.

Pensei que pudesse ser aquele ponto onde a variável mlinha = 66 logo no inicio onde são definidas as variáveis. ( mas já mudei de tudo que é jeito e nada de dar certo )

Outra coisa que pensei, se o TXT esta gerando 100%, tanto na primeira quando das demais páginas, talvez pudesse ser algo na função imprime. mas consigo identificar onde.
Responder