Aposentar a LX300

Boa noite,

Pretendo aposentar a LX300. Imprimo hj em dia um comprovante de Ordem de Serviço (Customizado), em papel carbonado de 2 vias em uma LX300. Papel de 80 colunas em formato bobina. Desejo substituir a LX por um Bematech 4200 (térmica não fiscal).

Se eu rodar o meu fonte como está hje na 4200, perco a formatação na impressão. Fica pulando linha e o impresso não fica como precisa.

O fonte utiliza SetPrint, e li que se trata de um método específico para matriciais e sem muito recurso para formatar o PRW, e encaixar tudo na bobina da 4200.

Emfim...

Preciso de uma ajuda e direcionamento para apontar o melhor método para eu poder alterar meu PRW.

Seria o FWMSPrinter? Ou existe algum método mais indicado para lidar com a MP4200 e realizar o update?

Desde já, agradeço quem puder ajudar.

1 curtida

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

Muito obrigado pela informação. Vou testar aqui e reporto o case. Atte,