Olá a todos!
Ao criar etiquetas códigos de barras, o ideal é utilizar o próprio software da impressora código de barras para isso.
Em se tratando de uma impressora da marca Zebra o aplicativo mais comum para uso é o Zebra Designer que vem junto no CD de drivers da própria impressora. A tarefa é bem simples: abrir o aplicativo e gerar uma etiqueta no tamanho desejado e com os parâmetros
necessários. Faz-se a impressão da mesma na impressora a fim de se atestar que está
correta e, em seguida, se gera a mesma para um arquivo-texto a fim de ser utilizado em
sua aplicação.
O arquivo-texto gerado pela impressora é o mostrado abaixo:
^XA
^PW354
^BY2,3,44^FT40,55^BCN,,Y,N
^FD>:" & Mid(Codigo, 1, 2) & ">5" & Mid(Codigo, 3, 11) & "^FS
^PQ1,0,1,Y
^XZ
Onde Codigo é a codificação interna da etiqueta que você criou.
O que se deve fazer em seguida é abrir isso via software a fim de gerar uma impressão em sequência da chamada desse mesmo arquivo da contagem inicial até a final:
sInicio = CDbl(TxtInicio.Text)
sFim = CDbl(TxtFim.Text)
'Quantas Etiquetas Imprimir
sDiferenca = sFim - sInicio
If sInicio > sFim Then
MsgBox("Valor Inicial maior que o Valor Final!!!", MsgBoxStyle.Information)
TxtInicio.Focus()
Exit Sub
End If
If sDiferenca = 0 Then
sDiferenca = sConta
End If
'Loop de impressão
While sInicio <= sFim
LerEtiqueta(sInicio )
GravarDados(sInicio)
Dim Command As String
Command = "type C:\TEMP\ETIQUETA.TXT>PRN"
Shell("cmd /c" & Command, 1, True)
'Incrementar o contador
sInicio = sInicio + 1
End While
A rotina LerETiqueta lê o arquivo-texto gerado na Zebra.
Então, você deve criar uma rotina que gere um arquivo-texto com os dados
acima:
Private Sub LerEtiqueta(ByVal sNumeroEtiqueta as string)
Dim fluxoTexto As IO.StreamWriter
Dim sNomeArquivo As String = "C:\Temp\ETIQUETA.TXT"
If IO.File.Exists(sNomeArquivo) Then
'ZM400 300 DPI
fluxoTexto = New IO.StreamWriter(sNomeArquivo)
fluxoTexto.Write("^XA")
fluxoTexto.Write("^PW354")
fluxoTexto.Write("^BY2,3,44^FT40,55^BCN,,Y,N")
fluxoTexto.Write("^FD>:" & Mid(sNumeroEtiqueta, 1, 2) & ">5" & Mid(sNumeroEtiqueta, 3, 11) & "^FS")
fluxoTexto.Write("^PQ1,0,1,Y")
''Finaliza la etiqueta
fluxoTexto.Write("^XZ")
fluxoTexto.Close()
End If
Dim docName As String = "ETIQUETA.TXT"
Dim docPath As String = "c:\Temp\"
'printDocument1.DocumentName = docName
Dim stream As New FileStream("C:\Temp\ETIQUETA.TXT", FileMode.Open)
Try
Dim reader As New StreamReader(stream)
Try
stringToPrint = reader.ReadToEnd()
Finally
reader.Dispose()
End Try
Finally
stream.Dispose()
End Try
End Sub
A parte final realiza a impressão da etiqueta direto para a porta da impressora e incrementa para o próximo número a ser impresso:
Dim Command As String
Command = "type C:\TEMP\ETIQUETA.TXT>PRN"
Shell("cmd /c" & Command, 1, True)
'Incrementar o contador
sInicio = sInicio + 1
A rotina é bem simples.
Você ainda pode incrementar isso gravando os dados em uma tabela em sua base de dados a fim de controlar as etiquetas já impressas e fazer uma possível reimpressão, caso necessário, o que é realizado pela função GravarDados.
Espero que o exposto ajude aos necessitados por esta informação.
Qualquer dúvida, podem postar comentários.
Sucesso a todos!!
By
Leonardo Metelys
sábado, 21 de setembro de 2013
quinta-feira, 6 de junho de 2013
DANFE EM VB.NET 2010 - AGORA ENVIANDO E-MAILS AUTOMATICAMENTE
Olá, pessoal!
A geração da DANFE agora traz novidades!!
Agora é possível informar um e-mail nos parâmetros de chamada do GerarDanfe para que o PDF gerado da DANFE possa ser enviado automaticamente:
Isso é possível porque o código-fonte agora incorpora uma função que permite o envio de
e-mails. Neste exemplo, utilizamos o gmail para o envio:
Em seguida, podemos ver o resultado esperado que é o recebimento da DANFE em PDF gerada através da aplicação:
Os fontes já se encontram disponíveis para aquisição a todos os que se mostrarem interessados.
Sucesso a todos!!
quinta-feira, 11 de abril de 2013
WINDOWS UPDATE - KB2823324 TRAVA O WINDOWS 7
Ontem a Microsoft liberou uma atualização que está fazendo a maioria dos computadores travarem na data de hoje. E se você deixou o
Windows Update ligado, se deu mal.
Há dois modos de resolver o problema
1 - Reiniciar a máquina, pressionar o botão F8, escolher a opção de restaurar sistema e o ponto de restauração anterior a data de ontem. Se a restauração
não funcionar utilize o aplicativo Hiren boot para tentar retornar o ponto de restauração que deseja.
2 – Abrir o mini Windows XP e substituir o arquivo ntfs.sys que está em c:\windows\system32\drivers por um de uma máquina que está funcionando
Se o mini Windows XP impedir que você substitua o arquivo ntfs.sys, utilize um CD do Linux vá na pasta e substitua o ntfs.sys.
Nessas horas, o Linux ajuda a Microsoft...
Eis uma postagem sobre o problema:
http://www.tudoemtecnologia.com/2013/04/update-para-windows-7-faz-com-que-o-sistema-nao-inicie.html
A G1 está dizendo que você formatar a máquina, mas não é preciso:
http://g1.globo.com/tecnologia/noticia/2013/04/falha-em-atualizacao-do-windows-forca-usuarios-formatar-sistema.html
Sucesso a todos!!
sábado, 23 de março de 2013
ASP.NET - EVITANDO CONCORRÊNCIA NAS CONEXÕES
Usuários experientes geralmente reaproveitam muito código-fonte já
escrito anteriormente.
Isso ajuda a compor novos aplicativos e a criar mais rapidamente novas necessidades.
Quando falamos de ASP.NET, no entanto, há uma pequena regra a ser seguida e que
os usuários menos experientes podem acabar esbarrando pelo caminho.
Essa regra é: Em ASP.NET nunca crie o mesmo connection para outras aplicações ou dentro da mesma aplicação e sempre que abrir um connection trate de fechá-lo no final de sua utilização.
Digamos que você crie uma pequena aplicação e faça o código abaixo:
Dim myCommand As MySqlCommand
Dim myConnection As MySqlConnection
myConnection = New MySqlConnection("server=252.168.70.99; user id=root; password=1007; database=alianca; pooling=false;")
myConnection.Open()
sSQL = "UPDATE registraprod SET CORRIGIDO = '" & sCorreto & "', HORACORRECAO = '" & sHora & "', DATA = '" & sInicio & "', POSICAO = '" & sPosicao & "', LOCALFALHA = '" & sLocalFalha & "', TIPOFALHA = '" & sTipoFalha & "', REPARADOR = '" & TxtReparador.Text & "' " & _
" WHERE CODBARRAS = '" & TxtBarras.Text & "' AND PRODUTO = '" & sProd & "'"
myCommand = New MySqlCommand(sSQL, myConnection2IM)
dsY = myCommand.ExecuteReader
Em seguida, em outro form ou em um botão dentro do mesmo form, crie a mesma conexão para realizar uma consulta:
Dim myCommand As MySqlCommand
Dim myConnection As MySqlConnection
myConnection = New MySqlConnection("server=252.168.70.99; user id=root; password=1007; database=alianca; pooling=false;")
myConnection.Open()
sSQL = "Selct * from registraprod " & _
" WHERE CODBARRAS = '" & TxtBarras.Text & "' AND PRODUTO = '" & sProd & "'"
myCommand = New MySqlCommand(sSQL, myConnection2IM)
dsY = myCommand.ExecuteReader
Em tempo de projeto - na sua máquina, não há problemas. Mas este mesmo código-fonte em locais distintos publicado no servidor ASP.NET poderá gerar concorrência e haverá erros quando dois usuários acessarem o mesmo ponto de sua aplicação.
Veja que em nenhum momento há o fechamento da conexão e que as duas se encontram com o mesmo nome!
Em uma base de dados MySQL isso causará erro de conexão abertas em demasia.
Também com uma base de dados SQL Server esta não é uma boa prática de programação.
Para corrigir este problema, poderíamos fazer o seguinte:
'Alteração
Dim myCommandupdate As MySqlCommand
Dim myConnectionUpdate As MySqlConnection
myConnectionUpdate = New MySqlConnection("server=252.168.70.99; user id=root; password=1007; database=alianca; pooling=false;")
myConnection.Open()
sSQL = "UPDATE registraprod SET CORRIGIDO = '" & sCorreto & "', HORACORRECAO = '" & sHora & "', DATA = '" & sInicio & "', POSICAO = '" & sPosicao & "', LOCALFALHA = '" & sLocalFalha & "', TIPOFALHA = '" & sTipoFalha & "', REPARADOR = '" & TxtReparador.Text & "' " & _
" WHERE CODBARRAS = '" & TxtBarras.Text & "' AND PRODUTO = '" & sProd & "'"
myCommandupdate = New MySqlCommand(sSQL, myConnectionUpdate )
dsY = myCommandupdate .ExecuteReader
myConnectionUpdate.Close()
'Seleção
Dim myCommandSelect As MySqlCommand
Dim myConnectionSelect As MySqlConnection
myConnectionSelect = New MySqlConnection("server=252.168.70.99; user id=root; password=1007; database=alianca; pooling=false;")
myConnection.Open()
sSQL = "Selct * from registraprod " & _
" WHERE CODBARRAS = '" & TxtBarras.Text & "' AND PRODUTO = '" & sProd & "'"
myCommandSelect = New MySqlCommand(sSQL, myConnectionSelect )
dsY = myCommandSelect .ExecuteReader
myConnectionSelect .Close()
Identificamos assim as conexões de modo distinto e realizamos o fechamento das mesmas após a sua atualizaçao.
Essa boa prática evita a concorrência e faz com que você não tenha problemas em duas máquinas utilizando a sua aplicação e causando travamentos.
Sucesso a todos!
By
Leonardo Metelys
domingo, 17 de fevereiro de 2013
GERANDO CÓDIGO DE BARRAS E DIMINUINDO O SEU TAMANHO
Eis uma pequena aplicação usando a biblioteca barcodelib.dll desenvolvida por Brad Barnhill e postada no The code Project (http://www.codeproject.com/Articles/20823/Barcode-Image-Generation-Library).
A idéia aqui é gerar a imagem de um código de barras e diminuir seu tamanho para impressão do código de barras e de sua numeração com o Print Document que você deve também adicionar ao projeto:
O botão Generate contêm o seguinte código-fonte:
Private Sub BtnGenerate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnGenerate.Click
If TxtBarcode.Text <> "" Then
Dim Barcode As New BarcodeLib.Barcode(TxtBarcode.Text, BarcodeLib.TYPE.CODE128)
PicCodebar.Image = Barcode.Encode(BarcodeLib.TYPE.CODE128, TxtBarcode.Text, 200, 100)
Barcode.SaveImage("C:\Temp\BARRAS.JPG", BarcodeLib.SaveTypes.JPG)
Dim fs As New FileStream("C:\Temp\BARRAS.JPG", FileMode.Open)
Dim br As New BinaryReader(fs)
br.Close()
fs.Close()
br = Nothing
fs = Nothing
End If
End Sub
Note que o tamanho da imagem está definido com 200 e 100.
O botão Print deverá conter o seguinte código:
Private Sub BtnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPrint.Click
PrintDocument1.Print()
End Sub
Dê dois cliques sobre o componente PrintDocument1 adicionado ao projeto e acrescente este código:
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim logo As Image = Image.FromFile("C:\Temp\barras.jpg")
Dim fnt As Font
'Font definition
fnt = New Font("Arial Narrow", 8)
'Redimensionar o Código de Barras
e.Graphics.DrawImage(logo, 10, 10, 130, 15)
e.Graphics.DrawString(TxtBarcode.Text, fnt, System.Drawing.Brushes.Black, 39, 39)
logo.Dispose()
End Sub
Esse pequeno projeto pode criar códigos de barra em vários formatos. A bibliote barcodelib pode ser obtida do link informado. Basta adicioná-la nas Referências de seu projeto através do menu Project -> Nomedoprojeto Properties.
Sucesso a todos!
sábado, 9 de fevereiro de 2013
VB.NET - CRIANDO APLICATIVOS PARA O WINDOWS 7 64 BITS
Olá, pessoal!
Dentre as muitas surpresas que podem ocorrer na criação de aplicativos a maior delas pode acontecer com relação a versão do sistema operacional.
Um aplicativo desenvolvido em Vb.NET para uma base de dados em MySQL em uma máquina com o Windows 7 de 32 bits terá problemas para funcionar adequadamente em uma máquina de usuário com o Windows 7 com a versão de 64 bits. Quem é desenvolvedor sempre esbarra nessas situações.
Agora... Como resolver o problema na sua aplicação?
É bem verdade que há boas explicações da microsoft sobre este problema. Você pode começar vendo o link abaixo:
http://support.microsoft.com/kb/942976/pt-br
Em uma máquina Windows 7 em 64 bits há duas versãos de ODBC. A que faz referência a 64 bits fica localizado na pasta \Windows\SysWoW64.
O que é necessário inicialmente é instalar a versão correta do conector odbc para o MYSQL, no caso que estou abordando aqui. Neste caso seria a mysql-connector-odbc-3.51.30-winx64.exe que você pode baixar da página do mySQL:
http://dev.mysql.com/downloads/connector/odbc/3.51.html
Após instalar o conector, você deverá ir até a pasta SysWoW64 e executar o ODBC e verificar se o conector realmente foi instalado com sucesso.
Feito isso, devemos voltar à sua aplicação.
Veja o texto abaixo:
Se suas conexões forem escritas desse modo elas funcionarão tanto para um computador de 32 bits quanto para um computador de 64 bits.
No caso de uma máquina de 64 bits você não poderá usar um odbDataReader propriamente, ou mesmo um OdbcCommand porque as mesmas retornarão erro de conexão porque sua aplicação estará esbarrando na limitação apresentada no artigo KB942976 (do primeiro link aqui do post): uma máquina com Windows 7 em 64 bits sempre enxergará dois ODBC´s e poderá dar preferência ao de 32 bits em alguns casos.
Ao utilizar o MysqlCommand, o MysqlConnection e o MysqlDatareader internamente na sua aplicação você força a mesma a evitar o problema de 32 ou 64 bits.
E assim se elimina o nó górdio das aplicações para 64 bits com uma base de dados MySQL.
Sucesso a todos!!!
Assinar:
Postagens (Atom)
UM APLICATIVO PARA LEITURA DEVOCIONAL ANUAL DA BIBLIA EM ANDROID
Olá, pessoal! Este novo projeto foi criado em Visual Studio 2019 em C#.Net com o Xamarin. Já está disponível no Google Play para vocês baix...
-
As funções abaixo ajudam na leitura de um arquivo XML da NF-e. Você só precisa fazer a leitura das tags corretas e lançá-las na base de dado...
-
O GLPI é um dos muitos tipos de aplicativos helpdesk free existentes na internet. O fórum do mesmo pode ser encontrado neste link: ...
-
Olá, pessoal! Esse projeto foi criado em 2017 e aprimorado agora em 2018. Foi também criado com o Visual Studio 2015 em C#.NET com o Xa...