Mais um dúvida: Imprimir em rede

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

ERCS123
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 28 Jul 2007 19:54
Localização: franca

Mais um dúvida: Imprimir em rede

Mensagem por ERCS123 »

Pra variar, estou com algumas duvidas.....

Abaixo esta um PRG de um relatorio simples de cadastro. Minha duvida é com relacao ao arquivo temporario que eu crio no relatorio. Depois de finalizado o relatorio, esse DBF temporario é apagado. Pergunto: E quando estiver apagando esse arquivo, e um outro usuario estiver usando em outro tipo de relatorio ? porque em todos os relatorios eu crio com o mesmo nome (arqtemp.dbf).

Código: Selecionar todos

tecli:= SaveScreen(5, 6, 20, 75)
 use clientes alias clie shar new
 set index to ind_cod, ind_emp
 set order to 2
 centra(2, "®¯ RELATORIO ORDEM VENDEDOR ®¯")
 nomepro()
 mens("Digite o Codigo a ser Impresso!  |  <ESC> Sai")
 do while (.T.)
   select clie
   private m_cod1:= 0, m_cod2:= 0, pag:= 0
   SetColor("gr+/b", "n/gr+")
   @ 23, 13 say "                                       "
   te0012()
   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
  
*******************
 erase arqtemp.dbf
   copy to arqtemp.dbf for co1 >= m_cod1 .AND. co1 <= m_cod2
   use arqtemp alias temp new
******************
   if (LastRec() == 0)
     mens("Vendedor nao Cadastrado!")
     tone(900, 9)
     InKey(6)
     erase arqtemp.dbf
     close databases
     return
   endif
   confirma("Relatorio","Clientes") 
   cresp:= 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
   impress()
   goto top
   mens("Aguarde IMPRIMINDO Relatorio de Cliente...")
   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 POR REPRESENTANTE  -  De:      a     "
     @ PRow(), 40 say "RELATORIO POR REPRESENTANTE  -  De:      a     "
     @ PRow(), 76 say strzero(m_cod1, 4, 0)
     @ PRow(), 76 say strzero(m_cod1, 4, 0)
     @ PRow(), 83 say strzero(m_cod2, 4, 0)
     @ PRow(), 83 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
       [b]close databases
       erase arqtemp.dbf
       return
     endif
******************* 
  enddo
 enddo
 (5, 6, 20, 75, restscreen:= tecli)
 return
enfosoft
Usuário Nível 1
Usuário Nível 1
Mensagens: 25
Registrado em: 17 Mai 2007 08:15
Localização: Rio Grande do sul

Mensagem por enfosoft »

cara isso funciona se tiver uma maquina apenas com o sistema e nela tiver sistema operacional DOS. Senao, quando voce estiver colocando o teu sistema em uma rede com 40 ou mais terminais, fatalmente vai ter 2 ou mais usuarios emitindo relatorios ao mesmo tempo, nao li o teu codigo, mas uma opcao (para nao fugir a sua forma de programar) seria criar uma funcao que devolva um nome de arquivo que ainda nao existe. Para isso vc pode usar o time(). Desta forma nao vai mudar muito a foram de voce trabalhar.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Re: Mais um dúvida: Imprimir em rede

Mensagem por Pablo César »

ERCS123 escreveu:E quando estiver apagando esse arquivo, e um outro usuario estiver usando em outro tipo de relatorio ? porque em todos os relatorios eu crio com o mesmo nome (arqtemp.dbf).
Eu citei em outro tópico seu, que deverias utilizar a criação de um arquivo de impressão. Tanto este arquivo texto de impressão como o DBF que você utiliza como temporário (se bem que deveria ser avaliado a necessidade disso), aconselho em ambos os casos criá-los na própria estação colocando "C:" ou "C:\TEMP" e o nome do arquivo (DBF e/ou PRN). Deu pra entender ?

Claro que a minha indicação , serviria para os caso de todas as estações terem HDs. Ou ter SUB-diretório para cada estação no servidor.

Mas a idéia do colega da enfosoft, também é válida, criando arquivos com hora+min+seg. Mas mesmo assim ainda há uma margem (mesmo que remota) de coincidirem no exato segundo em mais de uma estação para imprimir o mesmo relatorio.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Boa idéia Leo ! Mas ainda eu fico com a minha indicação (tá bom el super bão... hihihi). Falando sério, nos meus relatório todos eles tem a opção de visualizar em tela e criar o arquivo local é melhor para não causar mais tráfego. Mas agora eu estou sendo um pouco chatinho... tudo sempre vai a gosto de cada um.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

