"Разделитель" при формировании штрихкода GS-1

1. JustLucky 25.04.18 10:07 Сейчас в теме
День добрый!

Столкнулся в описании правил формирования штрихкода формата GS-1 с "если длина номера партии меньше 20 символов, то должен присутствовать разделитель длиной 2 символа (визуально отображаться не будет).

Что это вообще такое? :)

Например, я формирую штрихкод [01]012381283[3103]000504... И после определенного идентификатора [XX] применения должен идти этот разделитель.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. JustLucky 25.04.18 13:04 Сейчас в теме
Разобрался. Под разделителем понимается FNC 1, но вот как его вставить в штрихкод?
3. JustLucky 04.05.18 12:56 Сейчас в теме
4. spacecraft 04.05.18 13:05 Сейчас в теме
(3) а в чем собственно проблема? При формировании штрихкода дописать:
Штрихкод = Штрихкод + СтрокаПартия + ?(СтрДлина(СтрокаПартия) < 20, Символ(29), "") ;
5. JustLucky 04.05.18 16:55 Сейчас в теме
(4)
Символ(29)


Проблема в том, что штрихкод делается через Ocvita Barcode. Он передаётся в формате [01]12345678901234[3103]...

И если попробовать добавить туда Символ(29), то 1С крашится сразу. Не понятно даже почему.
6. oldfornit 04.05.18 17:00 Сейчас в теме
(5) скорее всего компонента уже сама добавляет необходимый спецсимвол.
7. spacecraft 04.05.18 17:06 Сейчас в теме
(5) возможно из-за того, что штрихкод формируется на сервере и передается на клиента. Строка содержит непечатный символ. Нельзя ее передавать с сервера на клиент.
9. oldfornit 04.05.18 18:00 Сейчас в теме
(7) первый раз слышу о запрете на передачу между клиентом и сервером непечатаемого символа. Можно меня ткнуть носом в документацию?

(8) не знаю причины топик-стартера, но стандартная библиотека на данный момент якобы не поддерживает gs1-128 (на самом деле поддерживает, но выбирать приходится EAN-128) и не поддерживает человеческое отображение цифр ШК при использовании спецсимвола. Также - если используется устаревшая версия стандартной библиотеки, то она и EAN-128 в спецификации GS1-128 не поддерживает; плюс QR-коды там отсутствуют как класс, плюс... да много этих плюсовых минусов. Да и из коробки цифры ШК выглядят просто преотвратно. Лечится это установкой незадокументированного свойства, но оно на то и недокументировано...
10. spacecraft 04.05.18 18:22 Сейчас в теме
(9) последнюю УТ11.4 смотрели? Там как раз GS1-128 вполне себе поддерживается.
А по поводу передачи с сервера на клиент Строки с непечатным символом, см. вложение.
Прикрепленные файлы:
17. oldfornit 07.05.18 11:36 Сейчас в теме
(10) ну так я специально написал "если используется устаревшая версия".
А по поводу передачи с сервера на клиент - это вопрос сериализации/десериализации. лечится кошерным преобразованием символов.
8. spacecraft 04.05.18 17:10 Сейчас в теме
(5) а стандартную библиотеку от 1С почему не использовать?
11. JustLucky 04.05.18 21:09 Сейчас в теме
(8) 1с Печать штрихкодов? Она тоже позволяет всё это реализовать?

Может, есть какой-нибудь пример работы с ней?
13. spacecraft 04.05.18 21:57 Сейчас в теме
(11) как уже сказал, есть вполне работающий пример в УТ11.4
Еще можно посмотреть БПО последний. Но последний релиз еще не смотрел, появился там GS1, или нет... надо смотреть. Во всяком случае QR коды там уже давно есть, как и PDF417.
14. JustLucky 04.05.18 22:06 Сейчас в теме
(13)

Спасибо! Там в каких объектах можно найти этот механизм? С конфигурацией очень мало работал, поэтому если дадите наводку, то сильно сэкономите мне время. )
15. spacecraft 04.05.18 22:21 Сейчас в теме
(14) можно начать со справочника ШаблоныЭтикетокИЦенников.
Функция УстановитьКартинкуШтрихкода(РисунокШтрихкода)
...
	ЗначениеШтрихкодаДляКомпоненты = Штрихкод;
	Если ТипКода = 2 ИЛИ ТипКода = 17 Тогда
		ЧтениеШтрихкода = ШтрихкодыУпаковокКлиентСервер.ПараметрыШтрихкода(СокрЛП(Штрихкод));
		Если НЕ ЧтениеШтрихкода.Результат = Неопределено Тогда
			Если ЧтениеШтрихкода.ТипШтрихкода = Перечисления.ТипыШтрихкодов.GS1_128
				ИЛИ ЧтениеШтрихкода.ТипШтрихкода = Перечисления.ТипыШтрихкодов.GS1_DataBarExpandedStacked Тогда
				ЗначениеШтрихкодаДляКомпоненты = ШтрихкодыУпаковокКлиентСервер.ШтрихкодGS1(ЧтениеШтрихкода.Результат,
				Истина, ШтрихкодыУпаковокКлиентСервер.СимволОкончанияСтрокиПеременнойДлины());
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	ПараметрыШтрихкода = Новый Структура;
	ПараметрыШтрихкода.Вставить("Ширина",                    Окр(РисунокШтрихкода.Ширина / КоличествоМиллиметровВПикселе));
	ПараметрыШтрихкода.Вставить("Высота",                    Окр(РисунокШтрихкода.Высота / КоличествоМиллиметровВПикселе));
	ПараметрыШтрихкода.Вставить("Штрихкод",                  ЗначениеШтрихкодаДляКомпоненты);
	ПараметрыШтрихкода.Вставить("ТипКода",                   ТипКода);
	ПараметрыШтрихкода.Вставить("GS1DatabarКоличествоСтрок", GS1DatabarКоличествоСтрок);
	ПараметрыШтрихкода.Вставить("МонохромныйШрифт",          МонохромныйШрифт);
	ПараметрыШтрихкода.Вставить("УголПоворота",              УголПоворота);
	ПараметрыШтрихкода.Вставить("ОтображатьТекст",           ОтображатьТекст);
	ПараметрыШтрихкода.Вставить("РазмерШрифта",              РазмерШрифта);
	ПараметрыШтрихкода.Вставить("Масштабировать",            Масштабировать);
	ПараметрыШтрихкода.Вставить("СохранятьПропорции",        СохранятьПропорции);
	ПараметрыШтрихкода.Вставить("ВертикальноеВыравнивание",  ВертикальноеВыравнивание);
	
	РисунокШтрихкода.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
КонецФункции
Показать

В функции ШтрихкодыУпаковокКлиентСервер.ШтрихкодGS1 формируется штрихкод GS1.
В функции МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода соответственно формируется рисунок штрихкода.
Внешняя компонента должна быть соответствующая. Можно взять из конфигурации: ОбщиеМакеты.КомпонентаПечатиШтрихкодов
JustLucky; +1 Ответить
16. JustLucky 05.05.18 09:55 Сейчас в теме
(15)

Большое спасибо за развёрнутый ответ! Буду копаться. :)
12. JustLucky 04.05.18 21:14 Сейчас в теме
И ещё непонятная для меня вещь.

После [01] в самом начале идёт GTIN из 14 символов. И почему-то при чтении распечатанного штрихкода с помощью ТСД если в начале не стоит "9", то не читает вообще.

Например, распечатали [01]91234...1234 - читает, распечатали [01]01234...1234 - не читает.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот