Imprimi Pßgina | Fechar janela

IMPRIMIR ETIQUETA com Dados da Nota Fiscal (Danfe)

Impresso de: Helpfacil - Portal do conhecimento
Nome do Forum: Outros Mˇdulos/Ferramentas
DescrišŃo do Forum: D˙vidas sobre demais Mˇdulos e ferramentas Protheus
URL:http://www.helpfacil.com.br/display_topic_threads.asp?ForumID=13&TopicID=41520
Data da ImpressŃo: sßbado, 20 de outubro de 2018 at 07:22


Topico: IMPRIMIR ETIQUETA com Dados da Nota Fiscal (Danfe)

Postado por: SPFCBR
Assunto: IMPRIMIR ETIQUETA com Dados da Nota Fiscal (Danfe)
Data Postagem: sexta-feira, 12 de janeiro de 2018 at 10:02

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 ?




Respostas:

Postado Por: LUFERSB
Data Postagem: sexta-feira, 12 de janeiro de 2018 at 14:36

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



Postado Por: WALTERFCAR
Data Postagem: sexta-feira, 12 de janeiro de 2018 at 17:48

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.





Postado Por: WALTERFCAR
Data Postagem: sexta-feira, 12 de janeiro de 2018 at 17:48

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.





Postado Por: SPFCBR
Data Postagem: segunda-feira, 15 de janeiro de 2018 at 09:44

Ola !!!

Venho agradecer a ajuda dos colegas WALTERFCAR e LUFERSB.

Muito Obrigado mesmo.....

Valeu !!!!



Postado Por: ROBERTOMEN
Data Postagem: segunda-feira, 15 de janeiro de 2018 at 13:10


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






Imprimir Pßgina | Fechar Janela