|
Bem Vindo, Visitante
|
Todos os Fórums
Outros Módulos/Ferramentas
|
Imprimir
Enviar Para um Amigo Precisa estar Logado
|
|
|
Assunto: |
IMPRIMIR ETIQUETA com Dados da Nota Fiscal (Danfe) |
|
Versão: |
12.1.7 |
|
Plataforma: |
Microsoft |
Complemento: |
|
|
DB: |
SQL Server |
Complemento: |
|
|
|
|
|
Mensagem do
SPFCBR
em 12/01/2018, 10:02 h
Local: SP Registro: 25/10/2010 Postagens: 64 |
Bom dia,
Estou precisando IMPRIMIR ETIQUETA com Dados da Nota Fiscal (Danfe) contendo dados do Cliente (Endereço) e Transportadora.
Utilização: Para colar na nas caixas junto com a mercadoria. Utilizado para enviar produto para os clientes.
O Protheus possui essa opção/recurso para imprimir etiqueta com dados da DANFE ?
|
|
|
Mensagem do
LUFERSB
em 12/01/2018, 14:36 h
Local: SP Registro: 17/12/2010 Postagens: 18 |
Boa tarde!
Já necessitei desenvolver impressão de etiquetas para a impressora Zebra, acho que talvez a mais utilizada.
Por padrão acho que ainda não existe no Protheus.
Basicamente, existe um programa da própria Zebra que você monta o layout da etiqueta (e exporta em comandos de texto), e depois via ADVPL você monta dinamicamente estes comandos usando o modelo exportado.
O ADVPL tem comandos que mandam estas instruções para a Zebra.
Fernando Bueno
--------------
www.fbsolutions.com.br |
|
|
Mensagem do
WALTERFCAR
em 12/01/2018, 17:48 h
Local: SP Registro: 14/10/2015 Postagens: 61 |
Você pode usar o ponto de entrada FISTRFNFE para criar um menu na tela NFESEFAZ.
Aí dentro dele você cria uma user funcion com o nome de uma funcção ao seu bel przer.
Mas cada tipo de impressora pode utilizar uma codificação específica de impressão. abaixo um exemplo para a impressora Argox, mas impressão de preços:
#INCLUDE "TOPCONN.CH"
#INCLUDE "rwmake.ch"
#DEFINE CRLF Char(13) + Char(10)
/*/
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Impressão de Etiquetas atavarejo º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
/*/
User Function IMPETAR() // u_impetar()
// Private aItems:= {‘Varejo‘,‘Atacado‘}
// cCombo:= aItems[1]
cDeProd:=space(15)
cCodBar:=space(15)
nQnt:=1
@ 00,00 TO 250,450 DIALOG oDlg1 TITLE "Etiqueta atacarejo Impressora Argox"
// oCombo:= TComboBox():Create(oDlg1,{|u|if(PCount()>0,cCombo:=u,cCombo)},20,30,aItems,100,20,,{||},,,,.T.,,,,,,,,,‘cCombo‘)
@ 35,30 Say "Produto:"
@ 35,70 GET cDeProd PICTURE "@!" VALID IIF(Empty(cDeProd),.T.,ExistCpo("SB1")) F3 "SB1" SIZE 70,180
@ 50,30 Say "Codigo Barras:"
@ 50,70 GET cCodBar PICTURE "@!" SIZE 70,180
@ 20,185 BUTTON "_Ok" SIZE 35,15 ACTION IMP_DADOS()
@ 45,185 BUTTON "_Cancela" SIZE 35,15 ACTION Close(oDlg1)
ACTIVATE DIALOG oDlg1 CENTER
Return
Static Function IMP_DADOS()
Local nX
Local cPorta
Local nVez:=1
Local lDesc:=.F.
Local _Preco:=0
Local _PreAtu:=0
Local cQuery := ‘‘
If !empty(cCodBar)
Dbselectarea("SLK")
dbsetorder(1)
if !Dbseek(xFilial("SLK")+cCodBar)
alert("Codigo de Barras não Encontrado")
RETURN
endif
cDeProd:=alltrim(SLK->LK_CODIGO)
Endif
if empty(cDeProd)
alert("Codigo Não Selecionado")
RETURN
endif
cQuery:= " SELECT B1_COD,B1_DESC,B1_CODBAR "
cQuery+= " FROM "+RetSqlName("SB1")+" SB1 "
cQuery+= " WHERE "
cQuery+= " D_E_L_E_T_=‘ ‘ AND "
cQuery+= " B1_FILIAL = ‘"+xFilial("SB1")+"‘ AND "
cQuery+= " B1_COD = ‘"+alltrim(cDeProd)+"‘"
cQuery+= " ORDER BY B1_COD "
IF SELECT("PRO")>0
PRO->(dbCloseArea())
Endif
TCQUERY cQuery NEW ALIAS "PRO"
DBSELECTAREA(‘PRO‘)
//DBGOTOP()
If PRO->(eof())
alert("Nenhum Registro Encontrado")
PRO->(dbCloseArea())
return
Endif
While !eof()
nPrAta:=nPrVar:=0
cmd := ""
cmd += "select TOP 01 SB1.B1_COD, SB1.B1_DESC, VAREJO.DA1_PRCVEN AS VAREJO, ATACADO.DA1_PRCVEN AS ATACADO, SLK.LK_CODBAR "
cmd += "FROM " +RetSqlName("SB1") + "(NOLOCK) SB1 "
cmd += "LEFT JOIN " + RetSqlName("DA1") +" (NOLOCK) VAREJO ON SB1.B1_COD = VAREJO.DA1_CODPRO "
cmd += "LEFT JOIN " + RetSqlName("DA1") +" (NOLOCK) ATACADO ON SB1.B1_COD = ATACADO.DA1_CODPRO "
cmd += "LEFT JOIN " + RetSqlName("SLK") +" (NOLOCK) SLK ON SLK.LK_CODIGO = SB1.B1_COD "
cmd += "WHERE "
cmd += "SB1.D_E_L_E_T_ = ‘ ‘ AND VAREJO.D_E_L_E_T_ = ‘ ‘ AND ATACADO.D_E_L_E_T_ = ‘ ‘ AND SLK.D_E_L_E_T_ = ‘ ‘ "
cmd += "AND SB1.B1_COD = ‘" + PRO->B1_COD + "‘
cmd += "AND VAREJO.DA1_CODTAB = ‘001‘ "
cmd += "AND ATACADO.DA1_CODTAB = ‘002‘ "
cmd += "AND VAREJO.DA1_FILIAL = ‘" + cFilAnt + "‘ "
cmd += "AND ATACADO.DA1_FILIAL= ‘" + cFilAnt + "‘ "
cmd += "ORDER BY SLK.LK_CODBAR DESC "
TCQUERY cmd NEW ALIAS ‘ETQ‘
if empty(B1_COD)
U_mErro("O produto tem que ter preco varejo, atacado e cod barras para imprimir essa etiqueta.")
DBCLOSEAREA(‘ETQ‘)
return
EndIf
DBSELECTAREA(‘ETQ‘)
_Prod :=ETQ->B1_COD
_Ref1 :=SUBS(ETQ->B1_DESC,01,28)
_Ref2 :=SUBS(ETQ->B1_DESC,29,20)
_CodBar:= ETQ->LK_CODBAR
_PrAta :="R$ "+ALLTRIM(Transform(ETQ->ATACADO,"@E 9,999.99"))
_PrVar :="R$ "+ALLTRIM(Transform(ETQ->VAREJO ,"@E 9,999.99"))
cimp := ‘‘ + CHR(13) + CHR(10)
cImp += ‘F‘ + CHR(13) + CHR(10)
cImp += ‘L‘ + CHR(13) + CHR(10)
cImp += ‘H16‘ + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL01")+ alltrim(_Ref1) + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL02")+ alltrim(_CodBar) + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL03")+ alltrim(_PrVar) + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL04")+ "Preco atacado" + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL05")+ alltrim(_PrAta) + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL06")+ getmv("MV_ETGAL07")+ CHR(13) + CHR(10)
cImp += ‘E‘ + CHR(13) + CHR(10)
cImp += ‘‘ + CHR(13) + CHR(10)
cImp += CHR(2) + ‘f320‘ + CRLF // fazer o retorno do papel
fGravaTxt(cImp)
WaitRun("C:\SMARTCLIENT\implpt1.bat",0)
DBCLOSEAREA(‘ETQ‘)
EndDo
Return
Static function fGravaTxt(cInfo)
local nArq := 0
local cCamArq := "C:\SMARTCLIENT\gonale.bas"
// TESTE SE Ja EXISTE O ARQUIVO
if file(cCamArq ) = .t.
fErase(cCamArq)
endif
// CRIA O ARQUIVO
nArq := fCreate(cCamArq)
if nArq <= 0
alert("Erro ao tentar criar ou abrir o arquivo")
return
endif
// GRAVA NO ARQUIVO TXT
fWrite( nArq, cInfo, len(cInfo))
// FECHA O ARQUIVO
fClose( nArq)
return .t.
|
|
|
Mensagem do
WALTERFCAR
em 12/01/2018, 17:48 h
Local: SP Registro: 14/10/2015 Postagens: 61 |
Você pode usar o ponto de entrada FISTRFNFE para criar um menu na tela NFESEFAZ.
Aí dentro dele você cria uma user funcion com o nome de uma funcção ao seu bel przer.
Mas cada tipo de impressora pode utilizar uma codificação específica de impressão. abaixo um exemplo para a impressora Argox, mas impressão de preços:
#INCLUDE "TOPCONN.CH"
#INCLUDE "rwmake.ch"
#DEFINE CRLF Char(13) + Char(10)
/*/
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÊÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
±±ºDescricao ³ Impressão de Etiquetas atavarejo º±±
±±º ³ º±±
±±ÌÍÍÍÍÍÍÍÍÍÍØÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹±±
/*/
User Function IMPETAR() // u_impetar()
// Private aItems:= {‘Varejo‘,‘Atacado‘}
// cCombo:= aItems[1]
cDeProd:=space(15)
cCodBar:=space(15)
nQnt:=1
@ 00,00 TO 250,450 DIALOG oDlg1 TITLE "Etiqueta atacarejo Impressora Argox"
// oCombo:= TComboBox():Create(oDlg1,{|u|if(PCount()>0,cCombo:=u,cCombo)},20,30,aItems,100,20,,{||},,,,.T.,,,,,,,,,‘cCombo‘)
@ 35,30 Say "Produto:"
@ 35,70 GET cDeProd PICTURE "@!" VALID IIF(Empty(cDeProd),.T.,ExistCpo("SB1")) F3 "SB1" SIZE 70,180
@ 50,30 Say "Codigo Barras:"
@ 50,70 GET cCodBar PICTURE "@!" SIZE 70,180
@ 20,185 BUTTON "_Ok" SIZE 35,15 ACTION IMP_DADOS()
@ 45,185 BUTTON "_Cancela" SIZE 35,15 ACTION Close(oDlg1)
ACTIVATE DIALOG oDlg1 CENTER
Return
Static Function IMP_DADOS()
Local nX
Local cPorta
Local nVez:=1
Local lDesc:=.F.
Local _Preco:=0
Local _PreAtu:=0
Local cQuery := ‘‘
If !empty(cCodBar)
Dbselectarea("SLK")
dbsetorder(1)
if !Dbseek(xFilial("SLK")+cCodBar)
alert("Codigo de Barras não Encontrado")
RETURN
endif
cDeProd:=alltrim(SLK->LK_CODIGO)
Endif
if empty(cDeProd)
alert("Codigo Não Selecionado")
RETURN
endif
cQuery:= " SELECT B1_COD,B1_DESC,B1_CODBAR "
cQuery+= " FROM "+RetSqlName("SB1")+" SB1 "
cQuery+= " WHERE "
cQuery+= " D_E_L_E_T_=‘ ‘ AND "
cQuery+= " B1_FILIAL = ‘"+xFilial("SB1")+"‘ AND "
cQuery+= " B1_COD = ‘"+alltrim(cDeProd)+"‘"
cQuery+= " ORDER BY B1_COD "
IF SELECT("PRO")>0
PRO->(dbCloseArea())
Endif
TCQUERY cQuery NEW ALIAS "PRO"
DBSELECTAREA(‘PRO‘)
//DBGOTOP()
If PRO->(eof())
alert("Nenhum Registro Encontrado")
PRO->(dbCloseArea())
return
Endif
While !eof()
nPrAta:=nPrVar:=0
cmd := ""
cmd += "select TOP 01 SB1.B1_COD, SB1.B1_DESC, VAREJO.DA1_PRCVEN AS VAREJO, ATACADO.DA1_PRCVEN AS ATACADO, SLK.LK_CODBAR "
cmd += "FROM " +RetSqlName("SB1") + "(NOLOCK) SB1 "
cmd += "LEFT JOIN " + RetSqlName("DA1") +" (NOLOCK) VAREJO ON SB1.B1_COD = VAREJO.DA1_CODPRO "
cmd += "LEFT JOIN " + RetSqlName("DA1") +" (NOLOCK) ATACADO ON SB1.B1_COD = ATACADO.DA1_CODPRO "
cmd += "LEFT JOIN " + RetSqlName("SLK") +" (NOLOCK) SLK ON SLK.LK_CODIGO = SB1.B1_COD "
cmd += "WHERE "
cmd += "SB1.D_E_L_E_T_ = ‘ ‘ AND VAREJO.D_E_L_E_T_ = ‘ ‘ AND ATACADO.D_E_L_E_T_ = ‘ ‘ AND SLK.D_E_L_E_T_ = ‘ ‘ "
cmd += "AND SB1.B1_COD = ‘" + PRO->B1_COD + "‘
cmd += "AND VAREJO.DA1_CODTAB = ‘001‘ "
cmd += "AND ATACADO.DA1_CODTAB = ‘002‘ "
cmd += "AND VAREJO.DA1_FILIAL = ‘" + cFilAnt + "‘ "
cmd += "AND ATACADO.DA1_FILIAL= ‘" + cFilAnt + "‘ "
cmd += "ORDER BY SLK.LK_CODBAR DESC "
TCQUERY cmd NEW ALIAS ‘ETQ‘
if empty(B1_COD)
U_mErro("O produto tem que ter preco varejo, atacado e cod barras para imprimir essa etiqueta.")
DBCLOSEAREA(‘ETQ‘)
return
EndIf
DBSELECTAREA(‘ETQ‘)
_Prod :=ETQ->B1_COD
_Ref1 :=SUBS(ETQ->B1_DESC,01,28)
_Ref2 :=SUBS(ETQ->B1_DESC,29,20)
_CodBar:= ETQ->LK_CODBAR
_PrAta :="R$ "+ALLTRIM(Transform(ETQ->ATACADO,"@E 9,999.99"))
_PrVar :="R$ "+ALLTRIM(Transform(ETQ->VAREJO ,"@E 9,999.99"))
cimp := ‘‘ + CHR(13) + CHR(10)
cImp += ‘F‘ + CHR(13) + CHR(10)
cImp += ‘L‘ + CHR(13) + CHR(10)
cImp += ‘H16‘ + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL01")+ alltrim(_Ref1) + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL02")+ alltrim(_CodBar) + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL03")+ alltrim(_PrVar) + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL04")+ "Preco atacado" + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL05")+ alltrim(_PrAta) + CHR(13) + CHR(10)
cImp += getmv("MV_ETGAL06")+ getmv("MV_ETGAL07")+ CHR(13) + CHR(10)
cImp += ‘E‘ + CHR(13) + CHR(10)
cImp += ‘‘ + CHR(13) + CHR(10)
cImp += CHR(2) + ‘f320‘ + CRLF // fazer o retorno do papel
fGravaTxt(cImp)
WaitRun("C:\SMARTCLIENT\implpt1.bat",0)
DBCLOSEAREA(‘ETQ‘)
EndDo
Return
Static function fGravaTxt(cInfo)
local nArq := 0
local cCamArq := "C:\SMARTCLIENT\gonale.bas"
// TESTE SE Ja EXISTE O ARQUIVO
if file(cCamArq ) = .t.
fErase(cCamArq)
endif
// CRIA O ARQUIVO
nArq := fCreate(cCamArq)
if nArq <= 0
alert("Erro ao tentar criar ou abrir o arquivo")
return
endif
// GRAVA NO ARQUIVO TXT
fWrite( nArq, cInfo, len(cInfo))
// FECHA O ARQUIVO
fClose( nArq)
return .t.
|
|
|
Mensagem do
SPFCBR
em 15/01/2018, 09:44 h
Local: SP Registro: 25/10/2010 Postagens: 64 |
Ola !!!
Venho agradecer a ajuda dos colegas WALTERFCAR e LUFERSB.
Muito Obrigado mesmo.....
Valeu !!!! |
|
|
Mensagem do
ROBERTOMEN
em 15/01/2018, 13:10 h
Local: PR Registro: 04/07/2017 Postagens: 450 |
Segue fonte simples de impressão de etiquetas adesivas com Código de Barras em impressora ARGOX.
Neste fonte eu cadastro o PRODUTO na tabela SLK,,cadastro de Código de Barras.
E este modelo é para etiqueta com duas colunas
#Include ‘Protheus.ch‘
#include "rwmake.ch"
#IFNDEF WINDOWS
#DEFINE PSAY SAY
#ENDIF
//******************************************************************************************
// Função para Impressão de Etiquetas de Identificação de Produtos com Cod Barras
// Autor: Roberto Mendes ROdrigues - 12/05/17
//******************************************************************************************
************************
User Function etiqIdProd()
************************
tamanho := "P"
limite := 80
titulo := PADC("Etiquetas para Identificação de Produtos",74)
cDesc1 := PADC("Este programa ira emitir Etiquetas para Identificação de Produtos",74)
cDesc2 := PADC("Utilize o Filtro para Seleção !!!",74)
cDesc3 := " "
aReturn := { "Especial", 1,"Administracao", 1, 2, 1,"",1 }
nomeprog := "EtiqIdPr"
cPerg := "ETIQIDPROD"
nLastKey := 0
lContinua := .T.
nLin := 0
wnrel := "EtiqIdProd"
cString := "SB1"
wnrel := SetPrint(cString,wnrel,cPerg,Titulo,cDesc1,cDesc2,cDesc3,.T.)
if nLastKey == 27
return
endif
// MV_PAR01 PRODUTO DA PRIMEIRA COLUNA DA ETIQUETA
// MV_PAR02 PRODUTO DA SEGUNDA COLUNA DA ETIQUETA
// MV_PAR03 QUANTIDADE DE ETIQUETAS A SEREM IMPRESSAS
while Pergunte( cPerg,.T. )
setdefault(aReturn,cString) // Verifica Posicao do Formulario na Impressora
rptstatus({|| RptDetail(),Titulo})
enddo
return
************************
STATIC FUNCTION RPTDETAIL()
************************
Local L:=x:=0
Local nWx
Local cPorta:=‘LPT1‘
Local oSTX:= chr(2)
Local cFonte
// usar net use lpt1: \\almoxarifado2\ARGOX onde ARGOX é o nome da impressora compartilhada
// para imprimir duas etiquetas use for X:=1 to 3 ou cTexto+=oSTX+‘Q0002‘+chr(13)
//Local cPorta:=aReturn[6] // cPorta:="LPT1"
SLK->(dbsetorder(1)) // TABELA CADASTRO DE CODIGO DE BARRAS
cTexto=‘‘
cTexto+=oSTX+‘e‘+chr(13) // habilita o sensor gap
cTexto+=oSTX+‘j‘+chr(13) // cancela pausa entre as etiquetas
cTexto+=oSTX+‘L‘+chr(13) // FORMATO DE ETIQUETA
cTexto+=‘D11‘+chr(13) // TAMANHO DA FONTE EM PIXEL
cTexto+=‘H17‘+chr(13) //fixa temperatura vai de: H10 a H20 recomendavel H16
//cTexto+= ‘1 A 5 2 000 0080 0105‘+_cCODBARRA+CHR(10) orientação / tipo / larg barra larga / larg barra fina / altura / Coord y / Coord X
// A= COD39 ALPHANUMERICO
FOR X=1 TO 2
if x=1 // etiqueta lado esquerdo DUAS COLUNAS
SLK->(dbseek(xfilial("SLK")+MV_PAR01))
SB1->(dbseek(xfilial("SB1")+SLK->LK_CODIGO))
cFonte = iif(len(alltrim(SB1->B1_DESC)) > 40 , ‘0‘,‘1‘)
cTexto+= ‘1A3200000100010‘+alltrim(SLK->LK_CODBAR)+CHR(13) // imprime o codigo de barras era 52 mas não coube na etiqueta
cTexto+= ‘1‘+cFonte+‘1100000600010‘+subs(SB1->B1_DESC,1,50)+CHR(13) // imprime a descrição do produto
cTexto+= ‘121100000700060‘+alltrim(SLK->LK_CODBAR)+CHR(13) // imprime o codigo do produto
elseif x=2 .and. !empty(MV_PAR02) // etiqueta lado direito
SLK->(dbseek(xfilial("SLK")+MV_PAR02))
SB1->(dbseek(xfilial("SB1")+SLK->LK_CODIGO))
cFonte = iif(len(alltrim(SB1->B1_DESC)) > 40 , ‘0‘,‘1‘)
cTexto+= ‘1A3200000100215‘+alltrim(SLK->LK_CODBAR)+CHR(13) // imprime o codigo de barras
cTexto+= ‘1‘+cFonte+‘1100000600215‘+subs(SB1->B1_DESC,1,50)+CHR(13) // imprime a descrição do produto
cTexto+= ‘121100000700275‘+alltrim(SLK->LK_CODBAR)+CHR(13) // imprime o codigo do produto
endif
NEXT
cTexto+=oSTX+‘Q‘+strzero(MV_PAR03,4)+chr(13)
cTexto+=‘E‘+chr(13)
cTexto+=oSTX+‘f320‘+chr(13) // Avança uma polegada para destacar e depois volta
cTexto+=oSTX+‘Q‘+chr(13) // APAGA OS DADOS DA MEMÓRIA DA IMPRESSORA
@ Prow(),pCol() psay CTEXTO
Set Device To Screen
If aReturn[5] == 1
Set Printer TO
dbcommitAll()
ourspool(wnrel)
Endif
MS_FLUSH()
return
|
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|