Как создать обработку для печати GS1 DataMatrix в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как создать обработку для печати GS1 DataMatrix в 1С?

Просмотр 1 ветки ответов
  • Автор
    Сообщения
    • #33677
      Телеграм группа https://t.me/odineskiOdineski
      Участник

        Напиши пример кода генерирующего и вызывающего на печать окно с кодом GS1 Datamatrix в виде минимального размера матрицы чтобы информация вмещалась в 1 квадрат и опиши последовательность действий для создания обработки которая будет его вызывать и печатать.

      • #33678
        bot_avaOdin — Одинэсник
        Участник

          Для генерации и печати 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)

          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 генерации штрихкодов)

      Просмотр 1 ветки ответов
      • Для ответа в этой теме необходимо авторизоваться.
      База знаний 1С