IMPRESSAO EM MATRICIAL FORMULARIO CONTINUO PRINTER

RODRIGOPOTY 30/09/2009 20:18:24
#324123
Amigos, Boa Noite....

Desenvolvi um sistema para emissao de NF e de duplicatas, estou encontrando um serio problema para imprimir as Duplicatas. qdo vou imprimir mais de uma duplicata no fim a impressao da 1º folha a impressora da um salto puxando muito a 2º folha para cima oque acaba desalinhando os campos..
Para impressao estou utilizando o objeto PRINTER
dados;
Impressora= LX300
Formulario folha (mm) 280 x 230 ( comprimento x largura)

Se alguem souber alguma dica eu agradeço....

OBRIGADO !!
PAULOOLIVEIRA 30/09/2009 23:16:17
#324141
companheiro, seu problema eh o tamanho da pagina,
use o print#1 que funfa legal...

close #1
open #1 .......
print # 1,ch().... tamanho da folha
print #1, campos
close #1
RODRIGOPOTY 01/10/2009 16:26:09
#324204
Eu pensei em utilizar o print # 1, porem teria que mudar td projeto....
Mas obrigado pela dica !!

MARCELO.TREZE 01/10/2009 16:43:16
#324209
bom vamos lá qual a cofiuração que vc utilizou como printer

poste o inicio do código
ALVAROVB2009 02/10/2009 12:40:54
#324256
Resposta escolhida
Rodrigo ficaria algo assim
Tem duas formas
Printer.ScaleMode = 4 [ô]Essa linha vale para as duas formas

Forma 1
Printer.CurrentX = 0 [ô]coluna
Printer.CurrentY = 0 [ô]linha
Printer.Print [Ô]Nome=[Ô]

Printer.CurrentX = 7 [ô]coluna
Printer.CurrentY = 0 [ô]linha
Printer.Print [Ô]Nome=[Ô]

Forma 2 (eu custumo usar)
Printer.Print Tab(nº da coluna que será impressa); [Ô]TEXTO A SER IMPRESSO[Ô]


Segue abaixo o valor que pode ser usado no scalemode
vbUser = 0: Indica que uma ou mais das propriedades ScaleHeight, ScaleWidth, ScaleLeft e ScaleTop estão configuradas como valores personalizados.
VbTwips = 1: [ô](Padrão) Twip (1440 twips por polegada lógica; 567 twips por centímetro lógico).
VbPoints = 2: [ô]Ponto (72 pontos por polegada lógica).
VbPixels = 3: [ô]Pixel (menor unidade de resolução de monitor ou impressora).
vbCharacters = 4: [ô]Caractere (horizontal = 120 twips por unidade; vertical = 240 twips por unidade).
VbInches = 5: [ô]Polegada.
VbMillimeters = 6: [ô]Milímetro.
VbCentimeters = 7: [ô]Centímetro.

Aqui é um exemplo de como usar, eu estou imprimindo um relatório de preços
Printer.ScaleMode = 4
Printer.Font = [Ô]Arial[Ô]
Printer.FontBold = True
Printer.FontSize = 35
Printer.Print Tab(5); [Ô]Tabela Geral de Preços[Ô]
contacor = contacor + 3 [ô]Pois o tamanho ocupa 3 linhas
Printer.FontSize = 15
Printer.Print Tab(10); [Ô]Fábrica - [Ô] & Fabrica
contacor = contacor + 2 [ô]Pois o tamanho ocupa 2 linhas
Printer.FontSize = 10
Printer.Print Tab(1); [Ô]CÓDIGO[Ô];
Printer.Print Tab(15); [Ô]PREÇO[Ô];
Printer.Print Tab(35); [Ô]DESCRIÇÃO[Ô]
Printer.FontBold = False
While Not Estoque.EOF
While Fabrica = Estoque!Fabrica
Valor = Estoque!Venda
Valor = Format(Valor, [Ô]###,###,##0.00[Ô])
Printer.Print Tab(1); Estoque([Ô]Codigo[Ô]);
Printer.Print Tab(15); Valor;
Printer.Print Tab(35); Estoque([Ô]Descricao[Ô])
Estoque.MoveNext
If Estoque.EOF Then
Printer.EndDoc
Exit Sub
End If
Contador = Contador + 1
If Contador = 65 Then
Printer.NewPage
Contador = 0
Printer.FontBold = True
Printer.FontSize = 35
Printer.Print Tab(5); [Ô]Tabela Geral de Preços[Ô]
contacor = contacor + 3 [ô]Pois o tamanho ocupa 3 linhas
Printer.FontSize = 15
Printer.Print Tab(10); [Ô]Fábrica - [Ô] & Fabrica
contacor = contacor + 2 [ô]Pois o tamanho ocupa 2 linhas
Printer.FontSize = 10
Printer.Print Tab(1); [Ô]CÓDIGO[Ô];
Printer.Print Tab(15); [Ô]PREÇO[Ô];
Printer.Print Tab(35); [Ô]DESCRIÇÃO[Ô]
Printer.FontBold = False
End If
Wend
Fabrica = Estoque!Fabrica
Printer.FontBold = True
Printer.FontSize = 15
Printer.Print Tab(10); [Ô]Fábrica - [Ô] & Fabrica
contacor = contacor + 2 [ô]Pois o tamanho ocupa 2 linhas
Printer.FontSize = 10
Printer.Print Tab(1); [Ô]CÓDIGO[Ô];
Printer.Print Tab(15); [Ô]PREÇO[Ô];
Printer.Print Tab(35); [Ô]DESCRIÇÃO[Ô]
Printer.FontBold = False
Wend
Printer.EndDoc

RODRIGOPOTY 02/10/2009 20:16:52
#324288
Marcelo,

segue abaixo o codigo

If iDup <> 0 Then
Set TabDup = Abre_Tabela([Ô]Duplicatas[Ô], [Ô]NumFatura=[Ô] & iDup & [Ô][Ô], [Ô]NumFatura[Ô], dbOpenDynaset)
Else
Set TabDup = Abre_Tabela([Ô]Duplicatas[Ô], [Ô]Dt_Emissao >= #[Ô] & Format(Dt_Inicial, [Ô]mm/dd/yyyy[Ô]) & [Ô]# and Dt_Emissao <= #[Ô] & Format(Dt_Final, [Ô]mm/dd/yyyy[Ô]) & [Ô]#[Ô], [Ô]NumFatura[Ô], dbOpenDynaset)
End If

If TabDup.RecordCount = 0 Then
MsgBox [Ô]Ocorreu um erra ao imprimir as duplicatas[Ô], vbCritical, [Ô]Erro[Ô]
Exit Sub
End If

TabDup.MoveLast
TabDup.MoveFirst

[ô] Inico do laço para imprimir tds as duplicatas
Do While Not TabDup.EOF

Set TabTemp = BDTemp.OpenRecordset([Ô]SELECT * FROM TMP_TABELA[Ô], dbOpenDynaset)

[ô] configuração do PRINTER
Printer.FontName = [Ô]MS Sans Serif[Ô]
Printer.FontSize = 10
Printer.PaperSize = vbPRPSUser
Printer.Orientation = vbPRORPortrait
Printer.ScaleMode = vbMillimeters
Printer.Height = 15000 [ô] comprimento
Printer.Width = 15000 [ô]largura

nLinha = 0

Set TabTemp = BDTemp.OpenRecordset([Ô]SELECT * FROM TMP_TABELA[Ô], dbOpenDynaset)

If TabTemp.RecordCount <> 0 Then
TabTemp.MoveLast
TabTemp.MoveFirst
Do While Not TabTemp.EOF
nLinha = nLinha + 8
Set TabProd = Abre_Tabela([Ô]Cad_Produtos[Ô], [Ô]Codigo=[Ô] & TabTemp!Cod_Prod & [Ô][Ô], [Ô]Codigo[Ô], dbOpenDynaset)
TabProd.MoveFirst

Escrever nLinha, 6, TabTemp!NOTA_FISCAL
Escrever nLinha, 80, TabProd!Descricao
Escrever nLinha, 140, TabTemp!QTD
Escrever nLinha, 160, Format(TabTemp!Valor_Unit, [Ô]###,##0.00[Ô])
Escrever nLinha, 185, Format(TabTemp!Valor_Total, [Ô]###,##0.00[Ô])

TabProd.Close
TabTemp.MoveNext
Loop
End If
TabTemp.Close

Escrever 165, 135, Format$(TabDup!dt_Emissao, [Ô]dd \d\e mmmm \d\e yyyy[Ô])
Escrever 183, 50, TabDup!NumFatura
Escrever 183, 85, Format(TabDup!Valor_Total, [Ô]###,##0.00[Ô])
Escrever 183, 115, TabDup!NumFatura
Escrever 183, 145, Format(TabDup!dt_Vencimento, [Ô]dd/mm/yyyy[Ô])

Set TabClie = Abre_Tabela([Ô]Cad_Clientes[Ô], [Ô]Codigo=[Ô] & TabDup!CodCliente & [Ô][Ô], [Ô]Razao_Social[Ô], dbOpenDynaset)

Escrever 204, 70, TabClie!Razao_Social
Escrever 210, 70, TabClie!Endereco
Escrever 210, 135, TabClie!Bairro
Escrever 210, 175, TabClie!Cep
Escrever 216, 70, TabClie!Cidade
Escrever 216, 190, TabClie!UF
Escrever 222, 70, TabClie!Endereco_Cob
Escrever 222, 135, TabClie!Cep_Cob
Escrever 222, 145, TabClie!Cidade_Cob
Escrever 228, 70, TabClie!CNPJ
Escrever 228, 170, TabClie!Insc_Est
Escrever 235, 70, Extenso(Format(TabDup!Valor_Total, [Ô]###,##0.00[Ô]))

Printer.EndDoc

DoEvents

TabNF.Close
TabClie.Close

TabDup.MoveNext
Loop
TabDup.Close

[ô] ESCREVER é uma funçaO que eu criei para passar a posições de a linha e a coluna que sera impresso o texto ....


Alvaro,
Obrigado pela dica mais nao funcionou ........
ALVAROVB2009 05/10/2009 13:42:45
#324457
RODRIGOPOTY no seu código eu não vi o comando printer.new page.
Esse comando ele puxa uma novafolha para a impressão, posicionando o carro da impressora, na primeira linha e coluna da página
No meu exemplo, o trecho:

Contador = Contador + 1
If Contador = 65 Then
Printer.NewPage
Contador = 0
Printer.FontBold = True
Printer.FontSize = 35
Printer.Print Tab(5); [Ô]Tabela Geral de Preços[Ô]
contacor = contacor + 3 [ô]Pois o tamanho ocupa 3 linhas
Printer.FontSize = 15
Printer.Print Tab(10); [Ô]Fábrica - [Ô] & Fabrica
contacor = contacor + 2 [ô]Pois o tamanho ocupa 2 linhas
Printer.FontSize = 10
Printer.Print Tab(1); [Ô]CÓDIGO[Ô];
Printer.Print Tab(15); [Ô]PREÇO[Ô];
Printer.Print Tab(35); [Ô]DESCRIÇÃO[Ô]
Printer.FontBold = False
End If

Eu verifico se chegou na linha 85, queria o limite da minha página e peço para ele iniciar uma nova página, zero o contador e coloco o cabeçalho, depois disso ele imprimir novamente, e nesse caso o meu cliente tem um formulário contínuo.
Outra coisa que vi de diferente foi a escala que vc está usando, milimetros, porque no mais está tudo igual ao meu comando, da uma olhadinha e coloca esse contador e provavelmente irá funcionar.

Tenta ai e depois posta para a gente
Abraço
RODRIGOPOTY 05/10/2009 20:13:44
#324510
Obrigado a tds em especial ao ALVAROVB2009 pela força...

Consegui resolver eu problema... nao precisei mexer no codigo,
solução:
Mudar a propriedade do tipo de folha default na configuração da impressora estava A4 coloquei carta... Ficou perfeito...

Obrigado !!!!
Tópico encerrado , respostas não são mais permitidas