1С 8.3 БСП ИзображениеШтрихкода - Программист 1С Минск. Автоматизация бизнеса.

Популярные страницы:
Перейти к контенту

1С 8.3 БСП ИзображениеШтрихкода

Данные > Примеры кода 1С > 1С 8.3 БСП > Генерация штрих-кода
Перейти в раздел примеры кода 1С 8.3:
1С 8.3 БСП ИзображениеШтрихкода. Формирование изображения штрихкода.
Примера кода от rayastar
Результат = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);

// Автор библиотеки: ООО "1С-Софт". Все права защищены © 2021
// Типовая конфигурация Библиотека стандартных подсистем (далее - БСП)
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
Метод БСП
// Формирование изображения штрихкода.
//
// Параметры:
//   ПараметрыШтрихкода - см. ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода.
//
// Возвращаемое значение:
//   Структура:
//      Результат - Булево - результат генерации штрихкода.
//      ДвоичныеДанные - ДвоичныеДанные - двоичные данные изображения штрихкода.
//      Картинка - Картинка - картинка с сформированным штрихкодом или НЕОПРЕДЕЛЕНО.
//
Функция ИзображениеШтрихкода(ПараметрыШтрихкода) Экспорт

   СистемнаяИнформация = Новый СистемнаяИнформация;
   ТипПлатформыКомпоненты = Строка(СистемнаяИнформация.ТипПлатформы);

   ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты);

   Если ВнешняяКомпонента = Неопределено Тогда
       ТекстСообщения = НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода.'");
       ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка генерации штрихкода'",
           ОбщегоНазначения.КодОсновногоЯзыка()),
           УровеньЖурналаРегистрации.Ошибка,,,
           ТекстСообщения);
       ВызватьИсключение ТекстСообщения;
   КонецЕсли;

   Возврат ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода);

