Criando etiquetas com código de barras padrão EAN128
Olá, irei postar um simples exemplo de como imprimir etiquetas com código de barras usando o padrão EAN 128.
Estarei usando o componente FWMSPrinter, pois com ele posso enviar para qualquer impressora de etiquetas em rede ou para uma impressora laser, jato de tintas ou para o PDFCreator, ou seja, envio para qualquer lugar, sem desculpas para imprimir. rsrs
A etiqueta que irei montar, terá as seguintes proporções: 6 cm de altura x 10 cm de comprimento
Utilizando o componente FWMSPrinter, poderei imprimir direto na impressora ou em arquivo PDF, no meu exemplo, precisarei ter instalado as impressoras no meu computador, estarei utilizando como referência o nome da impressora que está em “Dispositivos e Impressoras”
Abaixo, veja como ficar preenchido o meu parametro:
Agora vamos ao código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
#INCLUDE "RPTDEF.CH" #INCLUDE "FWPrintSetup.ch" #INCLUDE "protheus.ch" #Include 'TopConn.ch' User Function Etiqueta() Local lFinal := .T. If ValidPerg() MsAguarde({|| ImpEtiq() },"Impressão de etiqueta","Aguarde...") EndIf Return Static Function ImpEtiq() Local cQuery := "" Local cProdDe := MV_PAR01 Local cProdAte := MV_PAR02 Local nQuant := MV_PAR03 Local cImpress := Alltrim(MV_PAR04) //pego o nome da impressora Local cLogo := "\system\logo.jpg" Local oFont16 := TFont():New('Arial',16,16,,.F.,,,,.T.,.F.,.F.) Local oFont16N := TFont():New('Arial',16,16,,.T.,,,,.T.,.F.,.F.) Local lAdjustToLegacy := .F. Local lDisableSetup := .T. Local nLin := 0 Local nCol := 0 Local nLinC := 0 Local nColC := 0 Local nWidth := 0 Local nHeigth := 0 Local lBanner := .T. //Se imprime a linha com o código embaixo da barra. Default .T. Local nPFWidth := 0 Local nPFHeigth := 0 Local lCmtr2Pix := .T. //Utiliza o método Cmtr2Pix() do objeto Printer.Default .T. MsProcTxt("Identificando a impressora...") Private oPrinter := FWMSPrinter():New("produto"+Alltrim(__cUserID)+".etq",IMP_SPOOL,lAdjustToLegacy,"/spool/",lDisableSetup,,,Alltrim(cImpress) /*parametro que recebe a impressora*/) //Para saber mais sobre o componente FWMSPrinter acesse http://tdn.totvs.com/display/public/mp/FWMsPrinter cQuery := "sua consulta SQL" TcQuery cQuery New Alias "QRYTMP" QRYTMP->(DbGoTop()) oPrinter:SetMargin(001,001,001,001) While QRYTMP->(!Eof()) For nR := 1 to nQuant nLin := 10 nCol := 22 MsProcTxt("Imprimindo "+alltrim(QRYTMP->CODIGO) + " - " + alltrim(QRYTMP->DESC)+"...") oPrinter:StartPage() oPrinter:SayBitmap(nLin,nCol,cLogo,100,030) nLin+= 45 oPrinter:Say(nLin,nCol,"Produto",oFont16) nLinC := 4.95 //Linha que será impresso o Código de Barra nColC := 1.6 //Coluna que será impresso o Código de Barra nWidth := 0.0164 //Numero do Tamanho da barra. Default 0.025 limite de largura da etiqueta é 0.0164 nHeigth := 0.6 //Numero da Altura da barra. Default 1.5 --- limite de altura é 0.3 lBanner := .T. //Se imprime a linha com o código embaixo da barra. Default .T. nPFWidth := 0.8 //Número do índice de ajuste da largura da fonte. Default 1 nPFHeigth := 0.9 //Número do índice de ajuste da altura da fonte. Default 1 lCmtr2Pix := .T. //Utiliza o método Cmtr2Pix() do objeto Printer.Default .T. oPrinter:FWMSBAR("CODE128" , nLinC , nColC, alltrim(QRYTMP->CODBAR), oPrinter,/*lCheck*/,/*Color*/,/*lHorz*/, nWidth, nHeigth,.F.,/*cFont*/,/*cMode*/,.F./*lPrint*/,nPFWidth,nPFHeigth,lCmtr2Pix) nLin+= 40 oPrinter:Say(nLin,nCol,alltrim(QRYTMP->CODIGO) + " - " + alltrim(QRYTMP->DESC),oFont16) oPrinter:EndPage() Next QRYTMP->(DbSkip()) EndDo oPrinter:Print() QRYTMP->(DbCloseArea()) Return /*Montagem da tela de perguntas*/ Static Function ValidPerg() Local aRet := {} Local aParamBox := {} Local lRet := .F. Local aOpcoes := {} Local cProdDe := "" Local cProdAte := "" Local cLocal := Space(99) If Empty(getMV("ZZ_IMPRESS")) //se o parametro estiver vazio, ja o defino com a impressora PDFCreator aOpcoes := {"PDFCreator"} Else aOpcoes := Separa(getMV("ZZ_IMPRESS"),";") Endif cProdDe := space(TamSX3("B1_COD")[1]) cProdAte:= REPLICATE("Z",TAMSX3("B1_COD")[1]) aAdd(aParamBox,{01,"Produto de" ,cProdDe ,"" ,"","SB1" ,"", 60,.F.}) // MV_PAR01 aAdd(aParamBox,{01,"Produto ate" ,cProdAte ,"" ,"","SB1" ,"", 60,.T.}) // MV_PAR02 aAdd(aParamBox,{01,"Quantidade Etiqueta" ,1 ,"@E 9999" ,"","" ,"", 60,.F.}) // MV_PAR03 aadd(aParamBox,{02,"Imprimir em" ,Space(50) ,aOpcoes ,100,".T.",.T.,".T."}) // MV_PAR04 If ParamBox(aParamBox,"Etiqueta Produto",/*aRet*/,/*bOk*/,/*aButtons*/,.T.,,,,FUNNAME(),.T.,.T.) If ValType(MV_PAR04) == "N" //Algumas vezes ocorre um erro de ao invés de selecionar o conteúdo, seleciona a ordem, então verifico se é numerico, se for, eu me posiciono na impressora desejada para pegar o seu nome MV_PAR04 := aOpcoes[MV_PAR04] EndIf lRet := .T. EndIf Return lRet |
Para imprimir uso a propriedade FWMSBAR, ele imprime o código de barras suportados pela função MsBar().
Obs: A utilização deste metodo não é homologado para a impressão de relatorios em ambientes que utilizam sistema operacional com o recurso de “Zoom” ou “Lupa” ativo.
Sintaxe:
FWMsPrinter():FWMsBar(cTypeBar,nRow,nCol,cCode,oPrint,lCheck,Color,lHorz, nWidth,nHeigth,lBanner,cFont,cMode,lPrint,nPFWidth,nPFHeigth,lCmtr2Pix)
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
cTypeBar | Caracter | Código do tipo do código de barras:
“EAN13”, “EAN8”, “UPCA” , “SUP5” , “CODE128”, “INT25″,”MAT25,”IND25″,”CODABAR”,”CODE3_9″ |
X | |
nRow | Numérico | Posição relativa à esquerda | X | |
nCol | Numérico | Posição relativa ao topo | X | |
cCode | Caracter | Texto a ser transformado em código de barra | X | |
oPrint | Objeto | Objeto Printer | ||
lCheck | Lógico | Se calcula o digito de controle. Defautl .T. | ||
Color | Numérico | Numero da Cor, utilize a “color.ch”. Default CLR_BLACK | ||
lHorz | Lógico | Se imprime na Horizontal. Default .T. | ||
nWidth | Numérico | Numero do Tamanho da barra. Default 0.025 | ||
nHeigth | Numérico | Numero da Altura da barra. Default 1.5 | ||
lBanner | Lógico | Se imprime a linha com o código embaixo da barra. Default .T. | ||
cFont | Caracter | Nome do Fonte a ser utilizado. Defautl “Arial” | ||
cMode | Caracter | Modo do codigo de barras CO. Default “” | ||
lPrint | Lógico | Se executa o método Print() de oPrinter pela MsBar. Default .T. | ||
nPFWidth | Numérico | Número do índice de ajuste da largura da fonte. Default 1 | ||
nPFHeigth | Numérico | Número do índice de ajuste da altura da fonte. Default 1 | ||
lCmtr2Pix | Lógico | Utiliza o método Cmtr2Pix() do objeto Printer.Default .T. |
A tela de parâmetros ficará assim:
Simples não?
Código de Barras EAN128 etiqueta FWMSPrinter Impressão Parametros
3 comentários
Exatamente o que eu estava procurando, obrigada!
Ótimo tutorial.
Era exatamente oque eu estava procurando.
A minha duvida é a seguinte: Você poderia me enviar um exemplo de query para colocar nesse programa ?
Bom dia Giovanni, enviei um e-mail para você com um exemplo funcional.
abraços.