|
Никто из присутствующих не разбирался с механизмом формирования Штрихкодов? | ☑ | ||
---|---|---|---|---|
0
Сияющий Асинхраль
16.04.21
✎
16:21
|
В ряде случаев 1С выдает некорректные штрихкоды, вместо 13-ти значных получаются 14-тизначные. Залез в код, оказалось в ряде редких случаев это получается из-за расчета контрольной цифры штрихкода. Если верить интернету эта контрольная цифра считается вот по такому простенькому алгоритму:
Сложите цифры, находящиеся на четных местах: 2+4+6+8+0+2=22 Полученную сумму умножьте на 3: 22*3=66 Сложите цифры, находящиеся на нечетных местах (кроме последней, контрольной): 1+3+5+7+9+1=26 Сложите числа, полученные в п.2 и п.3: 66+26=92 Отбросьте десятки: 92-90=2 Из 10 вычтите полученное в п.5: 10-2=8 В большинстве случаев все здорово, НО иногда, если на предпоследнем шаге мы получаем число нацело делящееся на десятку, т.е. скажем не 92 - 90, как в алгоритме, а 90 - 90, то на последнем шаге у нас получается контрольная цифра равной уже не цифре, а числу 10, т.е. вместо одного знака получаем ДВА знака. А что с этим делать неясно... Соответственно после добавления десятки к штрихкоду он оказывается слишком длинным... |
|||
1
azernot
16.04.21
✎
16:25
|
(0) ЭМ... а разве не "0" в этом случае будет контрольной цифрой?
|
|||
2
fisher
16.04.21
✎
16:27
|
Я вот такое откуда-то выдрал:
|
|||
3
fisher
16.04.21
✎
16:31
|
То бишь если 10 получается то надо как 0 считать.
|
|||
4
Сияющий Асинхраль
16.04.21
✎
16:31
|
(1) Так вот и интересуюсь как правильно, в типовой конфе изредка получается десятка и коды неправильные. Если просто десятку поменять на ноль, то замечательно!!!
(2) Спасибо!!! Так и сделаю!!! |
|||
5
fisher
16.04.21
✎
17:10
|
Ы. Самое смешное, что я эту правку сам же и вносил, как выяснилось, в 2016.
|
|||
6
MWWRuza
гуру
16.04.21
✎
18:21
|
Из старой 7.7 конфы:
Функция глКонтрольныйСимволEAN(ШтрКод, Тип) Экспорт Четн = 0; Нечетн = 0; Если Тип = 13 Тогда КолвоИтераций = 6; ИначеЕсли Тип = 14 Тогда КолвоИтераций = 7; Иначе КолвоИтераций = 4; КонецЕсли; Для Индекс = 1 По КолвоИтераций Цикл Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1); Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1); КонецЦикла; Если Тип = 13 Тогда Четн = Четн * 3; Иначе Нечетн = Нечетн * 3; КонецЕсли; КонтЦифра = 10 - (Четн + Нечетн) % 10; Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра)); КонецФункции // глКонтрольныйСимволEAN() Умеет вычислять КС дла 8, 13 и 14 символьного ШК... |
|||
7
Злопчинский
16.04.21
✎
21:21
|
(6) +100! классика не умирает
|
|||
8
Злопчинский
16.04.21
✎
21:21
|
"Умеет вычислять КС дла 8, 13 и 14 символьного ШК..."
- правильно написанный алгоритм будет вычислять правильно для ТАКОГО ТИПА ШТРИХКОДОВ любой длины, ибо это ОДИН ТИП ШК |
|||
9
NorthWind
16.04.21
✎
21:34
|
в случае с SSCC возникала необходимость вычислять и для большей длины кода. Получалось.
|
|||
10
Злопчинский
17.04.21
✎
02:30
|
||||
11
Злопчинский
17.04.21
✎
02:32
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |