Página 1 de 2

IMPRIMIR - Parte II

Enviado: 02 Ago 2007 08:27
por ERCS123
Olá, Bom dia a todos!


Estou fazendo uma rotina de impressao, que o usuario pode escolher o tipo. Estou precisando saber, como faço para mostrar na tela, um arquivo.txt de um relatorio. Já procurei no forum, e não consegui achar nada. Conto com a colaboracao de voces novamente. OBRIGADO!

Código: Selecionar todos


    copy to c:\sistema\arqtemp.dbf for cod >= m_cod1 .AND. cod <= m_cod2
    use C:\sistema\arqtemp.DBF alias temp new


    if (LastRec() == 0)
      mens("Cliente nao Cadastrado!")
      tone(900, 9)
      InKey(6)
      close databases
      return
    endif
    confirma("Relatorio","Clientes") 
    cresp:= Space(1)
    @ 23, 78 get Cresp picture "@!" valid cresp $ "SN"
    read
   if (cresp = "N")
     close databases
     return
   else
     if (LastKey() == 27)
       close databases
       return
      endif
   endif

*********************************************
    confirma("TIPO de Relatorio: V (video) A (arquivo) I (impressora) ") 
    cresp:= Space(1)
    @ 23, 78 get Cresp picture "@!" valid cresp $ "VAI"
    read
    if(cresp = "V")
      ????????
    if(cresp = "A"
      set print to arq1.txt
    else
     set device to printer
   endif

************************************************

  impress()
  goto top
  mens("Aguarde IMPRIMINDO Relatorio de Clientes...")
  setprc(0, 0)
  do while (.T.)
  pag++
  @ 00,00 say chr(15)
  @ PRow() + 1,  0 say "DATA..: " + DToC(Date())
  @ PRow(),  0 say "DATA..: " + DToC(Date())
  @ PRow(), 40 say "RELATORIO DE CLIENTE POR CODIGO - De:      a     "
  @ PRow(), 40 say "RELATORIO DE CLIENTE POR CODIGO - De:      a     "
  @ PRow(), 78 say strzero(m_cod1, 4, 0)
  @ PRow(), 78 say strzero(m_cod1, 4, 0)
  @ PRow(), 85 say strzero(m_cod2, 4, 0)
  @ PRow(), 85 say strzero(m_cod2, 4, 0)
  @ PRow(), 122 say "PAG..: " + strzero(pag, 3, 0)
  @ PRow(), 122 say "PAG..: " + strzero(pag, 3, 0)
  empresa(3)
  @ PRow() + 1,  0 say Replicate("-", 133)
  @ PRow(),  0 say Replicate("-", 133)
  @ PRow() + 1,  0 say "CODIGO NOME/ENDERECO                            BAIRRO/CIDADE             CEP        /UF   FONE/FAX          CGC/Ins.Estadual"
  @ PRow()    ,  0 say "CODIGO NOME/ENDERECO                            BAIRRO/CIDADE             CEP        /UF   FONE/FAX          CGC/Ins.Estadual"
  @ PRow() + 1,  0 say Replicate("-", 133)
  @ PRow(),  0 say Replicate("-", 133)
  do while (!EOF() .AND. PRow() <= 59)
     @ PRow() + 1,  1 say strzero(cod, 4, 0)
     @ PRow(),  7 say emp
     @ PRow(), 48 say bai
     @ PRow(), 74 say cep
     @ PRow(), 91 say fon

Enviado: 02 Ago 2007 08:35
por Maligno
como faço para mostrar na tela, um arquivo.txt de um relatorio
Imagino que você queira um preview de relatório. Há várias formas. O passo inicial é direcionar a saída da impressão para um arquivo, sem os códigos de impressão. uma vez formado o arquivo, você terá de abrí-lo para exibição. Há algum tempo postaram um código para isso usando o TBrowse. Não sei qual o link. Mas uma busca pelo termo deve retornar alguns links.

Enviado: 02 Ago 2007 08:47
por sygecom
Completando.... o link se encontra abaixo:

https://pctoledo.org/forum/viewtopic.php?t=3954

Enviado: 02 Ago 2007 09:15
por ERCS123
Compilei o codigo do exemplo, e esta aparecendo esta mensgem:
UNDEFINED SYMBOL AFTER LIBRARY SEARCH
'EDICAO' FIRST REFERENCE MEU ARQUIVO.OBJ

-----------------------------------------------
ESTOU FAZENDO ASSIM:

if (resp = "V") //mostra no video
set print to arq1.txt
edicao("arq1.txt")
if (resp = "A") // grava em arquivo
set print to arq1.txt
else
set print to printer // imprime na impressora
endif


***NÃO ESTOU CONSEGUINDO VISUALIZAR NA TELA. ****

Enviado: 02 Ago 2007 09:32
por Maligno
Este símbo "EDICAO" é o nome da própria função de visualização. Muito provavelmente você se esqueceu de incluir este objeto no seu script de linkedição ou gravou seu objeto num diretório desconhecido para o linker.

Enviado: 02 Ago 2007 19:37
por ERCS123
Olá,

Para usar a funcao edicao("arqtemp.txt"), primeiro tem que criar esse arquivo .txt?

ex:
if (cresp1 = "A")
set print to arqtemp.txt
edicao("arqtemp.txt")
else
xxxxxxxxxxxx
endif


Porque estou fazendo assim, é não aparece nada na tela

Enviado: 02 Ago 2007 19:46
por Maligno
Sim, claro. É o arquivo que conterá o texto a ser visto. Mais ou menos isso:

Código: Selecionar todos

SET PRINTER TO ARQTEMP.TXT
SET DEVICE TO PRINT
//
// Sua impressão normal
//
SET DEVICE TO SCREEN

edicao("ARQTEMP.TXT")

Enviado: 02 Ago 2007 20:15
por ERCS123
Estou querendo fazer o seguinte:

Após confirmar o relatorio, criando um DBF temporario, o USUARIO terá opcoes de relatorio: Ver na tela, usndo a funcao EDICAO, Imprimir p/ arquivo ou Imprimir na impressora.


if (cresp1 = "V")
set print to arqtemp.txt
edicao("arqtemp.txt")
elseif (cresp1 = "A")
set print to arqtemp.txt
elseif (cresp1 = "I")
set print to printer
endif
----
-----------
-restante do relatorio, caso for imprimir na impressora.
----------
-------
-----

A opcao "V", não esta gerando o arquivo .txt. O que esta errado?

Enviado: 02 Ago 2007 20:21
por Eolo
Se a variável CRESP1 contiver "v" (minúscula),
cresp1="V" vai dar .F.

Pra resolver, faça o seguinte: upper(cresp1)="V"
A função upper() transforma tudo em maiúsculas, aí a comparação dá certo:
upper(cresp1)="V" vai dar .T.

Enviado: 02 Ago 2007 20:30
por Eolo
(que estranho: eu enviei o post anterior às 20:21hs. só que, nele, aparece registrado 19:21hs... O fuso horário em SC é o mesmo de Brasília e meu PC tá setado pra usar a hora GMT -3, de Brasília. O que será que acontece?)

Enviado: 02 Ago 2007 20:35
por ERCS123
O problema não é este, pois eu uso @!. O que ocorre é que esta gerando o arqtemp.txt, mas com o conteudo vazio.

Enviado: 02 Ago 2007 20:50
por sygecom
Tche, de uma olhada no post do Maligno....é exatamete aquilo que ele postou....ou post um exemplo completo de como vc esta usando !!!

Abraços
Leonardo Machado

Enviado: 02 Ago 2007 20:55
por ERCS123

Código: Selecionar todos

confirma("Relatorio","Clientes") 
    cresp:= Space(1)
    cresp1:= Space(1)
    @ 23, 78 get Cresp picture "@!" valid cresp $ "SN"
    read

   if (cresp = "N")
     close databases
*     erase arqtemp.dbf
     return
   else
     if (LastKey() == 27)
       close databases
       return
      endif
   endif
   
 
   mens("Escolha o Tipo Relatorio -  Video/Arquivo/Impressora") 
   @ 23, 78 get Cresp1 picture "@!" valid cresp1 $ "VAI"
   read

    if (cresp1 = "V")                 // nao funciona
      set print to arqtemp.txt
       edicao("arqtemp.txt")
    elseif (cresp1 = "A")         //  ok
        set print to arqtemp.txt   
     elseif (cresp1 = "I")   //  ok
      set print to printer
      endif
   
     if (LastKey() == 27)
       close databases
       return
      endif


  impress()
  goto top
  mens("Aguarde IMPRIMINDO Relatorio de Clientes...")
  set device to printer
  setprc(0, 0)
  do while (.T.)
  pag++
  @ 00,00 say chr(15)
  @ PRow() + 1,  0 say "DATA..: " + DToC(Date())
  @ PRow(),  0 say "DATA..: " + DToC(Date())
  @ PRow(), 40 say "RELATORIO DE CLIENTE POR CODIGO - De:      a     "
  @ PRow(), 40 say "RELATORIO DE CLIENTE POR CODIGO - De:      a     "
  @ PRow(), 78 say strzero(m_cod1, 4, 0)
  @ PRow(), 78 say strzero(m_cod1, 4, 0)
  @ PRow(), 85 say strzero(m_cod2, 4, 0)
  @ PRow(), 85 say strzero(m_cod2, 4, 0)
  @ PRow(), 122 say "PAG..: " + strzero(pag, 3, 0)
  @ PRow(), 122 say "PAG..: " + strzero(pag, 3, 0)
  empresa(3)
  @ PRow() + 1,  0 say Replicate("-", 133)
  @ PRow(),  0 say Replicate("-", 133)
  @ PRow() + 1,  0 say "CODIGO NOME/ENDERECO                            BAIRRO/CIDADE             CEP        /UF   FONE/FAX          CGC/Ins.Estadual"
  @ PRow()    ,  0 say "CODIGO NOME/ENDERECO                            BAIRRO/CIDADE             CEP        /UF   FONE/FAX          CGC/Ins.Estadual"
  @ PRow() + 1,  0 say Replicate("-", 133)
  @ PRow(),  0 say Replicate("-", 133)
  do while (!EOF() .AND. PRow() <= 59)
     @ PRow() + 1,  1 say strzero(cod, 4, 0)
     @ PRow(),  7 say emp
     @ PRow(), 48 say bai
     @ PRow(), 74 say cep
     @ PRow(), 91 say fon
     @ PRow(), 108 say cgc
     @ PRow() + 1, 7 say end
     @ PRow(), 48 say cid
     @ PRow(), 85 say est
     @ PRow(), 91 say fax
     @ PRow(), 108 say ins
     @ PRow() + 1,  0 say Replicate("-", 133)
     skip 
   enddo
   eject
   @  0,  0 say " "
   if (EOF())
     set device to screen
     close databases
 *    erase arqtemp.dbf
      return
   endif
  enddo
enddo
(5, 6, 20, 75, restscreen:= tecli)
return

Enviado: 02 Ago 2007 21:05
por sygecom
Preste atenção a função EDIÇÃO tem que esta no final da sua impressao....

Código: Selecionar todos

confirma("Relatorio","Clientes")
    cresp:= Space(1)
    cresp1:= Space(1)
    @ 23, 78 get Cresp picture "@!" valid cresp $ "SN"
    read

   if (cresp = "N")
     close databases
*     erase arqtemp.dbf
     return
   else
     if (LastKey() == 27)
       close databases
       return
      endif
   endif
   
 
   mens("Escolha o Tipo Relatorio -  Video/Arquivo/Impressora")
   @ 23, 78 get Cresp1 picture "@!" valid cresp1 $ "VAI"
   read

    if (cresp1 = "V")                 // nao funciona
      set print to arqtemp.txt
    elseif (cresp1 = "A")         //  ok
        set print to arqtemp.txt   
     elseif (cresp1 = "I")   //  ok
      set print to printer
    endif
   
     if (LastKey() == 27)
       close databases
       return
      endif


  impress()
  goto top
  mens("Aguarde IMPRIMINDO Relatorio de Clientes...")
  set device to printer
  setprc(0, 0)
  do while (.T.)
  pag++
  @ 00,00 say chr(15)
  @ PRow() + 1,  0 say "DATA..: " + DToC(Date())
  @ PRow(),  0 say "DATA..: " + DToC(Date())
  @ PRow(), 40 say "RELATORIO DE CLIENTE POR CODIGO - De:      a     "
  @ PRow(), 40 say "RELATORIO DE CLIENTE POR CODIGO - De:      a     "
  @ PRow(), 78 say strzero(m_cod1, 4, 0)
  @ PRow(), 78 say strzero(m_cod1, 4, 0)
  @ PRow(), 85 say strzero(m_cod2, 4, 0)
  @ PRow(), 85 say strzero(m_cod2, 4, 0)
  @ PRow(), 122 say "PAG..: " + strzero(pag, 3, 0)
  @ PRow(), 122 say "PAG..: " + strzero(pag, 3, 0)
  empresa(3)
  @ PRow() + 1,  0 say Replicate("-", 133)
  @ PRow(),  0 say Replicate("-", 133)
  @ PRow() + 1,  0 say "CODIGO NOME/ENDERECO                            BAIRRO/CIDADE             CEP        /UF   FONE/FAX          CGC/Ins.Estadual"
  @ PRow()    ,  0 say "CODIGO NOME/ENDERECO                            BAIRRO/CIDADE             CEP        /UF   FONE/FAX          CGC/Ins.Estadual"
  @ PRow() + 1,  0 say Replicate("-", 133)
  @ PRow(),  0 say Replicate("-", 133)
  do while (!EOF() .AND. PRow() <= 59)
     @ PRow() + 1,  1 say strzero(cod, 4, 0)
     @ PRow(),  7 say emp
     @ PRow(), 48 say bai
     @ PRow(), 74 say cep
     @ PRow(), 91 say fon
     @ PRow(), 108 say cgc
     @ PRow() + 1, 7 say end
     @ PRow(), 48 say cid
     @ PRow(), 85 say est
     @ PRow(), 91 say fax
     @ PRow(), 108 say ins
     @ PRow() + 1,  0 say Replicate("-", 133)
     skip
   enddo
   eject
   @  0,  0 say " "
   if (EOF())
     set device to screen
     close databases
 *    erase arqtemp.dbf
      return
   endif
  enddo
enddo
edicao("arqtemp.txt")

(5, 6, 20, 75, restscreen:= tecli)
return 

Enviado: 02 Ago 2007 21:11
por ERCS123
Nesse caso, iria imprimir na impressora e depois aparecer na tela, caso o EDICAO ficar no final? Não tem como deixa apenas na tela?