|
v7: BARCODE.OCX | ☑ | ||
---|---|---|---|---|
0
vadim777
22.07.16
✎
09:52
|
Самописная (не мной) конфа, генерирует штрих-код длиной 12 сим. При печати ценников/этикеток штрих-код печатается длиной 13 сим. Последний 13 символ берется как-бы ниоткуда, но закономерность заметил:
169581014000 -> 1695810140004 Т.е. штрих-код дополняется до длины 13 первым крайним справа ненулевым символом. Это делает сам barcode.ocx? Это как-бы стандарт? |
|||
1
opus70
22.07.16
✎
09:56
|
а посмотреть генирацию штрих кода не судъба
Функция глКонтрольныйСимволEAN(ШтрКод, Тип) Экспорт Четн = 0; Нечетн = 0; Если Тип = 13 Тогда КолвоИтераций = 6; Иначе КолвоИтераций = 4; КонецЕсли; Для Индекс = 1 По КолвоИтераций Цикл Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1); Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1); КонецЦикла; Если Тип = 13 Тогда Четн = Четн * 3; Иначе Нечетн = Нечетн * 3; КонецЕсли; КонтЦифра = 10 - (Четн + Нечетн) % 10; Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра)); КонецФункции // глКонтрольныйСимволEAN() |
|||
2
opus70
22.07.16
✎
09:57
|
Функция глСформироватьШтрихкод(Префикс, ПредвКод, ТипКода=13) Экспорт
Если ТипКода = 13 Тогда ИспКолво = 10; Иначе ИспКолво = 6; КонецЕсли; Штрихкод = СимволыВЦифры(Прав(СокрЛП(ПредвКод), ИспКолво)); Штрихкод = Префикс + глДополнитьСтрокуЛ(Штрихкод, "0", ИспКолво); Возврат Штрихкод + глКонтрольныйСимволEAN(Штрихкод, ТипКода); КонецФункции // глСформироватьШтрихкод() |
|||
3
vadim777
22.07.16
✎
10:07
|
(2) Вопрос был не в алгоритме генерации штрикода, а в том, что barcode.ocx сам дополняет 12 символьный код до 13.
Что касается генерации, вот она: Функция глШтрихКод(КодПартии,ЦенаПродажи) Экспорт Цен=СтрЗаменить(Формат(ЦенаПродажи,"Ч(0)7.2"),".",""); Код=Строка(100000+Число(КодПартии)); Возврат Код+Цен; КонецФункции |
|||
4
vladmenleo
22.07.16
✎
10:25
|
(3) Судя по коду, что ты привел, у тебя генерится 13-ти символьный код Ч(0)7.2 дает длину 7
Код=Строка(100000+Число(КодПартии)) - дает длину 6 6+ 7 = 13 Так, что зря грешишь на barcode.ocx :) |
|||
5
vladmenleo
22.07.16
✎
10:28
|
(4) пардон, ты точку убираешь, так,что 12 остается. Скорее всего ищи где-то в коде контрольный символ прибавляется
|
|||
6
vadim777
22.07.16
✎
10:28
|
(4) СтрЗаменить(Формат(ЦенаПродажи,"Ч(0)7.2"),".","");
|
|||
7
vadim777
22.07.16
✎
10:30
|
(5) Прошелся отладчиком. В barcode.ocx передается 12 символьный код: Таб.ТекущийОбъект.Text=лШтрихКод. Печатает 13 символов.
|
|||
8
Gary417
22.07.16
✎
10:33
|
(0) < Это как-бы стандарт?>
Это стандарт EAN13 ... _13_ последний символ контрольный вычисляющийся от основных 12 |
|||
9
Это_mike
22.07.16
✎
10:34
|
(8) настоящие пацаны стандарты не читают. они сразу лезут с вопросами на форумы.
|
|||
10
vadim777
22.07.16
✎
10:36
|
(9) Дай ссылку на стандарт настоящему пацану.
|
|||
11
Злопчинский
22.07.16
✎
10:37
|
печатай CODE128 или CODE39, а не ЕАН и не парь мозг
|
|||
12
Зая Бусечка
22.07.16
✎
10:39
|
А не контрольный ли это символ?
В настройках баркода есть такой флаг... |
|||
13
Gary417
22.07.16
✎
10:41
|
||||
14
opus70
22.07.16
✎
10:43
|
barcode лучше передавать не 12 символов а 13 т.е. нужно вычислять самому контрольный символ функцию я привел
ну или печать в code39 так как code128 не всегда читается сканерами (сканера нужно настраивать перепрограмировать) |
|||
15
vadim777
22.07.16
✎
10:49
|
(13) Спасибо, прочитал. Для меня важен вывод, что barcode.ocx сам добавляет 13 символ, если его нет.
ПС: история вопроса. В магазине наклеили ценники со штрихкодами, в них 13 символов. В программе видны 12 символов. Когда вводишь вручную 12 символьный штрихкод, товар не находится. А если добавляешь любую цифру в конце - все норм. Разработчик накосячил, вот разгребаю. |
|||
16
DrZombi
гуру
22.07.16
✎
11:09
|
(14) Лучше не вычислять её, а хранить как обычно :)
|
|||
17
opus70
22.07.16
✎
12:49
|
(16) ну вроде так и посоветовал что нужно хранить 13 символов а не 12 :)
|
|||
18
DrZombi
гуру
22.07.16
✎
14:04
|
(17) Так удобней. Не надо голову заворачивать, если там будет храниться что-то другое :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |