Por enquanto usamos a classe TMSPrinter, enquanto a TOTVS não a descontinue. Segue exemplo prático para impressão de um comprovante de retirada de material do almoxarifado e de bônus uma aplicação prática e funcional da clase MSBAR.
User Function IMPMT105()
Local dData := PARAMIXB[1]
Local cNumSol := PARAMIXB[2]
Local cPrinter := GetMV("UP_IMPSOLM" ,, "" )
local cAlias:=Alias() //Salva ALIAS
local nIndex:=IndexOrd() //Salva INDICE
local nRecno:=Recno() //Salva PONTEIRO
Local cTypeBar := "INT25" // Tipo de código de barras "INT25" = Interleave 2 of 5
Local nRow := 43
Local nCol := 12
Local cCodBar := cNumSol // Valor a ser gerado e impresso
Local lCheck := .F.
Local lHoriz := .T.
Local nWidth := 0.3
Local nHeigth := 5
Local lBanner := .F.
Local lPrint := .F.
Local oFont08n := TFont():New('Courier New',,08,,.T.,,,,.F.,.F.)
Local oFont10n := TFont():New('Courier New',,10,,.T.,,,,.F.,.F.)
Local oFont12n := TFont():New('Courier New',,12,,.T.,,,,.F.,.F.)
Local nInc := 2.75 // Incremento para posicionamento do código de barras
Local nContLin := 0
Local oPrint
DbSelectArea("SCP")
DbSeTOrder(4)
DbGoTop()
If DbSeek(xFilial("SCP")+DToS(dData)+cNumSol,.T.)
oPrint := TMSPrinter():New(OemToAnsi('Solicitação de Material'))
oPrint:StartPage()
cNomeSol := Alltrim(Posicione("SRA",1,xFilial("SRA")+Alltrim(SCP->CP_SOLICIT),"RA_NOME"))
nLin := 0000
oPrint:Say(nLin,0175,OemToAnsi('REQUISICÃO DE MATERIAIS '),oFont12n,,,,0)
nLin += 0100
oPrint:Say(nLin,0060,OemToAnsi(Alltrim(Posicione("SM0",1,cEmpAnt+cFilAnt,"M0_NOMECOM")) + Space(30-Len(Alltrim(Posicione("SM0",1,cEmpAnt+cFilAnt,"M0_NOMECOM")))) + DtoC(dDataBase)),oFont10n,,,,0)
nLin += 0040
oPrint:Say(nLin,0060,OemToAnsi(Space(32) + Time()),oFont10n,,,,0)
nLin += 0040
oPrint:Say(nLin,0060,OemToAnsi('Nº ' + cNumSol),oFont12n,,,,0)
oPrint:Say(nLin,0060,OemToAnsi(Space(40-(8+Len(Alltrim(cUserName)))) + 'Usuário:' + cUserName),oFont10n,,,,0)
nLin += 0100
oPrint:Say(nLin,0060,OemToAnsi('-CODIGO--- -CENTRO DE CUSTO---- -QUANT--'),oFont08n,,,,0)
nLin += 0030
oPrint:Say(nLin,0060,OemToAnsi('-MATERIAL-------------------------------'),oFont08n,,,,0)
While !Eof() .And. SCP->CP_NUM == cNumSol
nLin += 0050
oPrint:Say(nLin,0060,OemToAnsi( ;
Left(SCP->CP_PRODUTO,10)+ " " + ;
Left(Posicione("CTT",1,xFilial("CTT")+SCP->CP_CC,IIf (Empty(CTT->CTT_BAIRRO),"CTT_DESC01","CTT_BAIRRO")),20)+ " " +;
Transform(SCP->CP_QUANT,"@E 99999.99") ;
),oFont08n,,,,0)
nLin += 0030
++nContLin
oPrint:Say(nLin,0060,OemToAnsi(Alltrim(lEFT(Posicione("SB1",1,xFilial("SB1")+SCP->CP_PRODUTO,"B1_DESC"),40))),oFont08n,,,,0)
DbSkip()
End
nLin += 0030
oPrint:Say(nLin,0060,OemToAnsi(Replicate("-",40)),oFont08n,,,,0)
nLin += 0200
oPrint:Say(nLin,0060,OemToAnsi(' _________________________________ '),oFont10n,,,,0)
nLin += 0040
oPrint:Say(nLin,0060,OemToAnsi(Space(Int((40-Len(cNomeSol))/2))+cNomeSol),oFont10n,,,,0)
nLin += 0200
oPrint:Say(nLin,0060,OemToAnsi('Autorizador : ___________________________'),oFont10n,,,,0)
MSBAR(cTypeBar,nRow+(nContLin*nInc),nCol,cCodBar,oPrint,lCheck,/*cCor*/,lHoriz,nWidth,nHeigth,lBanner,/*cFont*/,/*cMode*/,lPrint)
If Alltrim(oPrint:PrinterName()) <> cPrinter
oPrint:Setup()
EndIf
oPrint:EndPage()
oPrint:Print()
oPrint:End()
EndIf
DbSelectArea(cAlias) //Restaura ALIAS
DbSetOrder(nIndex) //Restaura INDICE
DbGoto(nRecno) //Restaura PONTEIRO
Return