NET USE x IMPRESSORA DESLIGADA

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Eliane
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 22 Mai 2006 10:17
Localização: Londrina-PR

NET USE x IMPRESSORA DESLIGADA

Mensagem por Eliane »

Tenho um arquivo .bat que carrega com NET USE as impressoras da rede antes de chamar o sistema. Funciona Ok. O problema é que aqui as impressoras não ficam todas ligadas o tempo todo ( e isto não vai mudar ) e muitas vezes ocorre que quando o sistema é carregado as impressoras desligadas não ficam disponíveis com o NET USE. Para ativá-la, temos que ligar a impressora, sair do sistema e entrar novamente. Como poderia resolver isto ?

- Observações: Tenho receio de usar o comando RUN dentro do programa pois todas as vezes que usei acabou dando problemas. Tenho um servidor linux com máquinas em Win98 e outras em XP.

- Outra dúvida: Para cada máquina que tem impressora local tive que criar um .bat para a estação. Isto está funcionando mais tem dado a maior confusão. Tentei criar um .bat único para todas as máquinas, mas encontrei o seguinte erro:

.bat
NET USE \\ESTACAO-1\EPSON-1
NET USE \\ESTACAO-2\EPSON-2
NET USE \\ ESTACAO-3\HP-1
NET USE \\ESTACAO-4\HP-3
...

- Meu programa lê o arquivo .bat da estacao e guarda o caminho numa tabela. Até aqui tudo bem. O problema é:


- Para a ESTACAO-1 a impressora é LOCAL e para a ESTACAO-5 por exemplo, é uma impressora de rede :

- Se estiver na ESTACAO-5 e for imprimir na EPSON-1, o programa faz Ok :
- porta := tabela[impressora escolhida], ex:
- porta := \\ESTACAO-1\EPSON-1
SET PRINTER TO &porta - funciona Ok

- Se estiver na ESTACAO-1 (a impressora é local) dá o erro quando fica : SET PRINTER TO \\ESTACAO-1\EPSON-1 dizendo que é uma impressora local e não de rede. Por isso o .bat único não funcionou !

Existe alguma saída para isto ?
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Mensagem por Mário Isa »

Para resolver isso tenho, em meu sistema, um cadastro de impressoras com campos entre outros:
Terminal usuário---->
Termianl Fornecedor>

Cada terminal tem seu próprio cadastro.
Digamos o terminal 1 tenha ele uma impressora local e umas 2 de rede.
No cadastro da impressora local vê-se:
Terminal usuário----> 1
Terminal Fornecedor> 1
Quando meu sistema "vê" que usuário = fornecedor então ele não executa o net use.........
Digamos a segunda impressora:
Terminal usuário----> 1
Terminal Fornecedor> 2
Neste caso ele (o sistema) "vê" que a impressora está em outra estação e aí executa o net use....
Neste mesmo cadastro (de impressoras) tenho um campo chamado
Porta---->
Quando, no primeiro exemplo, ele é automaticamente preenchido com
"LPT1"
E os demais (que são impressoras de rede) são preenchidos com
LPT2, LPT3 e assim sucessivamente.

Desnecessário dizer, mas aqui vai, que tenho um cadastro de terminais com os seguintes campos (importantes)
Numero-----> 1 (É o numero do terminal)
nome-------> BALCAO (Este é o nome do terminal na rede)

Desta forma consigo relacionar o nome do terminal com um número imaginário dentro do meu programa.
Antigamente era necessário que:
o terminal 1 chamasse TERM1
o terminal 2 TERM2 e assim sucessivamente....

Depois, com o tempo, vi a necessidade de fugir disso, uma vez que meus clientes tinham nomes personalizados em seus terminais.

Terminando:
Quando vou imprimir, apresento uma relação de impressoras ao usuário,
porém se uma impressora da rede não conseguiu conectar o campo PORTA é preenchido com " ".
E no momento de displayar para o usuário as impressoras disponiveis, as que não se conseguiu conectar, não são displayadas.
Faço isso observando o log.txt que produziu pelo comando que dei:
net use lptx: \\computador\impressora /yes > log.txt
if "ERRO" $ upper(memoread("log.txt"))
Tecle("Impressora tal do terminal tal com problemas ou terminal desligado.")
end

Aí, o usuário escolhe uma das displayadas.
Aí faço set printer to &memporta
onde memporta é a variável de memória que contem a porta da impressora displayada:
memporta := printers->porta
Printers é o nome de meu arquivo de cadastro das impressoras.

Espero ter ajudado.
Mário
:)Pos
Eliane
Usuário Nível 2
Usuário Nível 2
Mensagens: 82
Registrado em: 22 Mai 2006 10:17
Localização: Londrina-PR

Mensagem por Eliane »

Mario, agradeço muito a atenção. Vou utilizar suas dicas.

Quanto às portas, recebi uma mensagem neste mesmo fórum, sob o título XP SÓ ENXERGA ATÉ LPT3 muito boa. Nos terminais com XP consegui funcionar só até a LPT3. A idéia que recebi é entrar no Windows e colocar todos os compartilhamentos de impressora com a extensão .PRN, ex: EPSON.PRN. Ao imprimir, colocar SET PRINTER TO EPSON.PRN e ao invés de criar um arquivo, imprime o arquivo. Testei e funcionou. Neste caso não é necessário usar o NET USE nem aplicar uma porta LPT para cada impressora. Funciona muito bem também.
Responder