gifts2017

Простое штрихкодирование документов

Опубликовал Александр Шкураев (salexdv) в раздел Оборудование - Сканер штрих-кода

Была поставлена задача на предприятии, где ежедневно выписывается по 300-500 накладных организовать штрихкодирование документов, для более удобной работы с бумажным носителем в дальнейшем. И вот результат...

Конфигурация "Торговля и склад". Хотелось сделать как можно проще и быстрее, и в тоже время надежно. На решение задачи ушло 1,5 часа. И так приступим....

У нас будет использоваться штрихкод EAN13. Создаем общий реквизит документов.

Тип - "Строка", длина - 13, отбор по реквизиту.

Добавляем в глобальный модуль процедуру:

//******************************************************************************
// глСформироватьШтрихкодДокумента(Конт)
//
// Параметры:
//  Конт - контекст документа для которого необходимо сформировать штрихкод
//    EAN13- реквизит документа содержащий штрихкод
// Возвращаемое значение:
//  Нет                 
//
// Описание:
//  На основании номера документа и вида документа формирует штрихкод в формате EAN
//
Процедура глСформироватьШтрихкодДокумента(Конт, EAN13) Экспорт
	
	Если ПустаяСтрока(EAN13) = 1 Тогда
		
		ПрефиксыДокументов = СоздатьОбъект("СписокЗначений");
		ПрефиксыДокументов.ДобавитьЗначение("001", "Реализация");
		ПрефиксыДокументов.ДобавитьЗначение("002", "СчетФактураВыданный");                
		// и т.д
		КодДокумента        = СокрЛП(Прав(Конт.НомерДок,7));
		КодВидаДокумента    = Строка(Константа.ПрефиксВидаДокумента) + ПрефиксыДокументов.Получить(Конт.Вид());
		
		Префикс = Прав(ДатаГод(Конт.ДатаДок), 2);
		
		ИспКолво = 10;
		
		Штрихкод = СимволыВЦифры(Прав(СокрЛП(КодДокумента+КодВидаДокумента), ИспКолво));
		Штрихкод = Префикс + глДополнитьСтрокуЛ(Штрихкод, "0", ИспКолво);
		
		EAN13 = Штрихкод + глКонтрольныйСимволEAN(Штрихкод, 13);
	КонецЕсли;
	
КонецПроцедуры // глСформироватьШтрихкодДокумента()

После этого в документы, которым будут присваиваться штрихкоды добавляем вызов вышеописанного в процедуру:

Процедура ПриЗаписи()
	//..............................
	глСформироватьШтрихкодДокумента(Контекст, EAN13);
КонецПроцедуры

В результате при первой записи документа ему будет присвоен штрихкод состоящий из следующих блоков:

1) год документа (2 символа);

2) семь цифр справа от номера документа;

3) код вида документа (3 символа);

4) контрольный символ;

Осталось только вставить в печатную форму объект ActiveBarcode и настроить необходимые свойства у него.

А вот и результат Smile

Штрихкод на печатной форме документа

Минус у данного подхода несомненно есть - при совпадении префикса  штучного(весового) товара и последних двух цифр года документа возможно создание одинаковых штрихкодов для этих разных объектов базы.

http://shkuraev.ru

См. также

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

Комментарии

1. Юрий Курсин (Sherlock_kmw) 15.12.09 11:52
Заманчивая конечно идея использовать EAN13,
но
1. неуникальность кода ты укзал
2. необходимость создания еще одного общего реквизита
3. парево с его присвоением и хранением.

вывод:
я всегда штрихкодировал доки на основании внутреннего представления объекта в базе. за основу бралась не моя идея, я лишь прикручивал ее к практике, если интересно могу вечером выложить кусок кода

ЗЫ. в моем случае ессно используется EAN128
2. Alxd (salexdv) 15.12.09 12:04
(1) Согласен, EAN128 удобнее будет. EAN13 - как вариант.
Пиши статью про 128 ;)
3. Владимир Гришин (braynt) 15.12.09 12:18
а можно code 39. Как раз подходит для служебного штрихкодирования
4. Александр Рытов (Арчибальд) 15.12.09 12:24
возможно создание одинаковых штрихкодов для этих разных объектов базы

