Usando a Função: MSCBPrinter para imprimir etiquetas

Em forma de exemplo, irei demonstrar uma simples impressão de etiqueta usando a função MSCBPrinter.

Permite realizar as configurações da impressora, que darão ao programador a habilidade de determinar as características de impressão, definidas pelos parâmetros abaixo.

Sintaxe:

MSCBPrinter – Configura Impressora ( [ cModelPrt ] [ cPorta ] [ nDensidade ] [ nTamanho ] [ lSrv ] [ nPorta ] [ cServer ] [ cEnv ] [ nMemoria ] [ cFila ] [ lDrvWin ] [ cPathSpool ] )

#include "rwmake.ch"
User Function Etiqueta()
***********************
	// Declaração de variáveis utilizadas no programa
 
	SetPrvt("CPERG,CCOMBO,AITENS,VQETIQ,cCidade,nCount,VNFISCAL,VNR")
	SetPrvt("cPed,VCLIENTE,cCliEnt,cSerie,nLin,nCol,lPrim,cEndEnt,VQtdEmb")
	SetPrvt("VCONF,cNome,cEntrega,cNomeTra, VDTAVAL,VSAIR,_CPORTA,_SALIAS,AREGS")
	SetPrvt("I,J,qQetiq")
 
	cCombo   := "S4M"
	aItens   := {"ELTRON","S4M","ZEBRA"}
	VNFISCAL := Space(9)
	VProduto :=""
	cPed   := Space(6)
	VCliente :=Space(30)
	cEndEnt := Space(30)
	VQtdEmb := ""
	cNomeTra    := Space(30)
	VSair    := .f.
	VQetiq   := 1
	Vcont := 0
 
	While vSair == .f.
	   @ 003,001 TO 355,450 DIALOG oDlg1   TITLE "Impressão de Etiquetas -Expedição"
	   @ 135,045 BUTTON "_Imprimir"        SIZE 30,20 ACTION Impetiq()
	   @ 135,128 BUTTON "_Sair"            SIZE 30,20 ACTION sair()
	   @ 005,003 To 030,200
	   @ 014,015 Say "Volumes:"
	   @ 014,085 Get VQetiq                    	SIZE 30,20 Pict "9999"
	   @ 042,015 Say "Nota Fiscal:"
	   @ 042,065 Get VNFISCAL                  	SIZE 50,20 Picture "@!" F3 "SF2" VALID FillDSF2(VNFISCAL)
	   @ 058,015 Say "Pedido:"
	   @ 058,065 Get cPed                  		SIZE 50,20
	   @ 074,015 Say "Transportadora:"
	   @ 074,065 Get cNomeTra                    SIZE 100,20
	   @ 090,015 Say "Cliente:"
	   @ 090,065 Get cNome                   SIZE 100,20
	   @ 106,015 Say "Endereco:"
	   @ 106,065 Get cEntrega                    SIZE 100,20
	   @ 122,090 ComboBox cCombo Items aItens   SIZE 30,50 
 
	   ACTIVATE DIALOG oDlg1 CENTERED
	EndDo
 
RETURN
 
Static Function Impetiq()
*************************
	If cCombo =="ELTRON"
	   _cPorta := "ELTRON"
	ElseIf cCombo =="S4M"
	   _cPorta := "S4M"
	ElseIf cCombo =="ZEBRA"
	   _cPorta := "LPT3"
	EndIf
 
	MSCBPRINTER("S4M","LPT1",,,.F.,,,,,,.T.)
	for nCount :=1 to VQetiq
		MSCBBEGIN(1,4)
		MSCBSAY(08,10,"NF."+ VNFISCAL+"  PV.: "+cPed,"N","F","002,002")
		MSCBSAY(08,15,"Cliente: "+cNome,"N","F","002,002")
		MSCBSAY(08,20,"End: "+cEntrega,"N","F","002,002")
		MSCBSAY(08,25,"Cidade.: "+cCidade,"N","F","002,002")
		MSCBSAY(08,30,"Trans: "+cNomeTra ,"N","F","002,002")
		MSCBSAY(08,35,"Volumes: "+Alltrim(STR(nCount))+" de " +Alltrim(STR(VQetiq)) ,"N","F","002,002")
		MSCBEND()
	Next(nCount)
	MSCBCLOSEPRINTER()
Return          
 
Static Function Sair()
**********************
	Close(oDlg1)
	vSair := .t.
 
Return
 
Static Function FillDSF2(_cDoc)
	sf2->(dbsetorder(1))
	sf2->(dbseek(xfilial("SF2") + _cDoc ))
	cCliente      := sf2->f2_cliente
	cSerie := sf2->f2_serie
	cPed := posicione("SC9",6,xfilial("SC9")+cSerie+_cDoc,"C9_PEDIDO")
	cNome       := posicione("SA1",1,xfilial("SA1")+sf2->f2_cliente+sf2->f2_loja,"A1_Nreduz")
	cEntrega      := posicione("SA1",1,xfilial("SA1")+sf2->f2_cliente+sf2->f2_loja,"A1_END")
	cNomeTra      := posicione("SA4",1,xfilial("SA4")+sf2->f2_transp,"A4_NOME")
	cCidade       := posicione("SA1",1,xfilial("SA1")+sf2->f2_cliente+sf2->f2_loja,"A1_MUN")
return()

Qual é a sua opinião ou dúvida?