ALTERAR FORMATO DE FONTES IMPRIMINDO [Ô]DIRETO[Ô]
Boa noite!
Achei num topico, que compartilhando uma impressora não fiscal, ligada na USB, da para usar como se fosse pela LPT1, até ai, beleza, funciona mesmo.
Mas os comandos que passamos para LPT1 não funcionam, por exemplo, condensar, negrito, 8 linhas por polegada, etc, etc, etc.
A marca é uma tal de BIXOLON (nunca tinha visto esse [Ô]bixo[Ô]), não achei nenhum dll para ajudar também.
Como resolver este problema?
Ja tentei o método PRINT , usando os CHR[ô]s, mas não funcionam.
Também tentei o o PRINTER , mas no access, também não funciona.
Vejam o método printer:
Att
Luciano
Win7 + Access2003
Achei num topico, que compartilhando uma impressora não fiscal, ligada na USB, da para usar como se fosse pela LPT1, até ai, beleza, funciona mesmo.
Mas os comandos que passamos para LPT1 não funcionam, por exemplo, condensar, negrito, 8 linhas por polegada, etc, etc, etc.
A marca é uma tal de BIXOLON (nunca tinha visto esse [Ô]bixo[Ô]), não achei nenhum dll para ajudar também.
Como resolver este problema?
Ja tentei o método PRINT , usando os CHR[ô]s, mas não funcionam.
Também tentei o o PRINTER , mas no access, também não funciona.
Vejam o método printer:
Function EmiteTicket_printer(idvenda)
Close #1
Set tblparam = CurrentDb.OpenRecordset([Ô]tbl_outros_parametros[Ô])
Open tblparam!caminho_impressora For Output As #1
[ô]///
If IsNull(idvenda) = False Then
Set tbl1 = CurrentDb.OpenRecordset([Ô]SELECT tbl_lanc_venda_dadosinicia.id_venda, tbl_lanc_venda_dadosinicia.data, tbl_cad_cliente.cod_cliente, tbl_cad_cliente.nome_cliente, tbl_lanc_venda_dadosinicia.cod_formapgto, tbl_lanc_venda_dadosinicia.nfp [Ô] & _
[Ô]FROM tbl_cad_cliente INNER JOIN tbl_lanc_venda_dadosinicia ON tbl_cad_cliente.cod_cliente = tbl_lanc_venda_dadosinicia.cod_cliente [Ô] & _
[Ô]WHERE (((tbl_lanc_venda_dadosinicia.id_venda)=[Ô] & idvenda & [Ô]));[Ô])
If tbl1.EOF = False Then
Set tbl2 = CurrentDb.OpenRecordset([Ô]tbl_cad_empresa[Ô])
Printer.CurrentY = 180
Printer.Print String(42, [Ô]-[Ô])
i = Len(tbl2!NomeFantasia)
i = Int((42 - i) / 2)
Printer.FontName = [Ô]arial[Ô]
Printer.FontSize = 8
Printer.FontBold = True
Printer.Print String(i, [Ô] [Ô]); Left(tbl2!NomeFantasia, 42)
Printer.FontSize = 7
Printer.FontBold = False
i = Len(tbl2!EndRua & [Ô], [Ô] & tbl2!EndNum)
i = Int((42 - i) / 2)
Printer.Print String(i, [Ô] [Ô]); tbl2!EndRua & [Ô], [Ô] & tbl2!EndNum
i = Len(tbl2!EndCidade & [Ô]/[Ô] & tbl2!Cod_UF)
i = Int((42 - i) / 2)
Printer.Print String(i, [Ô] [Ô]); tbl2!EndCidade & [Ô]/[Ô] & tbl2!Cod_UF
i = Len([Ô]CNPJ: [Ô] & tbl2!cpfcnpj & [Ô] - [Ô] & [Ô]IE: [Ô] & tbl2!InscEstadual)
i = Int((42 - i) / 2)
Printer.Print String(i, [Ô] [Ô]); [Ô]CNPJ: [Ô] & tbl2!cpfcnpj & [Ô] - [Ô] & [Ô]IE: [Ô] & tbl2!InscEstadual
i = Len([Ô]FONE : [Ô] & tbl2!Fone)
i = Int((42 - i) / 2)
Printer.Print String(i, [Ô] [Ô]); [Ô]FONE : [Ô] & tbl2!Fone
Printer.Print String(42, [Ô]-[Ô])
i = Len([Ô]RECIBO SEM VALOR FISCAL[Ô])
i = Int((42 - i) / 2)
Printer.Print String(i, [Ô] [Ô]); [Ô]RECIBO SEM VALOR FISCAL[Ô]
Printer.FontSize = 6
Printer.Print String(42, [Ô]-[Ô])
Printer.Print [Ô]ORCAMENTO No.: [Ô] & Format(tbl1!id_venda, [Ô]0000[Ô]) & [Ô] [Ô] & Format(tbl1!data, [Ô]general Date[Ô])
Printer.Print [Ô]CLIENTE......: [Ô] & Format(tbl1!cod_cliente, [Ô]0000[Ô]) & [Ô]-[Ô] & Left(tbl1!nome_cliente, 35)
Set tbl = CurrentDb.OpenRecordset([Ô]SELECT tbl_lanc_venda_produtos.id_venda, Format([num_item],[ô]000[ô]) AS v_num_item, tbl_cad_produto.codbarra_prod, Left([desc_prod],42) AS v_desc_prod, tbl_cad_unidade.abrev_unid, tbl_lanc_venda_produtos.qtde, tbl_lanc_venda_produtos.vrunit, tbl_lanc_venda_produtos.vrtotal [Ô] & _
[Ô]FROM tbl_cad_unidade INNER JOIN (tbl_cad_produto INNER JOIN tbl_lanc_venda_produtos ON tbl_cad_produto.cod_prod = tbl_lanc_venda_produtos.cod_prod) ON tbl_cad_unidade.cod_unid = tbl_cad_produto.cod_unid [Ô] & _
[Ô]WHERE (((tbl_lanc_venda_produtos.id_venda) = [Ô] & idvenda & [Ô])) [Ô] & _
[Ô]ORDER BY Format([num_item],[ô]000[ô]);[Ô])
If tbl.EOF = False Then
tbl.MoveLast
tbl.MoveFirst
qtde = tbl.RecordCount
Printer.Print String(42, [Ô]-[Ô])
Printer.Print Tab(13); [Ô]P R O D U T O S[Ô]
Printer.Print String(42, [Ô]-[Ô])
Printer.Print [Ô]ITEM CODIGO[Ô]
Printer.Print [Ô]DESRICAO[Ô]
Printer.Print [Ô]QTDE VR UNIT VR TOTAL[Ô]
Printer.Print String(42, [Ô]-[Ô])
[ô]///
For i = 1 To qtde
Printer.Print tbl!v_num_item; Tab(10); tbl!codbarra_prod; Tab(40); tbl!abrev_unid
Printer.Print tbl!v_desc_prod
Printer.Print Format(tbl!qtde, [Ô]##,##0.000[Ô]); Tab(15); Format(Format(tbl!vrunit, [Ô]R$ ##,##0.00[Ô]), [Ô]@@@@@@@@@@@@[Ô]); Tab(30); Format(Format(tbl!vrtotal, [Ô]R$ ##,##0.00[Ô]), [Ô]@@@@@@@@@@@@[Ô])
tbl.MoveNext
Next i
Printer.Print String(42, [Ô]-[Ô])
Printer.Print [Ô]TOTAL........: [Ô]; Tab(30); Format(Format(DSum([Ô]vrtotal[Ô], [Ô]tbl_lanc_venda_produtos[Ô], [Ô]id_venda=[Ô] & idvenda & [Ô][Ô]), [Ô]R$ ##,##0.00[Ô]), [Ô]@@@@@@@@@@@@[Ô])
Printer.Print String(42, [Ô]-[Ô])
Printer.Print Format(qtde, [Ô]000[Ô]) & [Ô] ITEM(NS)[Ô]
Printer.Print IIf(tbl1!nfp = 1, [Ô]NFP[Ô], [Ô][Ô])
Printer.Print IIf(IsNull(tbl1!cod_formapgto) = 1, [Ô]FINALIZADA[Ô], [Ô]NAO FINALIZADA[Ô])
tbl.Close
Set tbl = Nothing
CurrentDb.Close
End If
Printer.Print IIf(IsNull(tblparam!msg_ticket) = False, tblparam!msg_ticket, [Ô][Ô])
Set tbl = CurrentDb.OpenRecordset([Ô]tbl_sys_Config[Ô])
Printer.Print String(42, [Ô]-[Ô])
Printer.Print [Ô]******< ORCAMENTO SEM VALOR FISCAL >******[Ô]
Printer.Print String(42, [Ô]-[Ô])
tbl.Close
Set tbl = Nothing
For i = 1 To tblparam!linhas_fim_ticket
Printer.Print [Ô][Ô]
Next i
Printer.Print String(42, [Ô]-[Ô])
Printer.Print tbl!Programador
Printer.Print tbl!email_programador
Close #1
tbl2.Close
Set tbl2 = Nothing
End If
tbl1.Close
tblparam.Close
CurrentDb.Close
Set tblparam = Nothing
Set tbl1 = Nothing
qtde = 0
End If
End Function
Att
Luciano
Win7 + Access2003
Companheiro..
Instala o driver da impressora na maquina;
Nas propriedades da impressora, tem uma aba de [Ô]estoque[Ô], onde vc. pode configurar a etiqueta do tamanho que vc. precisa, use-o;
Compartilha na rede , e manda direto pelo windows...
Eu ja uso com o crystal reports, dai vai tranquilo..
flw
t+
Instala o driver da impressora na maquina;
Nas propriedades da impressora, tem uma aba de [Ô]estoque[Ô], onde vc. pode configurar a etiqueta do tamanho que vc. precisa, use-o;
Compartilha na rede , e manda direto pelo windows...
Eu ja uso com o crystal reports, dai vai tranquilo..
flw
t+
Não vi em seu código o envio dos caracteres de controle.
Vi, por outro lado, que você está usando ao mesmo tempo dois métodos diferentes para [Ô]escrever[Ô] na impressora.
Quando você [Ô]abre[Ô] o [Ô]arquivo[Ô] tblparam!caminho_impressora, você está lançando dados diretamente no buffer da impressora, e nesse método, terá de usar o ponteiro do arquivo como ponteiro do dispositivo de saÃda (Print#1, que aliás não vi em seu código). O conjunto será impresso quando do fechamento da conexão com o dispositivo, no caso, Close#1. Não vou me ater nesse método, pois apesar de ser bastante efetivo, requer mais cuidado e atenção do desenvolvedor. Razões para isso?
- Como se está [Ô]abrindo um arquivo[Ô], ainda que ocorra algum problema com a aplicação, o desenvolvedor deve cuidar para que, de alguma forma, esse ponteiro de arquivo seja adequadamente encerrado. No seu caso, creio que deve ter passado por esse problema, pois você [Ô]encerra[Ô] o ponteiro de arquivo logo no inÃcio da rotina, mesmo sem saber se ele está aberto, o que indica que [Ô]apanhou[Ô] um pouco nesse método;
- Em várias ocasiões, presenciei o desenvolvedor apontar erroneamente a porta de acesso da impressora na abertura do arquivo, ou esquecendo os dois pontos ([Ô]:[Ô]) ou algo do gênero, e gerar arquivos fÃsicos nomeados desse modo, fato que, em redes Win 2000 / Win 2003, requerem a reinicialização do servidor e acesso em modo de correção de sistema, só para serem excluÃdos.
Por esses motivos, novamente confirmando que o método é ótimo e bem efetivo, mas prefiro me abster do acesso direto á impressora.
O segundo método é quando você passa á usar o objeto Printer (impressora padrão na estação do cliente). Esse segundo método [Ô]escreve[Ô] no spool de impressão do Windows, de forma que para enviar o conjunto final á impressora, você tem de enviar o comando de encerramento, com o método Printer.EndDoc. Como ele não [Ô]escreve[Ô] diretamente no buffer da impressora, mas sim no spool de impressão do Windows, nem sempre os códigos de escape da impressora são necessários com este método. Veja, eu disse nem sempre, mas eventualmente, são.
Vamos olhar o método que utiliza o objeto Printer.
O primeiro passo, é preciso selecionar a impressora á ser utilizada. Como você não sabe o nome da impressota, mas conhece algo melhor, o caminho de rede, vamos usar essa informação para a seleção.
Agora que a impressora está selecionada (ainda assim, confirme executando via F8), vamos [Ô]escrever[Ô] algo nela.
Repare acima que o documento só é enviado para o spool de impressão quando o método EndDoc é acionado. Até esse momento, nada é impresso.
Ocorre que, como dito antes, nem todas as impressoras aceitam diretamente as instruções para a troca de fontes (famÃlia, formato, tamanho, cores), e requerem comandos especÃficos, como no seu caso, onde se utiliza a tabela de comandos de escape da impressora e/ou, ás vezes, até mesmo apenas as fontes nativas da mesma. Assim, para um [Ô]negrito[Ô] do texto, ainda que, pelo que eu lembro, usando o FontBold funcionou direitinho conosco, você usaria a seqüência de escape, que no seu caso é CHR(27) + CHR(69) + CHR(1), se não me engano. Aliás, tenho aqui ainda um arquivo com alguns desses códigos (usados há alguns anos no TECONDI - Terminal de contêneres aqui de Santos), vou transcrever o que tenho em mãos.
[th]
Essa impressora, BIXOLON, possui diversos modelos, sendo que alguns comandos diferem um pouco entre eles. Como não tenho em mãos todos eles, não sou de grande ajuda nesse sentido. Para obter a tabela de comandos de escape, você deve contatar o fornecedor ou o fabricante (SAMSUNG) e solicitar o manual.
Espero que ajude
Vi, por outro lado, que você está usando ao mesmo tempo dois métodos diferentes para [Ô]escrever[Ô] na impressora.
Quando você [Ô]abre[Ô] o [Ô]arquivo[Ô] tblparam!caminho_impressora, você está lançando dados diretamente no buffer da impressora, e nesse método, terá de usar o ponteiro do arquivo como ponteiro do dispositivo de saÃda (Print#1, que aliás não vi em seu código). O conjunto será impresso quando do fechamento da conexão com o dispositivo, no caso, Close#1. Não vou me ater nesse método, pois apesar de ser bastante efetivo, requer mais cuidado e atenção do desenvolvedor. Razões para isso?
- Como se está [Ô]abrindo um arquivo[Ô], ainda que ocorra algum problema com a aplicação, o desenvolvedor deve cuidar para que, de alguma forma, esse ponteiro de arquivo seja adequadamente encerrado. No seu caso, creio que deve ter passado por esse problema, pois você [Ô]encerra[Ô] o ponteiro de arquivo logo no inÃcio da rotina, mesmo sem saber se ele está aberto, o que indica que [Ô]apanhou[Ô] um pouco nesse método;
- Em várias ocasiões, presenciei o desenvolvedor apontar erroneamente a porta de acesso da impressora na abertura do arquivo, ou esquecendo os dois pontos ([Ô]:[Ô]) ou algo do gênero, e gerar arquivos fÃsicos nomeados desse modo, fato que, em redes Win 2000 / Win 2003, requerem a reinicialização do servidor e acesso em modo de correção de sistema, só para serem excluÃdos.
Por esses motivos, novamente confirmando que o método é ótimo e bem efetivo, mas prefiro me abster do acesso direto á impressora.
O segundo método é quando você passa á usar o objeto Printer (impressora padrão na estação do cliente). Esse segundo método [Ô]escreve[Ô] no spool de impressão do Windows, de forma que para enviar o conjunto final á impressora, você tem de enviar o comando de encerramento, com o método Printer.EndDoc. Como ele não [Ô]escreve[Ô] diretamente no buffer da impressora, mas sim no spool de impressão do Windows, nem sempre os códigos de escape da impressora são necessários com este método. Veja, eu disse nem sempre, mas eventualmente, são.
Vamos olhar o método que utiliza o objeto Printer.
O primeiro passo, é preciso selecionar a impressora á ser utilizada. Como você não sabe o nome da impressota, mas conhece algo melhor, o caminho de rede, vamos usar essa informação para a seleção.
[ô]...
Dim porta As String
Dim impressora As Printer
porta = tblparam!caminho_impressora
For Each impressora In Printers
If impressora.Port = porta Then Set Printer = impressora : Exit For
Next
[ô]...
Agora que a impressora está selecionada (ainda assim, confirme executando via F8), vamos [Ô]escrever[Ô] algo nela.
[ô]...
Printer.FontName = [Ô]Times New Roman[Ô]
Printer.FontSize = 10
Printer.FontBold = True
Printer.Print Spc(4); String(15, [Ô]-[Ô]); Spc(4); String(11, [Ô]-[Ô]);
Printer.Print Spc(4); [Ô]Produto [Ô]; Spc(4); [Ô]Preço [Ô]
Printer.Print Spc(4); String(15, [Ô]-[Ô]); Spc(4); String(11, [Ô]-[Ô]);
Printer.FontBold = False
[ô]...
While Not tbl1.EOF = True
[ô]...
[ô]Wend
[ô]...
Printer.EndDoc
[ô]...
Repare acima que o documento só é enviado para o spool de impressão quando o método EndDoc é acionado. Até esse momento, nada é impresso.
Ocorre que, como dito antes, nem todas as impressoras aceitam diretamente as instruções para a troca de fontes (famÃlia, formato, tamanho, cores), e requerem comandos especÃficos, como no seu caso, onde se utiliza a tabela de comandos de escape da impressora e/ou, ás vezes, até mesmo apenas as fontes nativas da mesma. Assim, para um [Ô]negrito[Ô] do texto, ainda que, pelo que eu lembro, usando o FontBold funcionou direitinho conosco, você usaria a seqüência de escape, que no seu caso é CHR(27) + CHR(69) + CHR(1), se não me engano. Aliás, tenho aqui ainda um arquivo com alguns desses códigos (usados há alguns anos no TECONDI - Terminal de contêneres aqui de Santos), vou transcrever o que tenho em mãos.
Códigos ESC/P | [/th]|
Negrito: | CHR(27) + CHR(69) + CHR(1) |
Cancelar Negrito: | CHR(27) + CHR(69) + CHR(0) |
Modo Gráfico: | CHR(28) + CHR(112) + CHR(1) + CHR(0) |
Abrir Caixa | CHR(27) + CHR(112) + CHR(0) + CHR(64) |
Inicializar | CHR(27) + [Ô]@[Ô] |
Cortar Papel | CHR(27) + CHR(109) |
Tipo de Letra Inicial | CHR(27) + CHR(33) + CHR(1) |
Essa impressora, BIXOLON, possui diversos modelos, sendo que alguns comandos diferem um pouco entre eles. Como não tenho em mãos todos eles, não sou de grande ajuda nesse sentido. Para obter a tabela de comandos de escape, você deve contatar o fornecedor ou o fabricante (SAMSUNG) e solicitar o manual.
Espero que ajude
Boa tarde Caros!
O meu maior problema é que a impressora está ligada na USB e não aceita os caracteres do PRINT, qdo está ligada na LPT1, é normal.
Tentei o DOSPRINT, mas o pc é com Win7 e não funcionou.
A impressora é uma tal de BIXOLON a marca da impressora.
Uso o MS Access 2003.
Att
Luciano
O meu maior problema é que a impressora está ligada na USB e não aceita os caracteres do PRINT, qdo está ligada na LPT1, é normal.
Tentei o DOSPRINT, mas o pc é com Win7 e não funcionou.
A impressora é uma tal de BIXOLON a marca da impressora.
Uso o MS Access 2003.
Att
Luciano
Boa noite Professor!
Desculpe, mas estava no meu serviço e não pude ler todo seu comentario.
Veja em anexo a tabela de códigos que consegui no CD da impressora.
Segue o código do PRINT que estou usando, logo abaixo.
Nunca usei comandos ESC no MS Access, poderia me dar uma força?
Att
Luciano
MS Access 2003
Desculpe, mas estava no meu serviço e não pude ler todo seu comentario.
Veja em anexo a tabela de códigos que consegui no CD da impressora.
Segue o código do PRINT que estou usando, logo abaixo.
Function EmiteTicketLPT1(idvenda)
[ô]/////////////////////////////////////////////////////////////////////////////////////////////////
[ô]/// chr(27)& chr(15) - CONDENSADO -> chr(8) - DESATIVA
[ô]/// chr(27)& chr(14) - EXPANDIRO -> chr(20)
[ô]/// chr(27)& chr(69) - NEGRITO -> chr(27)& chr(70)
[ô]/// chr(27)& chr(52) - ITALICO -> chr(27)& chr(53)
[ô]/// chr(10)& chr(13) - Avanço de linha e retorno de carro -> NAO DESATIVA
[ô]/// chr(12) - Avanço de página - NAO DESATIVA
[ô]/// Print #1, Chr(27) & [Ô]0[Ô] [ô] Muda o passo p/ 8 LPP
[ô]/// Print #1, Chr(15) [ô] Condensado
[ô]/// Print #1, Chr(27) & [Ô]E[Ô] [ô] Negrito
[ô]/// Print #1, [Ô][Ô] [ô] Salta uma linha
[ô]/////////////////////////////////////////////////////////////////////////////////////////////////
Set tblparam = CurrentDb.OpenRecordset([Ô]tbl_outros_parametros[Ô])
Open tblparam!caminho_impressora For Output As #1
[ô]///
If IsNull(idvenda) = False Then
Set tbl1 = CurrentDb.OpenRecordset([Ô]SELECT tbl_lanc_venda_dadosinicia.id_venda, tbl_lanc_venda_dadosinicia.data, tbl_cad_cliente.cod_cliente, tbl_cad_cliente.nome_cliente, tbl_lanc_venda_dadosinicia.cod_formapgto, tbl_lanc_venda_dadosinicia.nfp, tbl_lanc_venda_dadosinicia.cpf [Ô] & _
[Ô]FROM tbl_cad_cliente INNER JOIN tbl_lanc_venda_dadosinicia ON tbl_cad_cliente.cod_cliente = tbl_lanc_venda_dadosinicia.cod_cliente [Ô] & _
[Ô]WHERE (((tbl_lanc_venda_dadosinicia.id_venda)=[Ô] & idvenda & [Ô]));[Ô])
If tbl1.EOF = False Then
Set tbl2 = CurrentDb.OpenRecordset([Ô]tbl_cad_empresa[Ô])
Print #1, String(42, [Ô]-[Ô])
i = Len(tbl2!NomeFantasia)
i = Int((42 - i) / 2)
Print #1, Chr(27) & Chr(15); Chr(27) & Chr(69); String(i, [Ô] [Ô]); Left(tbl2!NomeFantasia, 42); Chr(27) & Chr(70)
i = Len(tbl2!EndRua & [Ô], [Ô] & tbl2!EndNum)
i = Int((42 - i) / 2)
Print #1, Chr(27) & [Ô]0[Ô]; String(i, [Ô] [Ô]); tbl2!EndRua & [Ô], [Ô] & tbl2!EndNum
i = Len(tbl2!EndCidade & [Ô]/[Ô] & tbl2!Cod_UF)
i = Int((42 - i) / 2)
Print #1, String(i, [Ô] [Ô]); tbl2!EndCidade & [Ô]/[Ô] & tbl2!Cod_UF
i = Len([Ô]CNPJ: [Ô] & tbl2!cpfcnpj & [Ô] - [Ô] & [Ô]IE: [Ô] & tbl2!InscEstadual)
i = Int((42 - i) / 2)
Print #1, String(i, [Ô] [Ô]); [Ô]CNPJ: [Ô] & tbl2!cpfcnpj & [Ô] - [Ô] & [Ô]IE: [Ô] & tbl2!InscEstadual
i = Len([Ô]FONE : [Ô] & tbl2!Fone)
i = Int((42 - i) / 2)
Print #1, String(i, [Ô] [Ô]); [Ô]FONE : [Ô] & tbl2!Fone
Print #1, String(42, [Ô]-[Ô])
i = Len([Ô]RECIBO SEM VALOR FISCAL[Ô])
i = Int((42 - i) / 2)
Print #1, String(i, [Ô] [Ô]); [Ô]RECIBO SEM VALOR FISCAL[Ô]
Print #1, String(42, [Ô]-[Ô])
Print #1, [Ô]ORCAMENTO No.: [Ô] & Format(tbl1!id_venda, [Ô]0000[Ô]) & [Ô] [Ô] & Format(tbl1!data, [Ô]general Date[Ô])
Print #1, [Ô]CLIENTE......: [Ô] & Format(tbl1!cod_cliente, [Ô]0000[Ô]) & [Ô]-[Ô] & Left(tbl1!nome_cliente, 35)
Set tbl = CurrentDb.OpenRecordset([Ô]SELECT tbl_lanc_venda_produtos.id_venda, Format([num_item],[ô]000[ô]) AS v_num_item, tbl_cad_produto.codbarra_prod, Left([desc_prod],42) AS v_desc_prod, tbl_cad_unidade.abrev_unid, tbl_lanc_venda_produtos.qtde, tbl_lanc_venda_produtos.vrunit, tbl_lanc_venda_produtos.vrtotal [Ô] & _
[Ô]FROM tbl_cad_unidade INNER JOIN (tbl_cad_produto INNER JOIN tbl_lanc_venda_produtos ON tbl_cad_produto.cod_prod = tbl_lanc_venda_produtos.cod_prod) ON tbl_cad_unidade.cod_unid = tbl_cad_produto.cod_unid [Ô] & _
[Ô]WHERE (((tbl_lanc_venda_produtos.id_venda) = [Ô] & idvenda & [Ô])) [Ô] & _
[Ô]ORDER BY Format([num_item],[ô]000[ô]);[Ô])
If tbl.EOF = False Then
tbl.MoveLast
tbl.MoveFirst
qtde = tbl.RecordCount
Print #1, String(42, [Ô]-[Ô])
Print #1, Tab(13); [Ô]P R O D U T O S[Ô]
Print #1, String(42, [Ô]-[Ô])
Print #1, [Ô]ITEM CODIGO[Ô]
Print #1, [Ô]DESRICAO[Ô]
Print #1, [Ô]QTDE VR UNIT VR TOTAL[Ô]
Print #1, String(42, [Ô]-[Ô])
[ô]///
For i = 1 To qtde
Print #1, tbl!v_num_item; Tab(10); tbl!codbarra_prod; Tab(40); tbl!abrev_unid
Print #1, tbl!v_desc_prod
Print #1, Format(tbl!qtde, [Ô]##,##0.000[Ô]); Tab(15); Format(Format(tbl!vrunit, [Ô]R$ ##,##0.00[Ô]), [Ô]@@@@@@@@@@@@[Ô]); Tab(30); Format(Format(tbl!vrtotal, [Ô]R$ ##,##0.00[Ô]), [Ô]@@@@@@@@@@@@[Ô])
tbl.MoveNext
Next i
Print #1, String(42, [Ô]-[Ô])
Print #1, [Ô]TOTAL........: [Ô]; Tab(30); Format(Format(DSum([Ô]vrtotal[Ô], [Ô]tbl_lanc_venda_produtos[Ô], [Ô]id_venda=[Ô] & idvenda & [Ô][Ô]), [Ô]R$ ##,##0.00[Ô]), [Ô]@@@@@@@@@@@@[Ô])
Print #1, String(42, [Ô]-[Ô])
Print #1, Format(qtde, [Ô]000[Ô]) & [Ô] ITEM(NS)[Ô]
If tbl1!nfp = 1 And tbl1!cpf <> [Ô][Ô] Then
Print #1, [Ô]NFP[Ô]; Tab(5); tbl1!cpf
End If
Print #1, IIf(IsNull(tbl1!cod_formapgto) = 1, [Ô]FINALIZADA[Ô], [Ô]NAO FINALIZADA[Ô])
tbl.Close
Set tbl = Nothing
CurrentDb.Close
End If
[ô]/////////////////////////////////////////////////////
Dim v_txt1 As String, v_txt2 As String, v_txt3 As String, v_txt4 As String, v_txt5 As String, v_txt6 As String
If IsNull(tblparam!msg_ticket) = False Then
v_txt1 = Left(tblparam!msg_ticket, 42)
v_txt2 = Mid(tblparam!msg_ticket, 43, 42)
v_txt3 = Mid(tblparam!msg_ticket, 85, 42)
v_txt4 = Mid(tblparam!msg_ticket, 128, 42)
v_txt5 = Mid(tblparam!msg_ticket, 171, 42)
v_txt6 = Mid(tblparam!msg_ticket, 214, 34)
If v_txt1 <> [Ô][Ô] Then
Print #1, v_txt1
End If
If v_txt2 <> [Ô][Ô] Then
Print #1, v_txt2
End If
If v_txt3 <> [Ô][Ô] Then
Print #1, v_txt3
End If
If v_txt4 <> [Ô][Ô] Then
Print #1, v_txt4
End If
If v_txt5 <> [Ô][Ô] Then
Print #1, v_txt5
End If
If v_txt6 <> [Ô][Ô] Then
Print #1, v_txt6
End If
End If
[ô]/////////////////////////////////////////////////////
Set tbl = CurrentDb.OpenRecordset([Ô]tbl_sys_Config[Ô])
Print #1, String(42, [Ô]-[Ô])
Print #1, [Ô]******< ORCAMENTO SEM VALOR FISCAL >******[Ô]
Print #1, String(42, [Ô]-[Ô])
Print #1, tbl!Programador
Print #1, tbl!email_programador
Print #1, String(42, [Ô]-[Ô])
tbl.Close
Set tbl = Nothing
For i = 1 To tblparam!linhas_fim_ticket
Print #1, [Ô][Ô]
Next i
Close #1
tbl2.Close
Set tbl2 = Nothing
End If
tbl1.Close
tblparam.Close
CurrentDb.Close
Set tblparam = Nothing
Set tbl1 = Nothing
qtde = 0
End If
End Function
Nunca usei comandos ESC no MS Access, poderia me dar uma força?
Att
Luciano
MS Access 2003
Professor,
Instalei o driver para win do cd, mas como não tenho a impressora fisica em casa, amanhã vou fazer um teste no trampo e vejo que no que vai dar.
Att
Luciano
Instalei o driver para win do cd, mas como não tenho a impressora fisica em casa, amanhã vou fazer um teste no trampo e vejo que no que vai dar.
Att
Luciano
Seria bom você informar o modelo da impressora.
no site do fabricante existem varios downloads e manuais, basta saber o modelo
http://www.bixolon.com/html/en/index.xhtml
no site do fabricante existem varios downloads e manuais, basta saber o modelo
http://www.bixolon.com/html/en/index.xhtml
Tópico encerrado , respostas não são mais permitidas