Как мы универсально заштриховали документы

Программирование - Практика программирования

58
Стала задача, хоть как-то ускорить склад и логистику. Первым делом поняли, что не хватает скорости в обработке документов и нужны ШК на печатных формах... Что из этого получилось, читайте под катом.

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

Коль придумали, начали делать и как оказалось, работы на пару часов, с отладкой и тестами.

Первое, что надо сделать, запихнуть Штрихкоды, во все макеты, которые нужны нам.

Если кто не знает, как добавить ШК

 

Устанавливаем компоненту 1С ШтрихКоды с ИТС. В макете, на панельке сверху, идем по меню Таблица - Рисунки - Вставить объект, Выделаем на макете область в которую вставляем , данный ШК, и из меню , выбираем следующее

 

После того, как добавили область и ШК на  форму, переходим к коду и выводу этого самого ШК.

ОбластьШК = Макет.ПолучитьОбласть("ШК");
Компонент = ОбластьШК.Рисунки.Штрихкод.Объект;
Компонент.Автотип         = Истина;
Компонент.Сообщение       = Строка(Ссылка.УникальныйИдентификатор());
Компонент.ОтображатьТекст = Ложь;

ОбластьШК.Рисунки.Штрихкод.Ширина = Компонент.МинимальнаяШирина + 5;

ТабДокумент.Вывести(ОбластьШК);

Тут стоит Автотип, для того, чтоб 1С сама подобрала тип ШК, но для УИД, он будет Code128.

Так же, убран текст, и назначена автоширина для рисунка. Но почему то, с такой опцией, он не отобразился, поэтому прибавил 5.

После таких манипуляций, у вас на печатной форме, будет красоваться вот это

После,  нужно было сделать поиск по ШК и тут я начал добавлять для каждого документа, где есть ШК, в форме списка, кнопку для поиска, вызывалась кнопка по F7 (Де факто для 1С и сканеров )

В коде указывал

Результат = РаботаСТорговымОборудованием.ВвестиШтрихкод();
Если Результат<> "" Тогда
    Документы.РасходныйОрдерНаТовары.ПолучитьСсылку(Новый УникальныйИдентификатор(Результат)).ПолучитьФорму("ФормаДокумента").Открыть();
КонецЕсли;

Тут вроде все просто, сканируем ШК, получаем строку, и получаем ссылку по УИД. Единственный косяк, который еще не правил, раскладка при сканировании должна быть eng

И вроде бы все красиво, уже можно работать и все будет работать, но я пошел дальше. Захотелось просто подность любой документ со ШК к сканеру и получать форму.

Поэтому было сделано следующее, на панель интерфейса, добавляем значок, так же вызываемый по F7, который обращается к модулю и выполняет следующее

A279;A279;A279;A279;A279;A279;A279;&НаКлиенте
Процедура 	НайтиПоШК() Экспорт
	
        Результат = "";
	
	ВвестиСтроку(Результат, "Введите штрихкод");
	
	Если СтрДлина(Результат) < 30 ИЛИ Результат = "" Тогда
		Сообщить("Введен не верный УИД объекта");
		Возврат;
	КонецЕсли;
	
	Для Каждого Документ из Метаданные.Документы Цикл
			
		Ссылка = Документы[Документ.Имя].ПолучитьСсылку(Новый УникальныйИдентификатор(Результат));
		Если СокрЛ(Ссылка.Номер) = "" Тогда
			Продолжить;
		Иначе
			Ссылка.ПолучитьФорму().Открыть();
			Прервать;
		КонецЕсли;
	КонецЦикла;
		
КонецПроцедуры

Он перебирает все документы и ищет по УИД, то есть, если не открыт ни какой список, просто все закрыто и поднести документ к сканеру, то через пару секунд, у вас открытая форма документа.

Причем, если открыт список документов и там так же есть поиск по F7, то сработает тот, что из списка. Но никто не запрещает, вызывать поиск по нажатию кнопки на панельке  =)

Ну вроде по Code128 все. И это работает, будем потиху вводить на складе и надеяться , что это ускорит процесс работы.

 

Так же , можно использовать QR код, но он требует 2D сканера и другой компоненты. Я использую Octavita

Там есть подробный мануал + мануал по API
Но если кратко, то вывод QR выглядит так

ОбластьQR = Макет.ПолучитьОбласть("Штрих");
ОбластьQR.Рисунки.QR.Объект.symbology = 58; // тип = QR
ОбластьQR.Рисунки.QR.Объект.barcode = ШтрихКод;

ТабДокумент.Вывести(ОбластьQR);

Если эта статья Вам как то поможет, будет здорово =) Всегда рад поделиться чем то хорошим =)

 

p.s.

По совету Tria , чтоб не обходить все документы , в поисках нужного, можно закодировать сразу имя, через метаданные. Для QR будет самое то.

Сначала получаем строку для кодирования , разделяя имя и УИД символом, который будем искать

УИД = Строка(Ссылка.УникальныйИдентификатор());
Имя = Ссылка.Метаданные().Имя;
СтрокаДляКодирования = Имя + "/" + Уид;

Далее уже ищем

Позиция = Найти(мСтрока,"/");
Имя = Лев(мСтрока,Позиция-1);
УИД = Сред(мСтрока,Позиция+1,(СтрДлина(мСтрока) - Позиция + 1));
	
Документы[Имя].ПолучитьСсылку(Новый УникальныйИдентификатор(УИД)).ПолучитьФорму().Открыть();

 

Процедура поиска может быть разбита на несколько ЕСЛИ, к примеру длинна УИД = 36 символов, поиск номер 1, если больше, то уже через имя + уид, если меньге, то уже какой то другой.

58

См. также

Комментарии
Сортировка: Древо
1. yarunya 63 28.12.17 14:42 Сейчас в теме
Я делал отдельно регистр сведений по аналогии со штрихкодами товаров и уже набралось там более 800000 штрихкодов. В целом гуд, но надо постоянно следить за индексом, что бы быстро находился следующий номер штрихкода.
В целом классно, но код128 слишком длинный для пользователя и вводить вручную для поиска тоже сложно
2. Mi11er 75 28.12.17 15:04 Сейчас в теме
(1)
В целом классно, но код128 слишком длинный для пользователя и вводить вручную для поиска тоже сложно

вот от ручного ввода конечно стоит сразу отказаться =)

Поэтому сканер и QR это лучшее что есть, наверное по тиху будем переходить на них.

А регистр сведений, в целом тоже крут, можно всегда получить срез последнего и прибавить 1 к коду.
21. DarkAn 729 29.12.17 09:48 Сейчас в теме
(1) Тоже считаю, что данное решение более простое и использовать можно простой EAN13 вместо Code128. (У нас правда регистр поменьше - 430к)
22. Mi11er 75 29.12.17 10:19 Сейчас в теме
(21) а на сколько быстро ищется документ ?
По уид и имени, прям моментально открывает.

+ если испольщзуется обмен с бух к примеру, то и по идее в бух документ будет иметь такой же уид и можно его там найти
23. DarkAn 729 29.12.17 10:36 Сейчас в теме
(22)
а на сколько быстро ищется документ

"Быстро" по Вашему это сколько? Т.к. МарьИвановне из соседнего отдела 1 минута - это тоже быстро она, чай с плюшками допить не успела :)

Примерно так же, как Ваш уникальный идентификатор. На самом деле по медленнее, т.к. из регистра я получу туже самую ссылку, которую потом буду открывать пользователю. НО уверяю Вас ни один пользователь разницы не заметит, т.к. точно сказать сколько миллисекунд прошло 5 или 15 он не сможет :)

Зато если Ваш Code128 по произвольным причинам вдруг не будет считываться(стерся в одном месте) Вашим ТСД, то я думаю вбить цифры с EAN13 у пользователя займет гораздо меньше времени чем с Code128 :)
3. RocKeR_13 401 28.12.17 15:45 Сейчас в теме
Ну это, я так понимаю, дернули из типовых конфигураций на УФ?) А компонента для формирования картинки со штрихкодом почти в каждой конфе есть в виде общего макета: там и EAN, и Code128, отдельно компонента для QR-кодов есть
6. Mi11er 75 28.12.17 16:14 Сейчас в теме
(3) Нет, просто пришло в голову как то ...

Но УФ на толкнули на мысль, я просто знаю, что там можно скопировать ссылку на объект и передать другому, чтоб тот открыл и отсюда уже понеслось.
4. pvvpvv 10 28.12.17 16:03 Сейчас в теме
Это изумительная идея. Вместо "Уникальный идентификатор + Дата" применить "Уникальный идентификатор".
5. pvvpvv 10 28.12.17 16:05 Сейчас в теме
+(4) "Уникальный идентификатор + Дата" называется "Ссылка".
7. Mi11er 75 28.12.17 16:14 Сейчас в теме
(5) Здорово.
А дата зачем ?
8. pvvpvv 10 28.12.17 17:15 Сейчас в теме
Если дата не нужна - не используй. Зачем новый реквизит - "Уникальный идентификатор" . Он есть.
9. Tria 13 28.12.17 17:31 Сейчас в теме
В штрихкод можно записывать имя документа (из его метаданных), чтобы не делать цикл по всем документам.
12. Mi11er 75 28.12.17 19:30 Сейчас в теме
(9) с QR можно и попробовать так.
Хотя и с code128 в целом можно...

Попробуем =) Спасибо за совет.
19. Mi11er 75 28.12.17 23:35 Сейчас в теме
(9) Сделал так, быстрее раз в 5 конечно =) Открытие моментальное. Спасибо за совет.
P.s. добавить метод в статью
10. palsergeich 28.12.17 18:19 Сейчас в теме
Есть более интересное решение, но оно требует что бы объекты метаданных имели имена на латинице.
По Code128 можно закодировать до 103 символов данных, это идеально подходит для следующего:
Хранить в штрих коде не УИД ссылки, а навигационную ссылку:
e1cib/data/Catalog.CatName?ref=947e0050568b2c2111e416f9b2fde6d6, это избавит от необходимости хранить в базе вообще какие либо дополнительные данные.
И тогда обработка получения данных со сканера будет иметь всего одну строчку -
ПерейтиПоНавигационнойСсылке(строка)
Согласен, что в случае со штрих кодом это практически невыполнимо переименовать справочники и документы, но если речь пойдет о QR коде, то там такого ограничения (можно и кириллицу использовать e1cib/data/Catalog.Номенклатура?ref=947e0050568b2c2111e416f9b2fde6d6) нет
корум; maxopik2; Mrgnstrn; +3 Ответить
11. Mi11er 75 28.12.17 19:29 Сейчас в теме
(10)
Да, это работет прекрасно, но есть одно НО

по причине:
Данная функция может быть вызвана только в управляемом режиме


У меня ут 10.3, простые формы.

Так что УИД.
20. palsergeich 29.12.17 09:44 Сейчас в теме
(11) Из навигационной ссылки УИД получается перестановкой символов, имя и тип объекта метаданных там есть, просто будет не одна а 2-3 строчки кода)
maxopik2; +1 Ответить
25. nomadon 288 29.12.17 10:54 Сейчас в теме
(11) ну можно не переходить а получить ссылку и ОткрытьЗначение()
27. Mi11er 75 29.12.17 14:15 Сейчас в теме
(25) Попробуем такой метод. Пока что сделали по УИД, уже начали пользоваться, всем нравится.
24. nomadon 288 29.12.17 10:54 Сейчас в теме
(10) можно русские закодировать с помощью метода КодироватьСтроку в урл, а потом обратно раскодировать.
13. ZLENKO 376 28.12.17 19:46 Сейчас в теме
Почему то в конфигураторе все нормально работает в макете, но при выполнении в 1С 8.3.9
ОбластьШК.Рисунки.Штрихкод.Объект содержит значение Неопределено
На 8.3 не работает компонент ?
14. Mi11er 75 28.12.17 20:10 Сейчас в теме
(13) У меня на 8.3.8 все сделано. Вроде работает.
15. zabaluev 360 28.12.17 20:39 Сейчас в теме
(13) Компонента "1С Штрихкод" не работает с 64 разрядной платформой. Сам пол дня потерял, после того , как поставил новую платформу и вдруг перестала работать элементарная обработка по генерации штрихкодов для бейджиков.
16. genayo 28.12.17 20:48 Сейчас в теме
В Ут11 например в штрихкоде выводится не символьный уид а его десятиричное представление. Ну и прикрутить к нему префикс к примеру для каждого вида документов дело техники.
17. Mi11er 75 28.12.17 20:58 Сейчас в теме
(16) Нужно будет 11 глянуть, что и как делается. Может чего позаимствовать
18. minimajack 50 28.12.17 21:27 Сейчас в теме
(17) все очень просто, надо не только в 10-й системе но и что бы количество символов было кратно 2-м. Тогда в кодировке Code 128C - штрихкод получается очень компактным
26. palsergeich 29.12.17 11:48 Сейчас в теме
И да вместо этого
Документы[Имя].ПолучитьСсылку(Новый УникальныйИдентификатор(УИД)).ПолучитьФорму().Открыть();
Я бы написал так:
ОткрытьФорму("Документ" + [Имя]+".Форма", Новый Структура(Ключ, Документы[Имя].ПолучитьСсылку(Новый УникальныйИдентификатор(УИД)))
28. Mi11er 75 29.12.17 14:15 Сейчас в теме
(26) а в чем принципиальная разница ?
31. palsergeich 29.12.17 14:47 Сейчас в теме
(28) Рекомендации с ИТС
1.1. Для открытия форм следует применять метод глобального контекста ОткрытьФорму (при использовании версии платформы 1С:Предприятие 8.2 и более ранних версий - также ОткрытьФормуМодально). Применение альтернативного способа, с получением формы и ее последующим открытием с помощью метода ПолучитьФорму, не рекомендуется. Исключения из этого правила возможны только в особых случаях (см. раздел ниже «Особые случаи использования форм»).
33. Mi11er 75 29.12.17 15:12 Сейчас в теме
(31) Понял, буду знать и внедрять, спасибо.
29. dandykry 3 29.12.17 14:29 Сейчас в теме
Думаю гуид лучше навигационной ссылки, потому что имя могут переименовать (по разным причинам, будь это обновление или чья-то дописка), и кто-то не уследит.
Так же думаю изначально нужно записывать тип документа в ШК, потому что в базах, которым много лет или используется кривая синхронизация, бывает в двух разных таблица ссылочных типов одного типа идентичные гуиды. К примеру у меня бывали физ лица и сотрудники с одним гуидом. Перебором будет открываться первый.

Вообще идея хорошая.
30. palsergeich 29.12.17 14:43 Сейчас в теме
(29) Переименовываются объекты метаданных редко, ибо слишком много что в итоге приходится менять, особенно документы.
В случае возникновения подобной ситуации лечится мэппингом, еще 1-2 строчки.
32. dandykry 3 29.12.17 15:02 Сейчас в теме
(30) Редко, но бывает. Только недавно в ERP было.
Я тут подумал, если документ переименуется, то и тип документа так же изменится.
С историей развития базы придется иметь где-то сопоставление Было-Стало для поддержки предыдущих штрихкодов.

Я не ради спора пишу. Есть много способов реализации этого механизма. Я думаю о путях обхода подводных камней в будущем.
34. palsergeich 29.12.17 15:32 Сейчас в теме
(32) Или хардкодом в общем модуле: соответствие старое название -новое название или регистр сведений
35. MerwMebel 30.12.17 04:30 Сейчас в теме
Ребята а нельзя просто обойтись без уникального индефикатора потому что у меня он не читается сканером!
36. MerwMebel 30.12.17 04:32 Сейчас в теме
Решил реализовать всё вышеописанное в документе РеализацияТоваровУслуг
Сам штрих код выводится в печатную форму и вроде бы все нормально, но у меня РИБ и базы индефицируются между собой номерами у которых есть префиксы в виде 5 букви они на кириллице! помогите пожалуйста не по уникальному а как-то указывать ЕАН13 заменяя его первые цифры на цифры "22" например! или назначать новый штрихкод типа как в номенклатуре что бы начинался на 200 чтоль!
44. dmt 31 07.01.18 12:33 Сейчас в теме
(36) Будет работать при соглашении, что пользователи не могу изменить номер документа.

1. Простое соответствие: префикс - двузначное число
2. Год документа - двузначное число
3. Остальные 8 цифр значащие.

Получаем штрих код:
10_17_00000001+контрольный символ
37. acanta 44 31.12.17 15:48 Сейчас в теме
При ручном наборе цифр штрих кода можно сделать поиск по вхождению.
38. Infector 120 31.12.17 18:02 Сейчас в теме
На практике доказано, что 28 числовых символов достаточно, чтобы идентифицировать любой объект в системе. Если нужно идентифицировать еще и разновидности печатных форм добавляем еще 4 символа. Итого 32 числовых символа, которые превращаются в 16 символов code128 или любой другой разновидности штрихкода.
39. DMon 72 01.01.18 22:06 Сейчас в теме
А по-моему это очередной велосипед. Чем не устраивает типовой механизм штрих-кодирования документов, где GUID преобразуется из шестнадцатеричного в десятичный код и обратно (при поиске документа в базе)?
Тогда не важна раскладка клавиатуры.
Или это для чего-то экзотичного? :)
40. Mi11er 75 02.01.18 21:58 Сейчас в теме
41. DMon 72 04.01.18 21:17 Сейчас в теме
(40) Честно, не помню где подсмотрел, но по-моему в УТ11 (и их подобных)
Пробежался по топику и уже встречались подсказки в эту сторону.
Сорри за мой флуд )
42. Antimyslitel 2 07.01.18 11:24 Сейчас в теме
(41)
Честно, не помню где подсмотрел, но по-моему в УТ11 (и их подобных)
Пробежался по топику и уже встречались подсказки в эту сторону.
Сорри за мой флуд )
вот именно в 11 Ут есть а для 10.3 нет! Помогите пожалуйста!
(40)
.3 ?
Подскажите если не сложно можно сделать что бы штрихкод был ЕАН13 а не уникальный индефикатор? и назначался по какому то алгоритму определенному?
43. Infector 120 07.01.18 11:50 Сейчас в теме
(42) EAN13 для кодирования документов базы - это грабли. ибо он слишком короток. Зато code128, QR и PDF417 задачу замечательно решают. Фактически при этом сам код может быть одним и тем же, но выводиться в разный формат при печати.
45. Mi11er 75 07.01.18 12:43 Сейчас в теме
(42) алгоритм можете задать сами. у вас для этого аж 13 цифр есть.

к примеру

год + номер + тип документа.

Дальше запросом по подобию номера в пределах года ищете
46. Infector 120 07.01.18 12:52 Сейчас в теме
(45) Грабли. Рано или поздно окажется, что или под номер знаков мало, или под тип. А еще иногда в номера любят пихать буквы, вот тогда веселье начинается.
47. Mi11er 75 07.01.18 13:58 Сейчас в теме
(46) Есть такое дело
у нас так кодировались заказы покупателя
год + номерной префик компании + номер

ну потом запросом легко находится. но это конечно не универсально, поэтому и задался вопросом =) и получилось что code128 идеально. Надо будет глянуть как в 11 сделано
48. Infector 120 07.01.18 14:02 Сейчас в теме
(47) думаю, что скоро свое решение в публикацию оформлю. Азарт, так сказать, зажгли.
49. Mi11er 75 07.01.18 14:10 Сейчас в теме
(48) =) Будем ждать. Как раз со след недели поеду на склад работать ,смотреть бизнес процессы и думать как ускорять их дальше. И повсеместно вводить ШК ..
50. Antimyslitel 2 07.01.18 17:48 Сейчас в теме
(45)
алгоритм можете задать сами. у вас для этого аж 13 цифр есть.

к примеру

год + номер + тип документа.

Дальше запросом по подобию номера в пределах года ищете

А мне надо что бы первые две цифры были 22 потом пять цифр с права на лево номер документа без префикса и потом 6 цифр дата документа тогда получается что 13 цифр еан13 идеально получается!
Помогите пожалуйста с кодом где его прописать какой код и как потом его считать если не сложно! очень надо!
51. Арчибальд 2702 07.01.18 18:11 Сейчас в теме
(50) В еан13 есть только 12 цифр.
Infector; +1 Ответить
52. Mi11er 75 07.01.18 18:19 Сейчас в теме
(51) Вообще 13, 12 кодированные и 1 контрольный. Это если действительно так. А вообще, вот пример, как у нас был ШК для заказов покупателя http://prntscr.com/hx83sq , тут 13 цифр
Infector; +1 Ответить
53. Арчибальд 2702 07.01.18 18:25 Сейчас в теме
55. Antimyslitel 2 07.01.18 19:42 Сейчас в теме
(52) Именно так и хочется! подскажите как это можно осуществить?
54. Mi11er 75 07.01.18 18:28 Сейчас в теме
(50)
Попробуйте что то вроде, код на быструю руку, поправьте что надо

Функция ФормированияСТрокаДЛяКодирования(Ссылка)
    
    НомерДокумента = прав(Ссылка.Номер,5);

    н = 4;
    СтрокаНомер = "";

    Пока н <> 0 Цикл
	
	    СтрокаНомера = СтрокаНомера + НомерДокумента [н];
	    н = н - 1;

    КонецЦикла;

    ДатаДокумента= Формат(Ссылка.Дата,"ДФ=ггММдд");

    Возврат  "22" + СтрокаНомер + ДатаДокумента;