Во-первых, ничего страшного. Уж как нибудь отличить можно Документ от товара.
Во-вторых, вполне можно настрогать уникальных префиксов видов документов, отличных от всех префиксов товаров и поставить их впереди, а цифры года загнать в конец кода.
Что касается других замечаний в (1) - не думаю, что это существенно. Дополнительный общий реквизит проходит вполне безболезненно. А вот для формирования штрихкода я бы вместо глобальной процедуры взял обработку. Или вообще поручил бы это дело ВПФ, ведь пока штрихкод не напечатан, он все равно ни к чему.
5. Alxd (salexdv) 15.12.09 12:36
(4)
А вот для формирования штрихкода я бы вместо глобальной процедуры взял обработку. Или вообще поручил бы это дело ВПФ, ведь пока штрихкод не напечатан, он все равно ни к чему.


На мой взгляд, процедура все-таки глобальная и размещаться должна рядом с процедурой "глСформироватьШтрихкод()" :-)
6. Александр Рытов (Арчибальд) 15.12.09 12:42
(5) Мое кредо - "неразрушающее конфигурирование". Т.е. если можно обойтись только дополнением конфигурации, без изменения - так я и делаю. Вариант с ВПФ, которую все равно допиливать надо, тем и хорош, что на обновления конфигурации вообще никак не повлияет.
7. Alxd (salexdv) 15.12.09 12:46
(6) Все упирается в частности :) И ты, конечно, по-своему прав
8. Александр Рытов (Арчибальд) 15.12.09 12:51
+6 Доходит до смешного - даже вставляя штрихкодирование документов (правда, только одного вида) в собственную самописную конфу, я не стал трогать глобальный модуль. :D Все в обработке http://infostart.ru/public/19400/
9. Alxd (salexdv) 15.12.09 12:56
(8) Это называется правильный подход к делу :D
10. Vitalya Гуляев (Vix) 16.12.09 08:15
Дело конечно каждого, но как вариант штрих-код документа можно формировать из номера документа, даты и кода базы, т.к. помимо центральной есть еще и переферийные базы, тогда точно штрих-код будет уникальным. А насчет того, чтобы присваивать штрих-код документу, я это делал во время его создания, и процедуру лучше сделать в глобальном модуле, чтобы не напрягать лишними движениями пипла который этим делом будет заниматься. Это конечно мой подход, все мы любим творить и каждый творит по своему :)
11. hren hren (hren) 17.12.09 03:15
А как штрикод в дкоумент вставить?
12. Vitalya Гуляев (Vix) 17.12.09 06:30
(11) Если говорить о печатных формах то автор написал, что необходимо вставить обьект ActiveBarcode. А в самом документе вставляется общий реквизит для документов, как показано на рисунке EAN13, а в модуле формы в процедуре "ПриЗаписи()" прописывается эта строчка глСформироватьШтрихкодДокумента(Контекст, EAN13);
13. Alxd (salexdv) 17.12.09 08:44
(11) В типовой конфигурации "Торговля и склад" есть обработка ПечатьЭтикетки, объект ActiveBarcode можно скопировать оттуда. И еще, в операционной системе необходимо зарегистрировать Barcode.ocx
14. hren hren (hren) 17.12.09 08:46
В восьмерке в пункте "Вставить -- Объект" есть 3 переключателя, и можно втавить объект. А в семерке всего два переключателя и вставить объект нельзя. Можно вставить только лист Excel и прочую дребедень, а объектов ActiveX нет.
15. Alxd (salexdv) 17.12.09 09:27
(14) Ctrl+C Ctrl+V см. сообщение 13
16. hren hren (hren) 17.12.09 09:28
Чувак, это беспонтовый совет. Из восьмерки в семерку CTRL+C не прокатит. А если у меня вообще документа со штрихкодом нет, что делать? Откуда копировать?
17. Alxd (salexdv) 17.12.09 09:49
(16) Да причем тут восьмерка. Русским языком написал

