Nesse vídeo demonstraremos a utilização da classe FWPrinteSetup, que serve para abrir uma tela para configurar uma impressora antes de acionar a impressão de um relatório.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "TOTVS.ch" #Include "FWPrintSetup.ch" //Constantes #Define PAD_LEFT 0 //Alinhamento Esquerda #Define PAD_RIGHT 1 //Alinhamento Direita #Define PAD_CENTER 2 //Alinhamento Centralizado #Define IMP_SPOOL 2 Static oSetupRel /*/{Protheus.doc} User Function zExe240 Imprime a etiqueta via fwmsprinter @type Function @author Atilio @since 20/02/2023 @see https://tdn.totvs.com/display/public/framework/FWPrintSetup @obs **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe240() Local aArea := FWGetArea() Local aPergs := {} Private cCodProd := Space(TamSX3('B1_COD')[01]) //Adiciona os parâmetros que serão exibidos aAdd(aPergs, {1, "Produto", cCodProd, "", ".T.", "SB1", ".T.", 60, .T.}) //Se a pergunta for confirmada If ParamBox(aPergs, "Informe os parâmetros", , , , , , , , , .F., .F.) cCodProd := Alltrim(MV_PAR01) fImprEtq() EndIf FWRestArea(aArea) Return Static Function fImprEtq() Local oPrint Local oBrush := TBrush():New(,RGB(000, 000, 000)) Local nAltura := 1200 Local nLargura := 1200 Local nLinAux := 0 Local lNegrito := .T. Local lSublinhado := .T. Local lItalico := .T. Local cNomeFont := "Arial" Local oFontDadN := TFont():New(cNomeFont, /*uPar2*/, -15, /*uPar4*/, lNegrito, /*uPar6*/, /*uPar7*/, /*uPar8*/, /*uPar9*/, ! lSublinhado, ! lItalico) Local oFontRoda := TFont():New(cNomeFont, /*uPar2*/, -13, /*uPar4*/, lNegrito, /*uPar6*/, /*uPar7*/, /*uPar8*/, /*uPar9*/, ! lSublinhado, ! lItalico) DbSelectArea("SB1") SB1->(DbSetOrder(1)) // Filial + Produto If SB1->(MsSeek(FWxFilial("SB1") + cCodProd)) //Criando a impressão oPrint := FwMsPrinter():New("ETQPRODU",,.T.,GetTempPath(),.T.) //Se ainda não tiver configuração de Setup While ValType(oSetupRel) == "U" fConfImpr() EndDo //Se for direto para impressora If oSetupRel:GetProperty(PD_PRINTTYPE) == IMP_SPOOL oPrint:nDevice := IMP_SPOOL oPrint:cPrinter := oSetupRel:aOptions[PD_VALUETYPE] Endif oPrint:StartPage() //Imprimindo o cabeçalho (imagem e mensagem) oPrint:SayBitmap(075, 010, "\x_imagens\logo.png", 105, 105) oPrint:Say(130, nLargura-490, "Terminal de Informação", oFontDadN,,,, PAD_CENTER) oPrint:Line(250, 000, 250, nAltura) nLinAux := 290 oPrint:Say(nLinAux, 030, "Etiqueta de Produto", oFontDadN,,,, PAD_LEFT) nLinAux += 080 //Descrição oPrint:Say(nLinAux, 030, "Descrição:", oFontDadN,,,, PAD_LEFT) oPrint:Say(nLinAux, 340, Alltrim(SB1->B1_DESC), oFontDadN,,,, PAD_LEFT) nLinAux += 080 //Data e Validade oPrint:Say(nLinAux, 030, "Tipo:", oFontDadN,,,, PAD_LEFT) oPrint:Say(nLinAux, 340, SB1->B1_TIPO, oFontDadN,,,, PAD_LEFT) oPrint:Say(nLinAux, 580, "U.M.:", oFontDadN,,,, PAD_LEFT) oPrint:Say(nLinAux, 850, SB1->B1_UM, oFontDadN,,,, PAD_LEFT) nLinAux += 080 //Código de Barras oPrint:FwMsBar("CODE128", 12, 1, Alltrim(cCodProd), oPrint,.F.,,,,,,,,.F.,) nLinAux += 240 //Dados finais oPrint:FillRect({nLinAux-20, 000, nAltura-250, nLargura-20}, oBrush) oPrint:Say(nLinAux+030, 30, "PRODUTO", oFontDadN,,RGB(255, 255, 255),, PAD_LEFT) oPrint:Say(nLinAux+140, 30, cCodProd, oFontRoda,,RGB(255, 255, 255),, PAD_LEFT) oPrint:Say(nLinAux+020, (nLargura - 720), 'Se tiver dúvidas', oFontRoda,,RGB(255, 255, 255),, PAD_CENTER) oPrint:Say(nLinAux+060, (nLargura - 720), 'entre em contato conosco', oFontRoda,,RGB(255, 255, 255),, PAD_CENTER) oPrint:Say(nLinAux+100, (nLargura - 720), 'através do e-Mail', oFontRoda,,RGB(255, 255, 255),, PAD_CENTER) oPrint:Say(nLinAux+140, (nLargura - 720), 'contato@atiliosistemas.com', oFontRoda,,RGB(255, 255, 255),, PAD_CENTER) //Mandando para o spool de impressão oPrint:Print() Else FWAlertError("Produto não encontrado", "Falha") EndIf Return Static Function fConfImpr() Local aDevice := {"DISCO", "SPOOL", "EMAIL", "EXCEL", "HTML", "PDF"} Local oSetup Local cSession := GetPrinterSession() Local cDevice := If(Empty(fwGetProfString(cSession,"PRINTTYPE","SPOOL",.T.)),"PDF",fwGetProfString(cSession,"PRINTTYPE","SPOOL",.T.)) Local nPrintType := aScan(aDevice, {|x| x == cDevice }) Local nOrientation := 1 //If(fwGetProfString(cSession, "ORIENTATION", "PORTRAIT", .T.) == "PORTRAIT", 1, 2) Local nLocal := 2 //If(fwGetProfString(cSession, "LOCAL", "SERVER", .T.) == "SERVER", 1, 2) Local nFlags := PD_ISTOTVSPRINTER + PD_DISABLEPAPERSIZE + PD_DISABLEPREVIEW + PD_DISABLEMARGIN //Cria o setup do relatório oSetup := FWPrintSetup():New(nFlags, "ETIQUETA") oSetup:SetPropert(PD_DESTINATION , nLocal) oSetup:SetPropert(PD_ORIENTATION , nOrientation) oSetup:SetPropert(PD_PRINTTYPE , nPrintType) oSetupRel := Nil //Se a tela for confirmada, atualiza o setup default do relatório If oSetup:Activate() == PD_OK If oSetup:GetProperty(PD_PRINTTYPE) == IMP_SPOOL .And. oSetup:GetProperty(PD_DESTINATION) == 2 oSetupRel := oSetup Else FWAlertInfo("Escolha o tipo SPOOL e LOCAL para impressão!") EndIf EndIf Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.