КонецФункции
Показать
56. Antimyslitel 2 07.01.18 19:43 Сейчас в теме
(54)Спасибо сейчас в течении часа все это сделаю и отпишусь!
57. Antimyslitel 2 07.01.18 20:36 Сейчас в теме
(54)А куда надо этот код вставить?
58. Antimyslitel 2 07.01.18 20:36 Сейчас в теме
(54)Что то я пытался его вставить но похожей функции из темы нет!(((
59. ZLENKO 376 12.01.18 16:32 Сейчас в теме
Сделал штрихкодирование документов на нативных компонентах из БСП (ОбщиеМакеты.КомпонентаПечатиШтрихкодов и ОбщиеМакеты.Драйвер1ССканерШтрихкода). Удобно что не нужно регистрировать никаких DLL. Механизмы работы с торговым оборудованием не стал использовать, т.к. много лишнего кода тянуть нужно. Сделал просто несколько процедур, например подключение сканера ШК:

// Функция выполняет подключение внешней компоненты и ее первоначальную настройку.
// Возвращаемое значение: НЕОПРЕДЕЛЕНО - компоненту не удалось загрузить.
Функция ПодключитьВнешнююКомпонентуСканераШтрихкода() Экспорт
	
	ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.Драйвер1ССканерШтрихкода", "СканерШтрихкода", ТипВнешнейКомпоненты.Native);
	
	// Создадим объект внешней компоненты.
	Если ПодключениеВыполнено Тогда
		ВнешняяКомпонента = Новый("AddIn.СканерШтрихкода.Scanner");
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
	ВнешняяКомпонента.УстройствоВключено = 0;
	ВнешняяКомпонента.ПосылкаДанных = 0;
		
	// Подсоединим компоненту
	Попытка
		ВнешняяКомпонента.Подсоединить("Scanner");
	Исключение
		Возврат Неопределено;
	КонецПопытки;
	
	// Установим основные параметры компоненты.	
	ВнешняяКомпонента.Порт = 0;				
	ВнешняяКомпонента.ИмяСобытия = "BarCode";
	ВнешняяКомпонента.ПрефиксСтрока = Символ(0);
	ВнешняяКомпонента.СуффиксСтрока = Символ(13);		
	
	ВнешняяКомпонента.УстройствоВключено = 1;
	ВнешняяКомпонента.ПосылкаДанных = 1;	
	
	// Займем компоненту	
	Если ВнешняяКомпонента.Занять(1) = 0 Тогда
		ВнешняяКомпонента.ОчиститьВход();
		ВнешняяКомпонента.ОчиститьВыход();			
	Иначе		
		Возврат Неопределено;		
	КонецЕсли;
		
	Если ВнешняяКомпонента.УстройствоВключено = 1 
		И ВнешняяКомпонента.УстройствоЗанято = 1 Тогда
		Возврат ВнешняяКомпонента;
	Иначе		
		Возврат Неопределено;
	КонецЕсли;
		
КонецФункции
Показать


// Функция выполняет подключение внешней компоненты и ее первоначальную настройку.
// Возвращаемое значение: НЕОПРЕДЕЛЕНО - компоненту не удалось загрузить.
Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт
	
	ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
	
	// Создадим объект внешней компоненты.
	Если ПодключениеВыполнено Тогда
		ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
	Иначе
		Возврат Неопределено;
	КонецЕсли;
	
	// Если нет возможности рисовать.
	Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
		// То картинку сформировать не сможем.
		Возврат Неопределено;
	Иначе
		// Установим основные параметры компоненты.
		// Если в системе установлен шрифт Tahoma.
		Если ВнешняяКомпонента.НайтиШрифт("Tahoma") Тогда
			// Выбираем его как шрифт для формирования картинки.
			ВнешняяКомпонента.Шрифт = "Tahoma";
		Иначе
			// Шрифт Tahoma в системе отсутствует.
			// Обойдем все доступные компоненте шрифты.
			Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
				// Получим очередной шрифт, доступный компоненте.
				ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
				// Если шрифт доступен
				Если ТекущийШрифт <> Неопределено Тогда
					// Они и будет шрифтом для формирования штрихкода.
					ВнешняяКомпонента.Шрифт = ТекущийШрифт;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		// Установим размер шрифта
		ВнешняяКомпонента.РазмерШрифта = 12;
		
		Возврат ВнешняяКомпонента;
	КонецЕсли;
	
КонецФункции
Показать
60. igo1 216 14.03.18 13:12 Сейчас в теме
Это же принцип работы из УТ 11. Ай как не хорошо =)
61. Mi11er 75 14.03.18 16:40 Сейчас в теме
(60) Когда я делал у себя, я еще не видел как сделано в УТ 11.
Но у них это не 2ух мерный и не 128, они впихивают спокойно в ean13 , компактно получается.
62. Muxomop 149 22.05.18 13:48 Сейчас в теме
Небольшое дополнение: т.к. Code128 не может закодировать кириллицу, то вид документа можно закодировать числом.
Например:
Имя = Ссылка.Метаданные().Имя;
ИндексДокумента = Метаданные.Документы.Индекс(Метаданные.Документы[Имя]);
СтрокаДляКодирования = ИндексДокумента + "/" + Уид;
63. Mi11er 75 22.05.18 16:47 Сейчас в теме
Оставьте свое сообщение