gifts2017

Пример генерации штрих-кода для документов, справочников и его расшифровка

Опубликовал Илья Ануфриев (aipnnov) в раздел Оборудование - Сканер штрих-кода

Генерация штрих-кода для документов и справочников с помощью стандартной компоненты ActiveX 1CBARCOD.DLL

Данный пример генерирует штрих-код к документу, справочнику с использованием стандартной компоненты 1CBARCOD.DLL, которая прилагается к обработке. После генерации штрихкода и вывода печатной формы на экран можно его раскодировать, нажав кнопку Раскодировать, после чего откроется документ, для которого и был сгенерирован данный штрихкод. Поддерживаются все штрихкоды, которые можно сгенерировать с помощью этого объекта: EAN8, EAN13, EAN128, Code39 и Code128.

При раскодировании открываются документы для ШК EAN128, Code128 и Code39 и открываются элементы справочника для ШК EAN8, Code128, EAN128 и Code39.

Для проверки с помощью сканера необходимо внести изменения в стандартную обработку конфигурации ТОСервер, а именно в модуле обработки в функцию ОбработатьСобытиеСШК добавить код расшифровки (только расшифровки) из модуля формы внешней обработки, слегка переделав, и добавить функции и процедуры из основного модуля внешней обработки, либо создать общий модуль и перекопировать туда все из модуля внешней обработки.

Код открыт. Штрихкод формируется согласно международным правилам ШК.

Господа, я, конечно, понимаю всех, кто скачивает эту обработку, и мне очень приятно, но хотелось бы узнать ваши отзывы, мнения и замечания по данной обработке!!!

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Пример Генерации и раскодирования ШК
.epf 21,18Kb
02.07.15
1059
.epf 21,18Kb 1059 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. ValerySemjonov . (sva0) 15.12.09 14:24
2. Илья Ануфриев (aipnnov) 15.12.09 14:26
Добавил. почему-то в первый раз не сохранился.
3. Валентина Медведева (Новый чайник) 15.12.09 19:06
Очень подробно и понятно описан третий абзац. Спасибо
4. Доржи Балбаров (Angeros) 16.12.09 06:22
Автору за усердия однозначный плюс. Вот только вопрос - а можно с помощью этой компоненты прочитать ШК с изображения сканированного.
5. Илья Ануфриев (aipnnov) 16.12.09 09:35
(4) Компонента, как уже сказано в описании выше, стандартная и формирует только штрихкод, а для того, чтобы прочитать его с помощью сканера с графического изображения необходимо установить драйвер чтения ШК АТОЛ или любой другой.
6. Илья Ануфриев (aipnnov) 16.12.09 09:39
(4) Это 1С-вская компонента, поэтому она корректно формирует только EAN13, EAN8, Code128 и Code39, а вот EAN128 она как бы формирует, но при чтении сканером код считывается с ошибками т.е. без "(" и ")", в отличие от других, например barcode.ocx
7. Олег Дергунов (ODergunov) 16.12.09 12:22
Илья, добрый день. Скажите есть ли icq или skype? Хотелось бы кое-что у Вас уточнить. Можете скинуть на ODergunov@dscompany.kz
8. Олег Дергунов (ODergunov) 16.12.09 15:14
"Для проверки с помощью сканера необходимо внести изменения в стандартную обработку конфигурации СерверТО, а именно в модуле обработки в функцию ОбработатьСобытиеСШК добавить код расшифровки(только расшифровки) из модуля формы внешней обработки."

Извеняюсь конечно. но что-то не могу найти где этот кусок кода?

Обработка полезная, давно мучался этим вопросом, но вот нигде найти не мог. Плюс.
9. Илья Ануфриев (aipnnov) 16.12.09 19:43
(8) Этот кусок кода находится в модуле формы. Необходимо добавить часть кода с начала процедуры до запроса.
10. Илья Ануфриев (aipnnov) 17.12.09 09:39
11. Игорь Воронкин (Воронкин) 17.12.09 20:58
aipnnov 16.12.2009 19:43:16
(8) Этот кусок кода находится в модуле формы. Необходимо добавить часть кода с начала процедуры до запроса.

Вам дважды пишут, что бы Вы более подробно описали свой "третий" абзац. А Вы
очередной раз отвечеате ахинеей. Если выложил обработку - выложи код, отметь
куда и что вставить. Не умничай сильно...
12. Илья Ануфриев (aipnnov) 18.12.09 09:08
(11)Пример обработки написан для тех кто хоть что-то понимает в программировании 1С. Если кто этого не знает, то пишет либо в личку, либо в коментариях. (8) Так и сделал и я ему послал письмо, что и как надо сделать.
Прежде чем в чем-то обвинять надо смотреть внимательно мои ответы (10).
Вы я как понял здесь недавно и еще ничего не опубликовали, поэтому ...
13. Илья Ануфриев (aipnnov) 18.12.09 09:17
(11) Остальным все ясно и понятно, судя по коментариям.
14. Александр Рытов (Арчибальд) 18.12.09 09:18
А выведу ка я это в топ 8-)
15. Игорь Воронкин (Воронкин) 18.12.09 15:15
Как раз судя по комментариям нельзя сказать, как Вы утверждаете что
всем все понятно.

И не согласен с Вами - Если выкладывается обработка, то для ее запуска
необходимо писать Вам на почтовый ящик, что бы узнать как она работает.
Написали бы только заголовок - Штрихкодирование документов, если кому-то
что-то не понятно - пишите в личку.

Порадовало, что не поленились посмотреть, когда я зарегистрировался,
а мне все равно сколько времени Вы на сайте и какой у Вас рейтинг.

Лично мне разъяснения писать не надо, тема штрихкодирования документов
довольно популярна, и здесь на сайте обработки выкладываются довольно
часто, я решал эту тему без снятия с поддержки года два назад.
16. Илья Ануфриев (aipnnov) 18.12.09 20:24
Если выкладывается обработка, то для ее запуска
необходимо писать Вам на почтовый ящик, что бы узнать как она работает.

А вы её скачали, смотрели чтобы утверждать, что она не запускается? Что-то я вас среди 150 скачавших не увидел.
Как видите скачало на сей момет 150 человек и никто не пожаловался, что она не работает.
Как раз судя по комментариям нельзя сказать, как Вы утверждаете что всем все понятно.

Укажите, какие коментарии я оставил без внимания и кому ответил не внятно?
Писать весь код в коментариях нет необходимости т.к. он не маленький, поэтому кому надо узнать что-либо конкретнее, обращаются как например (7) и (8) коментариях.
Лично мне разъяснения писать не надо, тема штрихкодирования документов
довольно популярна, и здесь на сайте обработки выкладываются довольно
часто, я решал эту тему без снятия с поддержки года два назад.

Так выложи здесь, пусть люди посмотрят и оценят все-таки здесь есть программисты поопытней меня, а может кому твой опыт и пригодится.
17. Dmitry Dmitry (Dimasik2007) 25.12.09 20:54
(0) Большое спасибо, применил в своем блоке - понравилась автогенерация штрихкода, единственное, как я понял - идет привязка (кроме типа документа, номера) к дате документа, т.е. если исправили в базе документ, то поиск по ш/к не будет успешным. Решил регистром сведений.
18. Илья Ануфриев (aipnnov) 26.12.09 19:49
(17) Очень рад, что мой труд вам пригодился.
Шифровать можно любые даные, которые считаете нужными. Исправлять дату документа, например РеализацияТоваровУслуг, а именно дату после того как документ проведен и по нему распечатана накладная или др., настоящий бухгалтер не позволит, ну а если уж пришлось тогда и распечатывается новый документ(накладная) и в нем уже будет другой ШК, в котором будут зашифрованы и номер, и дата. Необходимо для этого генерацию поместить в печать документа и не надо создавать лишний регистр и засорять базу, да и размер ее увеличится, что при файловой не желательно.
19. tlk tlk (tlk) 24.02.10 18:22
(0) Не смог понять алгоритм кодирования в формате code128, зачем переводить в цифры, если формат штрихкода позволяет работать с ASCII и в результате все равно получаем очень большое число?
20. Илья Ануфриев (aipnnov) 25.02.10 09:55
(19) Для получения контрольной суммы все равно придется переводить символы в числа.
Стандарт штрихкода Code 128 предусматривает три подсистемы кодирования:
А (моде=1) - управляющие знаки, входной аски < 32;
В (моде=2) - символы, текст вперемежку с цифрами, (65 - английская A)
С (моде=3) - группа цифр. Каждая пара кодируется как символ с номером равным паре цифр (65 - два знака, цифры 6 и 5.)
21. Артем Титеев (a_titeev) 23.03.10 11:46
дык неправильно работает с кодировкой code128... попробуй например закодировать и раскодировать документ с номером "10001111000"... я так понимаю косяк в раскодировании... скорее всего... короче сочетания цифер 10 смертельны... вместо этого получаем "1000111*!"... нехорошо...
22. Dmitry Dmitry (Dimasik2007) 29.03.10 13:21
23. Dmitry Dmitry (Dimasik2007) 29.03.10 13:23
(21) Присоединяюсь.
Пример: код
1044062991003210024621715211817162323 документ Реализация товаров и услуг 1/52107 от 28.03.2010 9:58:23 - работает хорошо

104406299100321002462171521181716225 - Реализация товаров и услуг 1/52106 от 28.03.2010 9:57:48 - уже не открывает, видно что 1 символ потерян, причем если дописать справа 1 любой символ (1, 2, 3 etc), то документ найдется.
24. Илья Ануфриев (aipnnov) 31.03.10 16:32
(23)(21) Исправил, теперь будет декодировать штрихкод 128 без проблем.
25. Артем Титеев (a_titeev) 01.04.10 13:42
(24) Исправил генерацию кода или только раскодирование? А то раскодирование я и у себя уже поправил, но впечатление такое что принцип кодирования был неверен, т.к. приводил к неоднозначности при раскодировании... Но тогда я решил кодирование не трогать принципиально, т.к. сразу не проверил, а потом было поздно - уже напечатали тыЩи документов... :)
26. Артем Титеев (a_titeev) 01.04.10 13:46
(24) Исправил кодирование или раскодирование? А то раскодирование уже и у себя поправил кое-как, и сложилось такое впечатление что принцип кодирования неверен, т.к. приводит к неоднозначностям кода при раскодировании. Сам же исправлять кодирование не хотел по той причине что напечатали тыЩи доков уже и сканить именно их надо было...
27. Илья Ануфриев (aipnnov) 02.04.10 08:58
(26) Исправил раскодирование, теперь проблем не должно быть. А вообще-то этот код, писался не под компоненту 1С, поэтому можно переписать его под нее т.е. из этого кода убрать подсчет контрольной суммы для code 128 при его формировании, а если нет смысла шифрования данных, то убрать и шифрование и оставить как есть тип документа (только в анг.раскладке), номер документа и дату, тогда при включении отображения текста кода будут не цифры а именно текст, который шифруется, но в этом случае может быть большая ширина самого штрихкода. Ну и при раскодировании тоже все изменить.
Я же отталкивался от международных стандартов и правил кодирования, чтобы можно было использовать и другие ActiveX ну и конечно же, компактности самого штрихкода.
28. Dmitry Dmitry (Dimasik2007) 27.04.10 21:34
(27) На новой версии ошибка.
Кодируемая строка Реализация товаров и услуг 1/55580 от 23.04.2010 11:43:55
штрих-код 1044062991004210019621715212121241699 (code128)

Раскодирование
{Форма.Форма.Форма(552)}: Преобразование значения к типу Число не может быть выполнено
Сум = Мод(Сум+Число(СимвКод)*Ном,103);

Подскажите, где исправить....
29. Илья Ануфриев (aipnnov) 29.04.10 09:17
(28) Перезалил, видимо что-то не закачалось в первый раз. Теперь пробуй, должно быть все нормально.
30. Анастасия Столбовская (StAsya_1C) 04.08.10 11:49
Если ввожу "неправильный" код для раскодирования, то функция КонтролСумма(СтрокаКода) зацикливается. Копаться в алгоритме совсем не хочется, может поставить остановку по числу итераций? Тогда какое значение должна вернуть эта функция?
31. Наталья Вебер (nusya39) 23.12.10 09:38
А скажи как переделать эту обработку под БП 1.6??? Очень нужно..
32. Dmitry The Wing (wing) 12.04.11 05:30
А разве фраза
Данный пример генерирует штрихкод к документу, справочнику с использованием стандартной компоненты 1CBARCOD.DLL, которая прилагается к обработке.
не должна подразумевать, что данная dll содержится в обработке или в архиве с обработкой?

P.S.: Dll уже нашел, но описание некорректно...
33. sdwd wewewe (qwqwqwqwqwqw) 24.10.11 17:01
34. serge_focus (serge_focus) 15.11.11 21:15
Понравилось. Рекомендую Как пример обработки для изучения стандартной компоненты ActiveX 1CBARCOD.DLL ...
35. Иван (Sairys) 26.12.11 14:45
Спасибо как раз сейчас и понадобилась обработка. Правда что то компоненты не нашёл. Хотя в описании сказано что она прикреплена к файлу
36. Иван (Sairys) 26.12.11 15:12
Спасибо за обработку, могу сказать что данная обработка понадобилась как нельзя кстати. Спасибо разработчику за это.
37. jack jack (jack_kkm) 16.02.12 07:24
От лица своей лени выражаю автору благодарность :)
Спасибо, пригодился код.
orehova123; +1 Ответить
38. haz (zaxarovsky) 07.04.12 15:09
Вопрос автору:
подскажите пжлст, как быть с таким кодом 10435629912040100206299000081001002227 ?
При раскодировании зацикливается на функции КонтролСумма
пришлось поставить такое условие в конце, чтобы база не висела хотябы
Если УбратьЗн = ДлКода Тогда
			Сообщить("Внимание! Ошибка распознавания штрихкода!", СтатусСообщения.Важное); 
			прервать;
		КонецЕсли;
...Показать Скрыть


сам штрихкод - к такому документу: Лист комплектации 000081006 от 04.04.2012
префикс типа документа использую "С"
39. Илья Ануфриев (aipnnov) 09.04.12 10:04
(38) haz,
Этот код сформирован не правильно поэтому происходит зацикливание т.к. не возможно проверить контрольную сумму кода.
Данная обработка выложена как пример генерации и расшифровки штрих-кодов (это не конечный продукт) поэтому могут быть ошибки или что-то не учтено при различных вариантах, но при этом генерация происходит корректно и соответственно расшифровка дает требуемый результат. Генерация происходит по международным правилам. Используется только латинский шрифт.
40. haz (zaxarovsky) 09.04.12 10:09
(39) aipnnov,
а где же неправильность?
41. Илья Ануфриев (aipnnov) 09.04.12 10:27
Вы с генерируйте штрих код через эту обработку, но в ней найдите и замените префикс определения документов, это можно сделать в модуле КнопкаВыполнитьНажатие(Кнопка) формы т.е. введите еще один тип документа:

Если ТипЗнч(Документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
		СтрокаКод = Формат(Документ.Дата,"ДФ=yyMMdd");
		СтрокаКод = "Р " + СтрокаКод + " " + ФорматКода(СокрЛП(Документ.Номер),УбратьЛидНули);
	ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.ПоступлениеТоваровУслуг") Тогда
		СтрокаКод = Формат(Документ.Дата,"ДФ=yyMMdd");
		СтрокаКод = "П " + СтрокаКод + " " + ФорматКода(СокрЛП(Документ.Номер),УбратьЛидНули);
	ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.ПеремещениеТоваров") Тогда
		СтрокаКод = Формат(Документ.Дата,"ДФ=yyMMdd");
		СтрокаКод = "В " + СтрокаКод + " " + ФорматКода(СокрЛП(Документ.Номер),УбратьЛидНули);
        ИначеЕсли ТипЗнч(Документ) = Тип("ДокументСсылка.КомплектацияНоменклатуры") Тогда
                СтрокаКод = Формат(Документ.Дата, "ДФ=yyMMdd");
                СтрокаКод = "С " + СтрокаКод + " " + ФорматКода(СокрЛП(Документ.Номер),УбратьЛидНули);
...Показать Скрыть

и т.д. далее по коду...
После этого генерируйте штрих-код.
Я сейсас поверил в документе Реализация товаров и услуг БД000002488 от 12.04.2011 6:29:08 и получил код Code128: 1044062991104110018620438441820242416 или EAN128: (20)40(15)110412(10)$FL2488, которые великолепно расшифровываются и открывается сам документ, к сожалению у меня нет документов комплектации т.к. мы ее не используем.
42. Вадим Карасев (2vadmaster) 16.04.12 13:11
Почему Оптимально, БазаМодеС = 6 ?
43. Модератор раздела Артур Аюханов (artbear) 06.07.12 12:09
Хорошая обработка, использую не один год, использую функции генерации и распознавания штрихкода.
но все-таки есть некоторые проблемы при распознавании:
1. Code39 не распознается, т.к. простая опечатка
ИначеЕсли Найти(ДанДок,Символ(32)) Тогда // здесь ошибка, нужно добавить "= 0"
ТипШК = ПланыВидовХарактеристик.ТипыШтрихкодов.Code39;
после исправления все распознается верно.
2. распознавание работает только для Ean128, Code128 и Code39 - автор уже писал об этом.
3. Code128 так и выдает ошибки зацикливания при распознавании
чем больше символов в коде, тем больше вероятность цикла :(
например, строка для штрихкодирования "спа;Хи-039141;2012;85727;000000109" после кодирования
приведет к зацикливанию при раскодировании.
эту проблему так и не получилось решить :(
что можно сделать все-таки?

есть ли еще где-нибудь функции распознавания штрихкодов?
44. Николай Иванов (beldieff) 23.08.12 10:59
У меня не декодирует.
               Если ТипШК = ПланыВидовХарактеристик.ТипыШтрихкодов.Code128 
						Или ТипШК = ПланыВидовХарактеристик.ТипыШтрихкодов.Code39 Тогда
						СпрНом = Справочники.Номенклатура.НайтиПоКоду(Сред(РасшСтрока,3,5));
					ИначеЕсли ТипШК = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда
						СпрНом = Справочники.Номенклатура.НайтиПоКоду(Сред(РасшСтрока,1,5));
					ИначеЕсли ТипШК = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN8 Тогда
						СпрНом = Справочники.Номенклатура.НайтиПоКоду(Сред(ШК,2,5));
					Иначе
						Предупреждение("Это штрихкод " + ТипШК + ",который необходимо занести в базу 
						|и присвоить номенклатуре!");
					КонецЕсли;
					
					СпрНом.ПолучитьФорму("ФормаЭлемента").Открыть();
...Показать Скрыть

Каким образом можно найти элемент с 11-значным кодом по 5-значному?
45. Владимир Балашов (vlanik) 25.03.13 15:28
Обработка со своими задачами справляется вполне, если не заставлять ее декодировать "бог знает что", то все работает на ура.
46. Михаил Ровковский (mixqn) 18.09.13 09:33
Объясните мне, а зачем нужен такой сложный алгоритм кодирования CODE 128? Почему нельзя просто представить в виде кода любой нужный набор цифр, например в формате NNNNNNNNNyyyyMMdd, где NNNNNNNNN - номер документа без буквенного префикса, а yyyyMMdd - его дата в формате yyyyMMdd.

например, для варианта приведенного выше: Реализация товаров и услуг БД000002488 от 12.04.2011 6:29:08, получим код 00000248820110412, его прекрасно можно представить в виде ШК CODE 128, он замечательно считается и далее уже по коду найдем документ.

не понимаю, зачем так усложнять?
47. Роман Озеряный (rozer) 04.12.14 16:24
все ок но пока в номерах документов не появились ЛАТИНСКИЕ буквы ) Пришлось допилить
48. Sergey Poh (pss1985) 14.11.16 12:06
а code 39 генерируется с контрольным символом?
49. Илья Ануфриев (aipnnov) 14.11.16 16:17
(48) pss1985, Делал давно и уже точно не помню, но должно быть с контрольной суммой, см. нужно сам код. Это не полноценная обработка, а ПРИМЕР кодирования и раскодирования по международным правилам, просто я ее сделал под документы, но могут возникать ошибки в определенных случаях, поэтому нужно ее допиливать под свои конкретные нужды.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа