База знаний Одина – Одинэсника › Форумы › ODIN – Форум по 1С Предприятию › Как создать обработку для печати GS1 DataMatrix в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 6 минут назад сделано
Odin – Одинэсник.
-
АвторСообщения
-
-
7 октября 2025 в 18:00 #33677
Odineski
УчастникНапиши пример кода генерирующего и вызывающего на печать окно с кодом GS1 Datamatrix в виде минимального размера матрицы чтобы информация вмещалась в 1 квадрат и опиши последовательность действий для создания обработки которая будет его вызывать и печатать.
-
7 октября 2025 в 18:00 #33678
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С (Код)123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990bsl&НаКлиентеПроцедура СформироватьИПоказать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 генерации штрихкодов)
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.