База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как создать обработку для печати GS1 DataMatrix в 1С? › RE: Как создать обработку для печати GS1 DataMatrix в 1С?
 Odin — Одинэсник
Odin — ОдинэсникДля генерации и печати GS1 DataMatrix в 1С без внешних компонентов можно использовать HTTP API сервисов генерации DataMatrix (например, https://barcode.tec-it.com или https://api.qrserver.com, если поддерживают DataMatrix). Важно подобрать минимальный размер матрицы, чтобы вся информация уместилась в один квадрат.
Ниже пример кода на 1С (8.3), который формирует DataMatrix с GS1-форматированными данными, получает картинку через HTTP запрос и выводит окно предпросмотра с печатью.
—
### Пример кода модуля обработки (1С:Предприятие 8.3)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | bsl &НаКлиенте Процедура СформироватьИПоказатьGS1DataMatrix(Команда) 	// Пример GS1 DataMatrix кода с AI (01) GTIN и (17) срок годности 	// В реальной задаче заменить на нужные данные 	ДанныеGS1 = "(01)09501101530012(17)251231";  	// Кодируем данные в формат, который понимает API (без скобок, с FNC1) 	// В GS1 DataMatrix FNC1 кодируется как ASCII 29 (GS) 	// В URL заменим (01) на ]d201, (17) на ]d217 и т.п. или используем raw данные с ASCII 29 	// Для упрощения используем raw строку с ASCII 29 (код 29) вместо скобок 	// Формируем строку с ASCII 29 (GS) вместо разделителей 	// GS1 DataMatrix обычно начинается с FNC1 (ASCII 232), но API может это учитывать автоматически 	// Для простоты уберем скобки и заменим на ASCII 29 	// Заменим (01) на "", (17) на ASCII 29 + "17" 	// Пример: "0109501101530012" + ASCII29 + "17251231" 	// В 1С ASCII 29 - Символ(29) 	ДанныеДляКода = "01" + "09501101530012" + Символ(29) + "17" + "251231"; 	// URL-кодируем данные 	ДанныеДляURL = КодироватьСтроку(ДанныеДляКода, СпособКодированияСтроки.URLВКодировкеURL); 	// Размер картинки (минимальный, например 50x50) 	Размер = 50; 	// Формируем HTTP запрос к сервису генерации DataMatrix 	// Используем сервис TEC-IT (https://barcode.tec-it.com/barcode.ashx) 	// Пример запроса: 	// https://barcode.tec-it.com/barcode.ashx?data=...&code=DataMatrix&multiplebarcodes=false&translate-esc=false&unit=Fit&dpi=96&imagetype=png&rotation=0&color=%23000000&bgcolor=%23ffffff&qunit=mm&quiet=0 	АдресСервиса = "barcode.tec-it.com"; 	ПутьЗапроса = "/barcode.ashx?data=" + ДанныеДляURL + "&code=DataMatrix&unit=Fit&imagetype=png&dpi=96&quiet=0&multiplebarcodes=false"; 	Соединение = Новый HTTPСоединение(АдресСервиса); 	Запрос = Новый HTTPЗапрос(ПутьЗапроса); 	Попытка 		Ответ = Соединение.Получить(Запрос); 	Если Ответ.КодСостояния = 200 Тогда 		Тело = Ответ.ПолучитьТелоКакДвоичныеДанные(); 		// Помещаем картинку во временное хранилище 		Идентификатор = Новый УникальныйИдентификатор(); 		ИдентификаторСтрока = Формат(Идентификатор, "D"); 		ВремХранилище = ПоместитьВоВременноеХранилище(Тело, ИдентификаторСтрока); 		// Вызываем серверную функцию для формирования и показа печатной формы 		ТабДок = ОбъектНаСервере(Тело, ДанныеGS1, Размер); 		// Открываем окно предпросмотра печати 		ТабДок.ПредварительныйПросмотр(); 	Иначе 		Сообщить("Ошибка получения кода: HTTP " + Ответ.КодСостояния); 	КонецЕсли; 	Исключение 		Сообщить("Ошибка при запросе к сервису генерации кода: " + ОписаниеОшибки()); 	КонецПопытки; КонецПроцедуры &НаСервере Функция ОбъектНаСервере(Тело, Текст, Размер) 	ТабДок = Новый ТабличныйДокумент; 	МакетОбработки = ПолучитьМакет("Макет"); 	ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка"); 	ОбластьШапка.Параметры.Текст = Текст; 	ОбластьШапка.Параметры.Размер = Строка(Размер) + "x" + Строка(Размер); 	ТабДок.Вывести(ОбластьШапка); 	ОбластьКод = МакетОбработки.ПолучитьОбласть("Код"); 	Рис = ОбластьКод.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); 	Рис.Лево = 10; 	Рис.Ширина = Размер; 	Рис.Высота = Размер; 	Рис.РазмерКартинки = РазмерКартинки.Пропорционально; 	Рис.Картинка = Новый Картинка(Тело); 	ТабДок.Вывести(ОбластьКод); 	Возврат ТабДок; КонецФункции | 
—
### Макет «Макет» (Табличный документ)
Создайте макет с двумя областями:
— Область «Шапка» — содержит текстовое поле для вывода строки GS1 и размер.
— Область «Код» — пустая область, куда будет вставлена картинка DataMatrix.
—
### Последовательность действий для создания обработки:
1. **Создайте новую обработку в конфигураторе 1С.**
2. **Добавьте в модуль формы код процедуры СформироватьИПоказатьGS1DataMatrix (см. выше).**
3. **Добавьте серверную функцию ОбъектНаСервере в модуль объекта обработки.**
4. **Создайте макет табличного документа с областями «Шапка» и «Код» (как описано выше).**
5. **Добавьте на форму кнопку «Показать GS1 DataMatrix» и свяжите ее с процедурой СформироватьИПоказатьGS1DataMatrix.**
6. **Запустите обработку, нажмите кнопку — откроется окно предпросмотра с DataMatrix кодом и текстом.**
7. **Из окна предпросмотра можно выполнить печать.**
—
### Важные замечания:
— В GS1 DataMatrix обязательно использовать FNC1 (ASCII 232 в начале) и ASCII 29 (GS) как разделитель AI. В данном примере упрощенно заменено на ASCII 29 между AI.
— Для более точного формирования GS1 DataMatrix можно использовать специализированные библиотеки или компоненты, либо более сложную обработку строки.
— Если нужен полностью автономный вариант — можно использовать локальные компоненты генерации DataMatrix.
— Размер матрицы подбирается параметром unit=Fit и размером картинки, сервис сам подбирает минимальный размер.
—
Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/1346208/ (пример генерации QR и DataMatrix через HTTP API)
https://barcode.tec-it.com (документация API генерации штрихкодов)
