Validação de Código EAN13
Citação de Kindrazki em 10 de maio de 2012, 17:21Boa tarde, tem alguma forma de validar códigos EAN13, pois quando cadastrados errados não autoriza NFe.
Se for uma NFe com 50 códigos terá que conferir um a um!!!
Boa tarde, tem alguma forma de validar códigos EAN13, pois quando cadastrados errados não autoriza NFe.
Se for uma NFe com 50 códigos terá que conferir um a um!!!
Citação de Kindrazki em 17 de maio de 2012, 09:21Não conhecemos direito a estrutura da numeração dos códigos de barras, mas se tem uma fórmula para calcular a sua validação (imaginamos que seja algo parecido com a validação de um CNPJ ou CPF), então possivelmente tem como ser feito.
Não sabemos o quanto isso é importante, se é apenas para resolver uma situação isolada, incomum, ou se pode ser realmente útil no seu dia-a-dia.
Caso seja um recurso importante, imaginamos que podemos criar uma ferramenta dentro do observador capaz de atender sua necessidade.Abraço,
Fernando Coelho.
Não conhecemos direito a estrutura da numeração dos códigos de barras, mas se tem uma fórmula para calcular a sua validação (imaginamos que seja algo parecido com a validação de um CNPJ ou CPF), então possivelmente tem como ser feito.
Não sabemos o quanto isso é importante, se é apenas para resolver uma situação isolada, incomum, ou se pode ser realmente útil no seu dia-a-dia.
Caso seja um recurso importante, imaginamos que podemos criar uma ferramenta dentro do observador capaz de atender sua necessidade.
Abraço,
Fernando Coelho.
Citação de Kindrazki em 18 de maio de 2012, 15:51Obrigado pela resposta Fernando, pelas minhas perquisas realmente é alguma forma de estrutura sim, parecida com validação de cpf e cnpj, ainda não está me atrapalhando muito, mas caso venha incomodar muito entro em contato.
Obrigado pela resposta Fernando, pelas minhas perquisas realmente é alguma forma de estrutura sim, parecida com validação de cpf e cnpj, ainda não está me atrapalhando muito, mas caso venha incomodar muito entro em contato.
Citação de Kindrazki em 5 de junho de 2012, 18:52Dr. Élcio criou a função, achei vários erros nos meus quase 4000 códigos EAN, que for fim vamos ganhar tempo onde poderia aparecer os erros.
Dr. Élcio criou a função, achei vários erros nos meus quase 4000 códigos EAN, que for fim vamos ganhar tempo onde poderia aparecer os erros.
Citação de Kindrazki em 5 de junho de 2012, 18:52Dr. Élcio criou a função, achei vários erros nos meus quase 4000 códigos EAN, que for fim vamos ganhar tempo onde poderia aparecer os erros.
Dr. Élcio criou a função, achei vários erros nos meus quase 4000 códigos EAN, que for fim vamos ganhar tempo onde poderia aparecer os erros.
Citação de Kindrazki em 5 de junho de 2012, 20:32Opa, obrigado pelos créditos Miza rsrs, mas o mestre dos magos Douglas foi o mentor da solução, impulsionado pela cobrança do Fernando também, enfim, bom que todos em conjunto agiram.
Segue Script da tarefa para servir de referencia em futuras.
[code]
SCRIPT
connect $v{datasource1};xsql select '7890176027375' as ean, '' as ean2
sql_var(sql);sql
select
cast(EAN as char(13)) as ean
,'' as ean2
,codigo as codigo
,nome as nome
from
Produtos
where
not ean is null and ean <> ''
order by nome
sql_var(sql);set script = "
import com.elisha.commons.util.datalist.DataList^
import com.elisha.commons.util.datalist.DataListRow^
import bdo.srv.exec.script.ext.EAN13^def dataListRow^
def dataList = execScript.getDataList('sql')^
int numRows = dataList.getNumRows()^
int qtdErros = 0^
def ean^for (int i = 0~ i < numRows~ i++) {^
dataListRow = dataList.getRow(i)^
ean = dataListRow.getString(0).substring(0,12)^
dataListRow.setValue(1, ean+EAN13.getDigito(ean))^
if (!dataListRow.getString(0).equals(dataListRow.getString(1))) {^
qtdErros++^
}^
}^execScript.addVar('qtdErros', ''+qtdErros)^
return true^
".replace('^','\n').replace('~', ''+((char)59));set run = $v{script};
[/code]
[code]
NOTIFICAÇÃO
$include{script-notif-cabecalho, "Códigos de Barras Errados - EAN13", ""}include<div id="content">
<table class="report">
<thead><tr>
<th>Código Produto</th>
<th>Nome Produto</th>
<th>EAN Atual</th>
<th>EAN Calculado</th>
</tr></thead>
</tbody>
$> boolean change = true;
$> int count = 0;
$> for (a = 1; a <= $c{ean:count}; a++) {
$> if (!getString('$c{ean[a]}').equals(getString('$c{ean2[a]}'))) {
$> change = !change;
$> count++;
$> sb.append('<tr' + (change ? '$v{def-bgcolor2}>' : '$v{def-bgcolor1}>'));
<td>~~~~~~~~~</td> -> $c{codigo[a]} c;
<td>~~~~~~~~~</td> -> $c{nome[a]} l;
<td>~~~~~~~~~</td> -> $c{ean[a]} l;
<td>~~~~~~~~~</td> -> $c{ean2[a]} l;
</tr>
$> }}
<tr>
<td>Totais:</td>
$> set('count', count);
<td>~~~~~~</td> -> $v{count} l;
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>$include{script-notif-rodape}include
[/code]
Opa, obrigado pelos créditos Miza rsrs, mas o mestre dos magos Douglas foi o mentor da solução, impulsionado pela cobrança do Fernando também, enfim, bom que todos em conjunto agiram.
Segue Script da tarefa para servir de referencia em futuras.
[code]
SCRIPT
connect $v{datasource1};
xsql select '7890176027375' as ean, '' as ean2
sql_var(sql);
sql
select
cast(EAN as char(13)) as ean
,'' as ean2
,codigo as codigo
,nome as nome
from
Produtos
where
not ean is null and ean <> ''
order by nome
sql_var(sql);
set script = "
import com.elisha.commons.util.datalist.DataList^
import com.elisha.commons.util.datalist.DataListRow^
import bdo.srv.exec.script.ext.EAN13^
def dataListRow^
def dataList = execScript.getDataList('sql')^
int numRows = dataList.getNumRows()^
int qtdErros = 0^
def ean^
for (int i = 0~ i < numRows~ i++) {^
dataListRow = dataList.getRow(i)^
ean = dataListRow.getString(0).substring(0,12)^
dataListRow.setValue(1, ean+EAN13.getDigito(ean))^
if (!dataListRow.getString(0).equals(dataListRow.getString(1))) {^
qtdErros++^
}^
}^
execScript.addVar('qtdErros', ''+qtdErros)^
return true^
".replace('^','\n').replace('~', ''+((char)59));
set run = $v{script};
[/code]
[code]
NOTIFICAÇÃO
$include{script-notif-cabecalho, "Códigos de Barras Errados - EAN13", ""}include
<div id="content">
<table class="report">
<thead><tr>
<th>Código Produto</th>
<th>Nome Produto</th>
<th>EAN Atual</th>
<th>EAN Calculado</th>
</tr></thead>
</tbody>
$> boolean change = true;
$> int count = 0;
$> for (a = 1; a <= $c{ean:count}; a++) {
$> if (!getString('$c{ean[a]}').equals(getString('$c{ean2[a]}'))) {
$> change = !change;
$> count++;
$> sb.append('<tr' + (change ? '$v{def-bgcolor2}>' : '$v{def-bgcolor1}>'));
<td>~~~~~~~~~</td> -> $c{codigo[a]} c;
<td>~~~~~~~~~</td> -> $c{nome[a]} l;
<td>~~~~~~~~~</td> -> $c{ean[a]} l;
<td>~~~~~~~~~</td> -> $c{ean2[a]} l;
</tr>
$> }}
<tr>
<td>Totais:</td>
$> set('count', count);
<td>~~~~~~</td> -> $v{count} l;
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
$include{script-notif-rodape}include
[/code]
Citação de Kindrazki em 5 de junho de 2012, 20:33Opa, obrigado pelos créditos Miza rsrs, mas o mestre dos magos Douglas foi o mentor da solução, impulsionado pela cobrança do Fernando também, enfim, bom que todos em conjunto agiram.
Segue Script da tarefa para servir de referencia em futuras.
[code]
SCRIPT
connect $v{datasource1};xsql select '7890176027375' as ean, '' as ean2
sql_var(sql);sql
select
cast(EAN as char(13)) as ean
,'' as ean2
,codigo as codigo
,nome as nome
from
Produtos
where
not ean is null and ean <> ''
order by nome
sql_var(sql);set script = "
import com.elisha.commons.util.datalist.DataList^
import com.elisha.commons.util.datalist.DataListRow^
import bdo.srv.exec.script.ext.EAN13^def dataListRow^
def dataList = execScript.getDataList('sql')^
int numRows = dataList.getNumRows()^
int qtdErros = 0^
def ean^for (int i = 0~ i < numRows~ i++) {^
dataListRow = dataList.getRow(i)^
ean = dataListRow.getString(0).substring(0,12)^
dataListRow.setValue(1, ean+EAN13.getDigito(ean))^
if (!dataListRow.getString(0).equals(dataListRow.getString(1))) {^
qtdErros++^
}^
}^execScript.addVar('qtdErros', ''+qtdErros)^
return true^
".replace('^','\n').replace('~', ''+((char)59));set run = $v{script};
[/code]
[code]
NOTIFICAÇÃO
$include{script-notif-cabecalho, "Códigos de Barras Errados - EAN13", ""}include<div id="content">
<table class="report">
<thead><tr>
<th>Código Produto</th>
<th>Nome Produto</th>
<th>EAN Atual</th>
<th>EAN Calculado</th>
</tr></thead>
</tbody>
$> boolean change = true;
$> int count = 0;
$> for (a = 1; a <= $c{ean:count}; a++) {
$> if (!getString('$c{ean[a]}').equals(getString('$c{ean2[a]}'))) {
$> change = !change;
$> count++;
$> sb.append('<tr' + (change ? '$v{def-bgcolor2}>' : '$v{def-bgcolor1}>'));
<td>~~~~~~~~~</td> -> $c{codigo[a]} c;
<td>~~~~~~~~~</td> -> $c{nome[a]} l;
<td>~~~~~~~~~</td> -> $c{ean[a]} l;
<td>~~~~~~~~~</td> -> $c{ean2[a]} l;
</tr>
$> }}
<tr>
<td>Totais:</td>
$> set('count', count);
<td>~~~~~~</td> -> $v{count} l;
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>$include{script-notif-rodape}include
[/code]
Opa, obrigado pelos créditos Miza rsrs, mas o mestre dos magos Douglas foi o mentor da solução, impulsionado pela cobrança do Fernando também, enfim, bom que todos em conjunto agiram.
Segue Script da tarefa para servir de referencia em futuras.
[code]
SCRIPT
connect $v{datasource1};
xsql select '7890176027375' as ean, '' as ean2
sql_var(sql);
sql
select
cast(EAN as char(13)) as ean
,'' as ean2
,codigo as codigo
,nome as nome
from
Produtos
where
not ean is null and ean <> ''
order by nome
sql_var(sql);
set script = "
import com.elisha.commons.util.datalist.DataList^
import com.elisha.commons.util.datalist.DataListRow^
import bdo.srv.exec.script.ext.EAN13^
def dataListRow^
def dataList = execScript.getDataList('sql')^
int numRows = dataList.getNumRows()^
int qtdErros = 0^
def ean^
for (int i = 0~ i < numRows~ i++) {^
dataListRow = dataList.getRow(i)^
ean = dataListRow.getString(0).substring(0,12)^
dataListRow.setValue(1, ean+EAN13.getDigito(ean))^
if (!dataListRow.getString(0).equals(dataListRow.getString(1))) {^
qtdErros++^
}^
}^
execScript.addVar('qtdErros', ''+qtdErros)^
return true^
".replace('^','\n').replace('~', ''+((char)59));
set run = $v{script};
[/code]
[code]
NOTIFICAÇÃO
$include{script-notif-cabecalho, "Códigos de Barras Errados - EAN13", ""}include
<div id="content">
<table class="report">
<thead><tr>
<th>Código Produto</th>
<th>Nome Produto</th>
<th>EAN Atual</th>
<th>EAN Calculado</th>
</tr></thead>
</tbody>
$> boolean change = true;
$> int count = 0;
$> for (a = 1; a <= $c{ean:count}; a++) {
$> if (!getString('$c{ean[a]}').equals(getString('$c{ean2[a]}'))) {
$> change = !change;
$> count++;
$> sb.append('<tr' + (change ? '$v{def-bgcolor2}>' : '$v{def-bgcolor1}>'));
<td>~~~~~~~~~</td> -> $c{codigo[a]} c;
<td>~~~~~~~~~</td> -> $c{nome[a]} l;
<td>~~~~~~~~~</td> -> $c{ean[a]} l;
<td>~~~~~~~~~</td> -> $c{ean2[a]} l;
</tr>
$> }}
<tr>
<td>Totais:</td>
$> set('count', count);
<td>~~~~~~</td> -> $v{count} l;
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
$include{script-notif-rodape}include
[/code]
Citação de Kindrazki em 5 de junho de 2012, 20:35Opa, obrigado pelos créditos Miza rsrs, mas o mestre dos magos Douglas foi o mentor da solução, impulsionado pela cobrança do Fernando também, enfim, bom que todos em conjunto agiram.
segue exemplo de tarefa:
http://dl.dropbox.com/u/21317388/Observador/Exemplo%20tarefa%20valida%C3%A7%C3%A3o%20codigo%20EAN.txt
Opa, obrigado pelos créditos Miza rsrs, mas o mestre dos magos Douglas foi o mentor da solução, impulsionado pela cobrança do Fernando também, enfim, bom que todos em conjunto agiram.
segue exemplo de tarefa:
http://dl.dropbox.com/u/21317388/Observador/Exemplo%20tarefa%20valida%C3%A7%C3%A3o%20codigo%20EAN.txt