DEFININDO O NOME DA IMPRESSORA ARMAZENADA NO BD

WEBIER 15/11/2010 17:10:40
#357506
uso o VB6, Visual Reportx e bd Access

tenho uma tabela chamada CONFIGURACOES
nela possuo o seguintes campos: IMP1_MAQ_AV e o campo IMP1_COMPART_AV

sendo que:
no campo IMP1_MAQ_AV é armazenado o nome da maquina na rede onde fica a impressora. exemplo: BALCAO01, BALCAO02, CAIXA...
no campo IMP1_COMPART_AV é armazenado o nome do compartilhamento da impressora na rede. exemplo: IMPRESSORA01, IMPRESSORA01, MATRICIAL01...

Pois bem:
Armazenei no campo IMP1_MAQ_AV a string BALCAO01 e no campo IMP1_COMPART_AV a string IMPRESSORA01.

O Visual Reportx possui uma propriedade chamada NOMEDAIMPRESSORA, onde eu defino o nome da impressora que sempre será impresso aquele relatorio.

então se eu colocar lá assim: NOMEDAIMPRESSORA = [txt-color=#e80000]IMPRESSORA01[/txt-color], toda vez q mandar imprimir, poderá ter 10 impressoras instalada na maquina e ele sempre vai imprimir na que possui o nome IMPRESSORA01

se eu coloca NOMEDAIMPRESSORA = [txt-color=#e80000]\\BALCAO01\IMPRESSORA01[/txt-color], toda vez ele vai imprimir na impressora de rede que possuir esse compartilhamento.

até ai tudo bem.

entao crei aqueles campos: IMP1_MAQ_AV e o campo IMP1_COMPART_AV para eu poder mudar assim que eu quizer a impressora que vai ser usada, sem ter q mudar o código.

vou colocar somente a parte que se refere ao que falei, pois esse relatorio é bem grande e exibe muitas coisas, entao vou colocar só a parte final onde tá o q mudei:

Relatorio.NumeroRegistros = Round((rsItens.RecordCount / 26) + 0.49)

[ô]Configurar a impressora para impressão do pedido
Call ABRIR_BD_SEM_DATA1
SQL_Conf = [Ô]SELECT * FROM CONFIGURACAO WHERE (CODIGO = 1)[Ô]
Set RS_Conf = BD.OpenRecordset(SQL_Conf)

Dim var_Maq As String
Dim var_Comp As String

If Not IsNull(RS_Conf!IMP1_MAQ_AV) Then var_Maq = RS_Conf!IMP1_MAQ_AV
If Not IsNull(RS_Conf!IMP1_COMPART_AV) Then var_Comp = RS_Conf!IMP1_COMPART_AV

Relatorio.NomeImpressora = [Ô]\\[Ô] & var_Maq & [Ô]\[Ô] & var_Comp

Relatorio.Ativar
End Sub


quando debugo e coloco emcima aparece o nome completo do endereço da impressora, assim \\BALCAO01\IMPRESSORA01

mais ele pega a impressora padrão do computador local, ou seja, ele não ler a linha onde diz q o nome da impresso é aquele...

ai para testar mais ainda, mudei assim:
Relatorio.NomeImpressora = var_Comp


debuguei, coloquei o mouse emcima, apareceu: IMPRESSORA01 e mesmo assim continua pegando a impressora padrão da maquina local.

eu eu for na propriedade NOMEDAIMPRESSORA e deixar fixo [Ô]IMPRESSORA01[Ô] ou [Ô]\\BALCAO01\IMPRESSORA01[Ô] ele funciona uma maravilha, agora na questão de pegar o nome da impressora armazenado no bd ele sempre pega a q estiver padrão.

então o que estou fazendo de errado?



RICARDO.RAPA 15/11/2010 17:16:28
#357507
Cara, você está fazendo muita coisa para pouca coisa que deve ser feito. Não sei se eu entendi bem, mais não é só você definir a impressora como padrão para resolver isso tudo. aqui no VBMANIA, tem vários exemplos de como mudar uma impressora para padrão.
WEBIER 15/11/2010 17:27:02
#357509
na verdade nao... é bem mais complexo que vc imagina:

para ver ter ideias, são 3 tipos diferentes do mesmo relatorio e varias impressoras instaladas.... para cada aplicação: compra a vista, compra a prazo é uma impressora diferente...

exemplo:
se eu finalizar o pedido e for avista ele vai para uma impressora
se eu finalizar o pedido e for aprazo ele vai para outra impressora
se eu finalizar o pedido e quizer detalhado, vai para outra impressora

sem contar q a impressora pode ser local ou em rede...

por isso, se eu deixar somente para 1 impressora padrão não vai dar certo
RICARDO.RAPA 15/11/2010 17:40:24
#357511
E se você abrir um formulário antes de enviar a impressão listando todas a impressoras instaladas na maquina para definir qual vai ser padrão e imprimir? Não daria certo?

Vou te mandar uma tela de um sistema meu:

Escolho a impressora clicando duas vezes sobre o nome, na qual se torma padrão e mando imprimir para a que eu quiser.
WEBIER 15/11/2010 17:54:15
#357512
o problema é q queria algo automatico, sem interação do usuario.

tenho cliente que:
Imprime avista numa impressora termica nao fiscal e a venda a prazo numa hp deskjet

já outro:
imprime tanto avista como a prazo numa hp deskjet

já outro:
imprime tanto avista como a prazo numa termina nao fiscal

e ambos possui terminais em rede q imprime via rede

entao criei esse formulario para configurar cada cliente para ficar automatico, sendo assim, nao precisarei ter q ficar alterando código e nem dependendo de cliente para escolher a impressora correta.

mande imagem da tela de configuração
RICARDO.RAPA 15/11/2010 18:17:24
#357514
Estou vendo ai. Já que começou assim tem que terminar assim.rs
WEBIER 15/11/2010 18:24:55
#357517
entao, era como to falando... para venda avista tem q definir 3 impressoras e aprazo tb... sendo que não posso deixar o usuario escolher, até mesmo, 2 deles são lugares q precisam de atendimento rapido... ai se tiver q escolher a impressora, o cliente vai chiar....

Alguem sabe como resolver isso?
WEBIER 16/11/2010 10:28:12
#357566
alguem ?
MARCIO.TEIXEIRA 16/11/2010 18:50:13
#357601
Resposta escolhida
Já que o seu programa sempre imprime na impressora padrão tente mudar a impressora padrão via código:

Dim X As Printer

For Each X In Printers
[ô]Feito com [Ô]InStr[Ô], pois no Win2000 o [Ô]DeviceName[Ô] vem com o path i.e. [Ô]\\SrvPfs\Epson Fx-1170[Ô] e nao [Ô]Epson Fx-1170[Ô]
If InStr(UCase(X.DeviceName), UCase(nomedaimpressora)) > 0 Then
Set SetarImpressora = X
Set Printer = X
Exit For
End If

depois disso você efetua a sua impressão
Next
Tópico encerrado , respostas não são mais permitidas