Включает перемещение по ячейкам, стикеровку МП, синхронизацию справочников и обработку кодов маркировки. Co-authored-by: Cursor <cursoragent@cursor.com>
1549 lines
92 KiB
Plaintext
1549 lines
92 KiB
Plaintext
|
||
#Область ПрограммныйИнтерфейс
|
||
|
||
#Область Системные
|
||
|
||
// Получает ревизию требований для драйверов подключаемого оборудования.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число -
|
||
//
|
||
Функция РевизияИнтерфейсаДрайверов() Экспорт
|
||
|
||
РевизияИнтерфейса = 4005;
|
||
Возврат РевизияИнтерфейса;
|
||
|
||
КонецФункции
|
||
|
||
// Функция заполняет наименование рабочего места клиента по имени пользователя.
|
||
//
|
||
// Параметры:
|
||
// Объект - СправочникОбъект.РабочиеМеста - рабочее место текущего сеанса.
|
||
// ИмяПользователя - Строка - ИмяПользователя
|
||
//
|
||
Процедура ЗаполнитьНаименованиеРабочегоМеста(Объект, ИмяПользователя) Экспорт
|
||
|
||
ИмяПустойПользователь = НСтр("ru='<Пользователь>'");
|
||
|
||
Если ПустаяСтрока(Объект.Наименование) Тогда
|
||
|
||
ИмяПользователя = ?(ПустаяСтрока(ИмяПользователя), ИмяПустойПользователь, Строка(ИмяПользователя));
|
||
РабочееМестоИмя = ?(ПустаяСтрока(Объект.ИмяКомпьютера), Объект.Код, Объект.ИмяКомпьютера);
|
||
Наименование = СтрШаблон(НСтр("ru = '%1 (%2)'"), ИмяПользователя, РабочееМестоИмя);
|
||
НаименованиеНовое = Наименование;
|
||
ВыполненаСтандартнаяОбработка = Истина;
|
||
МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияНаименованияРабочегоМеста(НаименованиеНовое, ИмяПользователя, ВыполненаСтандартнаяОбработка);
|
||
Объект.Наименование = ?(Не ВыполненаСтандартнаяОбработка, НаименованиеНовое, Наименование);
|
||
|
||
ИначеЕсли Не ПустаяСтрока(Строка(ИмяПользователя)) И Найти(Объект.Наименование, ИмяПустойПользователь) > 0 Тогда
|
||
Объект.Наименование = СтрЗаменить(Объект.Наименование, ИмяПустойПользователь, Строка(ИмяПользователя));
|
||
КонецЕсли;
|
||
|
||
КонецПроцедуры
|
||
|
||
// Вызывается при получении имени кассира и его ИНН.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура.
|
||
// *ИмяКассира - Строка, Неопределено - Текст, используемый для заполнения документа
|
||
// *ИННКассира - Строка, Неопределено - Текст, используемый для заполнения документа
|
||
//
|
||
Функция ТекущийКассирДляФискальныхОпераций() Экспорт
|
||
|
||
Кассир = "";
|
||
ВыполненаСтандартнаяОбработка = Истина;
|
||
МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияИмяКассира(Кассир, ВыполненаСтандартнаяОбработка);
|
||
Кассир = ?(Не ВыполненаСтандартнаяОбработка, Кассир, НСтр("ru='Администратор'"));
|
||
|
||
КассирИНН = "";
|
||
ВыполненаСтандартнаяОбработка = Истина;
|
||
МенеджерОборудованияКлиентСерверПереопределяемый.ОбработкаЗаполненияИННКассира(КассирИНН, ВыполненаСтандартнаяОбработка);
|
||
КассирИНН = ?(Не ВыполненаСтандартнаяОбработка, КассирИНН, "");
|
||
|
||
РезультатОперации = Новый Структура();
|
||
РезультатОперации.Вставить("Кассир" , Кассир);
|
||
РезультатОперации.Вставить("КассирИНН", КассирИНН);
|
||
Возврат РезультатОперации;
|
||
|
||
КонецФункции
|
||
|
||
// Возвращает структуру отбора для получения списка оборудования
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * Идентификатор - Массив, СправочникСсылка.ПодключаемоеОборудование
|
||
// * ТипыПО - Строка, Структура, Массив
|
||
// * РабочееМесто - СправочникСсылка.РабочиеМеста
|
||
// * Организация - ОпределяемыйТип.Организация
|
||
// * СетевоеОборудование - Булево - отобрать только сетевое оборудование, по умолчанию Ложь
|
||
// * КодЯзыка - Строка - Код языка драйвера
|
||
//
|
||
Функция СписокОборудованияОтбор() Экспорт
|
||
|
||
Отбор = Новый Структура();
|
||
Отбор.Вставить("Идентификатор" , Неопределено);
|
||
Отбор.Вставить("ТипыПО", ПараметрыТипыОборудования());
|
||
Отбор.Вставить("РабочееМесто", Неопределено);
|
||
Отбор.Вставить("Организация", Неопределено);
|
||
Отбор.Вставить("СетевоеОборудование" , Истина);
|
||
Отбор.Вставить("СерверноеОборудование", Ложь);
|
||
Отбор.Вставить("КодЯзыка", Неопределено);
|
||
Отбор.Вставить("РазрешенаАвтоматическаяФискализация", Ложь);
|
||
Возврат Отбор;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область ТипыОборудования
|
||
|
||
// Структура типы оборудования
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура
|
||
//
|
||
Функция ПараметрыТипыОборудования() Экспорт
|
||
|
||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
|
||
Возврат МенеджерОборудования.ПараметрыТипыОборудования();
|
||
#Иначе
|
||
Возврат МенеджерОборудованияКлиент.ПараметрыТипыОборудования();
|
||
#КонецЕсли
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область Конструкторы
|
||
|
||
// Заполняет структуру выполнения операции на Оборудовании.
|
||
//
|
||
// Параметры:
|
||
// Результат - Булево - результат операции.
|
||
// ОписаниеОшибки - ИнформацияОбОшибке - информация об ошибке.
|
||
// ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование - подключаемое оборудование.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * Результат - Булево
|
||
// * ОписаниеОшибки - Строка
|
||
// * ИдентификаторУстройства - СправочникСсылка.ПодключаемоеОборудование
|
||
// * ПодключенноеУстройство - Неопределено, см. МенеджерОборудованияКлиент.ПараметрыПодключенияУстройства.
|
||
// * ОшибкаЗагрузки - Булево
|
||
// * ИдентификаторОбъекта - Строка
|
||
//
|
||
Функция ПараметрыВыполненияОперацииНаОборудовании(Результат = Ложь, ОписаниеОшибки = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт;
|
||
|
||
РезультатВыполнения = Новый Структура();
|
||
РезультатВыполнения.Вставить("Результат" , Результат);
|
||
РезультатВыполнения.Вставить("ОписаниеОшибки" , ОписаниеОшибки);
|
||
РезультатВыполнения.Вставить("ИдентификаторУстройства", ИдентификаторУстройства);
|
||
РезультатВыполнения.Вставить("ПодключенноеУстройство" , Неопределено);
|
||
РезультатВыполнения.Вставить("ОшибкаЗагрузки" , Ложь);
|
||
РезультатВыполнения.Вставить("ИдентификаторОбъекта" , "");
|
||
РезультатВыполнения.Вставить("СтатусВОблачнойКассе" , "");
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Параметры создания нового драйвера.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Параметры создания нового драйвера:
|
||
// *ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - .
|
||
// *ИдентификаторОбъекта - УникальныйИдентификатор.
|
||
// *ИмяДрайвера - Строка - .
|
||
// *Наименование - Строка - .
|
||
// *ВерсияДрайвера - Строка - .
|
||
// *СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера - .
|
||
// *ИмяМакетаДрайвера - Строка -
|
||
// *СнятСПоддержки - Булево -
|
||
// *СообщениеПриИспользовании - Булево -
|
||
// *Предопределенный - Булево -
|
||
// *ЛокальныйРежим - Булево -
|
||
// *СетевойРежим - Булево -
|
||
// *СерверныйРежим - Булево -
|
||
// *БезопасноеПодключение - Булево -
|
||
// *РекомендуемоеИспользование - Булево -
|
||
//
|
||
Функция ПараметрыСозданияНовогоДрайвера() Экспорт
|
||
|
||
ПараметрыСоздания = Новый Структура();
|
||
ПараметрыСоздания.Вставить("ТипОборудования");
|
||
ПараметрыСоздания.Вставить("ИдентификаторОбъекта");
|
||
ПараметрыСоздания.Вставить("ИмяДрайвера");
|
||
ПараметрыСоздания.Вставить("Наименование");
|
||
ПараметрыСоздания.Вставить("ВерсияДрайвера");
|
||
ПараметрыСоздания.Вставить("СпособПодключения");
|
||
ПараметрыСоздания.Вставить("БезопасноеПодключение", Ложь);
|
||
ПараметрыСоздания.Вставить("РекомендуемоеИспользование", Ложь);
|
||
ПараметрыСоздания.Вставить("ИмяМакетаДрайвера");
|
||
ПараметрыСоздания.Вставить("СнятСПоддержки" , Ложь);
|
||
ПараметрыСоздания.Вставить("СообщениеПриИспользовании" , Истина);
|
||
ПараметрыСоздания.Вставить("Предопределенный", Ложь);
|
||
ПараметрыСоздания.Вставить("ЛокальныйРежим" , Истина);
|
||
ПараметрыСоздания.Вставить("СетевойРежим" , Ложь);
|
||
ПараметрыСоздания.Вставить("СерверныйРежим" , Ложь);
|
||
Возврат ПараметрыСоздания;
|
||
|
||
КонецФункции
|
||
|
||
// Параметры создания нового подключаемого оборудования.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Параметры создания нового подключаемого оборудования:
|
||
// *Наименование - Строка -
|
||
// *ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования -
|
||
// *ТипПодключения - ПеречислениеСсылка.ТипыПодключенияОборудования -
|
||
// *ДрайверОборудования - СправочникСсылка.ДрайверыОборудования -
|
||
// *Организация - ОпределяемыйТип.ОрганизацияБПО -
|
||
// *РабочееМесто - СправочникСсылка.РабочиеМеста -
|
||
// *СерийныйНомер - Строка -
|
||
// *СпособФорматноЛогическогоКонтроля - ПеречислениеСсылка.СпособыФорматноЛогическогоКонтроля -
|
||
// *ДопустимоеРасхождениеФорматноЛогическогоКонтроля - Число -
|
||
// *ИспользуетсяФН36 - Булево -
|
||
//
|
||
Функция ПараметрыСозданияНовогоПодключаемогоОборудования() Экспорт
|
||
|
||
ПараметрыСоздания = Новый Структура();
|
||
ПараметрыСоздания.Вставить("Наименование");
|
||
ПараметрыСоздания.Вставить("УстройствоИспользуется", Истина);
|
||
ПараметрыСоздания.Вставить("ТипОборудования" , Неопределено);
|
||
ПараметрыСоздания.Вставить("ТипПодключения" , ПредопределенноеЗначение("Перечисление.ТипыПодключенияОборудования.ЛокальноеПодключение"));
|
||
ПараметрыСоздания.Вставить("ДрайверОборудования" , Неопределено);
|
||
ПараметрыСоздания.Вставить("Организация");
|
||
ПараметрыСоздания.Вставить("РабочееМесто", МенеджерОборудованияВызовСервера.РабочееМестоКлиента());
|
||
ПараметрыСоздания.Вставить("СерийныйНомер");
|
||
ПараметрыСоздания.Вставить("СпособФорматноЛогическогоКонтроля", ПредопределенноеЗначение("Перечисление.СпособыФорматноЛогическогоКонтроля.РазделятьСтроки"));;
|
||
ПараметрыСоздания.Вставить("ДопустимоеРасхождениеФорматноЛогическогоКонтроля", 0.01);
|
||
ПараметрыСоздания.Вставить("ИспользуетсяФН36", Ложь);
|
||
Возврат ПараметрыСоздания;
|
||
|
||
КонецФункции
|
||
|
||
// Параметры описания драйвера.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Параметры описания драйвера:
|
||
// *Установлен - Булево -
|
||
// *ВерсияДрайвера - Строка -
|
||
// *ВерсияИнтеграционногоКомпонента - Строка -
|
||
// *НаименованиеДрайвера - Строка -
|
||
// *ОписаниеДрайвера - Строка -
|
||
// *ТипОборудования - Строка -
|
||
// *ИнтеграционныйКомпонент - Булево -
|
||
// *ОсновнойДрайверУстановлен - Булево -
|
||
// *РевизияИнтерфейса - Число -
|
||
// *URLЗагрузкиДрайвера - Строка -
|
||
// *ПараметрыДрайвера - Строка -
|
||
// *ДополнительныеДействия - Строка -
|
||
// *ВерсияДрайвераВМакете - Строка -
|
||
// *ОписаниеДрайвераXML - Строка -
|
||
// *ЛогДрайвераВключен - Булево -
|
||
// *ЛогДрайвераПутьКФайлу - Строка -
|
||
// *ЭтоЭмулятор - Булево -
|
||
// *ИнформацияОбОкружении - Строка -
|
||
//
|
||
Функция ПараметрыОписанияДрайвера() Экспорт
|
||
|
||
Результат = Новый Структура();
|
||
Результат.Вставить("Установлен", Ложь);
|
||
Результат.Вставить("ВерсияДрайвера");
|
||
Результат.Вставить("ВерсияИнтеграционногоКомпонента");
|
||
Результат.Вставить("НаименованиеДрайвера", "");
|
||
Результат.Вставить("ОписаниеДрайвера" , "");
|
||
Результат.Вставить("ТипОборудования" , "" );
|
||
Результат.Вставить("ИнтеграционныйКомпонент" , Ложь);
|
||
Результат.Вставить("ОсновнойДрайверУстановлен", Ложь);
|
||
Результат.Вставить("РевизияИнтерфейса" , РевизияИнтерфейсаДрайверов());
|
||
Результат.Вставить("РевизияИнтерфейсаПредставление");
|
||
Результат.Вставить("URLЗагрузкиДрайвера" , "");
|
||
Результат.Вставить("ПараметрыДрайвера" , "");
|
||
Результат.Вставить("ДополнительныеДействия" , "");
|
||
Результат.Вставить("ПоддерживаетсяЛокализация", Ложь);
|
||
Результат.Вставить("ШаблонЛокализации" , "");
|
||
Результат.Вставить("ВерсияДрайвераВМакете" , "");
|
||
Результат.Вставить("ОписаниеДрайвераXML" , "");
|
||
Результат.Вставить("ЛогДрайвераВключен" , Ложь);
|
||
Результат.Вставить("ЛогДрайвераПутьКФайлу" , "");
|
||
Результат.Вставить("ЭтоЭмулятор" , Ложь);
|
||
Результат.Вставить("ИнформацияОбОкружении" , "");
|
||
Результат.Вставить("АвтоНастройкаОборудования", Ложь);
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Параметры подключения.
|
||
//
|
||
// Параметры:
|
||
// ДанныеДрайвера - Структура - Данные драйвера
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Параметры подключения:
|
||
// *Наименование - Строка.
|
||
// *ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования.
|
||
// *ПодключениеИзМакета - Булево.
|
||
// *ПодключениеЛокальноПоИдентификатору - Булево.
|
||
// *ИдентификаторОбъекта - СправочникСсылка.ПодключаемоеОборудование.
|
||
// *ВерсияДрайвера - Строка.
|
||
// *ИмяМакетаДрайвера - Строка.
|
||
// *МакетДоступен - Булево.
|
||
// *РевизияИнтерфейса - Строка.
|
||
// *ШиринаСтроки - Строка.
|
||
// *ИдентификаторТерминала - Строка.
|
||
// *ПечатьКвитанцийНаТерминале - Булево.
|
||
// *КороткиеСлипЧеки - Булево.
|
||
// *ВыдачиНаличныхДенежныхСредств - Булево.
|
||
// *ОплатаЭлектроннымиСертификатами - Булево.
|
||
// *ЧастичнаяОтмена - Булево.
|
||
// *СписокОперацийПоКартам - Булево.
|
||
// *ConsumerPresentedQR - Булево.
|
||
// *ПокупкаСЗачислениемНаКарту - Булево.
|
||
// *СтолбцовНаДисплее - Число.
|
||
// *СтрокНаДисплее - Число.
|
||
// *ДисплейОтображаетТекст - Булево.
|
||
// *ДисплейОтображаетГрафику - Булево.
|
||
// *ДисплейОтображаетQRКод - Булево.
|
||
// *ИдентификаторУстройства - УникальныйИдентификатор.
|
||
//
|
||
Функция ПараметрыПодключения(ДанныеДрайвера) Экспорт
|
||
|
||
Подключение = Новый Структура();
|
||
|
||
Подключение.Вставить("Наименование" , ДанныеДрайвера.Наименование);
|
||
Подключение.Вставить("ТипыОборудования" , ДанныеДрайвера.ТипыОборудования);
|
||
Подключение.Вставить("ТипОборудования" , ДанныеДрайвера.ТипОборудования);
|
||
Подключение.Вставить("ТипОборудованияИмя" , ДанныеДрайвера.ТипОборудованияИмя);
|
||
Подключение.Вставить("ПодключениеИзМакета" , ДанныеДрайвера.ПодключениеИзМакета);
|
||
|
||
Подключение.Вставить("ПодключениеЛокальноПоИдентификатору", ДанныеДрайвера.ПодключениеЛокальноПоИдентификатору);
|
||
Подключение.Вставить("ИдентификаторОбъекта" , ДанныеДрайвера.ИдентификаторОбъекта);
|
||
Подключение.Вставить("ВерсияДрайвера" , ДанныеДрайвера.ВерсияДрайвера);
|
||
Подключение.Вставить("ИмяМакетаДрайвера" , ДанныеДрайвера.ИмяМакетаДрайвера);
|
||
Подключение.Вставить("МакетДоступен" , ДанныеДрайвера.МакетДоступен);
|
||
Подключение.Вставить("СнятСПоддержки" , ДанныеДрайвера.СнятСПоддержки);
|
||
Подключение.Вставить("СообщениеПриИспользовании", ДанныеДрайвера.СообщениеПриИспользовании);
|
||
Подключение.Вставить("БезопасноеПодключение" , ДанныеДрайвера.БезопасноеПодключение);
|
||
|
||
Подключение.Вставить("ШаблонЛокализации", ?(ДанныеДрайвера.Свойство("ШаблонЛокализации"), ДанныеДрайвера.ШаблонЛокализации, Неопределено));
|
||
Подключение.Вставить("ПоддерживаетсяЛокализация", ?(ДанныеДрайвера.Свойство("ПоддерживаетсяЛокализация"), ДанныеДрайвера.ПоддерживаетсяЛокализация, Ложь));
|
||
|
||
Подключение.Вставить("Несертифицированное" , ДанныеДрайвера.Несертифицированное);
|
||
|
||
Подключение.Вставить("РевизияИнтерфейса", ?(ДанныеДрайвера.Свойство("РевизияИнтерфейса"), ДанныеДрайвера.РевизияИнтерфейса, 0));
|
||
Подключение.Вставить("РевизияИнтерфейсаПредставление", ?(ДанныеДрайвера.Свойство("РевизияИнтерфейсаПредставление"), ДанныеДрайвера.РевизияИнтерфейсаПредставление, ""));
|
||
|
||
Подключение.Вставить("ШиринаСтроки" , ?(ДанныеДрайвера.Свойство("ШиринаСтроки"), ДанныеДрайвера.ШиринаСтроки, 0));
|
||
Подключение.Вставить("ЭтоЭмулятор" , ?(ДанныеДрайвера.Свойство("ЭтоЭмулятор"), ДанныеДрайвера.ЭтоЭмулятор, Ложь));
|
||
|
||
Подключение.Вставить("ИдентификаторТерминала" , ?(ДанныеДрайвера.Свойство("ИдентификаторТерминала"), ДанныеДрайвера.ИдентификаторТерминала, ""));
|
||
Подключение.Вставить("ИдентификаторБанкаЭквайера" , ?(ДанныеДрайвера.Свойство("ИдентификаторБанкаЭквайера"), ДанныеДрайвера.ИдентификаторБанкаЭквайера, ""));
|
||
Подключение.Вставить("ПечатьКвитанцийНаТерминале" , ?(ДанныеДрайвера.Свойство("ПечатьКвитанцийНаТерминале"), ДанныеДрайвера.ПечатьКвитанцийНаТерминале, Ложь));
|
||
Подключение.Вставить("КороткиеСлипЧеки" , ?(ДанныеДрайвера.Свойство("КороткиеСлипЧеки"), ДанныеДрайвера.КороткиеСлипЧеки, Ложь));
|
||
Подключение.Вставить("ВыдачиНаличныхДенежныхСредств" , ?(ДанныеДрайвера.Свойство("ВыдачиНаличныхДенежныхСредств"), ДанныеДрайвера.ВыдачиНаличныхДенежныхСредств, Ложь));
|
||
Подключение.Вставить("ОплатаЭлектроннымиСертификатами", ?(ДанныеДрайвера.Свойство("ОплатаЭлектроннымиСертификатами"), ДанныеДрайвера.ОплатаЭлектроннымиСертификатами, Ложь));
|
||
Подключение.Вставить("ЧастичнаяОтмена" , ?(ДанныеДрайвера.Свойство("ЧастичнаяОтмена"), ДанныеДрайвера.ЧастичнаяОтмена, Ложь));
|
||
Подключение.Вставить("СписокОперацийПоКартам" , ?(ДанныеДрайвера.Свойство("СписокОперацийПоКартам"), ДанныеДрайвера.СписокОперацийПоКартам, Ложь));
|
||
Подключение.Вставить("ВозвратЭСБезКартыПоBasketID" , ?(ДанныеДрайвера.Свойство("ReturnElectronicCertificateByBasketID"), ДанныеДрайвера.ReturnElectronicCertificateByBasketID, Ложь));
|
||
Подключение.Вставить("ConsumerPresentedQR" , ?(ДанныеДрайвера.Свойство("ConsumerPresentedQR"), ДанныеДрайвера.ConsumerPresentedQR, Ложь));
|
||
Подключение.Вставить("ПокупкаСЗачислениемНаКарту" , ?(ДанныеДрайвера.Свойство("ПокупкаСЗачислениемНаКарту"), ДанныеДрайвера.ПокупкаСЗачислениемНаКарту, Ложь));
|
||
|
||
Подключение.Вставить("СтолбцовНаДисплее" , ?(ДанныеДрайвера.Свойство("СтолбцовНаДисплее"), ДанныеДрайвера.СтолбцовНаДисплее, 20));
|
||
Подключение.Вставить("СтрокНаДисплее" , ?(ДанныеДрайвера.Свойство("СтрокНаДисплее"), ДанныеДрайвера.СтрокНаДисплее, 2));
|
||
Подключение.Вставить("ДисплейОтображаетТекст" , ?(ДанныеДрайвера.Свойство("ДисплейОтображаетТекст"), ДанныеДрайвера.ДисплейОтображаетТекст, Истина));
|
||
Подключение.Вставить("ДисплейОтображаетГрафику", ?(ДанныеДрайвера.Свойство("ДисплейОтображаетГрафику"), ДанныеДрайвера.ДисплейОтображаетГрафику, Ложь));
|
||
Подключение.Вставить("ДисплейОтображаетQRКод" , ?(ДанныеДрайвера.Свойство("ДисплейОтображаетQRКод"), ДанныеДрайвера.ДисплейОтображаетQRКод, Ложь));
|
||
Подключение.Вставить("ДисплейОтображаетHTML" , ?(ДанныеДрайвера.Свойство("ДисплейОтображаетHTML"), ДанныеДрайвера.ДисплейОтображаетHTML, Ложь));
|
||
Подключение.Вставить("ДисплейОтображаетСтатус" , ?(ДанныеДрайвера.Свойство("ДисплейОтображаетСтатус"), ДанныеДрайвера.ДисплейОтображаетСтатус, Ложь));
|
||
Подключение.Вставить("ДисплейОтображаетСостоянияРМ", ?(ДанныеДрайвера.Свойство("ДисплейОтображаетСостоянияРМ"), ДанныеДрайвера.ДисплейОтображаетСостоянияРМ, Ложь));
|
||
Подключение.Вставить("ДисплейОтрабатываетНажатия" , ?(ДанныеДрайвера.Свойство("ДисплейОтрабатываетНажатия"), ДанныеДрайвера.ДисплейОтрабатываетНажатия, Ложь));
|
||
|
||
Подключение.Вставить("ВесыПоддерживаютТарирование", ?(ДанныеДрайвера.Свойство("ВесыПоддерживаютТарирование"), ДанныеДрайвера.ВесыПоддерживаютТарирование, Ложь));
|
||
Подключение.Вставить("СобытиеПолученииВеса" , ?(ДанныеДрайвера.Свойство("СобытиеПолученииВеса"), ДанныеДрайвера.СобытиеПолученииВеса, Ложь));
|
||
|
||
Подключение.Вставить("ИдентификаторУстройства" , ?(ДанныеДрайвера.Свойство("Ссылка"), ДанныеДрайвера.Ссылка, Неопределено));
|
||
|
||
Возврат Подключение;
|
||
|
||
КонецФункции
|
||
|
||
// АПК: 142-выкл обратная совместимость
|
||
|
||
// Параметры выполнение команды.
|
||
//
|
||
// Параметры:
|
||
// Команда - КомандаФормы - .
|
||
// ПроцессорДанных - ПроцессорКомпоновкиДанных - Процессор данных
|
||
// ДополнительныеПараметры - Неопределено - Дополнительные параметры
|
||
// ПодготовитьДанные - Булево - Подготовить данные
|
||
// ОбработатьДанные - Булево - Обработать данные
|
||
// ИспользоватьПечатающееУстройство - Булево - Использовать печатающее устройство
|
||
// ОбработатьДанныеПриОшибке - Булево
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Параметры выполнение команды:
|
||
// *Команда - КомандаФормы - .
|
||
// *ПроцессорДанных - ПроцессорКомпоновкиДанных - Процессор данных
|
||
// *ПодготовитьДанные - Булево -.
|
||
// *ОбработатьДанные - Булево -.
|
||
// *ИспользоватьПечатающееУстройство - Булево -.
|
||
// *СообщенияВСлужбуТехническойПоддержки - Булево - Будет сформировано сообщения в службу технической поддержки при ошибке.
|
||
//
|
||
Функция ПараметрыВыполнениеКоманды(Команда, ПроцессорДанных, ДополнительныеПараметры = Неопределено, ПодготовитьДанные = Истина,
|
||
ОбработатьДанные = Истина, ИспользоватьПечатающееУстройство = Ложь, ОбработатьДанныеПриОшибке = Ложь) Экспорт
|
||
|
||
ПараметрыВыполнение = Новый Структура();
|
||
ПараметрыВыполнение.Вставить("Команда" , Команда);
|
||
ПараметрыВыполнение.Вставить("ПроцессорДанных" , ПроцессорДанных);
|
||
ПараметрыВыполнение.Вставить("ПодготовитьДанные", ПодготовитьДанные);
|
||
ПараметрыВыполнение.Вставить("ОбработатьДанные" , ОбработатьДанные);
|
||
ПараметрыВыполнение.Вставить("ОбработатьДанныеПриОшибке", ОбработатьДанныеПриОшибке);
|
||
ПараметрыВыполнение.Вставить("ИспользоватьПечатающееУстройство", ИспользоватьПечатающееУстройство);
|
||
ПараметрыВыполнение.Вставить("ПечатьСлипЧека", Истина);
|
||
ПараметрыВыполнение.Вставить("ПолныйСлипЧек" , Истина);
|
||
ПараметрыВыполнение.Вставить("СообщенияВСлужбуТехническойПоддержки" , Ложь);
|
||
|
||
Если ДополнительныеПараметры <> Неопределено Тогда
|
||
Для Каждого ДополнительныйПараметр Из ДополнительныеПараметры Цикл
|
||
ПараметрыВыполнение.Вставить(ДополнительныйПараметр.Ключ, ДополнительныйПараметр.Значение);
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
Возврат ПараметрыВыполнение;
|
||
|
||
КонецФункции
|
||
|
||
// АПК: 142-вкл
|
||
|
||
// Дополнительные параметры операции.
|
||
//
|
||
// Параметры:
|
||
// ОставитьПодключенным - Булево - Оставить подключенным
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Дополнительные параметры операции:
|
||
// *ОставитьПодключенным - Булево -
|
||
// *ОповещениеПослеОткрытииЧека - Неопределено -
|
||
// *ОповещениеПриОшибкеПечатиЧека - Неопределено -
|
||
//
|
||
Функция ДополнительныеПараметрыОперации(ОставитьПодключенным = Ложь) Экспорт
|
||
|
||
ДополнительныеПараметры = Новый Структура();
|
||
ДополнительныеПараметры.Вставить("ОставитьПодключенным", ОставитьПодключенным);
|
||
ДополнительныеПараметры.Вставить("ОповещениеПослеОткрытииЧека");
|
||
ДополнительныеПараметры.Вставить("ОповещениеПриОшибкеПечатиЧека");
|
||
Возврат ДополнительныеПараметры;
|
||
|
||
КонецФункции
|
||
#КонецОбласти
|
||
|
||
#Область ПрограммныйИнтерфейсМаркировка
|
||
|
||
// Функция определяет тип штрихкода по значение кода.
|
||
//
|
||
// Параметры:
|
||
// Штрихкод - Строка - значение штрихкода.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка.
|
||
//
|
||
Функция ОпределитьТипШтрихкода(Знач Штрихкод) Экспорт
|
||
|
||
ТипШтрихкодаЗнач = "";
|
||
ДлинаШтрихкода = СтрДлина(Штрихкод);
|
||
|
||
Если ДлинаШтрихкода = 0 Тогда
|
||
Возврат ТипШтрихкодаЗнач;
|
||
КонецЕсли;
|
||
|
||
Если ДлинаШтрихкода = 14 Тогда // ITF14
|
||
|
||
Если РассчитатьКонтрольныйСимволGTIN14(Штрихкод) = Прав(Штрихкод, 1) Тогда
|
||
ТипШтрихкодаЗнач = "ITF14";
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ДлинаШтрихкода = 13 Тогда // EAN13
|
||
|
||
Если РассчитатьКонтрольныйСимволGTIN13(Штрихкод) = Прав(Штрихкод, 1) Тогда
|
||
ТипШтрихкодаЗнач = "EAN13";
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли ДлинаШтрихкода = 8 Тогда // EAN8
|
||
|
||
Если РассчитатьКонтрольныйСимволGTIN8(Штрихкод) = Прав(Штрихкод, 1) Тогда
|
||
ТипШтрихкодаЗнач = "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 но регламентированы группы кодов, и возможны разделители GS.
|
||
Если КодСимвола(Штрихкод, 1) = 40 Или СтрНайти(Штрихкод, ОбщегоНазначенияБПОКлиентСервер.РазделительGS1()) > 0 Тогда
|
||
ТипШтрихкодаЗнач = "EAN128";
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат ТипШтрихкодаЗнач;
|
||
|
||
КонецФункции
|
||
|
||
// Функция возвращает пустую структуру записи EPC.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// *Результат - Булево - Результат декодирования (успешно или нет)
|
||
// *EPC - Строка - Значение EPC в виде HEX строки
|
||
// *EPC_BIN - Строка - Значение EPC в виде бинарной строки
|
||
// *Формат - Строка - Распознанный формат данных SGTIN-96 или SGTIN-198
|
||
// *GTIN - Строка - GTIN
|
||
// *СерийныйНомер - Строка - Серийный номер SGTIN
|
||
// *ПрефиксКомпании - Строка - Префикс компании
|
||
// *URI - Строка - EPC Tag URI.
|
||
//
|
||
Функция ПолучитьСтруктуруЗаписиEPC() Экспорт
|
||
|
||
СтруктураЗаписиEPC = Новый Структура;
|
||
|
||
СтруктураЗаписиEPC.Вставить("Результат", Ложь); // Результат декодирования (успешно или нет)
|
||
СтруктураЗаписиEPC.Вставить("EPC"); // Значение EPC в виде HEX строки
|
||
СтруктураЗаписиEPC.Вставить("EPC_BIN"); // Значение EPC в виде бинарной строки
|
||
СтруктураЗаписиEPC.Вставить("Формат"); // Распознанный формат данных SGTIN-96 или SGTIN-198
|
||
СтруктураЗаписиEPC.Вставить("GTIN"); // GTIN
|
||
СтруктураЗаписиEPC.Вставить("СерийныйНомер"); // Серийный номер SGTIN
|
||
СтруктураЗаписиEPC.Вставить("ПрефиксКомпании"); // Префикс компании
|
||
СтруктураЗаписиEPC.Вставить("URI"); // EPC Tag URI
|
||
|
||
Возврат СтруктураЗаписиEPC;
|
||
|
||
КонецФункции
|
||
|
||
// Расчет контрольной цифры для GTIN-8.
|
||
//
|
||
// Параметры:
|
||
// GTIN - Строка - Текстовая строка с GTIN-8. Может содержать числа от 0 до 9.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - Контрольный символ (число) рассчитанный по алгоритму для GTIN.
|
||
//
|
||
Функция РассчитатьКонтрольныйСимволGTIN8(Знач GTIN) Экспорт
|
||
|
||
Сумма = 0;
|
||
Коэффициент = 3;
|
||
|
||
Для Сч = 1 По 7 Цикл
|
||
ВремКодСимвола = КодСимвола(GTIN, Сч);
|
||
Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48);
|
||
Коэффициент = 4 - Коэффициент;
|
||
КонецЦикла;
|
||
Сумма = (10 - Сумма % 10) % 10;
|
||
КонтрольныйСимвол = Символ(Сумма + 48);
|
||
|
||
Возврат КонтрольныйСимвол;
|
||
|
||
КонецФункции
|
||
|
||
// Расчет контрольной цифры для GTIN-12.
|
||
//
|
||
// Параметры:
|
||
// GTIN - Строка - Текстовая строка с GTIN-12. Может содержать числа от 0 до 9.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - Контрольный символ (число) рассчитанный по алгоритму для GTIN.
|
||
//
|
||
Функция РассчитатьКонтрольныйСимволGTIN12(Знач GTIN) Экспорт
|
||
|
||
Сумма = 0;
|
||
Коэффициент = 3;
|
||
|
||
Для Сч = 1 По 11 Цикл
|
||
ВремКодСимвола = КодСимвола(GTIN, Сч);
|
||
Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48);
|
||
Коэффициент = 4 - Коэффициент;
|
||
КонецЦикла;
|
||
Сумма = (10 - Сумма % 10) % 10;
|
||
КонтрольныйСимвол = Символ(Сумма + 48);
|
||
|
||
Возврат КонтрольныйСимвол;
|
||
|
||
КонецФункции
|
||
|
||
// Расчет контрольной цифры для GTIN-13.
|
||
//
|
||
// Параметры:
|
||
// GTIN - Строка -Текстовая строка с GTIN-13. Может содержать числа от 0 до 9.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - Контрольный символ (число) рассчитанный по алгоритму для GTIN.
|
||
//
|
||
Функция РассчитатьКонтрольныйСимволGTIN13(Знач GTIN) Экспорт
|
||
|
||
Сумма = 0;
|
||
Коэффициент = 1;
|
||
|
||
Для Сч = 1 По 12 Цикл
|
||
ВремКодСимвола = КодСимвола(GTIN, Сч);
|
||
Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48);
|
||
Коэффициент = 4 - Коэффициент;
|
||
КонецЦикла;
|
||
Сумма = (10 - Сумма % 10) % 10;
|
||
КонтрольныйСимвол = Символ(Сумма + 48);
|
||
|
||
Возврат КонтрольныйСимвол;
|
||
|
||
КонецФункции
|
||
|
||
// Расчет контрольной цифры для GTIN-14.
|
||
//
|
||
// Параметры:
|
||
// GTIN - Строка - Текстовая строка с GTIN-14. Может содержать числа от 0 до 9.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - Контрольный символ (число) рассчитанный по алгоритму для GTIN.
|
||
//
|
||
Функция РассчитатьКонтрольныйСимволGTIN14(Знач GTIN) Экспорт
|
||
|
||
Сумма = 0;
|
||
Коэффициент = 3;
|
||
|
||
Для Сч = 1 По 13 Цикл
|
||
ВремКодСимвола = КодСимвола(GTIN, Сч);
|
||
Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48);
|
||
Коэффициент = 4 - Коэффициент;
|
||
КонецЦикла;
|
||
Сумма = (10 - Сумма % 10) % 10;
|
||
КонтрольныйСимвол = Символ(Сумма + 48);
|
||
|
||
Возврат КонтрольныйСимвол;
|
||
|
||
КонецФункции
|
||
|
||
// Универсальная функция расчета контрольной цифры GTIN.
|
||
// GTIN допускает в формате GTIN-8, GTIN-12, GTIN-13, GTIN-14 c контрольным символом.
|
||
//
|
||
// Параметры:
|
||
// GTIN - Строка - Текстовая строка с GTIN(c контрольным символом). Может содержать числа от 0 до 9.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - Контрольный символ (число) рассчитанный по алгоритму для GTIN.
|
||
//
|
||
Функция РассчитатьКонтрольныйСимволGTIN(Знач GTIN) Экспорт
|
||
|
||
Сумма = 0;
|
||
ДлиннаGTIN = СтрДлина(GTIN);
|
||
Коэффициент = ?(ДлиннаGTIN % 2 = 0, 3, 1);
|
||
|
||
Для Сч = 1 По ДлиннаGTIN - 1 Цикл
|
||
ВремКодСимвола = КодСимвола(GTIN, Сч);
|
||
Сумма = Сумма + Коэффициент * (ВремКодСимвола - 48);
|
||
Коэффициент = 4 - Коэффициент;
|
||
КонецЦикла;
|
||
Сумма = (10 - Сумма % 10) % 10;
|
||
КонтрольныйСимвол = Символ(Сумма + 48);
|
||
|
||
Возврат КонтрольныйСимвол;
|
||
|
||
КонецФункции
|
||
|
||
// Функция проверяет корректность GTIN.
|
||
// GTIN допускает в формате GTIN-8, GTIN-12, GTIN-13, GTIN-14 c контрольным символом.
|
||
//
|
||
// Параметры:
|
||
// GTIN - Строка - Текстовая строка с GTIN(c контрольным символом). Может содержать числа от 0 до 9.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево
|
||
//
|
||
Функция ПроверитьКорректностьGTIN(Знач GTIN) Экспорт
|
||
|
||
Результат = (СтрДлина(GTIN) = 8) Или (СтрДлина(GTIN) = 12) Или (СтрДлина(GTIN) = 13) Или (СтрДлина(GTIN) = 14);
|
||
Возврат Результат И РассчитатьКонтрольныйСимволGTIN(GTIN) = Прав(GTIN, 1);
|
||
|
||
КонецФункции
|
||
|
||
// Декодирование данных по значение EPC(HEX строка). Поддерживается формат SGTIN-96 и SGTIN-198.
|
||
//
|
||
// Параметры:
|
||
// EPC - Строка - Строка содержащая значение банка EPC в HEX виде.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// *Результат - Булево - Результат декодирования (успешно или нет)
|
||
// *EPC - Строка - Значение EPC в виде HEX строки
|
||
// *EPC_BIN - Строка - Значение EPC в виде бинарной строки
|
||
// *Формат - Строка - Распознанный формат данных SGTIN-96 или SGTIN-198
|
||
// *GTIN - Строка - GTIN
|
||
// *СерийныйНомер - Строка - Серийный номер SGTIN
|
||
// *ПрефиксКомпании - Строка - Префикс компании
|
||
// *URI - Строка - EPC Tag URI.
|
||
//
|
||
Функция ДекодированиеДанныхSGTIN(EPC) Экспорт
|
||
|
||
// Преобразовываем HEX строку значение банка EPC в бинарную строку.
|
||
БитовыйМассив = ПреобразоватьHEXВБинарнуюСтроку(EPC);
|
||
|
||
// Подготавливаем структура результата.
|
||
СтруктураРезультата = ПолучитьСтруктуруЗаписиEPC();
|
||
СтруктураРезультата.EPC = EPC;
|
||
СтруктураРезультата.EPC_BIN = БитовыйМассив;
|
||
|
||
// Получаем заголовок метки.
|
||
Заголовок = Сред(БитовыйМассив, 1, 8);
|
||
|
||
Если Заголовок = "00110000" Тогда // Распознан заголовок SGTIN-96.
|
||
|
||
Формат = "sgtin-96";
|
||
// Для SGTIN-96 длинная серийного номера 38 bit.
|
||
СерийныйНомер = Сред(БитовыйМассив, 59);
|
||
// Серийный номер состоит из десятичных цифр. Максимальное значение 274,877,906,943
|
||
СерийныйНомер = ДобавитьЛидирующиеНули(Формат(ПреобразоватьБинарнуюСтрокуВЧисло(СерийныйНомер), "ЧГ=0"), 12);
|
||
|
||
ИначеЕсли Заголовок = "00110110" Тогда // Распознан заголовок SGTIN-198.
|
||
|
||
Формат = "sgtin-198";
|
||
// Для SGTIN-198 длинная серийного номера 140 bit.
|
||
СерийныйНомерВрем = Сред(БитовыйМассив, 59);
|
||
// Серийный номер состоит из 7 битных символов. Максимально 20 символов.
|
||
СерийныйНомер = "";
|
||
Пока СтрДлина(СерийныйНомерВрем) > 0 Цикл
|
||
ТекСимвол = Лев(СерийныйНомерВрем, 7);
|
||
КодСимвола = ПреобразоватьБинарнуюСтрокуВЧисло(ТекСимвол);
|
||
Если КодСимвола > 31 Тогда
|
||
СерийныйНомер = СерийныйНомер + Символ(КодСимвола);
|
||
КонецЕсли;
|
||
СерийныйНомерВрем = Сред(СерийныйНомерВрем, 8);
|
||
КонецЦикла;
|
||
|
||
Иначе
|
||
Возврат СтруктураРезультата; // Не распознан формат данных EPC.
|
||
КонецЕсли;
|
||
|
||
СтруктураРезультата.СерийныйНомер = СерийныйНомер;
|
||
СтруктураРезультата.Формат = Формат;
|
||
|
||
Фильтр = ПреобразоватьБинарнуюСтрокуВЧисло(Сред(БитовыйМассив, 9, 3));
|
||
Разделитель = ПреобразоватьБинарнуюСтрокуВЧисло(Сред(БитовыйМассив, 12, 3));
|
||
|
||
// Определяем разделить префикса компании.
|
||
Если Разделитель = 1 Тогда
|
||
РазрядовКомпании = 37;
|
||
РазрядовЗнаков = 11;
|
||
ИначеЕсли Разделитель = 2 Тогда
|
||
РазрядовКомпании = 34;
|
||
РазрядовЗнаков = 10;
|
||
ИначеЕсли Разделитель = 3 Тогда
|
||
РазрядовКомпании = 30;
|
||
РазрядовЗнаков = 9;
|
||
ИначеЕсли Разделитель = 4 Тогда
|
||
РазрядовКомпании = 27;
|
||
РазрядовЗнаков = 8;
|
||
ИначеЕсли Разделитель = 5 Тогда
|
||
РазрядовКомпании = 24;
|
||
РазрядовЗнаков = 7;
|
||
ИначеЕсли Разделитель = 6 Тогда
|
||
РазрядовКомпании = 20;
|
||
РазрядовЗнаков = 6;
|
||
Иначе
|
||
РазрядовКомпании = 40;
|
||
РазрядовЗнаков = 12;
|
||
КонецЕсли;
|
||
|
||
ПрефиксКомпании = Сред(БитовыйМассив, 15, РазрядовКомпании);
|
||
ГруппаТовара = Сред(БитовыйМассив, 15 + РазрядовКомпании, 44 - РазрядовКомпании);
|
||
|
||
ПрефиксКомпании = ДобавитьЛидирующиеНули(Формат(ПреобразоватьБинарнуюСтрокуВЧисло(ПрефиксКомпании), "ЧГ=0"), РазрядовЗнаков);
|
||
ГруппаТовара = ДобавитьЛидирующиеНули(Формат(ПреобразоватьБинарнуюСтрокуВЧисло(ГруппаТовара), "ЧГ=0"), 13 - РазрядовЗнаков);
|
||
|
||
URI = "urn:epc:tag:" + Формат + ":" + Фильтр + "." + ПрефиксКомпании + "." + ГруппаТовара + "." + СерийныйНомер;
|
||
|
||
GTIN = Лев(ГруппаТовара, 1) + ПрефиксКомпании + Прав(ГруппаТовара, СтрДлина(ГруппаТовара) - 1);
|
||
|
||
Если СтрДлина(GTIN) = 13 Тогда
|
||
GTIN = GTIN + РассчитатьКонтрольныйСимволGTIN14(GTIN)
|
||
КонецЕсли;
|
||
|
||
СтруктураРезультата.ПрефиксКомпании = ПрефиксКомпании;
|
||
СтруктураРезультата.GTIN = GTIN;
|
||
СтруктураРезультата.URI = URI;
|
||
СтруктураРезультата.Результат = Истина;
|
||
|
||
Возврат СтруктураРезультата;
|
||
|
||
КонецФункции
|
||
|
||
// Функция определяет, содержит ли EPC значащую информацию (GTIN или СерийныйНомер) по формату SGTIN.
|
||
//
|
||
// Параметры:
|
||
// EPC - Строка - Строка содержащая значение банка EPC в HEX виде.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Булево
|
||
//
|
||
Функция ПустойEPC(EPC) Экспорт
|
||
|
||
БитовыйМассив = ПреобразоватьHEXВБинарнуюСтроку(EPC);
|
||
СерийныйНомер = Прав(БитовыйМассив, 38);
|
||
GTIN = Сред(БитовыйМассив, 15, 44);
|
||
|
||
СерийныйНомер = ПреобразоватьБинарнуюСтрокуВЧисло(СерийныйНомер);
|
||
GTIN = ПреобразоватьБинарнуюСтрокуВЧисло(GTIN);
|
||
|
||
Заполнен = (СерийныйНомер > 0) Или (GTIN > 0);
|
||
Возврат Не Заполнен;
|
||
|
||
КонецФункции
|
||
|
||
// Сформировать значение EPC в формате SGTIN-96 для GTIN и серийного номера.
|
||
// GTIN допускает в формате GTIN-8, GTIN-12, GTIN-13, GTIN-14.
|
||
//
|
||
// Параметры:
|
||
// GTIN - Строка - GTIN товарной номенклатуры. Текстовая строка с GTIN(c контрольным символом).
|
||
// СерийныйНомер - Строка - Серийный номер номенклатуры.
|
||
// Фильтр - Строка - Фильтр
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - HEX с сформированным EPC для записи на метку RFID.
|
||
//
|
||
Функция СформироватьДанныеSGTIN96(Знач GTIN, Знач СерийныйНомер, Знач Фильтр = 3) Экспорт
|
||
|
||
ВремGTIN = ДобавитьЛидирующиеНули(GTIN, 14);
|
||
ВремGTIN = Лев(ВремGTIN, 13); // Отбрасываем контрольный символ.
|
||
|
||
Если СтрДлина(GTIN) > 13 И Лев(GTIN, 1) <> "0" Тогда
|
||
ЗнаковКомпании = 9;
|
||
Индикатор = Лев(ВремGTIN, 1);
|
||
Компания = Сред(ВремGTIN, 2, ЗнаковКомпании);
|
||
ГруппаТоваров = Индикатор + Прав(ВремGTIN, 3);
|
||
Иначе
|
||
ЗнаковКомпании = 7;
|
||
Компания = Лев(ВремGTIN, ЗнаковКомпании + 1);
|
||
ГруппаТоваров = Сред(ВремGTIN, ЗнаковКомпании + 2);
|
||
КонецЕсли;
|
||
|
||
Если ЗнаковКомпании = 7 Тогда
|
||
РазрядовКомпании = 24;
|
||
Разделитель = 5;
|
||
ИначеЕсли ЗнаковКомпании = 9 Тогда
|
||
РазрядовКомпании = 30;
|
||
Разделитель = 3;
|
||
Иначе
|
||
Разделитель = 3;
|
||
РазрядовКомпании = 30;
|
||
КонецЕсли;
|
||
|
||
// АПК: 1353-выкл EPC - технический термин
|
||
СерийныйНомер = ?(ПустаяСтрока(СерийныйНомер), "0", СерийныйНомер);
|
||
EPC = "00110000"; // - Определяем заголовок SGTIN-96.
|
||
EPC = EPC + ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(Фильтр), 3); // Фильтр.
|
||
EPC = EPC + ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(Разделитель), 3); // Разделитель
|
||
EPC = EPC + ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(Число(Компания)), РазрядовКомпании);
|
||
EPC = EPC + ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(Число(ГруппаТоваров)), 44 - РазрядовКомпании);
|
||
EPC = EPC + ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(Число(СерийныйНомер)), 38);
|
||
|
||
Результат = ПреобразоватьБинарнуюСтрокуВHEX(EPC);
|
||
Возврат Результат;
|
||
// АПК: 1353-вкл
|
||
|
||
КонецФункции
|
||
|
||
// Сформировать серийный номер по правилам производителей чипов.
|
||
//
|
||
// Параметры:
|
||
// TID - Строка - GTIN товарной номенклатуры. Текстовая строка с GTIN(c контрольным символом).
|
||
// EPC - Строка - Серийный номер номенклатуры.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура.
|
||
//
|
||
Функция СерийныйНомерПоTID(Знач TID, Знач EPC = Неопределено) Экспорт
|
||
|
||
ОписаниеОшибки = НСтр("ru='Ошибка генерации серийного номера по TID.'");
|
||
РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки, СерийныйНомер", Ложь, ОписаниеОшибки);
|
||
|
||
ПризнакG2 = Лев(TID, 2);
|
||
Если ПризнакG2 <> "E2" Тогда // Фиксированное значение "E2" признак того что тип соответствует EPC Class1Gen2.
|
||
РезультатВыполнения.ОписаниеОшибки = НСтр("ru='Указанный TID не соответствует типу EPC Class1 Gen2.'");
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
// Преобразовываем HEX строку значение банка TID в бинарную строку.
|
||
БитовыйМассив = ПреобразоватьHEXВБинарнуюСтроку(TID);
|
||
// Получаем префикс производителя.
|
||
Производитель = Сред(TID, 3, 3);
|
||
|
||
Если Производитель = "001" Или Производитель = "801" Тогда // Чипы Impinj
|
||
|
||
СерияЧипа = Сред(БитовыйМассив, 84, 2); // Серия чипа 00
|
||
Если СерияЧипа = "00" Тогда
|
||
СерийныйНомер = "000"
|
||
+ Сред(БитовыйМассив, 86, 8)
|
||
+ Сред(БитовыйМассив, 66, 15)
|
||
+ Сред(БитовыйМассив, 94, 3)
|
||
+ Сред(БитовыйМассив, 65, 1)
|
||
+ Сред(БитовыйМассив, 55, 4)
|
||
+ Сред(БитовыйМассив, 61, 4);
|
||
Иначе // Серия чипа 01,10,11
|
||
СерийныйНомер = Сред(БитовыйМассив, 86, 11)
|
||
+ Сред(БитовыйМассив, 65, 16)
|
||
+ Сред(БитовыйМассив, 52, 2)
|
||
+ Сред(БитовыйМассив, 57, 1)
|
||
+ Сред(БитовыйМассив, 55, 4)
|
||
+ Сред(БитовыйМассив, 61, 4);
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Производитель = "006" Или Производитель = "806" Тогда // Чипы NXP Semiconductors
|
||
|
||
СерияЧипа = Сред(БитовыйМассив, 21, 11); // Серия чипа
|
||
СерияЧипа = ПреобразоватьБинарнуюСтрокуВHEX(СерияЧипа);
|
||
Если СерияЧипа = "806" Или СерияЧипа = "807" Тогда // G2iL или G2iL+
|
||
СерийныйНомер = "111"
|
||
+ Сред(БитовыйМассив, 24, 3)
|
||
+ Сред(БитовыйМассив, 33, 32);
|
||
Иначе
|
||
СерийныйНомер = Сред(БитовыйМассив, 59, 38);
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Производитель = "003" Или Производитель = "803" Тогда // Чипы Alien Technology
|
||
|
||
// Words 2, 3, 4 and 5
|
||
СерийныйНомер = Сред(БитовыйМассив, 59, 38);
|
||
|
||
Иначе
|
||
|
||
РезультатВыполнения.ОписаниеОшибки = НСтр("ru='Генерация серийного номера для чипа производителя указанного в TID не поддерживается.'");
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения.Результат = Истина;
|
||
РезультатВыполнения.СерийныйНомер = ПреобразоватьБинарнуюСтрокуВЧисло(СерийныйНомер);
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
// Преобразовывает HEX строку в строку символов.
|
||
//
|
||
// Параметры:
|
||
// СтрокаHEX - Строка - Строка HEX содержащая символы.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Строка символов
|
||
//
|
||
Функция ПреобразоватьHEXВСтроку(Знач СтрокаHEX) Экспорт
|
||
|
||
Результат = "";
|
||
ВремСтрока = СтрокаHEX;
|
||
КодСимвола = 0;
|
||
|
||
Пока СтрДлина(ВремСтрока) > 0 Цикл
|
||
ТекСимвол = Лев(ВремСтрока, 2);
|
||
ТекСимвол = ПреобразоватьHEXВБинарнуюСтроку(ТекСимвол);
|
||
КодСимвола = ПреобразоватьБинарнуюСтрокуВЧисло(ТекСимвол);
|
||
Если КодСимвола > 31 Тогда
|
||
Результат = Результат + Символ(КодСимвола);
|
||
КонецЕсли;
|
||
ВремСтрока = Сред(ВремСтрока, 3);
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Преобразовывает строку символов в HEX строку.
|
||
//
|
||
// Параметры:
|
||
// Строка - Строка - Тестовая строка
|
||
//
|
||
// Возвращаемое значение:
|
||
// - Строка - Строка HEX содержащая символы.
|
||
//
|
||
Функция ПреобразоватьСтрокуВHEX(Знач Строка) Экспорт
|
||
|
||
Результат = "";
|
||
ИндексСимвола = 1;
|
||
|
||
Пока ИндексСимвола <= СтрДлина(Строка) Цикл
|
||
ТекКод = КодСимвола(Строка, ИндексСимвола);
|
||
ТекСимвол = ДобавитьЛидирующиеНули(ПреобразоватьЧислоВБинарнуюСтроку(ТекКод), 8);
|
||
Результат = Результат + ПреобразоватьБинарнуюСтрокуВHEX(ТекСимвол);
|
||
ИндексСимвола = ИндексСимвола + 1;
|
||
КонецЦикла;
|
||
|
||
Результат = ДобавитьЛидирующиеНули(Результат, 8);
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Функция - Преобразовать HEX в бинарную строку
|
||
//
|
||
// Параметры:
|
||
// СтрокаHEX - Строка - Строка HEX содержащая символы.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Текстовая строка в бинарном представлении (Пример "000010101").
|
||
//
|
||
Функция ПреобразоватьHEXВБинарнуюСтроку(Знач СтрокаHEX) Экспорт
|
||
|
||
Результат = "";
|
||
|
||
Для ИндексСимвола = 1 По СтрДлина(СтрокаHEX) Цикл
|
||
ТекСимвол = Сред(СтрокаHEX, ИндексСимвола, 1);
|
||
Если ТекСимвол = "0" Тогда
|
||
Результат = Результат + "0000"
|
||
ИначеЕсли ТекСимвол = "1" Тогда
|
||
Результат = Результат + "0001"
|
||
ИначеЕсли ТекСимвол = "2" Тогда
|
||
Результат = Результат + "0010"
|
||
ИначеЕсли ТекСимвол = "3" Тогда
|
||
Результат = Результат + "0011"
|
||
ИначеЕсли ТекСимвол = "4" Тогда
|
||
Результат = Результат + "0100"
|
||
ИначеЕсли ТекСимвол = "5" Тогда
|
||
Результат = Результат + "0101"
|
||
ИначеЕсли ТекСимвол = "6" Тогда
|
||
Результат = Результат + "0110"
|
||
ИначеЕсли ТекСимвол = "7" Тогда
|
||
Результат = Результат + "0111"
|
||
ИначеЕсли ТекСимвол = "8" Тогда
|
||
Результат = Результат + "1000"
|
||
ИначеЕсли ТекСимвол = "9" Тогда
|
||
Результат = Результат + "1001"
|
||
ИначеЕсли ТекСимвол = "A" Тогда
|
||
Результат = Результат + "1010"
|
||
ИначеЕсли ТекСимвол = "B" Тогда
|
||
Результат = Результат + "1011"
|
||
ИначеЕсли ТекСимвол = "C" Тогда
|
||
Результат = Результат + "1100"
|
||
ИначеЕсли ТекСимвол = "D" Тогда
|
||
Результат = Результат + "1101"
|
||
ИначеЕсли ТекСимвол = "E" Тогда
|
||
Результат = Результат + "1110"
|
||
ИначеЕсли ТекСимвол = "F" Тогда
|
||
Результат = Результат + "1111"
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Функция - Преобразовать бинарную строку ВHEX
|
||
//
|
||
// Параметры:
|
||
// БинарнаяСтрока- Строка - Текстовая строка в бинарном представлении (Пример "000010101").
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Строка HEX содержащая символы.
|
||
//
|
||
Функция ПреобразоватьБинарнуюСтрокуВHEX(Знач БинарнаяСтрока) Экспорт
|
||
|
||
Результат = "";
|
||
ВремСтрока = БинарнаяСтрока;
|
||
|
||
Пока СтрДлина(ВремСтрока) > 0 Цикл
|
||
ТекСимвол = Лев(ВремСтрока, 4);
|
||
Если ТекСимвол = "0000" Тогда
|
||
Результат = Результат + "0";
|
||
ИначеЕсли ТекСимвол = "0001" Тогда
|
||
Результат = Результат + "1";
|
||
ИначеЕсли ТекСимвол = "0010" Тогда
|
||
Результат = Результат + "2";
|
||
ИначеЕсли ТекСимвол = "0011" Тогда
|
||
Результат = Результат + "3";
|
||
ИначеЕсли ТекСимвол = "0100" Тогда
|
||
Результат = Результат + "4";
|
||
ИначеЕсли ТекСимвол = "0101" Тогда
|
||
Результат = Результат + "5";
|
||
ИначеЕсли ТекСимвол = "0110" Тогда
|
||
Результат = Результат + "6";
|
||
ИначеЕсли ТекСимвол = "0111" Тогда
|
||
Результат = Результат + "7";
|
||
ИначеЕсли ТекСимвол = "1000" Тогда
|
||
Результат = Результат + "8";
|
||
ИначеЕсли ТекСимвол = "1001" Тогда
|
||
Результат = Результат + "9";
|
||
ИначеЕсли ТекСимвол = "1010" Тогда
|
||
Результат = Результат + "A";
|
||
ИначеЕсли ТекСимвол = "1011" Тогда
|
||
Результат = Результат + "B";
|
||
ИначеЕсли ТекСимвол = "1100" Тогда
|
||
Результат = Результат + "C";
|
||
ИначеЕсли ТекСимвол = "1101" Тогда
|
||
Результат = Результат + "D";
|
||
ИначеЕсли ТекСимвол = "1110" Тогда
|
||
Результат = Результат + "E";
|
||
ИначеЕсли ТекСимвол = "1111" Тогда
|
||
Результат = Результат + "F";
|
||
КонецЕсли;
|
||
ВремСтрока = Сред(ВремСтрока, 5);
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Функция - Преобразовать бинарную строку в десятичное число
|
||
//
|
||
// Параметры:
|
||
// БинарнаяСтрока - Строка - Текстовая строка в бинарном представлении (Пример "000010101").
|
||
//
|
||
// Возвращаемое значение:
|
||
// Число - Десятичное число.
|
||
//
|
||
Функция ПреобразоватьБинарнуюСтрокуВЧисло(Знач БинарнаяСтрока) Экспорт
|
||
|
||
Результат = 0;
|
||
ТекущийИндекс = СтрДлина(БинарнаяСтрока) - 1;
|
||
|
||
Для ИндексСимвол = 1 По СтрДлина(БинарнаяСтрока) Цикл
|
||
ТекСимвол = Сред(БинарнаяСтрока, ИндексСимвол, 1);
|
||
Если ТекСимвол = "1" Тогда
|
||
Результат = Результат + Pow(2, ТекущийИндекс);
|
||
КонецЕсли;
|
||
ТекущийИндекс = ТекущийИндекс - 1;
|
||
КонецЦикла;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Функция - Преобразовать десятичное число в бинарную строку
|
||
//
|
||
// Параметры:
|
||
// Число - Число - Десятичное число которое будет преобразовано в бинарный вид.
|
||
// КоличествоСимволов - Число - количество символов.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Текстовая строка в бинарном представлении (Пример "000010101").
|
||
//
|
||
Функция ПреобразоватьЧислоВБинарнуюСтроку(Знач Число, Знач КоличествоСимволов = 0) Экспорт
|
||
|
||
Результат = "";
|
||
|
||
Пока Число > 0 Цикл
|
||
Остаток = Число % 2;
|
||
Число = Цел(Число / 2);
|
||
Результат = Строка(Остаток) + Результат;
|
||
КонецЦикла;
|
||
|
||
Результат =?(ПустаяСтрока(Результат), "0", Результат);
|
||
|
||
Если КоличествоСимволов > 0 Тогда
|
||
Пока СтрДлина(Результат) < КоличествоСимволов Цикл
|
||
Результат = "0" + Результат;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
|
||
КонецФункции
|
||
|
||
// Сформировать серийный номер по правилам производителей чипов.
|
||
//
|
||
// Параметры:
|
||
// TID - Строка - TID
|
||
// EPC - Неопределено - EPC
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура - Получить серийный номер по TID:
|
||
// *Результат - Булево -
|
||
// *ОписаниеОшибки - Строка -
|
||
// *СерийныйНомер - Строка -
|
||
//
|
||
Функция ПолучитьСерийныйНомерПоTID(Знач TID, Знач EPC = Неопределено) Экспорт
|
||
|
||
ОписаниеОшибки = НСтр("ru='Ошибка генерации серийного номера по TID.'");
|
||
РезультатВыполнения = Новый Структура("Результат, ОписаниеОшибки, СерийныйНомер", Ложь, ОписаниеОшибки);
|
||
|
||
ПризнакG2 = Лев(TID, 2);
|
||
Если ПризнакG2 <> "E2" Тогда // Фиксированное значение "E2" признак того что тип соответствует EPC Class1Gen2.
|
||
РезультатВыполнения.ОписаниеОшибки = НСтр("ru='Указанный TID не соответствует типу EPC Class1 Gen2.'");
|
||
Возврат РезультатВыполнения;
|
||
КонецЕсли;
|
||
|
||
// Преобразовываем HEX строку значение банка TID в бинарную строку.
|
||
БитовыйМассив = ПреобразоватьHEXВБинарнуюСтроку(TID);
|
||
// Получаем префикс производителя.
|
||
Производитель = Сред(TID, 3, 3);
|
||
|
||
Если Производитель = "001" Или Производитель = "801" Тогда // Чипы Impinj
|
||
|
||
СерияЧипа = Сред(БитовыйМассив, 84, 2); // Серия чипа 00
|
||
Если СерияЧипа = "00" Тогда
|
||
СерийныйНомер = "000"
|
||
+ Сред(БитовыйМассив, 86, 8)
|
||
+ Сред(БитовыйМассив, 66, 15)
|
||
+ Сред(БитовыйМассив, 94, 3)
|
||
+ Сред(БитовыйМассив, 65, 1)
|
||
+ Сред(БитовыйМассив, 55, 4)
|
||
+ Сред(БитовыйМассив, 61, 4);
|
||
Иначе // Серия чипа 01,10,11
|
||
СерийныйНомер = Сред(БитовыйМассив, 86, 11)
|
||
+ Сред(БитовыйМассив, 65, 16)
|
||
+ Сред(БитовыйМассив, 52, 2)
|
||
+ Сред(БитовыйМассив, 57, 1)
|
||
+ Сред(БитовыйМассив, 55, 4)
|
||
+ Сред(БитовыйМассив, 61, 4);
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Производитель = "006" Или Производитель = "806" Тогда // Чипы NXP Semiconductors
|
||
|
||
СерияЧипа = Сред(БитовыйМассив, 21, 11); // Серия чипа
|
||
СерияЧипа = ПреобразоватьБинарнуюСтрокуВHEX(СерияЧипа);
|
||
Если СерияЧипа = "806" Или СерияЧипа = "807" Тогда // G2iL или G2iL+
|
||
СерийныйНомер = "111"
|
||
+ Сред(БитовыйМассив, 24, 3)
|
||
+ Сред(БитовыйМассив, 33, 32);
|
||
Иначе
|
||
СерийныйНомер = Сред(БитовыйМассив, 59, 38);
|
||
КонецЕсли;
|
||
|
||
ИначеЕсли Производитель = "003" Или Производитель = "803" Тогда // Чипы Alien Technology
|
||
|
||
// Words 2, 3, 4 and 5
|
||
СерийныйНомер = Сред(БитовыйМассив, 59, 38);
|
||
|
||
Иначе
|
||
|
||
РезультатВыполнения.ОписаниеОшибки = НСтр("ru='Генерация серийного номера для чипа производителя указанного в TID не поддерживается.'");
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецЕсли;
|
||
|
||
РезультатВыполнения.Результат = Истина;
|
||
РезультатВыполнения.СерийныйНомер = ПреобразоватьБинарнуюСтрокуВЧисло(СерийныйНомер);
|
||
|
||
Возврат РезультатВыполнения;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область RFID
|
||
|
||
// Получить таблицу меток RFID.
|
||
//
|
||
// Параметры:
|
||
// ДанныеМеток - Строка
|
||
//
|
||
// Возвращаемое значение:
|
||
// Массив
|
||
//
|
||
Функция МеткиRFID(ДанныеМеток) Экспорт
|
||
|
||
#Если ВебКлиент Тогда
|
||
Возврат МенеджерОборудованияВызовСервера.МеткиRFID(ДанныеМеток);
|
||
#Иначе
|
||
|
||
Результат = Новый Массив();
|
||
Если Не ПустаяСтрока(ДанныеМеток) Тогда
|
||
ЧтениеXML = Новый ЧтениеXML;
|
||
ЧтениеXML.УстановитьСтроку(ДанныеМеток);
|
||
ЧтениеXML.ПерейтиКСодержимому();
|
||
|
||
Если ЧтениеXML.Имя = "Table" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
Пока ЧтениеXML.Прочитать() Цикл
|
||
Если ЧтениеXML.Имя = "Tag" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
|
||
|
||
// АПК: 1353-выкл TID, EPC, USER - аббревиатура
|
||
// Получение банков памяти считанной метки.
|
||
TID = ЧтениеXML.ЗначениеАтрибута("TID");
|
||
EPC = ЧтениеXML.ЗначениеАтрибута("EPC");
|
||
USER = ЧтениеXML.ЗначениеАтрибута("USER");
|
||
// Декодирование банка EPC по формату SGTIN.
|
||
ПозицияДанных = МенеджерОборудованияКлиентСервер.ДекодированиеДанныхSGTIN(EPC);
|
||
ПозицияДанных.Вставить("TID" , TID); // Добавляем в структура значения TID чипа метки.
|
||
ПозицияДанных.Вставить("USER", USER); // Добавляем в структура значения банка USER.
|
||
ПозицияДанных.Вставить("UserMemory", МенеджерОборудованияКлиентСервер.ПреобразоватьHEXВСтроку(USER));
|
||
// АПК: 1353-вкл
|
||
Результат.Добавить(ПозицияДанных);
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
КонецЕсли;
|
||
КонецЕсли;
|
||
|
||
Возврат Результат;
|
||
#КонецЕсли
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
// Base64 в штрихкод.
|
||
//
|
||
// Параметры:
|
||
// ШтрихкодВBase64 - Строка - Штрихкод в base64
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Base64 в штрихкод
|
||
Функция Base64ВШтрихкод(ШтрихкодВBase64) Экспорт
|
||
|
||
ДвоичныеДанные = Base64Значение(ШтрихкодВBase64);
|
||
Если ДвоичныеДанные = Неопределено Тогда
|
||
Штрихкод = ШтрихкодВBase64;
|
||
Иначе
|
||
Штрихкод = ПолучитьСтрокуИзДвоичныхДанных(ДвоичныеДанные);
|
||
КонецЕсли;
|
||
|
||
Возврат Штрихкод;
|
||
|
||
КонецФункции
|
||
|
||
// Штрихкод в base64.
|
||
//
|
||
// Параметры:
|
||
// Штрихкод - Строка - Штрихкод
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Штрихкод в base64
|
||
Функция ШтрихкодВBase64(Штрихкод) Экспорт
|
||
|
||
Если Штрихкод = Неопределено Тогда
|
||
ДвоичныеДанныеСтроки = Неопределено;
|
||
Иначе
|
||
ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(Штрихкод);
|
||
ШтрихкодBase64 = Base64Строка(ДвоичныеДанныеСтроки);
|
||
ШтрихкодBase64 = СтрЗаменить(ШтрихкодBase64, Символы.ПС, "");
|
||
ШтрихкодBase64 = СтрЗаменить(ШтрихкодBase64, Символы.ВК, "");
|
||
КонецЕсли;
|
||
|
||
Возврат ШтрихкодBase64;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныйПрограммныйИнтерфейс
|
||
|
||
// Проверяет и преобразовывает абонентский номер (телефон) в формат ФФД +{Ц}
|
||
//
|
||
// Параметры:
|
||
// АбонентскийНомер - Строка - Телефон
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Абонентский номер в формат ФФД +{Ц}
|
||
//
|
||
Функция АбонентскийНомерФорматФФД(Знач АбонентскийНомер) Экспорт
|
||
|
||
НомерФорматФФД = "";
|
||
|
||
Если ПустаяСтрока(АбонентскийНомер) Тогда
|
||
Возврат НомерФорматФФД;
|
||
КонецЕсли;
|
||
|
||
Для Индекс = 1 По СтрДлина(АбонентскийНомер) Цикл
|
||
КодСимвола = Сред(АбонентскийНомер, Индекс, 1);
|
||
Если СтрНайти("0123456789", КодСимвола) > 0 Тогда
|
||
НомерФорматФФД = НомерФорматФФД + КодСимвола;
|
||
КонецЕсли;
|
||
КонецЦикла;
|
||
|
||
ДлинаНомераТелефона = СтрДлина(НомерФорматФФД);
|
||
Если ДлинаНомераТелефона = 10 Тогда
|
||
НомерФорматФФД = "+7" + НомерФорматФФД;
|
||
ИначеЕсли ДлинаНомераТелефона = 11 И Лев(НомерФорматФФД, 1) = "8" Тогда
|
||
НомерФорматФФД = "+7" + Сред(НомерФорматФФД, 2);
|
||
Иначе
|
||
НомерФорматФФД = "+" + НомерФорматФФД;
|
||
КонецЕсли;
|
||
|
||
Возврат НомерФорматФФД;
|
||
|
||
КонецФункции
|
||
|
||
// Идентификатор клиента для рабочего места.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Строка - Идентификатор клиента для рабочего места
|
||
Функция ИдентификаторКлиентаДляРабочегоМеста() Экспорт
|
||
|
||
СистемнаяИнформация = Новый СистемнаяИнформация();
|
||
Возврат ВРег(СистемнаяИнформация.ИдентификаторКлиента);
|
||
|
||
КонецФункции
|
||
|
||
Функция НовыеРеквизитыПоискаРабочегоМеста() Экспорт
|
||
|
||
Реквизиты = Новый Структура;
|
||
Реквизиты.Вставить("ИдентификаторКлиента", "");
|
||
Реквизиты.Вставить("ИмяКомпьютера", "");
|
||
Реквизиты.Вставить("MACАдреса", Новый Массив);
|
||
Возврат Реквизиты;
|
||
|
||
КонецФункции
|
||
|
||
Функция НовыеПараметрыРабочегоМеста() Экспорт
|
||
|
||
Параметры = Новый Структура;
|
||
Параметры.Вставить("РабочееМесто");
|
||
Параметры.Вставить("ИспользуетсяRDP", Ложь);
|
||
Параметры.Вставить("ЕстьПодключаемоеОборудование", Истина);
|
||
|
||
Параметры.Вставить("АктуальныеРеквизитыПоиска", НовыеРеквизитыПоискаРабочегоМеста());
|
||
Параметры.Вставить("ЗаписанныеРеквизитыПоиска", НовыеРеквизитыПоискаРабочегоМеста());
|
||
|
||
Возврат Параметры;
|
||
|
||
КонецФункции
|
||
|
||
|
||
#КонецОбласти
|
||
|
||
#Область СлужебныеПроцедурыИФункции
|
||
|
||
Функция ДобавитьЛидирующиеНули(Знач Строка, Знач ДлиннаСтроки)
|
||
|
||
ТекстПолный = Строка;
|
||
Пока СтрДлина(ТекстПолный) < ДлиннаСтроки Цикл
|
||
ТекстПолный = "0" + ТекстПолный;
|
||
КонецЦикла;
|
||
|
||
Возврат ТекстПолный;
|
||
|
||
КонецФункции
|
||
|
||
#Область УстаревшиеПроцедурыИФункции
|
||
|
||
// Устарела: больше не используется
|
||
// Заполняет структуру параметров запрос КМ.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// *ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса
|
||
// *Количество - Число - Количество
|
||
// *ДробноеКоличество - см. ОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыДробноеКоличество
|
||
// *КонтрольнаяМарка - Строка - Код контрольной марки. Кодируется текстом в кодировке Base64.
|
||
// *КодЕдиницыИзмерения - Строка - Код единицы измерения в соответствии с общероссийским классификатором единиц измерения.
|
||
// *ПланируемыйСтатусТовара - ПеречислениеСсылка
|
||
//
|
||
Функция ПараметрыЗапросКМ() Экспорт;
|
||
|
||
Если МенеджерОборудованияВызовСервера.ИспользуетсяЧекопечатающиеУстройства() Тогда
|
||
МодульОборудованиеЧекопечатающиеУстройстваКлиентСервер = ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиентСервер");
|
||
КонецЕсли;
|
||
|
||
Возврат МодульОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыЗапросКМ();
|
||
|
||
КонецФункции
|
||
|
||
// Устарела: больше не используется
|
||
// Заполняет структуру параметров запрос КМ.
|
||
//
|
||
// Возвращаемое значение:
|
||
// Структура:
|
||
// * ИдентификаторЗапроса - Строка - Уникальный идентификатор запроса
|
||
//
|
||
Функция ПараметрыПодтверждениеКМ() Экспорт;
|
||
|
||
Если МенеджерОборудованияВызовСервера.ИспользуетсяЧекопечатающиеУстройства() Тогда
|
||
МодульОборудованиеЧекопечатающиеУстройстваКлиентСервер = ОбщийМодуль("ОборудованиеЧекопечатающиеУстройстваКлиентСервер");
|
||
КонецЕсли;
|
||
|
||
Возврат МодульОборудованиеЧекопечатающиеУстройстваКлиентСервер.ПараметрыПодтверждениеКМ();
|
||
|
||
КонецФункции
|
||
|
||
// Устарела: больше не используется
|
||
// Возвращает ссылку на общий модуль или модуль менеджера по имени.
|
||
//
|
||
// См. ОбщегоНазначенияБПО.ОбщийМодуль
|
||
//
|
||
// Параметры:
|
||
// Имя - Строка - имя общего модуля.
|
||
//
|
||
// Возвращаемое значение:
|
||
// ОбщийМодуль - общий модуль.
|
||
//
|
||
// Пример:
|
||
// Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда
|
||
// МодульОбновлениеКонфигурации = ОбщегоНазначенияБПО.ОбщийМодуль("ОбновлениеКонфигурации");
|
||
// МодульОбновлениеКонфигурации.<Имя метода>();
|
||
// КонецЕсли;
|
||
//
|
||
// Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ПолнотекстовыйПоиск") Тогда
|
||
// МодульПолнотекстовыйПоискСервер = ОбщегоНазначенияБПО.ОбщийМодуль("ПолнотекстовыйПоискСервер");
|
||
// МодульПолнотекстовыйПоискСервер.<Имя метода>();
|
||
// КонецЕсли.
|
||
Функция ОбщийМодуль(Имя)
|
||
|
||
Модуль = Вычислить(Имя); // АПК: 486 ВычислитьВБезопасномРежиме не требуется, т.к. проверка надежная.
|
||
|
||
#Если Не ВебКлиент Тогда
|
||
|
||
// В веб-клиенте не проверяется
|
||
// т.к. при обращении к модулям с вызовом сервера типа такого модуля в веб-клиенте не существует.
|
||
|
||
Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
|
||
ВызватьИсключение СтрШаблон(
|
||
НСтр("ru = 'Общий модуль ""%1"" не существует.'"),
|
||
Имя);
|
||
КонецЕсли;
|
||
|
||
#КонецЕсли
|
||
|
||
Возврат Модуль;
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти
|
||
|
||
Функция СтрокаЗапускаБезопасная(СтрокаЗапуска) Экспорт
|
||
|
||
// Безопасными считаются такие строковые данные, которые не содержат в себе следующие символы: "$", "`", "|", "||" ";", "&", "&&".
|
||
ОпасныйВызов = СтрНайти(СтрокаЗапуска, "$")>0
|
||
Или СтрНайти(СтрокаЗапуска, "`")>0
|
||
Или СтрНайти(СтрокаЗапуска, "|")>0
|
||
Или СтрНайти(СтрокаЗапуска, "||")>0
|
||
Или СтрНайти(СтрокаЗапуска, ";")>0
|
||
Или СтрНайти(СтрокаЗапуска, "&")>0
|
||
Или СтрНайти(СтрокаЗапуска, "&&")>0;
|
||
Возврат Не ОпасныйВызов;
|
||
|
||
КонецФункции
|
||
|
||
// Устарела: следует использовать ОбщегоНазначенияБПОКлиент.ДатаСеанса.
|
||
Функция ДатаСеанса() Экспорт
|
||
|
||
Возврат ОбщегоНазначенияБПОКлиентСервер.ДатаСеанса();
|
||
|
||
КонецФункции
|
||
|
||
#КонецОбласти |