PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  ADVPL
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
ETIQUETA COM CÓDIGO DE BARRAS
Versão:
12.1.2210
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário PAULO0210 PAULO0210 em 28/08/2024, 18:26 h
Local: MG  Registro: 18/09/2023  Postagens: 34
Boa tarde pessoal,

Estou desenvolvendo um fonte pra imprimir etiqueta de códigos de barras, mas recebo um log

(THREAD ERROR ([16840], Paulo, NOTEBOOK-PAULO)   28/08/2024 18:21:05
argument #0 error, expected C->L, function upper on CBBAR:CBCODE128(MSBARHP.PRW) 22/07/2020 13:27:00 line : 247)

Abaixo o fonte:

#INCLUDE "RPTDEF.CH"
#INCLUDE "FWPrintSetup.ch"
#INCLUDE "protheus.ch"
#Include ‘TopConn.ch‘
User Function Etiqueta()

Local lFinal     := .T.

     If ValidPerg()
          MsAguarde({|| ImpEtiq() },"Impressão de etiqueta","Aguarde...")
     EndIf

Return

Static Function ImpEtiq()
     Local cQuery     := ""
     Local cProdDe     := MV_PAR01
     Local cProdAte     := MV_PAR02
     Local nQuant     := MV_PAR03
     Local cImpress := Alltrim(MV_PAR04) //pego o nome da impressora
     Local cLogo      := "\system\logo.jpg"
     Local oFont16     := TFont():New(‘Arial‘,16,16,,.F.,,,,.T.,.F.,.F.)
     Local oFont16N     := TFont():New(‘Arial‘,16,16,,.T.,,,,.T.,.F.,.F.)
     Local QRYTMP    := ""
     Local lAdjustToLegacy      := .F.
     Local lDisableSetup      := .T.

     Local nLin          := 0
     Local nCol          := 0
     Local nLinC          := 0
     Local nColC          := 0
     Local nWidth     := 0
     Local nHeigth   := 0
     Local lBanner     := .T.          //Se imprime a linha com o código embaixo da barra. Default .T.
     Local nPFWidth     := 0
     Local nPFHeigth     := 0
     Local lCmtr2Pix     := .T.          //Utiliza o método Cmtr2Pix() do objeto Printer.Default .T.

     MsProcTxt("Identificando a impressora...")

     Private oPrinter := FWMSPrinter():New("produto"+Alltrim(__cUserID)+".etq",IMP_SPOOL,lAdjustToLegacy,"/spool/",lDisableSetup,,,Alltrim(cImpress) /*parametro que recebe a impressora*/)
     
     //Para saber mais sobre o componente FWMSPrinter acesse http://tdn.totvs.com/display/public/mp/FWMsPrinter

     cQuery := "SELECT B1_COD ‘CODIGO‘, B1_DESC ‘DESC‘, B1_COD ‘CODBAR‘ FROM SB1000 WHERE D_E_L_E_T_=‘‘ AND B1_MSBLQL<>‘1‘"

     TcQuery cQuery New Alias "QRYTMP"
     QRYTMP->(DbGoTop())

     oPrinter:SetMargin(001,001,001,001)

     // While QRYTMP-&gt;(!Eof())
     //      For nR := 1 to nQuant
     //           nLin := 10
     //           nCol := 22
    //          MsProcTxt("Imprimindo " + alltrim(QRYTMP-&gt;CODIGO) + " - " + alltrim(QRYTMP->) + "...")
               

     //           oPrinter:StartPage()

     //           oPrinter:SayBitmap(nLin,nCol,cLogo,100,030)

     //           nLin+= 45
     //           oPrinter:Say(nLin,nCol,"Produto",oFont16)

     //           nLinC          := 4.95          //Linha que será impresso o Código de Barra
     //           nColC          := 1.6          //Coluna que será impresso o Código de Barra
     //           nWidth           := 0.0164     //Numero do Tamanho da barra. Default 0.025 limite de largura da etiqueta é 0.0164
     //           nHeigth        := 0.6          //Numero da Altura da barra. Default 1.5 --- limite de altura é 0.3
     //           lBanner          := .T.          //Se imprime a linha com o código embaixo da barra. Default .T.
     //           nPFWidth     := 0.8          //Número do índice de ajuste da largura da fonte. Default 1
     //           nPFHeigth     := 0.9          //Número do índice de ajuste da altura da fonte. Default 1
     //           lCmtr2Pix     := .T.          //Utiliza o método Cmtr2Pix() do objeto Printer.Default .T.

     //           oPrinter:FWMSBAR("CODE128" , nLinC , nColC, alltrim(QRYTMP-&gt;CODBAR), oPrinter,/*lCheck*/,/*Color*/,/*lHorz*/, nWidth, nHeigth,.F.,/*cFont*/,/*cMode*/,.F./*lPrint*/,nPFWidth,nPFHeigth,lCmtr2Pix)

     //           nLin+= 40
     //           oPrinter:Say(nLin,nCol,alltrim(QRYTMP-&gt;CODIGO) + " - " + alltrim(QRYTMP-&gt;DESC),oFont16)

     //           oPrinter:EndPage()
     //      Next
     //      QRYTMP-&gt;(DbSkip())
     // EndDo
     // oPrinter:Print()
     // QRYTMP-&gt;(DbCloseArea())

     While QRYTMP->(!Eof())
    For nR := 1 to nQuant
        nLin := 10
        nCol := 22
        MsProcTxt("Imprimindo " + ALLTRIM(QRYTMP->CODIGO) + " - " + ALLTRIM(QRYTMP->DESC) + "...")

        oPrinter:StartPage()

        oPrinter:SayBitmap(nLin, nCol, cLogo, 100, 030)

        nLin += 45
        oPrinter:Say(nLin, nCol, "Produto", oFont16)

        nLinC := 4.95       // Linha que será impressa o Código de Barra
        nColC := 1.6        // Coluna que será impressa o Código de Barra
        nWidth := 0.0164    // Número do Tamanho da barra. Default 0.025 limite de largura da etiqueta é 0.0164
        nHeigth := 0.6      // Número da Altura da barra. Default 1.5 --- limite de altura é 0.3
        lBanner := .T.      // Se imprime a linha com o código embaixo da barra. Default .T.
        nPFWidth := 0.8     // Número do índice de ajuste da largura da fonte. Default 1
        nPFHeigth := 0.9    // Número do índice de ajuste da altura da fonte. Default 1
        lCmtr2Pix := .T.   // Utiliza o método Cmtr2Pix() do objeto Printer.Default .T.

          oPrinter:FWMSBAR("CODE128",nLinC,nColC,ALLTRIM(QRYTMP->CODBAR),oPrinter,.F.,.F.,.F.,nWidth,nHeigth,.F.,.F.,.F.,nPFWidth,nPFHeigth,lCmtr2Pix)
        nLin += 40
        oPrinter:Say(nLin, nCol, ALLTRIM(QRYTMP->CODIGO) + " - " + ALLTRIM(QRYTMP->DESC), oFont16)

        oPrinter:EndPage()
    Next
    QRYTMP->(DbSkip())
EndDo
oPrinter:Print()
QRYTMP->(DbCloseArea())

Return

/*Montagem da tela de perguntas*/
Static Function ValidPerg()
     Local aRet           := {}
     Local aParamBox     := {}
     Local lRet           := .F.
     Local aOpcoes     := {}
     Local cProdDe     := ""
     Local cProdAte     := ""
     Local cLocal     := SPACE(99)

     If EMPTY(GETMV("ZZ_IMPRESS")) //se o parametro estiver vazio, ja o defino com a impressora Microsoft Print to PDF
          aOpcoes := {"Microsoft Print to PDF"}
     Else
          aOpcoes := SEPARA(GETMV("ZZ_IMPRESS"),";")
     Endif

     cProdDe := SPACE(TamSX3("B1_COD")[1])
     cProdAte:= REPLICATE("Z",TAMSX3("B1_COD")[1])

     aAdd(aParamBox,{01,"Produto de"                     ,cProdDe      ,""                         ,"","SB1"     ,"", 60,.F.})     // MV_PAR01
     aAdd(aParamBox,{01,"Produto ate"                  ,cProdAte     ,""                         ,"","SB1"     ,"", 60,.T.})     // MV_PAR02
     aAdd(aParamBox,{01,"Quantidade Etiqueta"     ,1               ,"@E 9999"               ,"",""          ,"", 60,.F.})     // MV_PAR03
     aadd(aParamBox,{02,"Imprimir em"               ,Space(50)     ,aOpcoes               ,100,".T.",.T.,".T."})          // MV_PAR04

     If ParamBox(aParamBox," Etiqueta Produto",/*aRet*/,/*bOk*/,/*aButtons*/,.T.,,,,FUNNAME(),.T.,.T.)

          If ValType(MV_PAR04) == "N" //Algumas vezes ocorre um erro de ao invés de selecionar o conteúdo, seleciona a ordem, então verifico se é numerico, se for, eu me posiciono na impressora desejada para pegar o seu nome
               MV_PAR04 := aOpcoes[MV_PAR04]
          EndIf

          lRet := .T.
     EndIf
Return lRet

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 29/08/2024, 08:05 h
Local: PR  Registro: 04/07/2017  Postagens: 546
Bom dia

Segue correção:

oPrinter:FWMSBAR("CODE128",nLinC,nColC,ALLTRIM(QRYTMP->CODBAR),oPrinter,.F.,.F.,.F.,nWidth,nHeigth, .F., NIL, NIL, .F.)


Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário PAULO0210 PAULO0210 em 29/08/2024, 09:58 h
Local: MG  Registro: 18/09/2023  Postagens: 34
Bom dia Roberto,

O erro em questão foi resolvido, mas a gora aparece outro rsrs.

THREAD ERROR ([49384], Paulo, NOTEBOOK-PAULO)   29/08/2024 09:54:42
argument #1 error, expected N->L, function NEW on CBBAR:FILLBAR(MSBARHP.PRW) 22/07/2020 13:27:00 line : 771

Mensagem do Enviar e-mail Abrir o Perfil do usuário ROBERTOMEN ROBERTOMEN em 12/09/2024, 20:09 h
Local: PR  Registro: 04/07/2017  Postagens: 546
boa noite

oPrinter:FWMSBAR("CODE128",nLinC,nColC,ALLTRIM(QRYTMP->CODBAR),oPrinter,.F.,NIL,.F.,nWidth,nHeigth, .F., NIL, NIL, .F.)


Veja agora

Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário PAULO0210 PAULO0210 em 16/09/2024, 17:08 h
Local: MG  Registro: 18/09/2023  Postagens: 34
Boa tarde!

Roberto, o erro foi corrigido, mas não estou conseguindo quebrar coluna e página para impressão em massa:

#INCLUDE "RPTDEF.CH"
#INCLUDE "FWPrintSetup.ch"
#INCLUDE "protheus.ch"
#Include ‘TopConn.ch‘
User Function Etiqueta()

Local lFinal     := .T.

     If ValidPerg()
          MsAguarde({||ImpEtiq()},"Impressão de etiqueta","Aguarde...")
     EndIf

Return

Static Function ImpEtiq()
     Local cQuery     := ""
     Local cProdDe     := MV_PAR01
     Local cProdAte     := MV_PAR02
     Local nQuant     := MV_PAR03
     Local cImpress := Alltrim(MV_PAR04) //Pego o nome da impressora
     Local cLogo      := "\system\logo.jpg"
     Local oFont16     := TFont():New(‘Arial‘,16,6,,.F.,,,,.T.,.F.,.F.)
     Local oFont16N     := TFont():New(‘Arial‘,16,16,,.T.,,,,.T.,.F.,.F.)
     Local QRYTMP    := ""
     Local lAdjustToLegacy      := .F.
     Local lDisableSetup      := .T.
     Local nR        := ""

     Local nLin          := 0
     Local nCol          := 0
     Local nLinC          := 0
     Local nColC          := 0
     Local nWidth     := 0
     Local nHeigth   := 0
     Local lBanner     := .F.          //Se imprime a linha com o código embaixo da barra. Default .T.
     Local nPFWidth     := 0
     Local nPFHeigth     := 0
     Local lCmtr2Pix     := .F.          //Utiliza o método Cmtr2Pix() do objeto Printer.Default .T.

     MsProcTxt("Identificando a impressora...")

     Private oPrinter := FWMSPrinter():New("produto"+Alltrim(__cUserID)+".etq",IMP_SPOOL,lAdjustToLegacy,"/spool/",lDisableSetup,,,Alltrim(cImpress) /*parametro que recebe a impressora*/)
     
     //Para saber mais sobre o componente FWMSPrinter acesse http://tdn.totvs.com/display/public/mp/FWMsPrinter

     cQuery := "SELECT B1_COD ‘CODIGO‘, B1_DESC ‘DESC‘, B1_COD ‘CODBAR‘ FROM SB1000 WHERE D_E_L_E_T_=‘‘ AND B1_COD >=‘"+MV_PAR01+"‘ AND B1_COD <=‘"+MV_PAR02+"‘ AND B1_MSBLQL<>‘1‘"

     TcQuery cQuery New Alias "QRYTMP"
     QRYTMP->(DbGoTop())

     oPrinter:SetMargin(050,050,050,050)


While QRYTMP->(!Eof())
     For nR := 1 To nQuant
          MsProcTxt("Imprimindo " + ALLTRIM(QRYTMP->CODIGO) + " - " + ALLTRIM(QRYTMP->DESC) + "...")

          oPrinter:SayBitmap(nLin, nCol, cLogo, 100, 030)
          nLinC += 5            // Linha que será impressa o Código de Barra
          nColC := 2          // Coluna que será impressa o Código de Barra
          nWidth := 0.0164    // Número do Tamanho da barra. Default 0.025 limite de largura da etiqueta é 0.0164
          nHeigth := 0.7      // Número da Altura da barra. Default 1.5 --- limite de altura é 0.3
          lBanner := .T.      // Se imprime a linha com o código embaixo da barra. Default .T.
          nPFWidth := 1       // Número do índice de ajuste da largura da fonte. Default 1
          nPFHeigth := 1      // Número do índice de ajuste da altura da fonte. Default 1
          lCmtr2Pix := .T.    // Utiliza o método Cmtr2Pix() do objeto Printer. Default .T.

          oPrinter:FWMSBAR("CODE128",nLinC,nColC,ALLTRIM(QRYTMP->CODBAR),oPrinter,/*lCheck*/,/*Color*/,/*lHorz*/,nWidth,nHeigth,lBanner,/*cFont*/,/*cMode*/,.F./*lPrint*/,nPFWidth,nPFHeigth,lCmtr2Pix)
          
     Next
     
     QRYTMP->(DbSkip())
EndDo
oPrinter:EndPage()
oPrinter:Print()

QRYTMP->(DbCloseArea())

Return

/*Montagem da tela de perguntas*/
Static Function ValidPerg()
     Local aRet           := {}
     Local aParamBox     := {}
     Local lRet           := .F.
     Local aOpcoes     := {}
     Local cProdDe     := ""
     Local cProdAte     := ""
     Local cLocal     := SPACE(99)

     If EMPTY(GETMV("ZZ_IMPRESS")) //se o parametro estiver vazio, ja o defino com a impressora Microsoft Print to PDF
          aOpcoes := {"Microsoft Print to PDF"}
     Else
          aOpcoes := SEPARA(GETMV("ZZ_IMPRESS"),";")
     Endif

     cProdDe := SPACE(TamSX3("B1_COD")[1])
     cProdAte:= REPLICATE("Z",TAMSX3("B1_COD")[1])

     aAdd(aParamBox,{01,"Produto de"                     ,cProdDe      ,""                         ,"","SB1"     ,"", 60,.F.})     // MV_PAR01
     aAdd(aParamBox,{01,"Produto ate"                  ,cProdAte     ,""                         ,"","SB1"     ,"", 60,.T.})     // MV_PAR02
     aAdd(aParamBox,{01,"Quantidade Etiqueta"     ,1               ,"@E 9999"               ,"",""          ,"", 60,.F.})     // MV_PAR03
     aadd(aParamBox,{02,"Imprimir em"               ,Space(50)     ,aOpcoes               ,100,".T.",.T.,".T."})          // MV_PAR04

     If ParamBox(aParamBox," Etiqueta Produto",/*aRet*/,/*bOk*/,/*aButtons*/,.T.,,,,FUNNAME(),.T.,.T.)

          If ValType(MV_PAR04) == "N" //Algumas vezes ocorre um erro de ao invés de selecionar o conteúdo, seleciona a ordem, então verifico se é numerico, se for, eu me posiciono na impressora desejada para pegar o seu nome
               MV_PAR04 := aOpcoes[MV_PAR04]
          EndIf

          lRet := .T.
     EndIf
Return lRet

Para postar no Fórum você precisa efetuar o seu login ou se registrar

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal