Codigo de barras em impressora termica
Moderador: Moderadores
Codigo de barras em impressora termica
Olas,
Tenho uma rotina que imprime codigos de barra em impressoras matricias, mas ai um cliente comprou uma termica...os comandos não casam mesmo...
A impressora é a IM433T da Diebold - no site (www.mecaf.com.br) eles não falam nada, e também não dão retorno dos emails que eu envio...
Alguém poderia me dar um help ??
Tenho uma rotina que imprime codigos de barra em impressoras matricias, mas ai um cliente comprou uma termica...os comandos não casam mesmo...
A impressora é a IM433T da Diebold - no site (www.mecaf.com.br) eles não falam nada, e também não dão retorno dos emails que eu envio...
Alguém poderia me dar um help ??
Re: Codigo de barras em impressora termica
Informações acerca da programação, manutenção, etc dessa impressora você poderá encontrar num FAQ disponível em PDF no meu site (pub), seção "manuals". Acho que ele tem tudo o que é necessário.rbonotto escreveu:A impressora é a IM433T da Diebold - no site (www.mecaf.com.br) eles não falam nada, e também não dão retorno dos emails que eu envio...
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Legal !
Só que quando dou o comando direto ele sai o código de barras:
@ prow()+1,01 say chr(27) + chr(124) + chr(48) + chr(120) + chr(2) + chr(2) + chr(48) + ch(49) e ai por diante ok.
Mas quando jogo para dentro de uma variavel ele dá codigo invalido. Ai segue a rotina que fiz:
Que estou fazendo de errado ?
Abs,
Só que quando dou o comando direto ele sai o código de barras:
@ prow()+1,01 say chr(27) + chr(124) + chr(48) + chr(120) + chr(2) + chr(2) + chr(48) + ch(49) e ai por diante ok.
Mas quando jogo para dentro de uma variavel ele dá codigo invalido. Ai segue a rotina que fiz:
Código: Selecionar todos
WHILE .T.
clear
mYvar := SPACE(20)
@ 01,01 GET mYvar
READ
if lastkey() == 27; exit; end
mYvar := alltrim(mYvar)
nVez := LEN(mYvar)
fmaVar := ''
cOntar := 1
vArcod := ''
WHILE nVez > 0
iNaVar := LEFT(mYvar,cOntar)
fmaVar := RIGHT(iNaVar,1)
IF ALLTRIM(fmaVar) == '0'
vArcod := vArcod + "CHR(48)+"
ELSEIF (fmaVar) == '1'
vArcod := vArcod + "CHR(49)+"
ELSEIF (fmaVar) == '2'
vArcod := vArcod + "CHR(50)+"
ELSEIF (fmaVar) == '3'
vArcod := vArcod + "CHR(51)+"
ELSEIF (fmaVar) == '4'
vArcod := vArcod + "CHR(52)+"
ELSEIF (fmaVar) == '5'
vArcod := vArcod + "CHR(53)+"
ELSEIF (fmaVar) == '6'
vArcod := vArcod + "CHR(54)+"
ELSEIF (fmaVar) == '7'
vArcod := vArcod + "CHR(55)+"
ELSEIF (fmaVar) == '8'
vArcod := vArcod + "CHR(56)+"
ELSEIF (fmaVar) == '9'
vArcod := vArcod + "CHR(57)+"
END
nVez --
cOntar ++
END
nUmsai := LEN(vArcod) - 1
vArcod := LEFT(vArcod,nUmsai)
set device to print
@ prow()+1,01 say chr(27) + chr(124) + chr(48) + chr(120) + chr(2) + chr(2) + vArcod
set device to SCREEN
ENDAbs,
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
Caro rbonotto, acredito que o que está faltando é interpretar a sua concatenação, pois você está colocando aspas nos "CHR()". Ou você tira as aspas (que não sei que efeito daria) pois comando de impressão nem sempre dá para concatenar ou então você interpreta com o MARCO "&" a essa variáveL vArcod.
Ficando:
@ prow()+1,01 say chr(27) + chr(124) + chr(48) + chr(120) + chr(2) + chr(2) + (&(vArcod ))
Confirme se deu certo.
Ficando:
@ prow()+1,01 say chr(27) + chr(124) + chr(48) + chr(120) + chr(2) + chr(2) + (&(vArcod ))
Confirme se deu certo.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Valeu, mas não deu certo...ela esta interpretando como passando os numeros, sai na impressora codigo invalido e os numero que o usuario digitaria, se eu digitar 5467236 sai na impressora os mesmo 5467236 e não o codigo de barra correspondente...Pablo César escreveu:Caro rbonotto, acredito que o que está faltando é interpretar a sua concatenação, pois você está colocando aspas nos "CHR()". Ou você tira as aspas (que não sei que efeito daria) pois comando de impressão nem sempre dá para concatenar ou então você interpreta com o MARCO "&" a essa variáveL vArcod.
Ficando:
@ prow()+1,01 say chr(27) + chr(124) + chr(48) + chr(120) + chr(2) + chr(2) + (&(vArcod ))
Confirme se deu certo.
A questão é: precisa interpretar dígito por dígito? Não. O usuário entrará números e estes poderão ser passados para a impressora da forma como vieram. Não é necessário mais nada. Enxuguei o seu código. Cole no seu editor de textos, salve e teste do jeito que está.
Seu código até daria certo se você fizesse uma macro substituição, que é desnecessária. O que ele faz, afinal, é trocar, por exemplo, a string "0" pelo resultado de &("Chr(48)"), que é a mesma string "0".
Código: Selecionar todos
#define MAX_SIZE 20
while .t.
cUsrEnt := Space(MAX_SIZE)
@ 1,1 say "Número: " get cUsrEnt pic Repli("9",MAX_SIZE)
read
if LastKey() = 27
exit
end
set device to print
@ prow()+1,01 say chr( 27) + chr(124) + chr(48) +;
chr(120) + chr( 2) + chr( 2) + cUsrEnt
set device to screen
end
quit
Editado pela última vez por Maligno em 16 Jul 2007 19:21, em um total de 1 vez.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
E se fizer assim ?
Código: Selecionar todos
CVAR:=SPACE(20)
@ 12,00 GET CVAR PICT "@9"
READ
CVAR:=ALLTRIM(CVAR)
VARCOD:=""
FOR I=1 TO LEN(CVAR)
VARCOD:=VARCOD+CHR( ASC( SUBSTR(CVAR,I,1) ) )
NEXT
set device to print
@ prow()+1,01 say chr(27) + chr(124) + chr(48) + chr(120) + chr(2) + chr(2) + VARCOD
set device to SCREENUm clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Se você fatorar isso, verá que é o mesmo que fazer (10*2)/2. Ou seja, trocou seis por meia dúzia.Pablo César escreveu:CHR( ASC( SUBSTR(CVAR,I,1) ) )
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
- Pablo César
- Usuário Nível 7

- Mensagens: 5312
- Registrado em: 31 Mai 2006 10:22
- Localização: Curitiba - Paraná
kakaka...

Pois é... eu tinha percebido quando terminei de postar... realmente não é necessário converter nenhuma string. Mas eu fui no embalo e acabei seguindo a mesma lógica do colega, acreditando que isso seria necessário para impressão de código de barras naquela impressora. Mas de fato Maligno, você tem razão ! Não precisa nada mais que tirar os espaços e colocar o picture de aceitar somente números (se esse for o caso).
Pois é... eu tinha percebido quando terminei de postar... realmente não é necessário converter nenhuma string. Mas eu fui no embalo e acabei seguindo a mesma lógica do colega, acreditando que isso seria necessário para impressão de código de barras naquela impressora. Mas de fato Maligno, você tem razão ! Não precisa nada mais que tirar os espaços e colocar o picture de aceitar somente números (se esse for o caso).
Editado pela última vez por Pablo César em 16 Jul 2007 19:35, em um total de 1 vez.
Um clip-abraço !
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Pablo César Arrascaeta
Compartilhe suas dúvidas e soluções com todos os colegas aqui do fórum.
Evite enviar as dúvidas técnicas por MPs ou eMails, assim todos iremos beneficiar-nos.
Acontece com as melhores famílias. Eu faço isso o tempo todo.
))
Até esqueci de tirar os espaços. Mas pra efeito de teste está de bom tamanho. Depois o colega dá uma refinada na coisa toda. O importante é que funcione.
Até esqueci de tirar os espaços. Mas pra efeito de teste está de bom tamanho. Depois o colega dá uma refinada na coisa toda. O importante é que funcione.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Mas peraí... Pelo que eu vi no manual, você está querendo imprimir código de barras EAN-13, que é codificado. Se você digitar um número qualquer, acho que só vai imprimir por coincidência. Não deve imprimir um número cujo dígito verificador esteja inválido.rbonotto escreveu:O troço é chato mesmo, testei com a duas indicações dos colegas mas continua ocorrendo o mesmo: codigo invalido....
Aliás, 20 espaços para o número é exagero. Diminua pra 13, execute o programa do jeito que eu mandei e digite 7898315310012 pra testar. Se imprimir, bingo! É esse o problema. Se não imprimir, queime um pouco de enxofre em cima do computador, dê 3 pulos no lugar e tente de novo.
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Buana deve gerar um número aleatório de 12 dígitos e calcular o DV, anexando-o antes da impressão. Para o cálculo do DV, eu tenho uma função:rbonotto escreveu:o programa meu gera um numero aleatoriamente e este deverá ser impresso no formato de código de barras....
Que o "buana" aqui dever fazer?
Código: Selecionar todos
function CalcEAN13(cBase)
local nSum := 0
local i
for i := 1 to 12
nSum += Val(SubStr(cBase,i,1)) * if(i%2>0,1,3)
next
return if(nSum%10=0, "0", Str(((Int(nSum/10)+1)*10)-nSum,1))[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Com certeza !!Maligno escreveu:Buana deve gerar um número aleatório de 12 dígitos e calcular o DV, anexando-o antes da impressão. Para o cálculo do DV, eu tenho uma função:rbonotto escreveu:o programa meu gera um numero aleatoriamente e este deverá ser impresso no formato de código de barras....
Que o "buana" aqui dever fazer?
Falando nisso, eu fiz mas nunca usei essa função. Aproveita pra testar pra mim.Código: Selecionar todos
function CalcEAN13(cBase) local nSum := 0 local i for i := 1 to 12 nSum += Val(SubStr(cBase,i,1)) * if(i%2>0,1,3) next return if(nSum%10=0, "0", Str(((Int(nSum/10)+1)*10)-nSum,1))
amanhã teseto e dou um alo,
Valeu por esta atenção !