КонецФункции
// Автор библиотеки: ООО "1С-Софт". Все права защищены © 2021
// Типовая конфигурация Библиотека стандартных подсистем (далее - БСП)
// Код БСП распространяется по лицензии Attribution 4.0 International (CC BY 4.0):
// ссылка на лицензию: https://creativecommons.org/licenses/by/4.0/legalcode
Реализация метода БСП
// Отправляем структуру параметров в серверную функцию ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода)
// через экспортную функцию ИзображениеШтрихкода(ПараметрыШтрихкода) Экспорт
Функция ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода)

   // Результат
   РезультатОперации = Новый Структура();
   РезультатОперации.Вставить("Результат", Ложь);
   РезультатОперации.Вставить("ДвоичныеДанные");
   РезультатОперации.Вставить("Картинка");

   // Зададим размер формируемой картинки.
   ШиринаШтрихкода = Окр(ПараметрыШтрихкода.Ширина);
   ВысотаШтрихкода = Окр(ПараметрыШтрихкода.Высота);
   Если ШиринаШтрихкода <= 0 Тогда
       ШиринаШтрихкода = 1
   КонецЕсли;
   Если ВысотаШтрихкода <= 0 Тогда
       ВысотаШтрихкода = 1
   КонецЕсли;
   ВнешняяКомпонента.Ширина = ШиринаШтрихкода;
   ВнешняяКомпонента.Высота = ВысотаШтрихкода;
   ВнешняяКомпонента.АвтоТип = Ложь;

   ШтрихкодВрем = Строка(ПараметрыШтрихкода.Штрихкод); // Преобразуем явно в строку.

   Если ПараметрыШтрихкода.ТипКода = 99 Тогда
       ВнешняяКомпонента.АвтоТип = Истина;
   Иначе
       ВнешняяКомпонента.АвтоТип = Ложь;
       ВнешняяКомпонента.ТипКода = ПараметрыШтрихкода.ТипКода;
   КонецЕсли;

   Если ПараметрыШтрихкода.Свойство("ПрозрачныйФон") Тогда
       ВнешняяКомпонента.ПрозрачныйФон = ПараметрыШтрихкода.ПрозрачныйФон;
   КонецЕсли;

   Если ПараметрыШтрихкода.Свойство("ТипВходныхДанных") Тогда
       ВнешняяКомпонента.ТипВходныхДанных = ПараметрыШтрихкода.ТипВходныхДанных;
   КонецЕсли;

   Если ПараметрыШтрихкода.Свойство("GS1DatabarКоличествоСтрок") Тогда
       ВнешняяКомпонента.GS1DatabarКоличествоСтрок = ПараметрыШтрихкода.GS1DatabarКоличествоСтрок;
   КонецЕсли;

   Если ПараметрыШтрихкода.Свойство("УбратьЛишнийФон") Тогда
       ВнешняяКомпонента.УбратьЛишнийФон = ПараметрыШтрихкода.УбратьЛишнийФон;
   КонецЕсли;

   ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;
   // Формируем картинку штрихкода.
   ВнешняяКомпонента.ЗначениеКода = ШтрихкодВрем;
   // Угол поворота штрихкода.
   ВнешняяКомпонента.УголПоворота = ?(ПараметрыШтрихкода.Свойство("УголПоворота"), ПараметрыШтрихкода.УголПоворота, 0);
   // Уровень коррекции QR кода (L=0, M=1, Q=2, H=3).
   ВнешняяКомпонента.УровеньКоррекцииQR =
  ?(ПараметрыШтрихкода.Свойство("УровеньКоррекцииQR"), ПараметрыШтрихкода.УровеньКоррекцииQR, 1);

   // Для обеспечения совместимости с предыдущими версиями БПО.
   Если Не ПараметрыШтрихкода.Свойство("Масштабировать")
       Или (ПараметрыШтрихкода.Свойство("Масштабировать") И ПараметрыШтрихкода.Масштабировать) Тогда

       Если Не ПараметрыШтрихкода.Свойство("СохранятьПропорции")
           Или (ПараметрыШтрихкода.Свойство("СохранятьПропорции") И Не ПараметрыШтрихкода.СохранятьПропорции) Тогда
           // Если установленная нами ширина меньше минимально допустимой для этого штрихкода.
           Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
               ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
           КонецЕсли;
           // Если установленная нами высота меньше минимально допустимой для этого штрихкода.
           Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
               ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
           КонецЕсли;
       ИначеЕсли ПараметрыШтрихкода.Свойство("СохранятьПропорции") И ПараметрыШтрихкода.СохранятьПропорции Тогда
           Пока ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода
               Или ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Цикл
               // Если установленная нами ширина меньше минимально допустимой для этого штрихкода.
               Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
                   ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
                   ВнешняяКомпонента.Высота = (ВнешняяКомпонента.МинимальнаяШиринаКода
                  / Окр(ПараметрыШтрихкода.Ширина)) * Окр(ПараметрыШтрихкода.Высота);
               КонецЕсли;
               // Если установленная нами высота меньше минимально допустимой для этого штрихкода.
               Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
                   ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
                   ВнешняяКомпонента.Ширина = (ВнешняяКомпонента.МинимальнаяВысотаКода /
                  Окр(ПараметрыШтрихкода.Высота)) * Окр(ПараметрыШтрихкода.Ширина);
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
   КонецЕсли;

   // ВертикальноеВыравниваниеКода: 1 - по верхнему краю, 2 - по центру, 3 - по нижнему краю.
   Если ПараметрыШтрихкода.Свойство("ВертикальноеВыравнивание") И (ПараметрыШтрихкода.ВертикальноеВыравнивание > 0) Тогда
       ВнешняяКомпонента.ВертикальноеВыравниваниеКода = ПараметрыШтрихкода.ВертикальноеВыравнивание;
   КонецЕсли;

   Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И (ПараметрыШтрихкода.РазмерШрифта > 0)
       И (ПараметрыШтрихкода.ОтображатьТекст) И (ВнешняяКомпонента.РазмерШрифта <> ПараметрыШтрихкода.РазмерШрифта) Тогда
       ВнешняяКомпонента.РазмерШрифта = ПараметрыШтрихкода.РазмерШрифта;
   КонецЕсли;

   Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И ПараметрыШтрихкода.РазмерШрифта > 0
       И ПараметрыШтрихкода.Свойство("МонохромныйШрифт") Тогда
       Если ПараметрыШтрихкода.МонохромныйШрифт Тогда
           ВнешняяКомпонента.МаксимальныйРазмерШрифтаДляПринтеровНизкогоРазрешения = ПараметрыШтрихкода.РазмерШрифта + 1;
       Иначе
           ВнешняяКомпонента.МаксимальныйРазмерШрифтаДляПринтеровНизкогоРазрешения = -1;
       КонецЕсли;
   КонецЕсли;

   Если ПараметрыШтрихкода.ТипКода = 16 Тогда // QR
       Если ПараметрыШтрихкода.Свойство("ЛоготипКартинка") И Не ПустаяСтрока(ПараметрыШтрихкода.ЛоготипКартинка) Тогда
           ВнешняяКомпонента.ЛоготипКартинка = ПараметрыШтрихкода.ЛоготипКартинка;
       КонецЕсли;
       Если ПараметрыШтрихкода.Свойство("ЛоготипРазмерПроцентОтШК") И
          Не ПустаяСтрока(ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК) Тогда
           ВнешняяКомпонента.ЛоготипРазмерПроцентОтШК = ПараметрыШтрихкода.ЛоготипРазмерПроцентОтШК;
       КонецЕсли;
   КонецЕсли;

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

   Возврат РезультатОперации;

КонецФункции

// Данная функция возвращает структуру РезультатОперации следующего содержания
РезультатОперации = Новый Структура();
РезультатОперации.Вставить("Результат", Ложь); // сработало или нет
РезультатОперации.Вставить("ДвоичныеДанные");  // двоичные данные изображения штрихкода
РезультатОперации.Вставить("Картинка");        // картинка

// Внешняя компонента - основной объект для формирования "картинки" штрихкода,
// встроенный в ОбщийМакет.КомпонентаПечатиШтрихкодов конфигурации БСП.
// Получить его можно вот так:
СистемнаяИнформация = Новый СистемнаяИнформация;
ТипПлатформыКомпоненты = Строка(СистемнаяИнформация.ТипПлатформы);
ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты);
Пример использования данного функционала от quazаrе
&НаКлиенте
Процедура Команда1(Команда)

   СформироватьНаСервере();

КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере()

   Результат.Очистить();

   ВремОбъект = РеквизитФормыВЗначение("Объект");
   Макет = ВремОбъект.ПолучитьМакет("Макет");

   Область = Макет.ПолучитьОбласть("Строка     |Колонка");
   Рисунок = Область.Рисунки.ШтрихКод;

   Эталон = ВремОбъект.ПолучитьМакет("МакетДляОпределенияКоэффициентовЕдиницИзмерения");

   КоличествоМиллиметровВПикселеВысота = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
   КоличествоМиллиметровВПикселеШирина = Эталон.Рисунки.Квадрат100Пикселей.Ширина / 100;
   ШиринаШтрихкода = Окр(Рисунок.Ширина / КоличествоМиллиметровВПикселеШирина);
   ВысотаШтрихкода = Окр(Рисунок.Высота / КоличествоМиллиметровВПикселеВысота);

   ВходныеДанные = "(01)04600829201507(11)116109(30)2434";

   Картинка = ПолучитьШтрихкод(ШиринаШтрихкода, ВысотаШтрихкода, ВходныеДанные, 24);  // 24 - Datamatrix GS1ASCII

   Рисунок.Картинка = Картинка;
   Результат.Вывести(Область);

КонецПроцедуры

&НаСервере
Функция ПолучитьШтрихкод(ШиринаШтрихкода, ВысотаШтрихкода, ЗначШтрихкод, ЗначТипШтрихкода)

   ПараметрыШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
   ПараметрыШтрихкода.Ширина = ШиринаШтрихкода;
   ПараметрыШтрихкода.Высота = ВысотаШтрихкода;
   ПараметрыШтрихкода.ТипКода = ЗначТипШтрихкода;
   ПараметрыШтрихкода.Штрихкод = ЗначШтрихкод;
   ПараметрыШтрихкода.ПрозрачныйФон = Истина;
   ПараметрыШтрихкода.УровеньКоррекцииQR = 2;
   ПараметрыШтрихкода.ОтображатьТекст = Ложь;
   ПараметрыШтрихкода.Масштабировать = Истина;
   ПараметрыШтрихкода.СохранятьПропорции = Истина;
   ПараметрыШтрихкода.ВертикальноеВыравнивание  = 0;
   ПараметрыШтрихкода.GS1DatabarКоличествоСтрок = 1;
   ПараметрыШтрихкода.ТипВходныхДанных = 0;

   РезультатШтрихкод = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);

   Возврат РезультатШтрихкод.Картинка;

КонецФункции
Поиск кода
0
Комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 31.08.2021
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому