1С 8.3 Штрих-код (barcode), QRCod
Данные > Примеры кода 1С > 1С 8.3 Штрих-код (barcode)
Штрих-код и QRCod в 1С 8.3 используется для печати ценников, маркировки товаров/материалов для учета и контроля, упрощения инвентаризации основных средств, идентификация прочих ТМЦ с помощью этикеток. В последних релизах различных типовых конфигураций штрих-код формируется с помощью общего макета метаданных КомпонентаПечатиШтрихкодов, а также вспомогательных функций и процедур: ПодключитьВнешнююКомпонентуПечатиШтрихкода, ОпределитьТипШтрихкода, ПолучитьКартинкуШтрихкода и т.п.. Скачать Пример печати QR-кода.epf
Файл установки компоненты доступен по подписке на сайте ИТС. При возникновении ошибки 1CBarCode: "Ошибка внешней компоненты" некорректное значение свойства "Шрифт" - необходимо обновить 1CBarCode.exe до последней версии. Работа с QR-кодом осуществляется с помощью функций в модуле объекта ПолучитьГенераторQRкода() и ПолучитьQRкод(). Типовая печать QR-кода в 1С 8.3 реализована на уровне Библиотеки стандартных подсистем, которая соответствует национальному стандарту штрихкодирования платежных реквизитов и доступен при подписке на ИТС.
Тех.характеристика QR-кода:
Самый маленький (версия №1) размер = 21×21 пиксель (без учёта полей)...QR-код следующей версии всегда больше предыдущегона 4 модуля( по горизонтали и по вертикали)...Самый большой (версия №40) размер = 177×177 пикселей (без учёта полей)Важно! Для считывания некоторыми ТСД символы должны быть латинские
Оглавление:
Подключение внешней компоненты печати штрих-кода в 1С 8.3:
&НаКлиенте
Функция ПодключениеВнешнейКомпонентыПечатиШтрихКода()
Подключено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
Если Подключено Тогда // Создание объекта внешней компоненты
Компонента_Barcode = Новый("AddIn.КартинкаШтрихкода.Barcode");
Иначе
Возврат Неопределено;
КонецЕсли;
Если НЕ Компонента_Barcode.ГрафикаУстановлена Тогда
// Картинка не может быть сформирована
Возврат Неопределено;
Иначе
// Установка параметров компоненты
Если Компонента_Barcode.НайтиШрифт("Tahoma") Тогда
Компонента_Barcode.Шрифт = "Tahoma";// Выбран шрифт для формирования картинки
Иначе
// Обход доступных компоненте шрифтов
Для Сч = 0 По Компонента_Barcode.КоличествоШрифтов -1 Цикл
ТекущийШрифтШК = Компонента_Barcode.ШрифтПоИндексу(Сч);
Если ТекущийШрифтШК <> Неопределено Тогда
Компонента_Barcode.Шрифт = ТекущийШрифтШК; // Выбран шрифт для формирования картинки
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Компонента_Barcode.РазмерШрифта = 14;
Возврат Компонента_Barcode;
КонецЕсли;
КонецФункции
Функция ПодключениеВнешнейКомпонентыПечатиШтрихКода()
Подключено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
Если Подключено Тогда // Создание объекта внешней компоненты
Компонента_Barcode = Новый("AddIn.КартинкаШтрихкода.Barcode");
Иначе
Возврат Неопределено;
КонецЕсли;
Если НЕ Компонента_Barcode.ГрафикаУстановлена Тогда
// Картинка не может быть сформирована
Возврат Неопределено;
Иначе
// Установка параметров компоненты
Если Компонента_Barcode.НайтиШрифт("Tahoma") Тогда
Компонента_Barcode.Шрифт = "Tahoma";// Выбран шрифт для формирования картинки
Иначе
// Обход доступных компоненте шрифтов
Для Сч = 0 По Компонента_Barcode.КоличествоШрифтов -1 Цикл
ТекущийШрифтШК = Компонента_Barcode.ШрифтПоИндексу(Сч);
Если ТекущийШрифтШК <> Неопределено Тогда
Компонента_Barcode.Шрифт = ТекущийШрифтШК; // Выбран шрифт для формирования картинки
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Компонента_Barcode.РазмерШрифта = 14;
Возврат Компонента_Barcode;
КонецЕсли;
КонецФункции
Определить тип штрих кода в 1С 8.3:
&НаКлиенте
Функция ОпределитьТипШтрихКода(текШтрихКод)
Тип_ШтрихКода = "";
Длина_ШтрихКода = СтрДлина(текШтрихКод);
СуммаШтрихКода = 0;
Если Длина_ШтрихКода = 0 Тогда
Возврат Тип_ШтрихКода;
КонецЕсли;
Если Длина_ШтрихКода = 14 Тогда // ITF14
КоэффициентШК = 1;
Для Сч = 1 По 13 Цикл
// таблица символов 1С доступна тут: https://koder.by/tablica_simvolov_1s.php
ВремКодСимвола = КодСимвола(текШтрихКод, Сч);
Если ВремКодСимвола < 48 Или ВремКодСимвола > 57 Тогда
Прервать;
КонецЕсли;
СуммаШтрихКода = СуммаШтрихКода + КоэффициентШК * (ВремКодСимвола - 48);
КоэффициентШК = 4 - КоэффициентШК;
КонецЦикла;
СуммаШтрихКода = (10 - СуммаШтрихКода % 10) % 10;
Если КодСимвола(текШтрихКод, 14) = СуммаШтрихКода + 48 Тогда
Тип_ШтрихКода = "ITF14";
КонецЕсли;
ИначеЕсли Длина_ШтрихКода = 13 Тогда // EAN13
EAN13_Булево = Истина;
КоэффициентШК = 1;
Для Сч = 1 По 12 Цикл
ВремКодСимвола = КодСимвола(текШтрихКод, Сч);
Если ВремКодСимвола < 48 Или ВремКодСимвола > 57 Тогда
EAN13_Булево = Ложь;
Прервать;
КонецЕсли;
СуммаШтрихКода = СуммаШтрихКода + КоэффициентШК * (ВремКодСимвола - 48);
КоэффициентШК = 4 - КоэффициентШК;
КонецЦикла;
СуммаШтрихКода = (10 - СуммаШтрихКода % 10) % 10;
ПроверочныйСимвол = Символ(СуммаШтрихКода + 48);
Если EAN13_Булево И ПроверочныйСимвол = Прав(текШтрихКод, 1) Тогда
Тип_ШтрихКода = "EAN13";
КонецЕсли;
ИначеЕсли Длина_ШтрихКода = 8 Тогда // EAN8
EAN8_Булево = Истина;
КоэффициентШК = 3;
Для Сч = 1 По 7 Цикл
ВремКодСимвола = КодСимвола(текШтрихКод, Сч);
Если ВремКодСимвола < 48 Или ВремКодСимвола > 57 Тогда
EAN8_Булево = Ложь;
Прервать;
КонецЕсли;
СуммаШтрихКода = СуммаШтрихКода + КоэффициентШК * (ВремКодСимвола - 48);
КоэффициентШК = 4 - КоэффициентШК;
КонецЦикла;
СуммаШтрихКода = (10 - СуммаШтрихКода % 10) % 10;
Если EAN8_Булево И (КодСимвола(текШтрихКод, 8) = СуммаШтрихКода + 48) Тогда
Тип_ШтрихКода = "EAN8";
КонецЕсли;
КонецЕсли;
Если Тип_ШтрихКода= "" Тогда // CODE39
CODE39_Булево = Истина;
Для Сч = 1 По Длина_ШтрихКода Цикл
ВремКодСимвола = КодСимвола(текШтрихКод, Сч);
Если (ВремКодСимвола <> 32)
И (ВремКодСимвола < 36 Или ВремКодСимвола > 37)
И (ВремКодСимвола <> 43)
И (ВремКодСимвола < 45 Или ВремКодСимвола > 57)
И (ВремКодСимвола < 65 Или ВремКодСимвола > 90) Тогда
CODE39_Булево = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если CODE39_Булево Тогда
Тип_ШтрихКода = "CODE39";
КонецЕсли
КонецЕсли;
Если Тип_ШтрихКода= "" Тогда // CODE128
// CODE128 символы ASCII от 0 до 127
// (цифры от 0 до 9, буквы от A до Z и от a до z) и специальные символы
CODE128_Булево = Истина;
Для Сч = 1 По Длина_ШтрихКода Цикл
ВремКодСимвола = КодСимвола(текШтрихКод, Сч);
Если (ВремКодСимвола > 127) Тогда
CODE128_Булево = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если CODE128_Булево Тогда
Тип_ШтрихКода = "CODE128";
КонецЕсли
КонецЕсли;
Если Тип_ШтрихКода = "CODE128" Тогда // EAN128
// В коде EAN128 регламентирован словарь CODE128
// но регламентированы группы кодов
Если КодСимвола(текШтрихКод, 1) = 40 Тогда
Тип_ШтрихКода = "EAN128";
КонецЕсли;
КонецЕсли;
Возврат Тип_ШтрихКода;
КонецФункции
Функция ОпределитьТипШтрихКода(текШтрихКод)
Тип_ШтрихКода = "";
Длина_ШтрихКода = СтрДлина(текШтрихКод);
СуммаШтрихКода = 0;
Если Длина_ШтрихКода = 0 Тогда
Возврат Тип_ШтрихКода;
КонецЕсли;
Если Длина_ШтрихКода = 14 Тогда // ITF14
КоэффициентШК = 1;
Для Сч = 1 По 13 Цикл
// таблица символов 1С доступна тут: https://koder.by/tablica_simvolov_1s.php
ВремКодСимвола = КодСимвола(текШтрихКод, Сч);
Если ВремКодСимвола < 48 Или ВремКодСимвола > 57 Тогда
Прервать;
КонецЕсли;
СуммаШтрихКода = СуммаШтрихКода + КоэффициентШК * (ВремКодСимвола - 48);
КоэффициентШК = 4 - КоэффициентШК;
КонецЦикла;
СуммаШтрихКода = (10 - СуммаШтрихКода % 10) % 10;
Если КодСимвола(текШтрихКод, 14) = СуммаШтрихКода + 48 Тогда
Тип_ШтрихКода = "ITF14";
КонецЕсли;
ИначеЕсли Длина_ШтрихКода = 13 Тогда // EAN13
EAN13_Булево = Истина;
КоэффициентШК = 1;
Для Сч = 1 По 12 Цикл
ВремКодСимвола = КодСимвола(текШтрихКод, Сч);
Если ВремКодСимвола < 48 Или ВремКодСимвола > 57 Тогда
EAN13_Булево = Ложь;
Прервать;
КонецЕсли;
СуммаШтрихКода = СуммаШтрихКода + КоэффициентШК * (ВремКодСимвола - 48);
КоэффициентШК = 4 - КоэффициентШК;
КонецЦикла;
СуммаШтрихКода = (10 - СуммаШтрихКода % 10) % 10;
ПроверочныйСимвол = Символ(СуммаШтрихКода + 48);
Если EAN13_Булево И ПроверочныйСимвол = Прав(текШтрихКод, 1) Тогда
Тип_ШтрихКода = "EAN13";
КонецЕсли;
ИначеЕсли Длина_ШтрихКода = 8 Тогда // EAN8
EAN8_Булево = Истина;
КоэффициентШК = 3;
Для Сч = 1 По 7 Цикл
ВремКодСимвола = КодСимвола(текШтрихКод, Сч);
Если ВремКодСимвола < 48 Или ВремКодСимвола > 57 Тогда
EAN8_Булево = Ложь;
Прервать;
КонецЕсли;
СуммаШтрихКода = СуммаШтрихКода + КоэффициентШК * (ВремКодСимвола - 48);
КоэффициентШК = 4 - КоэффициентШК;
КонецЦикла;
СуммаШтрихКода = (10 - СуммаШтрихКода % 10) % 10;
Если EAN8_Булево И (КодСимвола(текШтрихКод, 8) = СуммаШтрихКода + 48) Тогда
Тип_ШтрихКода = "EAN8";
КонецЕсли;
КонецЕсли;
Если Тип_ШтрихКода= "" Тогда // CODE39
CODE39_Булево = Истина;
Для Сч = 1 По Длина_ШтрихКода Цикл
ВремКодСимвола = КодСимвола(текШтрихКод, Сч);
Если (ВремКодСимвола <> 32)
И (ВремКодСимвола < 36 Или ВремКодСимвола > 37)
И (ВремКодСимвола <> 43)
И (ВремКодСимвола < 45 Или ВремКодСимвола > 57)
И (ВремКодСимвола < 65 Или ВремКодСимвола > 90) Тогда
CODE39_Булево = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если CODE39_Булево Тогда
Тип_ШтрихКода = "CODE39";
КонецЕсли
КонецЕсли;
Если Тип_ШтрихКода= "" Тогда // CODE128
// CODE128 символы ASCII от 0 до 127
// (цифры от 0 до 9, буквы от A до Z и от a до z) и специальные символы
CODE128_Булево = Истина;
Для Сч = 1 По Длина_ШтрихКода Цикл
ВремКодСимвола = КодСимвола(текШтрихКод, Сч);
Если (ВремКодСимвола > 127) Тогда
CODE128_Булево = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если CODE128_Булево Тогда
Тип_ШтрихКода = "CODE128";
КонецЕсли
КонецЕсли;
Если Тип_ШтрихКода = "CODE128" Тогда // EAN128
// В коде EAN128 регламентирован словарь CODE128
// но регламентированы группы кодов
Если КодСимвола(текШтрихКод, 1) = 40 Тогда
Тип_ШтрихКода = "EAN128";
КонецЕсли;
КонецЕсли;
Возврат Тип_ШтрихКода;
КонецФункции
Справочно: Тип кода параметра штрих кода в 1С 8.3:
0 <EAN8>1 <EAN13>2 <EAN128>3 <CODE39>4 <CODE128>5 <CODE16K>6 <PDF417>7 <Industrial2of5>8 <Interleaved2of5>9 <Code39FullASCII>10 <CODE93>11 <ITF14>12 <RSS14>13 <CodaBar>14 <EAN13 AddOn 2>15 <EAN13 AddOn 5>16 <QR>17 <GS1 databar extended stacked>18 <DataMatrix ASCII>19 <DataMatrix Base256>20 <DataMatrix Text>21 <DataMatrix C40>22 <DataMatrix X12>23 <DataMatrix Edifact>
Получить картинку штрих-кода в 1С 8.3:
&НаКлиенте
Функция ПолучитьКартинкуШтрихкода(ПараметрыШК)
КомпонентаШК = ПодключениеВнешнейКомпонентыПечатиШтрихкода();
Если КомпонентаШК = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода.'");
КонецЕсли;
// Размер формируемой картинки
КомпонентаШК.Ширина = Окр(ПараметрыШК.Ширина);
КомпонентаШК.Высота = Окр(ПараметрыШК.Высота);
КомпонентаШК.АвтоТип = Ложь;
Если ПараметрыШК.ТипКода = 99 Тогда
ТипШК = ОпределитьТипШтрихкода(ПараметрыШК.Штрихкод);
Если ТипШК = "EAN8" Тогда
КомпонентаШК.ТипКода = 0;
ИначеЕсли ТипШК = "EAN13" Тогда
КомпонентаШК.ТипКода = 1;
// Если код содержит контрольный символ, обязательно указываем.
КомпонентаШК.СодержитКС = СтрДлина(ПараметрыШК.Штрихкод) = 13;
ИначеЕсли ТипШК = "EAN128" Тогда
КомпонентаШК.ТипКода = 2;
ИначеЕсли ТипШК = "CODE39" Тогда
КомпонентаШК.ТипКода = 3;
ИначеЕсли ТипШК = "CODE128" Тогда
КомпонентаШК.ТипКода = 4;
ИначеЕсли ТипШК = "ITF14" Тогда
КомпонентаШК.ТипКода = 11;
ИначеЕсли ТипШК = "QR" Тогда
КомпонентаШК.ТипКода = 16;
ИначеЕсли ТипШК = "EAN13Addon2" Тогда
КомпонентаШК.ТипКода = 14;
ИначеЕсли ТипШК = "EAN13Addon5" Тогда
КомпонентаШК.ТипКода = 15;
ИначеЕсли ТипШК = "QR" Тогда
КомпонентаШК.ТипКода = 16;
ИначеЕсли ТипШК = "GS1DatabarExtendedStacked" Тогда
КомпонентаШК.ТипКода = 17;
ИначеЕсли ТипШК = "DataMatrixASCII" Тогда
КомпонентаШК.ТипКода = 18;
ИначеЕсли ТипШК = "DataMatrixBase256" Тогда
КомпонентаШК.ТипКода = 19;
ИначеЕсли ТипШК = "DataMatrixText" Тогда
КомпонентаШК.ТипКода = 20;
ИначеЕсли ТипШК = "DataMatrixC40" Тогда
КомпонентаШК.ТипКода = 21;
ИначеЕсли ТипШК = "DataMatrixX12" Тогда
КомпонентаШК.ТипКода = 22;
ИначеЕсли ТипШК = "DataMatrixEdifact" Тогда
КомпонентаШК.ТипКода = 23;
Иначе
КомпонентаШК.АвтоТип = Истина;
КонецЕсли;
Иначе
КомпонентаШК.ТипКода = ПараметрыШК.ТипКода;
КомпонентаШК.АвтоТип = Ложь;
КонецЕсли;
Если ПараметрыШК.Свойство("ПрозрачныйФон") Тогда
КомпонентаШК.ПрозрачныйФон = ПараметрыШК.ПрозрачныйФон;
КонецЕсли;
КомпонентаШК.ОтображатьТекст = ПараметрыШК.ОтображатьТекст;
// Картинка штрихкода
КомпонентаШК.ЗначениеКода = ПараметрыШК.Штрихкод;
// Угол поворота штрихкода
КомпонентаШК.УголПоворота = ?(ПараметрыШК.Свойство("УголПоворота"), ПараметрыШК.УголПоворота, 0);
// Уровень коррекции QR кода (L=0, M=1, Q=2, H=3)
КомпонентаШК.УровеньКоррекцииQR = ?(ПараметрыШК.Свойство("УровеньКоррекцииQR"), ПараметрыШК.УровеньКоррекцииQR, 1);
// Если установленная нами ширина меньше минимально допустимой для этого штрихкода
Если КомпонентаШК.Ширина < КомпонентаШК.МинимальнаяШиринаКода Тогда
КомпонентаШК.Ширина = КомпонентаШК.МинимальнаяШиринаКода;
КонецЕсли;
// Если установленная нами высота меньше минимально допустимой для этого штрихкода
Если КомпонентаШК.Высота < КомпонентаШК.МинимальнаяВысотаКода Тогда
КомпонентаШК.Высота = КомпонентаШК.МинимальнаяВысотаКода;
КонецЕсли;
Если ПараметрыШК.Свойство("РазмерШрифта") И (ПараметрыШК.РазмерШрифта > 0)
И (ПараметрыШК.ОтображатьТекст) И (КомпонентаШК.РазмерШрифта <> ПараметрыШК.РазмерШрифта) Тогда
КомпонентаШК.РазмерШрифта = ПараметрыШК.РазмерШрифта;
КонецЕсли;
// Формирование картинки
ДвоичныеДанныеКартинки = КомпонентаШК.ПолучитьШтрихкод();
Если ДвоичныеДанныеКартинки <> Неопределено Тогда
// Формируем из двоичных данных.
Возврат Новый Картинка(ДвоичныеДанныеКартинки);
КонецЕсли;
Возврат Неопределено;
КонецФункции
Функция ПолучитьКартинкуШтрихкода(ПараметрыШК)
КомпонентаШК = ПодключениеВнешнейКомпонентыПечатиШтрихкода();
Если КомпонентаШК = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода.'");
КонецЕсли;
// Размер формируемой картинки
КомпонентаШК.Ширина = Окр(ПараметрыШК.Ширина);
КомпонентаШК.Высота = Окр(ПараметрыШК.Высота);
КомпонентаШК.АвтоТип = Ложь;
Если ПараметрыШК.ТипКода = 99 Тогда
ТипШК = ОпределитьТипШтрихкода(ПараметрыШК.Штрихкод);
Если ТипШК = "EAN8" Тогда
КомпонентаШК.ТипКода = 0;
ИначеЕсли ТипШК = "EAN13" Тогда
КомпонентаШК.ТипКода = 1;
// Если код содержит контрольный символ, обязательно указываем.
КомпонентаШК.СодержитКС = СтрДлина(ПараметрыШК.Штрихкод) = 13;
ИначеЕсли ТипШК = "EAN128" Тогда
КомпонентаШК.ТипКода = 2;
ИначеЕсли ТипШК = "CODE39" Тогда
КомпонентаШК.ТипКода = 3;
ИначеЕсли ТипШК = "CODE128" Тогда
КомпонентаШК.ТипКода = 4;
ИначеЕсли ТипШК = "ITF14" Тогда
КомпонентаШК.ТипКода = 11;
ИначеЕсли ТипШК = "QR" Тогда
КомпонентаШК.ТипКода = 16;
ИначеЕсли ТипШК = "EAN13Addon2" Тогда
КомпонентаШК.ТипКода = 14;
ИначеЕсли ТипШК = "EAN13Addon5" Тогда
КомпонентаШК.ТипКода = 15;
ИначеЕсли ТипШК = "QR" Тогда
КомпонентаШК.ТипКода = 16;
ИначеЕсли ТипШК = "GS1DatabarExtendedStacked" Тогда
КомпонентаШК.ТипКода = 17;
ИначеЕсли ТипШК = "DataMatrixASCII" Тогда
КомпонентаШК.ТипКода = 18;
ИначеЕсли ТипШК = "DataMatrixBase256" Тогда
КомпонентаШК.ТипКода = 19;
ИначеЕсли ТипШК = "DataMatrixText" Тогда
КомпонентаШК.ТипКода = 20;
ИначеЕсли ТипШК = "DataMatrixC40" Тогда
КомпонентаШК.ТипКода = 21;
ИначеЕсли ТипШК = "DataMatrixX12" Тогда
КомпонентаШК.ТипКода = 22;
ИначеЕсли ТипШК = "DataMatrixEdifact" Тогда
КомпонентаШК.ТипКода = 23;
Иначе
КомпонентаШК.АвтоТип = Истина;
КонецЕсли;
Иначе
КомпонентаШК.ТипКода = ПараметрыШК.ТипКода;
КомпонентаШК.АвтоТип = Ложь;
КонецЕсли;
Если ПараметрыШК.Свойство("ПрозрачныйФон") Тогда
КомпонентаШК.ПрозрачныйФон = ПараметрыШК.ПрозрачныйФон;
КонецЕсли;
КомпонентаШК.ОтображатьТекст = ПараметрыШК.ОтображатьТекст;
// Картинка штрихкода
КомпонентаШК.ЗначениеКода = ПараметрыШК.Штрихкод;
// Угол поворота штрихкода
КомпонентаШК.УголПоворота = ?(ПараметрыШК.Свойство("УголПоворота"), ПараметрыШК.УголПоворота, 0);
// Уровень коррекции QR кода (L=0, M=1, Q=2, H=3)
КомпонентаШК.УровеньКоррекцииQR = ?(ПараметрыШК.Свойство("УровеньКоррекцииQR"), ПараметрыШК.УровеньКоррекцииQR, 1);
// Если установленная нами ширина меньше минимально допустимой для этого штрихкода
Если КомпонентаШК.Ширина < КомпонентаШК.МинимальнаяШиринаКода Тогда
КомпонентаШК.Ширина = КомпонентаШК.МинимальнаяШиринаКода;
КонецЕсли;
// Если установленная нами высота меньше минимально допустимой для этого штрихкода
Если КомпонентаШК.Высота < КомпонентаШК.МинимальнаяВысотаКода Тогда
КомпонентаШК.Высота = КомпонентаШК.МинимальнаяВысотаКода;
КонецЕсли;
Если ПараметрыШК.Свойство("РазмерШрифта") И (ПараметрыШК.РазмерШрифта > 0)
И (ПараметрыШК.ОтображатьТекст) И (КомпонентаШК.РазмерШрифта <> ПараметрыШК.РазмерШрифта) Тогда
КомпонентаШК.РазмерШрифта = ПараметрыШК.РазмерШрифта;
КонецЕсли;
// Формирование картинки
ДвоичныеДанныеКартинки = КомпонентаШК.ПолучитьШтрихкод();
Если ДвоичныеДанныеКартинки <> Неопределено Тогда
// Формируем из двоичных данных.
Возврат Новый Картинка(ДвоичныеДанныеКартинки);
КонецЕсли;
Возврат Неопределено;
КонецФункции
Получение штрих-кода (элемент управления) в 1С 8.3:
&НаКлиенте
Функция ПолучениеШтрихкода_ЭлУпр(Ширина_bc, Высота_bc)
Пар_bc = Новый Структура;
Пар_bc.Вставить("Ширина" , Ширина_bc); //80
Пар_bc.Вставить("Высота" , Высота_bc); //20
Пар_bc.Вставить("ТипКода" , Тип_bc); // Code128
Пар_bc.Вставить("ОтображатьТекст" , Истина);
Пар_bc.Вставить("РазмерШрифта", РазмерШрифта_bc);
Пар_bc.Вставить("УголПоворота" , Число(Угол_bc));
Пар_bc.Вставить("Штрихкод" , BarCode);
Пар_bc.Вставить("ПрозрачныйФон" , Истина);
Пар_bc.Вставить("УровеньКоррекцииQR", УКQR_bc);
Пар_bc.Вставить("Масштабировать" , Масшт_bc);
Пар_bc.Вставить("СохранятьПропорции" , СохрПроп_bc);
Пар_bc.Вставить("ВертикальноеВыравнивание", Верт_bc);
Пар_bc.Вставить("GS1DatabarКоличествоСтрок", КолСтрк_bc);
Возврат ПолучитьКартинкуШтрихкода(Пар_bc);
КонецФункции
Функция ПолучениеШтрихкода_ЭлУпр(Ширина_bc, Высота_bc)
Пар_bc = Новый Структура;
Пар_bc.Вставить("Ширина" , Ширина_bc); //80
Пар_bc.Вставить("Высота" , Высота_bc); //20
Пар_bc.Вставить("ТипКода" , Тип_bc); // Code128
Пар_bc.Вставить("ОтображатьТекст" , Истина);
Пар_bc.Вставить("РазмерШрифта", РазмерШрифта_bc);
Пар_bc.Вставить("УголПоворота" , Число(Угол_bc));
Пар_bc.Вставить("Штрихкод" , BarCode);
Пар_bc.Вставить("ПрозрачныйФон" , Истина);
Пар_bc.Вставить("УровеньКоррекцииQR", УКQR_bc);
Пар_bc.Вставить("Масштабировать" , Масшт_bc);
Пар_bc.Вставить("СохранятьПропорции" , СохрПроп_bc);
Пар_bc.Вставить("ВертикальноеВыравнивание", Верт_bc);
Пар_bc.Вставить("GS1DatabarКоличествоСтрок", КолСтрк_bc);
Возврат ПолучитьКартинкуШтрихкода(Пар_bc);
КонецФункции
Генератор QRCODа в 1С 8.3:
Функция ПолучитьГенераторQRкода() //в модуле объекта
МакетПечатиQR=ПолучитьМакет("КомпонентаПечатиQRКода");
АдресКомпонентыQR=ПоместитьВоВременноеХранилище(МакетПечатиQR);
ГенераторQR=Неопределено;
Попытка
Если ПодключитьВнешнююКомпоненту(АдресКомпонентыQR,"QR") тогда
ГенераторQR=новый("AddIn.QR.QRCodeExtension");
иначе
сообщить("Не удалось подключить компоненту генерации QR кода");
конецЕсли;
Исключение
сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат ГенераторQR;
КонецФункции
Функция ПолучитьQRкод(Строка_QR, УровеньКоррекции_QR, Размер_QR) экспорт
// 1) Строка_QR - данные в виде строки, которые необходимо разместить в QR-коде
// 2) УровеньКоррекции_QR - (число) уровень погрешности изображения при котором данный QR-код все еще возможно 100% распознать
// допустимые значения погрешности: 0(7%), 1(15%), 2(25%), 3(35%).
// 3) Размер_QR - (число) определяет длину стороны выходного изображения в пикселях. Если минимально возможный размер
// изображения больше этого параметра - код сформирован не будет.
УстановитьОтключениеБезопасногоРежима(Истина);
ГенераторQRКода = ПолучитьГенераторQRкода();
Если ГенераторQRКода = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Попытка
ДвоичныеДанныеКартинки = ГенераторQRКода.GenerateQRCode(Строка_QR, УровеньКоррекции_QR, Размер_QR);
Исключение
сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат ДвоичныеДанныеКартинки; // Возвращает двоичные данные (байты PNG-изображения) для формирования QR кода
// Строка_QR = УправлениеПечатью.ФорматнаяСтрокиДокумента(РеквизитыТребования);
// ДанныеQRКода = ПолучитьQRкод(Строка_QR, 1, 80);
// Если ДанныеQRКода=неопределено тогда
// Возврат;
// Иначе
// КартинкаQRКода = Новый Картинка(ДанныеQRКода);
// ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода;
// КонецЕсли;
КонецФункции
МакетПечатиQR=ПолучитьМакет("КомпонентаПечатиQRКода");
АдресКомпонентыQR=ПоместитьВоВременноеХранилище(МакетПечатиQR);
ГенераторQR=Неопределено;
Попытка
Если ПодключитьВнешнююКомпоненту(АдресКомпонентыQR,"QR") тогда
ГенераторQR=новый("AddIn.QR.QRCodeExtension");
иначе
сообщить("Не удалось подключить компоненту генерации QR кода");
конецЕсли;
Исключение
сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат ГенераторQR;
КонецФункции
Функция ПолучитьQRкод(Строка_QR, УровеньКоррекции_QR, Размер_QR) экспорт
// 1) Строка_QR - данные в виде строки, которые необходимо разместить в QR-коде
// 2) УровеньКоррекции_QR - (число) уровень погрешности изображения при котором данный QR-код все еще возможно 100% распознать
// допустимые значения погрешности: 0(7%), 1(15%), 2(25%), 3(35%).
// 3) Размер_QR - (число) определяет длину стороны выходного изображения в пикселях. Если минимально возможный размер
// изображения больше этого параметра - код сформирован не будет.
УстановитьОтключениеБезопасногоРежима(Истина);
ГенераторQRКода = ПолучитьГенераторQRкода();
Если ГенераторQRКода = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Попытка
ДвоичныеДанныеКартинки = ГенераторQRКода.GenerateQRCode(Строка_QR, УровеньКоррекции_QR, Размер_QR);
Исключение
сообщить(ОписаниеОшибки());
КонецПопытки;
Возврат ДвоичныеДанныеКартинки; // Возвращает двоичные данные (байты PNG-изображения) для формирования QR кода
// Строка_QR = УправлениеПечатью.ФорматнаяСтрокиДокумента(РеквизитыТребования);
// ДанныеQRКода = ПолучитьQRкод(Строка_QR, 1, 80);
// Если ДанныеQRКода=неопределено тогда
// Возврат;
// Иначе
// КартинкаQRКода = Новый Картинка(ДанныеQRКода);
// ОбластьМакета.Рисунки.QRКод.Картинка = КартинкаQRКода;
// КонецЕсли;
КонецФункции
Создание QRCODа (для текста или ссылки) в 1С 8.3:
&НаСервере
Процедура СозданиеQRCOD_Текст_или_Ссылка()
Если НЕ ПустаяСтрока(Объект.QRCOD_Текст_или_Ссылка) Тогда
ОбъектВЗначении = РеквизитФормыВЗначение("Объект");
QRCOD_Данные = ОбъектВЗначении.QRCOD_Данные(Объект.QRCOD_Текст_или_Ссылка, 1, 300);
Если НЕ ТипЗнч(QRCOD_Данные) = Тип("ДвоичныеДанные") Тогда
ОбъектВЗначении.СообщитьПользователю("QRCOD_Данные");
Возврат;
КонецЕсли;
// Сохранение двоичных данных из реквизита во временное хранилище
// (адрес из хранилища вставляем в строковой реквизит формы "QRCOD_Картинка"
Объект.QRCOD_Картинка = ПоместитьВоВременноеХранилище(Новый Картинка(QRCOD_Данные),УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
Процедура СозданиеQRCOD_Текст_или_Ссылка()
Если НЕ ПустаяСтрока(Объект.QRCOD_Текст_или_Ссылка) Тогда
ОбъектВЗначении = РеквизитФормыВЗначение("Объект");
QRCOD_Данные = ОбъектВЗначении.QRCOD_Данные(Объект.QRCOD_Текст_или_Ссылка, 1, 300);
Если НЕ ТипЗнч(QRCOD_Данные) = Тип("ДвоичныеДанные") Тогда
ОбъектВЗначении.СообщитьПользователю("QRCOD_Данные");
Возврат;
КонецЕсли;
// Сохранение двоичных данных из реквизита во временное хранилище
// (адрес из хранилища вставляем в строковой реквизит формы "QRCOD_Картинка"
Объект.QRCOD_Картинка = ПоместитьВоВременноеХранилище(Новый Картинка(QRCOD_Данные),УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
Создание QRCODа (для визитной карточки) в 1С 8.3:
&НаСервере
Процедура СозданиеQRCOD_Визитная_карточка()
QRCOD_Визитная_карточка = "BEGIN:VCARD" + Символы.ПС + "VERSION:3.0" + Символы.ПС +
"FN:" + СокрЛП(Объект.Имя) + " " + СокрЛП(Объект.Фамилия) + Символы.ПС +
"N:" + СокрЛП(Объект.Фамилия) + ";" + СокрЛП(Объект.Имя) + Символы.ПС +
"TITLE:" + СокрЛП(Объект.Должность) + Символы.ПС +
"ORG:" + СокрЛП(Объект.Организация) + Символы.ПС +
"ADR;TYPE=intl, postal, parcel, work:;;" + СокрЛП(Объект.Адрес) + ";" + СокрЛП(Объект.Город) +
";;;" + СокрЛП(Объект.Страна) + Символы.ПС +
"TEL;TYPE=home:" + СокрЛП(Объект.НомерТелефона) + Символы.ПС +
"TEL;TYPE=work:" + СокрЛП(Объект.НомерТелефонаРабочий) + Символы.ПС +
"TEL;TYPE=cell:" + СокрЛП(Объект.НомерТелефонаМобильный) + Символы.ПС +
"TEL;TYPE=fax:" + СокрЛП(Объект.НомерФакса) + Символы.ПС +
"EMAIL;TYPE=INTERNET:" + СокрЛП(Объект.АдресПочты) + Символы.ПС +
"URL:" + СокрЛП(Объект.АдресСайта) + Символы.ПС +
"BDAY:" + Формат(Объект.ДеньРождения,"ДФ=""гггг-ММ-дд""") + Символы.ПС + "END:VCARD";
ОбъектВЗначении = РеквизитФормыВЗначение("Объект");
QRCOD_Данные = ОбъектВЗначении.QRCOD_Данные(QRCOD_Визитная_карточка, 1, 300);
Если НЕ ТипЗнч(QRCOD_Данные) = Тип("ДвоичныеДанные") Тогда
ОбъектВЗначении.СообщитьПользователю("QRCOD_Данные");
Возврат;
КонецЕсли;
// Сохранение двоичных данных из реквизита во временное хранилище
// (адрес из хранилища вставляем в строковой реквизит формы "QRCOD_Картинка"
Объект.QRCOD_Картинка = ПоместитьВоВременноеХранилище(Новый Картинка(QRCOD_Данные),УникальныйИдентификатор);
КонецПроцедуры
Процедура СозданиеQRCOD_Визитная_карточка()
QRCOD_Визитная_карточка = "BEGIN:VCARD" + Символы.ПС + "VERSION:3.0" + Символы.ПС +
"FN:" + СокрЛП(Объект.Имя) + " " + СокрЛП(Объект.Фамилия) + Символы.ПС +
"N:" + СокрЛП(Объект.Фамилия) + ";" + СокрЛП(Объект.Имя) + Символы.ПС +
"TITLE:" + СокрЛП(Объект.Должность) + Символы.ПС +
"ORG:" + СокрЛП(Объект.Организация) + Символы.ПС +
"ADR;TYPE=intl, postal, parcel, work:;;" + СокрЛП(Объект.Адрес) + ";" + СокрЛП(Объект.Город) +
";;;" + СокрЛП(Объект.Страна) + Символы.ПС +
"TEL;TYPE=home:" + СокрЛП(Объект.НомерТелефона) + Символы.ПС +
"TEL;TYPE=work:" + СокрЛП(Объект.НомерТелефонаРабочий) + Символы.ПС +
"TEL;TYPE=cell:" + СокрЛП(Объект.НомерТелефонаМобильный) + Символы.ПС +
"TEL;TYPE=fax:" + СокрЛП(Объект.НомерФакса) + Символы.ПС +
"EMAIL;TYPE=INTERNET:" + СокрЛП(Объект.АдресПочты) + Символы.ПС +
"URL:" + СокрЛП(Объект.АдресСайта) + Символы.ПС +
"BDAY:" + Формат(Объект.ДеньРождения,"ДФ=""гггг-ММ-дд""") + Символы.ПС + "END:VCARD";
ОбъектВЗначении = РеквизитФормыВЗначение("Объект");
QRCOD_Данные = ОбъектВЗначении.QRCOD_Данные(QRCOD_Визитная_карточка, 1, 300);
Если НЕ ТипЗнч(QRCOD_Данные) = Тип("ДвоичныеДанные") Тогда
ОбъектВЗначении.СообщитьПользователю("QRCOD_Данные");
Возврат;
КонецЕсли;
// Сохранение двоичных данных из реквизита во временное хранилище
// (адрес из хранилища вставляем в строковой реквизит формы "QRCOD_Картинка"
Объект.QRCOD_Картинка = ПоместитьВоВременноеХранилище(Новый Картинка(QRCOD_Данные),УникальныйИдентификатор);
КонецПроцедуры
Создание QRCODа (для контактных данных) в 1С 8.3:
&НаСервере
Процедура СозданиеQRCOD_Контактные_данные()
Если Объект.QRCOD_Контактные_данные = "Телефон" Тогда
Строка_QRCOD_Контакт = "tel:" + СокрЛП(Объект.QRCOD_НомерТелефона);
ИначеЕсли Объект.QRCOD_Контактные_данные = "SMS" Тогда
Строка_QRCOD_Контакт = "smsto:" + СокрЛП(Объект.QRCOD_НомерТелефона) + ":" + СокрЛП(Объект.QRCOD_ТекстQRКода);
ИначеЕсли Объект.QRCOD_Контактные_данные = "MMS" Тогда
Строка_QRCOD_Контакт = "mmsto:" + СокрЛП(Объект.QRCOD_НомерТелефона) + ":" + СокрЛП(Объект.QRCOD_ТекстQRКода);
ИначеЕсли Объект.QRCOD_Контактные_данные = "E-mail" Тогда
Строка_QRCOD_Контакт = "mailto:" + СокрЛП(Объект.QRCOD_АдресПочты);
ИначеЕсли Объект.QRCOD_Контактные_данные = "E-mail с текстом" Тогда
Строка_QRCOD_Контакт = "MATMSG:" + Символы.ПС + "TO: " + СокрЛП(Объект.QRCOD_АдресПочты) + ";" + Символы.ПС +
"SUB:" + Объект.QRCOD_ТемаПисьма + ";" + Символы.ПС + "BODY:" + Объект.QRCOD_ТекстQRКода + ";" + Символы.ПС + ";";
ИначеЕсли Объект.QRCOD_Контактные_данные = "Географическая информация" Тогда
Строка_QRCOD_Контакт = "geo:" + СтрЗаменить(Объект.QRCOD_ТекстQRКода," ","");
КонецЕсли;
Если НЕ ПустаяСтрока(Объект.QRCOD_Контактные_данные) Тогда
ОбъектВЗначении = РеквизитФормыВЗначение("Объект");
QRCOD_Данные = ОбъектВЗначении.QRCOD_Данные(Строка_QRCOD_Контакт, 1, 300);
Если НЕ ТипЗнч(QRCOD_Данные) = Тип("ДвоичныеДанные") Тогда
ОбъектВЗначении.СообщитьПользователю("QRCOD_Данные");
Возврат;
КонецЕсли;
// Сохранение двоичных данных из реквизита во временное хранилище
// (адрес из хранилища вставляем в строковой реквизит формы "QRCOD_Картинка"
Объект.QRCOD_Картинка = ПоместитьВоВременноеХранилище(Новый Картинка(QRCOD_Данные),УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
Процедура СозданиеQRCOD_Контактные_данные()
Если Объект.QRCOD_Контактные_данные = "Телефон" Тогда
Строка_QRCOD_Контакт = "tel:" + СокрЛП(Объект.QRCOD_НомерТелефона);
ИначеЕсли Объект.QRCOD_Контактные_данные = "SMS" Тогда
Строка_QRCOD_Контакт = "smsto:" + СокрЛП(Объект.QRCOD_НомерТелефона) + ":" + СокрЛП(Объект.QRCOD_ТекстQRКода);
ИначеЕсли Объект.QRCOD_Контактные_данные = "MMS" Тогда
Строка_QRCOD_Контакт = "mmsto:" + СокрЛП(Объект.QRCOD_НомерТелефона) + ":" + СокрЛП(Объект.QRCOD_ТекстQRКода);
ИначеЕсли Объект.QRCOD_Контактные_данные = "E-mail" Тогда
Строка_QRCOD_Контакт = "mailto:" + СокрЛП(Объект.QRCOD_АдресПочты);
ИначеЕсли Объект.QRCOD_Контактные_данные = "E-mail с текстом" Тогда
Строка_QRCOD_Контакт = "MATMSG:" + Символы.ПС + "TO: " + СокрЛП(Объект.QRCOD_АдресПочты) + ";" + Символы.ПС +
"SUB:" + Объект.QRCOD_ТемаПисьма + ";" + Символы.ПС + "BODY:" + Объект.QRCOD_ТекстQRКода + ";" + Символы.ПС + ";";
ИначеЕсли Объект.QRCOD_Контактные_данные = "Географическая информация" Тогда
Строка_QRCOD_Контакт = "geo:" + СтрЗаменить(Объект.QRCOD_ТекстQRКода," ","");
КонецЕсли;
Если НЕ ПустаяСтрока(Объект.QRCOD_Контактные_данные) Тогда
ОбъектВЗначении = РеквизитФормыВЗначение("Объект");
QRCOD_Данные = ОбъектВЗначении.QRCOD_Данные(Строка_QRCOD_Контакт, 1, 300);
Если НЕ ТипЗнч(QRCOD_Данные) = Тип("ДвоичныеДанные") Тогда
ОбъектВЗначении.СообщитьПользователю("QRCOD_Данные");
Возврат;
КонецЕсли;
// Сохранение двоичных данных из реквизита во временное хранилище
// (адрес из хранилища вставляем в строковой реквизит формы "QRCOD_Картинка"
Объект.QRCOD_Картинка = ПоместитьВоВременноеХранилище(Новый Картинка(QRCOD_Данные),УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом "Штрих-код (barcode), QRCod" 1С:
📰 Актуальные новости с тегом #Штрих-код (barcode), QRCod:
- В версии 8.3.26 добавлена возможность аутентификации по QR-коду. Это удобно при использовании системы вне рабочего места и поможет безопасности организаций, которые требуют беспарольную аутентификацию корпоративных приложений. Для использования аутентификации по QR-коду соответствующая опция должна быть включена администратором для пользователя. Для работы аутентификации по QR-коду нужно будет также настроить соответствующим образом веб-публикацию инфобазы (подробно описано в документации). Встроенный язык будет расширен для поддержки новой функциональности.
2
комментарии
Татьяна
05 авг 2023
Спасибо большое, очень помогли.
Симка
23 ноя 2020
а сможете сказать как внедрить сканирование на ттн? видела как штрихкода на предприятии сканировала и накладная проводилась в 1С
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник