Página 1 de 2

Imprimir III

Enviado: 04 Ago 2007 08:56
por ERCS123
Olá,

Estou usando a funcao EDICAO, conforme fui orientado aqui no forum. Esta funcao mostra na tela o conteudo de um arquivo.txt. Porem somente agora percebi, que o arquivo txt,nao esta aparecendo o conteudo total do meu relatorio, apenas os primeiros 42 clientes, sendo que no cadastro possui mais de 100 clientes cadastros. Eu acho que o problema esta na criacao do txt.

Para criar o arquivo dbf temporario;
- o meu programa esta na pasta c;\sistema
-o arquivo dbf temporario eu crio na pasta c;\temp
copy to c:\temp\arqtemp.dbf for cod >= m_cod1 .AND. cod <= m_cod2
Use c:\temp\arqtemp.dbf alias temp new
(o DBF é criado´corretamente, com todos os clientes)


PARA CRIAR o TXT:

set print to arqtemp.txt

(o arqtemp.txt, é criado apenas com os primeiros 42 clientes)


Outra coisa:
Quando mando imprimir apenas 10 clientes, o DBF temporario é criado, o arquivo txt tambem é criado corretamente, mas a funcao EDICAO nao funciona (nao aparece o arquivo txt na tela)

Ewerton

Editar arquivo.

Enviado: 04 Ago 2007 09:27
por Ademir
Bom dia !

Acabei de testar e funciona no Clipper 5.3.

Tente abrir o arquivo utilizando o Bloco de Notas do Windows por exemplo. Para XP ficaria assim:

RUN \WINDOWS\NOTEPAD.EXE NOMEDOARQUIVO.TXT

Enviado: 04 Ago 2007 09:38
por ERCS123
ola, Ademir,

O problema nao esta na visualizacao, mas na criacao do arquito txt. O txt não contem todos os dados do DBF temporario, entendeu?

Enviado: 04 Ago 2007 09:44
por sygecom
Ewerton, eu uso a aquela função Edicao...a Tempos e sempre funcionou comigo...faça o seguinte poste sua rotina INTEIRA de impressão e geração desse TXT....seu problema ai pode ser de logica.

Abraços
Leonardo Machado

Enviado: 04 Ago 2007 09:54
por ERCS123

Código: Selecionar todos

 function prx0012()

 tecli:= SaveScreen(5, 6, 20, 75)
 use clientes alias clie shar new
 set index to ind_cod, ind_emp
 centra(2, "®¯ RELATORIO ORDEM NUMERICA ®¯")
 nomepro()
 mens("Digite o Codigo a ser Impresso!  |  <ESC> Sai")
 do while (.T.)
   te0012()
   sele clie
   private m_cod1:= 0, m_cod2:= 0, pag:= 0
   SetColor("gr+/b", "n/gr+")
   @ 23, 13 say "                                       "
   do while (.T.)
     mens("Digite o Codigo a ser Impresso!  |  <ESC> Sai")
     cor(6)
     setcursor(1)
     m_cod1:= 1
     m_cod2:= 9999
     setcursor(2)
     @ 11, 48 get m_cod1 picture "9999" valid m_cod1 > 0
     @ 12, 48 get m_cod2 picture "9999" valid m_cod2 > 0
     read
     if (m_cod2 < m_cod1)
       mens("Codigo Final menor que Inicial!  | <ENTER> Retorna")
       tone(900, 9)
       InKey(0)
       loop
      endif
      exit
    enddo
    if (LastKey() == 27)
       close databases
       return
    endif

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

   ENDIF    
    if (LastRec() == 0)
      mens("Cliente nao Cadastrado!")
      tone(900, 9)
      InKey(6)
      close databases
      return
    endif
    confirma("Relatorio","Clientes") 
    cresp:= Space(1)
    cresp1:= 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
   
                     
   mens("Escolha o Tipo Relatorio -  Video/Arquivo/Impressora") 
   @ 23, 78 get Cresp1 picture "@!" valid cresp1 $ "VAI"
   read

     if cresp1 = "I"
        set print to LPT1
     else 
        set print to arqtemp.txt   
      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
     return
   endif
  if cresp1 = "V"
    edicao("arqtemp.txt")
    set device to screen
    close databases
    return
  endif
 enddo
enddo
(5, 6, 20, 75, restscreen:= tecli)
return

Enviado: 04 Ago 2007 10:02
por sygecom
Tche, de cara jah vi que tem um ENDIF sobrando ai....o primeiro depois do COPY TO.

Vou dar mais uma analisada no resto....

Enviado: 04 Ago 2007 10:13
por sygecom
Tche, dei uma alterada...testa qualquer coisa volta aqui !!!

Código: Selecionar todos

function prx0012()
tecli:= SaveScreen(5, 6, 20, 75)
use clientes alias clie shar new
set index to ind_cod, ind_emp
centra(2, "®¯ RELATORIO ORDEM NUMERICA ®¯")
nomepro()
mens("Digite o Codigo a ser Impresso!  |  <ESC> Sai")
do while (.T.)
   te0012()
   sele clie
   private m_cod1:= 0, m_cod2:= 0, pag:= 0
   SetColor("gr+/b", "n/gr+")
   @ 23, 13 say "                                       "
   do while (.T.)
      mens("Digite o Codigo a ser Impresso!  |  <ESC> Sai")
      cor(6)
      setcursor(1)
      m_cod1:= 1
      m_cod2:= 9999
      setcursor(2)
      @ 11, 48 get m_cod1 picture "9999" valid m_cod1 > 0
      @ 12, 48 get m_cod2 picture "9999" valid m_cod2 > 0
      read
      if (m_cod2 < m_cod1)
         mens("Codigo Final menor que Inicial!  | <ENTER> Retorna")
         tone(900, 9)
         InKey(0)
         loop
      endif
      exit
   enddo
   if (LastKey() == 27)
      close databases
      return
   endif

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

*   ENDIF

   if (LastRec() == 0)
      mens("Cliente nao Cadastrado!")
      tone(900, 9)
      InKey(6)
      close databases
      return
   endif

   confirma("Relatorio","Clientes")
   cresp:= Space(1)
   cresp1:= 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

   mens("Escolha o Tipo Relatorio -  Video/Arquivo/Impressora")
   @ 23, 78 get Cresp1 picture "@!" valid cresp1 $ "VAI"
   read

   if cresp1 = "I"
      set print to LPT1
   else
      set print to arqtemp.txt
   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
         return
      endif
      if cresp1 = "V"
         edicao("arqtemp.txt")
         set device to screen
         close databases
         return
      endif
   enddo
enddo
(5, 6, 20, 75, restscreen:= tecli)
return

Enviado: 04 Ago 2007 10:23
por ERCS123
Sygecom, aquele ENDIF eu já tinha visto, mas o problema não seria este. O que esta acontecendo é que o txt não é criado com todo o conteudo que esta no DBF temporario, entendeu? A funcao edicao funciona corretamente, mas n"ao contem todo o conteudo do DBF temporario.

E quando eu coloco p/ imprimir apenas os 10 clientes, neste caso, a funcao EDICAO nao funciona.


Será alguma coisa com a configuracao do XP, no caso os FILES?

Enviado: 04 Ago 2007 10:34
por sygecom
Será alguma coisa com a configuracao do XP, no caso os FILES?
Tche, concerteza não é problema de configuração de sistema operacional...testou a sua função que eu postei com algumas alterações ?

Enviado: 04 Ago 2007 10:37
por ERCS123
a unica coisa que achei diferente, foi o ENdif que voce comentou. Voce fez mais alteracao?

Enviado: 04 Ago 2007 10:39
por sygecom
do while !EOF() //.AND. PRow() <= 59)

Enviado: 04 Ago 2007 10:40
por ERCS123
Desculpa,,,,,,acabei de achar sua alteracao (// and. prow()<=59)

vou testar agora mesmo...

Enviado: 04 Ago 2007 10:46
por sygecom
Tche, só para lembrar....apenas retirei para vc testar...depois posta os resultados...

Enviado: 04 Ago 2007 10:49
por ERCS123
Se eu anular o (//.AND. PRow() <= 59) nao vai dar problema na hora de mudar de pagina?

Acho que achei a solucao, queria saber sua opniao? Eu coloquei o EDICAO dentro do IF (eof()), fiz o teste e deu certo. Pode me explicar o motivo?


do while !EOF()
@ 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()
if cresp1 = "V"
edicao("arqtemp.txt")
endif
set device to screen
close databases
return
endif
* if cresp1 = "V"
* edicao("arqtemp.txt")
* set device to screen
* close databases
* return
* endif
enddo
enddo
(5, 6, 20, 75, restscreen:= tecli)
return

Enviado: 04 Ago 2007 10:59
por ERCS123
Sygecom, como o sistema vai rodar em rede. Será preciso criar esse arquivo .txt na maquina de cada usuario, para nao ter conflito, tem essa necessidade?

O sistema vai rodar no servidor F: ok?

Entao para imprimir p/ arquivo devo fazer assim?

set print to c:\ercs\arqtemp.txt