|
v7: ТИС Штрих-кодирование документов с помощью ЕАН-128 | ☑ | ||
---|---|---|---|---|
0
tgu82
14.03.18
✎
16:55
|
ТИС 7.7
Стоит такая задачка: для учета собранных строк кладовщиками сделать сканирование перемещений и центра в магазины (большие довольно-таки перемещения). В-принципе сканирование накладных и чеков давно отработано и достаточно было возможностей ЕАН-13. Но для перемещений так не проходит потому что: 1. Надо еще учитывать этаж или ангар (перемещение собирается по этажам - Центральный склад - адресный). 2. Есть такое понятие как печать группового перемещения по нескольким перемещениям сразу (тоже по этажам но строк меньше так как если в одном перемещении есть товар А и в другом тоже есть - то это не две строки сборки а одна). И вот тут мне не хватает возможностей ЕАН-13. 1 цифра - признак того что это перемещение, 1 цифра (по какой из наших фирм),6 цифр номер, 4 цифры год - всего 12, а мне надо и этаж и как-то сформировать штрих-код если групповая печать перемещений и к тому-же контроль того что кто-то еще раз не сможет отсканировать все это заново и записать себе строки повторно. Но как бы я с этим разобрался, а вот с тем как штрихкодировать то что больше 12 символов - подзадумался |
|||
1
Cool_Profi
14.03.18
✎
16:59
|
А в чём проблема? barcode умеет вроде ка 128 печатать...
|
|||
2
tgu82
14.03.18
✎
17:05
|
(1) А проблема сначала в том как сформировать ШК ЕАН 128 из такой вот строки к примеру : 6,0,123356,2018,653465,2018
то есть здесь два номера перемещения (вариант групповой печати). С ЕАН-13 все просто. Кроме одной цифры что вижу то и получаю. А с ЕАН-128 не знаю. Там же есть какие-то AI и вообще как-то на основе всех симоволов ШК должна под идее контрольная сумма получиться и там еще вроде строку ШК надо в * заключать. |
|||
3
tgu82
14.03.18
✎
17:09
|
(1) То есть нет у меня (хотя и гуглил) внятного алгоритма формирования ШК ЕАН-128 чтоб потом в обратную сторону мог его обработать.
|
|||
4
mishaPH
модератор
14.03.18
✎
17:09
|
(0) а чем вам коде 128 не катит?
кроме того если база единая. то не проще ли сделать док задание на... и его номер цифровой 11 символов (12й как признак что это не товарный код) . в доке приписать что угодно и вызывать данные дока по коду? |
|||
5
mishaPH
модератор
14.03.18
✎
17:10
|
если не катит - используйте не еан 13 и не еан 128 а CODE 128 который даже символы текстовые можно запихать
|
|||
6
tgu82
14.03.18
✎
17:16
|
(5) ЕАН-13 и ЕАН-8 - прекрасно использую. А вот ЕАН-128 - свойства объекта я задать могу в таблице (ЕАН-128), но как мне мою строку символов в него перевести - не понятно.
Можно конечно пойти по другому пути - создать справочник (нужных мне перемещений примерно 5000 в год) и при записи такого перемещения - его дополнительный номер (код уникальный в этом справочнике) и к нему штрихкод ЕАН-13, но тогда как создать недублирующийся уникальный штрихкод - тоже вопрос и как при этом быть с печатью групповых перемещений. Думать буду |
|||
7
tgu82
14.03.18
✎
17:18
|
(5) ШК должен начинаться на 6, последовательность остальных 11 символов не должна повторяться никогда, ну а 13-символ считается автоматом по формуле
|
|||
8
uno-group
14.03.18
✎
17:52
|
както Так
//******************************************* //*********формирование баркода 128********** //Если параметр цифра возвращает 1 Функция ТипСимв(КодСмв) Если КодСмв < 32 Тогда Возврат(1); //Команда ИначеЕсли (48 <= КодСмв) и (КодСмв<=57) Тогда Возврат(3); //Цифра Иначе Возврат(2); //Буква, знак КонецЕсли; КонецФункции Функция Мод(Ч,З) Возврат(Ч-Цел(Ч/З)*З); КонецФункции Функция БарКод(Вход,БазаМодеС=6) АскиБар = // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 "155515551449485845458494854548584944056416452065425461560506542164524212245605641254614650"+ //29 "11919191108980988109881889018890898001:0928120290:18212211829021281:0122209281:01218290:10"+ //59 "2305<0;0004=0<540=4<1<05<4105<0=441<4=0<14<50=4050<320=04830047407443074434470344704740113"+ //89 "13131100;0838030380;0308380023032203302";//102 ВыхТ = СоздатьОбъект("ТаблицаЗначений"); ВыхТ.НоваяКолонка("А",,,,"Аск",4); //Аски код //Фильтр пустого входа Если Вход = "" Тогда Возврат(""); КонецЕсли; //Очищаем выход ВыхТ.УдалитьСтроки(); Дл = СтрДлина(СокрЛП(Вход)); //Разборки со стартовым кодом //Принимаем решение о смене подсистемы кодирования "моде" (А-1, В-2, С-3) //Анализируем тип двух первых символов ТекСимв = КодСимв(Сред(Вход,1,1)); ТипТекСимв = ТипСимв(ТекСимв); Если Дл > 1 тогда СлСимв = КодСимв(Сред(Вход,2,1)); ТипСлСимв = ТипСимв(СлСимв); Иначе ТипСлСимв = 2; КонецЕсли; Моде = ТипТекСимв; Если (ТипТекСимв = 3) и (ТипСлСимв = 3) тогда Моде = 3; КонецЕсли; //В выходную таблицу добавляем символ старта подсистемы ВыхТ.НоваяСтрока(); ВыхТ.А = 102 + Моде; Вых = Симв(64 + Моде); //Анализируем входные символы Для Сч = 1 по Дл Цикл ТекСимв = КодСимв(Сред(Вход,Сч,1)); Если ТекСимв > 127 тогда Сообщить("Символ № "+Сч+ " со значением="+ ТекСимв+" не разрешен в штрихкоде"); Продолжить; КонецЕсли; ТипТекСимв = ТипСимв(ТекСимв); //Принимаем решение о смене подсистемы кодирования (моде). Если ТипТекСимв <> Моде тогда Если ТипТекСимв < 3 Тогда //Нужно менять моде либо с А на В, либо с В на А ВыхТ.НоваяСтрока(); Если Моде = 1 тогда ВыхТ.А = 100; //Переключаемся из А в В Иначе ВыхТ.А = 101; //Переключаемся из В в А КонецЕсли; Моде = ТипТекСимв; Иначе //Находимся в моде А или В, встретили цифру. //Прикидываем, стоит ли переключаться в МодеС //Смотрим на БазаМодеС знаков вперед. //Оптимально, БазаМодеС = 6 (См. описание) ДлМ = ?(Дл < Сч+БазаМодеС-1, Дл, Сч+БазаМодеС-1); СчЦ = 0; Для СчМ = Сч по ДлМ Цикл МодМ = ТипСимв(КодСимв(Сред(Вход,СчМ,1))); //Если цифра - смотрим дальше Если МодМ = 3 тогда СчЦ = СчЦ+1; Продолжить; Иначе СчЦ = 0; Прервать; КонецЕсли; КонецЦикла; //Если нужно переключится в С Если СчЦ - БазаМодеС = 0 тогда Моде = 3; ВыхТ.НоваяСтрока(); ВыхТ.А = 99; //Переключаемся из А или В в С КонецЕсли; КонецЕсли; КонецЕсли; //Добавляем очередной символ //Если символ в МодеС Если Моде = 3 тогда СлСимв = КодСимв(Сред(Вход,Сч+1,1)); ТипСлСимв = ТипСимв(СлСимв); //Если входная строка кончается на первой цифре, или //конец входной строки цифра+не цифра Если (Сч = Дл) или (ТипТекСимв <> 3) или (ТипСлСимв <> 3) тогда //Переключаемся из режима С в режим В Моде = 2; ВыхТ.НоваяСтрока(); ВыхТ.А = 100; Иначе //Добавляем символ в МодеС Если (ТипТекСимв <> 3) или (ТипСлСимв <> 3) тогда Сообщить("Ош."+ Сч+" "+ ТекСимв+" "+СлСимв); Иначе ВыхТ.НоваяСтрока(); ВыхТ.А = Число(Симв(ТекСимв)+Симв(СлСимв)); Сч = Сч+1; Продолжить; КонецЕсли; КонецЕсли; КонецЕсли; //Добавляем символ в МодеА, или МодеВ ВыхТ.НоваяСтрока(); Если Моде = 1 тогда ВыхТ.А = ТекСимв+64; Иначе ВыхТ.А = ТекСимв-32; КонецЕсли; КонецЦикла; //Считаем контрольную сумму и формируем баркод ВыхТ.ВыбратьСтроки(); Сум = 0; Ном = 0; Пока ВыхТ.ПолучитьСтроку() = 1 Цикл Если Ном > 0 тогда Сум = Мод(Сум+ВыхТ.А*Ном,103); Вых = Вых+Сред(АскиБар,(ВыхТ.А+1)*3-2,3); Иначе Сум = Мод(ВыхТ.А,103); КонецЕсли; Ном = Ном+1; КонецЦикла; Возврат(Вых+Сред(АскиБар,(Сум+1)*3-2,3)+"@"); КонецФункции //******************************************* |
|||
9
uno-group
14.03.18
✎
17:54
|
Шрифт "Barcode"
БарКодСтр=БарКод(ШКод,6); |
|||
10
tgu82
14.03.18
✎
21:32
|
(9)Спасибо. разбираюсь.
(4) Ну вот префикс у меня не цифровые в документах хотя можно это дело и изменить |
|||
11
spectre1978
14.03.18
✎
22:05
|
(0) EAN вам не нужен. Берете CODE128 и заполняете его чем хотите и как хотите, ограничения только физические на размер кода и используемые символы.
|
|||
12
mishaPH
модератор
14.03.18
✎
23:00
|
(10) (6) вы слишком загоняетесь. полно форматов кодов даже в шатном баркоде.. не понимаю, почему не использовать коде128 А,В,С он предназначен для этого по сути
|
|||
13
Злопчинский
15.03.18
✎
01:49
|
||||
14
ADirks
15.03.18
✎
08:15
|
(13) да ну, по моему вариант со справочником, который ты предложил, гораздо лучше. В тот же ЕАН13 можно запихать какую угодно информацию, и на всё хватит.
принцип такой: делаем справочник примерно такой структуры - ШК (или в код, или в наименование) - ссылка на документ - ссылка на фирму - ссылка на позицию - всё что угодно ещё Для получения ШК добавляем запись в справочник, заполняем поля, а сам ШК генерим на основе ID элемента. ID в десятеричной системе можно выколупать из строки ЗначениеВСтрокуВнутр(спрШК.ТекущийЭлемент()). Я ещё первые 2 цифры под префикс отвожу, по которму можно понять, чего это мы такое щас отсканировали. Но можно и без префикса, если получше подумать. |
|||
15
dmitryds
15.03.18
✎
08:57
|
(2) CODE128, потом для себя пишете, - первые 8 символов - это код склада, следующие 4 - это стеллаж и т.д. Можно завязаться на количество символов или на символ-разделитель (точка с запятой или другой символ).
Делается две функции, одна кодирует по параметрам шк, другая из шк возвращает список значений со всеми параметрами. |
|||
16
tgu82
15.03.18
✎
10:00
|
(15) Ну правильно, поставлю в свойствах code128 а дальше? Как кодировать чтобы сканер шк это понял. Вот в этом у меня проблема. Я так понимаю что ШК по code128 как-то структурирован и как-то по контрольным суммам проверяется. Чтоб потом я мог его распознанный сканером шк разузловать в список значений.
|
|||
17
Кирпич
15.03.18
✎
10:01
|
ну прилепи два кода
|
|||
18
tgu82
15.03.18
✎
10:02
|
(15) пусть код склада "00001444", стеллаж "0016". Как создать ШК по code128?
|
|||
19
Кирпич
15.03.18
✎
10:02
|
сверху и снизу
|
|||
20
tgu82
15.03.18
✎
10:03
|
(19) А можно подробнее. Никогда с таким не сталкивался. Интересно очень, два кода - это 20 свободных цифр - мне бы хватило с лихвой
|
|||
21
Кирпич
15.03.18
✎
10:04
|
(20) подробнее нету. только что придумал.
|
|||
22
Кирпич
15.03.18
✎
10:05
|
а сверху и снизу - это чтобы два раза один и тот же код не сканировали
|
|||
23
Кирпич
15.03.18
✎
10:09
|
ну или побитно кодируй. первый бит - перемещение или нет и т.д.
два байта на год пойдет, например. |
|||
24
Кирпич
15.03.18
✎
10:10
|
короче всё влезет и так.
|
|||
25
Кирпич
15.03.18
✎
10:28
|
1 байт - признак того что это перемещение, 1 байт - фирма (255 фирм), 2 байта - номер (65535 номеров), 1 байт год (255 лет), 1 байт - этаж (255 этажей)
6 байт. вроде всё влазит |
|||
26
Кирпич
15.03.18
✎
10:29
|
можно первые два байта в один запихнуть. у вас же не 255 фирм
|
|||
27
tgu82
15.03.18
✎
10:30
|
(25) Да как сканер это поймет?
|
|||
28
Кирпич
15.03.18
✎
10:32
|
(25) сканер то тут при чем. он число считывает и всё. а ты уже это число кодируй раскодируй как хочешь. можешь рядом со штрихкодом печатать человекочитаемое типа 1,2,56235,18,3
|
|||
29
tgu82
15.03.18
✎
10:36
|
(28) А понял, ты имеешь в виду двоичное исчисление что ли?
|
|||
30
Кирпич
15.03.18
✎
10:41
|
(29) ну типа того. 16 ричное наверное
например 1,2,56235,18,3 будет 01 02 DB AB 12 03 штрихкод будет 1111786983939 |
|||
31
mishaPH
модератор
15.03.18
✎
10:46
|
(18)
КОд будет такой W00001444C0016 читаешь код что с W до C код склада, с С до.. след метки еще что то |
|||
32
Злопчинский
15.03.18
✎
10:48
|
(18) ШК = "00001444#0016"
и не мучай (зачеркунто)сношай нам мозги ;-0 засунь это обычным образом ТОЧНО ТАК ЖЕ КАК ЕАН13 в печатаемый штрихкод и все. потом считаешь ШК по разделителю вытащишь части если они переменной длины. |
|||
33
tgu82
15.03.18
✎
10:48
|
(31) Спасибо А почему с W до C а если у меня еще 5 групп чисел - как тогда?
|
|||
34
Злопчинский
15.03.18
✎
10:49
|
(27) сканеру похрен. он считал набор символов и отдал наружу. все. ему ничего никак понимать не надо. разбор шК сам делаешь
|
|||
35
mishaPH
модератор
15.03.18
✎
10:49
|
(33) ну разделяй буквами сколько угодно полей
W от слова склад на англ |
|||
36
mishaPH
модератор
15.03.18
✎
10:50
|
коде128А это буквенно цифровая комбинация.
|
|||
37
Злопчинский
15.03.18
✎
10:53
|
(33) у себя на складе на самописке я делал так: т.к. инвентаризация паллетных верхов - дело затратное, то на плановой инвентаризации паллеты с товаром считаем БЫСТРО
потому что медленно и тщательно считаем их заблаговременно: когда есть время едет штабелерщик со счетчиком, посчитали паллету, жмак, на принтере шк вылазит этикетка со всякой полезной инфой кто что когда и прочее и штрихкод в виде АртикулТовара#ШКкороба#КоличествоБазовое. и все. лепят леблу на паллету. на плановой инвентаризации жмак по этому ШК, разобрал на части и зафиксировал |
|||
38
tgu82
15.03.18
✎
10:53
|
(34) Да не прав ты.
Сканер сканирует белые и черные полосы - так вот чтоб он сканировал ему надо такой ШК напечатать в этих полосах. Я использую для еан-13 и еан-8 баркоде и он мне в печатную форму выдает готовый к сканированию напечатанный штрихкод. И тут все понятно. А вот как баркоде поймет что то что я ему нарисовал - это штрихкод - большой вопрос. Если я неправильно формирую ШК то он просто ничего не напечатает |
|||
39
tgu82
15.03.18
✎
10:55
|
(37) И какой стандарт ШК ты используешь?
|
|||
40
Кирпич
15.03.18
✎
11:01
|
(38) " Если я неправильно формирую ШК то он просто ничего не напечатает"
ну так ты формируй правильно |
|||
41
tgu82
15.03.18
✎
11:03
|
(40) Для того что формировалось правильно, должны при формировании соблюдены правила. Для ЕАН-13 и ЕАН-8 я их знаю. А для code128 я их не знаю.
|
|||
42
Кирпич
15.03.18
✎
11:04
|
вот чо вычитал
Коды EAN-8 и EAN-13 используются не только изготовителями, но и продавцами для внутрифирменной маркировки. Особенностью такого кодирования является то, что считывание этих кодов осуществляется только при товародвижении внутри организации. В этом случае коды EAN-8 начинаются с нуля, а EAN-13 c двойки. Крупные торговые фирмы могут сами производить внутримагазинное кодирование. |
|||
43
tgu82
15.03.18
✎
11:05
|
(42) Спасибо. Да, я об этом знаю. Но с ЕАН-13 и ЕАН-8 нет проблем. Просто мне их длины не хватает, но сейчас я стал смотреть побитное кодирование
|
|||
44
Kondarat
15.03.18
✎
11:09
|
(43) В (31) и (32) тебе уже все разжевали. Не надо тут ни какого побитного кодирования. А чтобы "А вот как баркоде поймет что то что я ему нарисовал - это штрихкод - большой вопрос. Если я неправильно формирую ШК то он просто ничего не напечатает" не случилось задавай своему баркоде правильный тип кода и полосочки он напечатает и сканер эти полосочки поймет.
|
|||
45
tgu82
15.03.18
✎
11:14
|
(44) попробую. просто на еан-13 зациклился, много лет все пашет, а с code128 дел никогда не имел.
|
|||
46
Kondarat
15.03.18
✎
11:16
|
(45) Расцикливайся, там все проще: буквы и цифры. Никаких тебе контрольных символов.
|
|||
47
tgu82
15.03.18
✎
11:18
|
(46) Просто размер штрихкода получается большой, думаем вообще отдельно печатать его на принтере этикеток. ЕАН-13 же компактный
|
|||
48
Кирпич
15.03.18
✎
11:26
|
а code128 может считываться с ошибками чтоли?
|
|||
49
tgu82
15.03.18
✎
11:27
|
(48) А вот не знаю. Может может с ошибками если сильно длинный. Попробую скажу
|
|||
50
Злопчинский
15.03.18
✎
11:28
|
(39) CODE128 - в зависимости от ситуации A B C
code39 тоже юзаю, но он широкий . и нормально все считывается |
|||
51
tgu82
15.03.18
✎
11:33
|
(50) Что значит в зависимости от ситуации? От чего зависит тип ШК?
|
|||
52
tgu82
15.03.18
✎
11:36
|
(50) Есть же просто code128 без a,b,c
|
|||
53
tgu82
15.03.18
✎
12:02
|
(50) Ну да, понятно. мне бы хватило по идее цифрового кода безо всяких разделителей с фиксированной максимальной длиной
|
|||
54
Кирпич
15.03.18
✎
12:07
|
(53) в EAN-13 не влазит всё таки?
|
|||
55
uno-group
15.03.18
✎
12:14
|
Приведеный мной в 8 код кодирует английский алфавит и цыфры.
В один штрихкод я 25 знаков запихивал вообще непонимаю ваших проблем если место есть под штрих код хоть предложениями пишите. |
|||
56
uno-group
15.03.18
✎
12:19
|
Кинул в качестве параметра строку из 2 вывел штрих код напечатал отсканировался со всеми запятыми и цифрами. чем полемику разводить может проще попробывать за 2 минуты
|
|||
57
uno-group
15.03.18
✎
12:21
|
по ширине занял 15 см тумаю вполне можно не снижая читабельности уменьшить до 8
|
|||
58
tgu82
15.03.18
✎
12:25
|
(56) Ну да, запятые и не нужны, уж как-нибудь разберу шк
|
|||
59
dmitryds
15.03.18
✎
13:18
|
(58) запятые и т.п. спецсимволы сильно упрощают дело... например сразу в список значений конвертнуть по разделителю... и все.. фиксированный номер элемента означает фиксированный тип значения и не надо заниматься подсчетом количества символов.
|
|||
60
Злопчинский
15.03.18
✎
16:37
|
развели бодягу
|
|||
61
tgu82
16.03.18
✎
09:31
|
(60) При чем тут бодяга? я всегда понимал так что штрихкод имеет контрольную цифру или что-то в этом роде. И если выбран тип шк и алгоритм его формирования неверен то никакогго ШК не будет напечатано а значит нечего и сканировать. Но вот да, с code128 все несколько по-другому получается
|
|||
62
Кирпич
16.03.18
✎
09:41
|
(61) ага. в code128 можно стадо слонов запихать и ничего ему не будет
|
|||
63
Кирпич
16.03.18
✎
09:45
|
Кстати. Вчера экспериментировал как всё запихать в 12 знаков для EAN13
&НаКлиенте Функция Код(Зн,знач Байт) Р = DecToAny(Зн,16); Д = СтрДлина(Р); Байт = Байт * 2; Если Д < Байт Тогда Для а = 1 по Байт - Д Цикл Р = "0" + Р; КонецЦикла; КонецЕсли; возврат Р; КонецФункции &НаКлиенте Функция Кодируй(ЭтоПеремещение,Фирма,Номер,Год,Этаж) П = ?(ЭтоПеремещение = 1,128,0); Р = Код(П + Фирма,1); Р = Р + Код(Номер,2); Р = Р + Код(Год,1); Р = Р + Код(Этаж,1); возврат AnyToDec(Р,16); КонецФункции &НаКлиенте Функция ДеКодируй(знач Зн, ЭтоПеремещение,Фирма,Номер,Год,Этаж) Зн = Код(Зн,5); Б = AnyToDec(Сред(Зн,1,2),16); ЭтоПеремещение = ?(Б > 127,1,0); Фирма = ?(ЭтоПеремещение = 0,Б,Б-128); Номер = AnyToDec(Сред(Зн,3,4),16); Год = AnyToDec(Сред(Зн,7,2),16); Этаж = AnyToDec(Сред(Зн,9,2),16); Возврат Зн; КонецФункции |
|||
64
Кирпич
16.03.18
✎
09:46
|
||||
65
Кирпич
16.03.18
✎
09:49
|
но думаю проще и правильнее использовать code128
|
|||
66
tgu82
16.03.18
✎
09:51
|
(64) Спасибо. У меня ТИС 7.7 но в-принципе это не играет роли. Ну да, code128 удобнее намного при условии что он без ошибок читается сканером. Проверяю
|
|||
67
Кирпич
16.03.18
✎
09:54
|
(66) ну в code128 прямо в картнке вставлены контрольные числа, а в EAN13 нужно самому вычислять контрольную цифру. так что всё путём.
|
|||
68
tgu82
16.03.18
✎
10:02
|
(67) Объясни пожалуйста каким образом вставлены контрольные чиссла и что с ними делать. Для ЕАН-13 то все поняятно и работает много лет уже
|
|||
69
Кирпич
16.03.18
✎
10:04
|
(68) ну в википедии всё написано вроде. да и нафиг оно тебе надо. всё работает. просто кодируй и печатай.
|
|||
70
tgu82
16.03.18
✎
10:10
|
(69) Ну чтобы понимать что и почему а не быть бараном :)
|
|||
71
Кирпич
16.03.18
✎
10:12
|
(70) хочешь собственным глазом научиться сканировать? круто.
|
|||
72
tgu82
16.03.18
✎
10:19
|
(71) Да нет, ну есть же длл, значит есть алгоритм работы с ШК. Для ЕАН-13 все понятно, а с другими дела не имел, а теперьп получается понадобилось
|
|||
73
Кирпич
16.03.18
✎
10:20
|
(72) ну как бы всё выяснили уже. какие проблемы то.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |