Imprimindo etiqueta com código de barras usando o TMSPrinter()


Exemplo PDF No exemplo abaixo, um simples exemplo que como gerar etiquetas, neste exemplo uso o componente TmsPrinter().

#Include "PROTHEUS.CH"
#Include "RWMAKE.CH"   
 
User Function REST002()
    Local oReport
    Private cPerg := 'REST002'
 
    CriaSx1(cPerg)
    Pergunte(cPerg,.T.)
    Processa({ || xPrintRel(),OemToAnsi('Gerando o relatório.')}, OemToAnsi('Aguarde...'))
Return  
 
Static Function xPrintRel()  
 
    Local nX        := 0
    Local nQtdPag   := 0
 
    Private oPrint
    Private cAlias          := getNextAlias() //cria um alias temporário
    Private oFont06     := TFont():New('Arial',,06,,.F.,,,,.F.,.F.)
    Private oFont06n    := TFont():New('Arial',,06,,.T.,,,,.F.,.F.)
    Private oFont08     := TFont():New('Arial',,08,,.F.,,,,.F.,.F.)
    Private oFont08n    := TFont():New('Arial',,08,,.T.,,,,.F.,.F.)
    Private oFont10     := TFont():New('Arial',,10,,.F.,,,,.F.,.F.)
    Private oFont10n    := TFont():New('Arial',,10,,.T.,,,,.F.,.F.)
    Private oFont12     := TFont():New('Arial',,12,,.F.,,,,.F.,.F.)
    Private oFont12n    := TFont():New('Arial',,12,,.T.,,,,.F.,.F.)
    Private oFont14     := TFont():New('Arial',,14,,.F.,,,,.F.,.F.)
    Private oFont14n    := TFont():New('Arial',,14,,.T.,,,,.F.,.F.)
    Private oFont26     := TFont():New('Arial',,26,,.F.,,,,.F.,.F.)
    Private oFont26n    := TFont():New('Arial',,26,,.T.,,,,.F.,.F.)
    Private nLin        := 0 
 
    BeginSql Alias cAlias
        SELECT
            B1_COD,
            B1_DESC
        FROM
            %table:SB1%
        WHERE
                B1_FILIAL = %xFilial:SB1%
            AND B1_COD   >= %exp:mv_par01%
            AND B1_COD    '*'
        ORDER BY
            B1_COD
        EndSql     
 
    (cAlias)->(dbGoTop())
 
    oPrint := TMSPrinter():New(OemToAnsi('Etiqueta de produto'))
    oPrint:SetPortrait()  
 
    //1cm +/- 117,5 px 
 
    nQtdPag := (mv_par03 % 2)
    iif(nQtdPag = 0, nQtdPag := Int(mv_par03/2), nQtdPag := Int(mv_par03/2) + 1)
 
    While !(cAlias)->(Eof())
        For nX := 1 to nQtdPag
            oPrint:StartPage()  
 
            nLin  := 0010
            oPrint:Say(nLin,0010,OemToAnsi('CI: ' + alltrim((cAlias)->B1_COD)),oFont10n,,,,0)
            oPrint:Say(nLin,0570,DtoC(dDataBase),oFont10,,,,1)
            oPrint:Say(nLin,0610,OemToAnsi('CI: ' + alltrim((cAlias)->B1_COD)),oFont10n,,,,0)
            oPrint:Say(nLin,1170,DtoC(dDataBase),oFont10,,,,1)          
 
            nLin += 0030
            oPrint:Say(nLin,0299,OemToAnsi(SubStr(alltrim((cAlias)->B1_DESC),1,30)),oFont10,,,,2)
            oPrint:Say(nLin,0887,OemToAnsi(SubStr(alltrim((cAlias)->B1_DESC),1,30)),oFont10,,,,2) 
 
            MSBAR('CODE128',0.7,0.8,alltrim((cAlias)->B1_COD),oPrint,.F.,,.T.,0.013,0.7,,,,.F.)
            MSBAR('CODE128',0.7,5.8,alltrim((cAlias)->B1_COD),oPrint,.F.,,.T.,0.013,0.7,,,,.F.) 
 
            oPrint:EndPage()
        Next nX
        (cAlias)->(dbSkip())
    enddo               
 
    (cAlias)->(dbCloseArea())
 
    oPrint:Preview()
    oPrint:end()
Return          
 
Static Function CriaSx1(cPerg)
    PutSx1(cPerg,"01","Do Código Interno?"  ,"Do Código Interno?" ,"Do Código Interno?" ,"mv_ch1","C",15,0,0,"G","","SB1","","","mv_par01")
    PutSx1(cPerg,"02","Até Código Interno?" ,"Até Código Interno?","Até Código Interno?","mv_ch2","C",15,0,0,"G","","SB1","","","mv_par02")
    PutSx1(cPerg,"03","Qtde Etiquetas"      ,"Qtde Etiquetas"     ,"Qtde Etiquetas"     ,"mv_ch3","N",05,0,0,"G","",""   ,"","","mv_par03")
return