No windows Vista, vai ter que liberar os acesso de gravação em C:\ ....e se usar o sistema no TS vai dar problema, pq todo munda vai esta usando o mesmo C:\TEMP !!!

Flw...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

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

Nesse exmplo de impressão por arquivo TXT...tem um random...
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

sygecom escreveu:No windows Vista, vai ter que liberar os acesso de gravação em C:\ ....
Ahhh claro esses Windows de hoje em dia, são chatinhos (mas não precisa ser no raiz, quando digo C: geralmente eu deveria estar posicionado numa pasta contendo os arquivo de configuração de cada termina (como qual impressora usar, cores, fontes etc). Geralmente gravo pouquissimos arquivo no C: (da pasta que tem o mesmo nome que a pasta do servidor).
sygecom escreveu:e se usar o sistema no TS vai dar problema, pq todo munda vai esta usando o mesmo C:\TEMP !!!
Mas mesmo com TS, não dari para criar pastas identificando para cada estação ? Daí daria certo, não ?.

Obs.: desculpem se estou parecendo chato... é que eu estou me sentindo chato hoje... sem vontade de prgramar... talvez ancioso com novos resultados do WAPI e USBPRINT que ainda o MarcosV não deu sinal...
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Mensagem por Eolo »

Eu uso EXEs separados para cada estação e cada EXE tem uma variável global CIA contendo o "número da estação" (01 a 99). Então é só nomear os arquivos temporários como "TEMP"+strzero(CIA,2,0)+"0".

O "0", no final, é para o caso de uma estação precisar de mais de 1 arquivo temporário. Com esse caracter extra, posso ter até 10 arquivos 100% exclusivos para cada estação, o que é mais do que suficiente pra mim.
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Claor essa me parece o meio mais convincente. Ainda para melhorar a idéia, poderias adotar a extensão do arquivo como ".001", ."002"... o que lhe proporcionaria 100 arquivos temporários (o que é uma barbaridade). O que eu quero dizer, não necessáriamente um DBF, MEM ou arquivo texto tenham que terem as extensões padrão.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Mas mesmo com TS, não dari para criar pastas identificando para cada estação ? Daí daria certo, não ?.
Se criar uma pasta para cada, ai sim daria...mas que confusão iriar dar para somente usar uns temporario....imagina uma empresa com 50 terminal....são 50 pasta temporarias...isso não ficaria legal....
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Não. Leo. não seria pastas temporárias, seria também para atender outros fins. Como eu disse: configuração individual por estação com respeito a impressoras a que pode ser usada naquela estação, as cores do programa, tipo de fontes, (tudo bem, estas ultimas eu as considero perfumaria) mas a questão impressora pode dar bons resultados especialmente quando existe várias impressoras instaladas e por questão administrativa, alguém decide que aquela estação não pode imprimir em tal impressora.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Mensagem por sygecom »

Pablo, usar um sistema pelo TS é como usar tudo em uma unica estação....acho que o colega jah tem bastante opção...é só ele ver o que melhor serve...para a situação dele !!!

Abraços
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Eolo escreveu:Eu uso EXEs separados para cada estação e cada EXE
Eu realmente gostei dessa idéia e faz tempo que venho querendo mudar meu sistema. Mas como eu tinha comentado, no meu caso eu tenho dezenas de executáveis que compõe meu sistema. Aí a coisa complica pro meu lado. Por outro lado quando o Maligno comentou que ele não prefere isso porque daria mais trabalho na manutenção/atualização, já então eu acho que antes de chamar o sistema através de arquivo.BAT, possa ser verificado através de um aplicativo que compare o tamanho e data do executável, criando e executando um outro arquivo .bat gerado para atualizar antes de chamar o sistema. Daí poderia se obter atualização automatizada nas estações. O Maligno, disse que não se obteria muito ganho, mas ainda acho que daria para ser evitado qualquer tráfego desnecessário. A sua experiência nisso Eolo, você considera um ganho significante ?.
Um clip-abraço !

Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

eu tenho dezenas de executáveis
Não seria possível você juntar todos em um só?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Responder