В типовой конфигурации "Торговля и склад" есть обработка ПечатьЭтикетки, объект ActiveBarcode можно скопировать оттуда
18. hren hren (hren) 17.12.09 09:50
У меня нет типовой конфигурации "Торговля и склад". Штрихкод че там, родился чтоли? Как его вставить без копирования?
19. Alxd (salexdv) 17.12.09 09:57
(18) Его там родили разработчики конфигурации. Роды происходили так: :) Excel -> Вставка -> Объект... -> ActiveBarcode
Объект выделяется Ctrl+С, 1С - Ctrl+V
20. hren hren (hren) 17.12.09 10:03
Не работает. Я уже и "regsvr32.exe barcode.dll" делал. Захожу в Excel во вставку и вижу (на прикрепеленном файле).
Прикрепленные файлы:
21. Alxd (salexdv) 17.12.09 10:07
22. Александр Рытов (Арчибальд) 17.12.09 10:07
(20)
Я уже и "regsvr32.exe barcode.dll" делал.

Вообще-то компонента называется "barcode.ocx" :o
23. hren hren (hren) 17.12.09 10:09
Ну да, описка. Но все равно сделал, и он мне показал окошко, что все зарегено успешно. В списке объектов них не появилось. Что еще может быть? Попробую перезагрузиться
24. Артур Аюханов (artbear) 17.12.09 11:11
Лично у меня в штрихкоде помимо данных документа хранится еще сумма документа. Ее удобно использовать для сверки данных документа - типа не нахимичил ли кто с распечаткой.
25. "Я" ("Я") 04.02.10 16:29
26. Alxd (salexdv) 04.02.10 16:43
27. hren hren (hren) 05.02.10 03:33
Ну что, расскажет кто-нибудь как без копирования в чистую базу на пустой лист вставить этот компонент баркода? Копирование из другой базы не канает, у меня ее нет.
28. Александр Рытов (Арчибальд) 05.02.10 07:33
(27) Ну возьми у меня в профиле нумератор и скопируй из обработки
29. hren hren (hren) 05.02.10 07:46
Товарищи, 4-ый раз говорю, что меня интересует не копипаст, а технология вставки в пустую базу. Просто может случиться такая ситуация, когда у меня под рукой не будет обработок, откуда можно скопировать баркод. Я хочу узнать как его вставить, имея только .ocx файл
30. "Я" ("Я") 05.02.10 09:10
(26) Sherlock_kmw писал:
вывод:
я всегда штрихкодировал доки на основании внутреннего представления объекта в базе. за основу бралась не моя идея, я лишь прикручивал ее к практике, если интересно могу вечером выложить кусок кода

31. Анхель (advocatus2007) 25.06.10 08:45
:cry: В глобальный текст вставил, реквизит создал, в документе в модуле строку добавил, баркод скопипастил с этикетки, а вот что писать в его своийствах? кто поможет
32. Alxd (salexdv) 25.06.10 09:05
33. Анхель (advocatus2007) 25.06.10 10:41
Text <<?>>= EAN13
Переменная не определена (Text)
34. Alxd (salexdv) 25.06.10 11:43
(33) <ИмяТвоейТаблицы>.ТекущийОбъект.Text = EAN13
35. Анхель (advocatus2007) 25.06.10 18:19
36. Денис Денин (MrDen) 25.06.10 19:35
(0) А хватает ли 12 цифр для унификации документа???
37. Сергей (Che) Коцюра (CheBurator) 25.06.10 19:46
буквально месяц назад делал аналогичную задачу. в шк дока кодировался также контрагент, сумма, и еще что-то + рабочее место для проверки доков. Отвественный запускает рабочее место и щелкает доки перед сканером - правильные в одну кучку, неправильные в другую - связано с тем, что много переоформлений документов и идет рассогласование инфы в базе с имеющимися печатными копиями. того: клиент доволен...
38. Alxd (salexdv) 25.06.10 21:43
39. Сергей (Che) Коцюра (CheBurator) 25.06.10 22:02
(38) угумс... тут еще надо смотреть что если делать все совсем по уму - то линейный код может и не подойти - тупо по стандартам размеров не влезет.
40. Alxd (salexdv) 25.06.10 23:47
41. Анхель (advocatus2007) 26.06.10 15:13
42. Анхель (advocatus2007) 26.06.10 16:33
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа