xmlTSDGalery/CommonModules/МенеджерОборудования/Ext/Module.bsl
kykaevv 88098aa86f Initial commit: конфигурация ТСД с обменом УНФ.
Включает перемещение по ячейкам, стикеровку МП, синхронизацию справочников и обработку кодов маркировки.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-01 12:50:57 +03:00

1160 lines
73 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область Системные
// Возвращает номер версии библиотеки подключаемого оборудования.
//
// Возвращаемое значение:
// Строка.
//
Функция ВерсияБиблиотеки() Экспорт
ВерсияБиблиотекиБПО = "3.2.620";
Возврат ВерсияБиблиотекиБПО;
КонецФункции
// Возвращает список доступных типов оборудования.
//
// Параметры:
// ВключаяНеиспользуемые - Булево - по умолчанию Ложь, неиспользуемые не должны выводиться для выбора пользователем
//
// Возвращаемое значение:
// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - Массив доступных типов подключаемого оборудования в конфигурации.
//
Функция ДоступныеТипыОборудования(ВключаяНеиспользуемые = Ложь) Экспорт
Возврат МенеджерОборудованияПовтИсп.ДоступныеТипыОборудования(ВключаяНеиспользуемые);
КонецФункции
// Возвращает доступность добавление новых драйверов.
//
// Возвращаемое значение:
// Булево.
//
Функция ДоступноДобавлениеНовыхДрайверов() Экспорт
#Если МобильноеПриложениеСервер Тогда
Результат = Ложь;
#Иначе
Результат = Истина;
ДобавлениеНовыхДрайверовДоступно = Результат;
СтандартнаяОбработка = Истина;
МенеджерОборудованияВызовСервераПереопределяемый.ДоступноДобавлениеНовыхДрайверов(ДобавлениеНовыхДрайверовДоступно, СтандартнаяОбработка);
Результат = ?(СтандартнаяОбработка, Результат, ДобавлениеНовыхДрайверовДоступно);
#КонецЕсли
Возврат Результат;
КонецФункции
// Возвращает доступность сетевого оборудования.
//
// Возвращаемое значение:
// Булево.
//
Функция ДоступноСетевоеОборудование() Экспорт
#Если МобильноеПриложениеСервер Тогда
Результат = Ложь;
#Иначе
Результат = Истина;
СетевоеОборудованиеДоступно = Результат;
СтандартнаяОбработка = Истина;
МенеджерОборудованияВызовСервераПереопределяемый.ДоступноСетевоеОборудование(СетевоеОборудованиеДоступно, СтандартнаяОбработка);
Результат = ?(СтандартнаяОбработка, Результат, СетевоеОборудованиеДоступно);
#КонецЕсли
Возврат Результат;
КонецФункции
// Возвращает доступность инкассации в форме управление фискальным устройством.
//
// Возвращаемое значение:
// Булево.
//
Функция ДоступноИнкассацияВУправлениеФискальнымУстройством() Экспорт
Результат = Ложь;
ИнкассацияДоступна = Результат;
СтандартнаяОбработка = Истина;
МенеджерОборудованияВызовСервераПереопределяемый.ДоступноИнкассацияВУправлениеФискальнымУстройством(ИнкассацияДоступна, СтандартнаяОбработка);
Результат = ?(СтандартнаяОбработка, Результат, ИнкассацияДоступна);
Возврат Результат;
КонецФункции
// Ведется учет ИСМП в конфигурации
//
// Возвращаемое значение:
// Булево - Ведется учет ИСМП в конфигурации
//
Функция ВедетсяУчетПродукцииИСМП() Экспорт
СтандартнаяОбработка = Истина;
УчетПродукцииИСМП = Ложь;
МенеджерОборудованияВызовСервераПереопределяемый.ВедетсяУчетПродукцииИСМП(УчетПродукцииИСМП, СтандартнаяОбработка);
Результат = ?(Не СтандартнаяОбработка, УчетПродукцииИСМП, Ложь);
Возврат Результат;
КонецФункции
// Возвращает список доступных типов общедоступного оборудования.
//
// Возвращаемое значение:
// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования - Массив доступных типов подключаемого оборудования в конфигурации.
//
Функция ДоступныеТипыОбщедоступногоОборудования() Экспорт
СписокТиповОборудования = Новый Массив;
СтандартнаяОбработка = Истина;
МенеджерОборудованияВызовСервераПереопределяемый.ДоступныеТипыСетевогоОборудования(СписокТиповОборудования, СтандартнаяОбработка);
Если СтандартнаяОбработка Тогда
СписокТиповОборудования.Очистить();
Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда
СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ККТ);
КонецЕсли;
Если ОбщегоНазначенияБПО.ИспользуютсяОблачныеККТ() Тогда
СписокТиповОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.ОблачнаяККТ);
КонецЕсли;
КонецЕсли;
Возврат СписокТиповОборудования;
КонецФункции
Функция ДрайверПоставляетсяВКонфигурации(ИдентификаторУстройства) Экспорт
Результат = ИдентификаторУстройства.ДрайверОборудования.Предопределенный
И Не ИдентификаторУстройства.ДрайверОборудования.СнятСПоддержки;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ОбновлениеДрайверов
// Обновить поставляемые драйвера БПО.
//
Процедура ОбновитьПоставляемыеДрайвера() Экспорт
МодулиОбновления = Новый Массив();
Если ОбщегоНазначенияБПО.ИспользуетсяУстройстваВвода() Тогда
МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеУстройстваВвода"));
КонецЕсли;
Если ОбщегоНазначенияБПО.ИспользуетсяЧекопечатающиеУстройства() Тогда
МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеЧекопечатающиеУстройства"));
КонецЕсли;
Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда
МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеПлатежныеСистемы"));
КонецЕсли;
Если ОбщегоНазначенияБПО.ИспользуетсяДисплеиПокупателя() Тогда
МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеДисплеиПокупателя"));
КонецЕсли;
Если ОбщегоНазначенияБПО.ИспользуетсяВесовоеОборудование() Тогда
МодулиОбновления.Добавить(ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеВесовоеОборудование"));
КонецЕсли;
ДрайвераОборудования = НоваяТаблицаПоставляемыхДрайверовОборудования();
Для Каждого МодульОбновления Из МодулиОбновления Цикл
МодульОбновления.ОбновитьПоставляемыеДрайвера(ДрайвераОборудования);
КонецЦикла;
Справочники.ДрайверыОборудования.ПриНачальномЗаполненииЭлементов(ДрайвераОборудования);
УдалитьУстаревшиеДрайвера();
КонецПроцедуры
// Обновить установленные драйвера.
//
Процедура ОбновитьУстановленныеДрайвера() Экспорт
ТипыДрайверов = ТипыДрайверовОбязательныхКОбновлению();
УстановитьФлагОбновленияПоТипам(ТипыДрайверов);
КонецПроцедуры
// Записывает изменения в переданном объекте.
// Для использования в обработчиках обновления.
//
// Параметры:
// Данные - Произвольный - объект, набор записей или менеджер константы, который
// необходимо записать.
// РегистрироватьНаУзлахПлановОбмена - Булево - включает регистрацию на узлах планов обмена при записи объекта.
// ВключитьБизнесЛогику - Булево - включает бизнес-логику при записи объекта.
//
Процедура ЗаписатьДанные(Знач Данные, Знач РегистрироватьНаУзлахПлановОбмена = Ложь, Знач ВключитьБизнесЛогику = Ложь) Экспорт
Данные.ОбменДанными.Загрузка = Не ВключитьБизнесЛогику;
Если Не РегистрироватьНаУзлахПлановОбмена Тогда
Данные.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");
Данные.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;
КонецЕсли;
Данные.Записать();
КонецПроцедуры
// Устанавливает признак необходимости переустановки оборудования для подключаемого оборудования на рабочем месте.
//
// Параметры:
// РабочееМесто - СправочникСсылка.РабочиеМеста.
// ДрайверОборудования - СправочникСсылка.ДрайверыОборудования.
// Признак - Булево - требуется переустановить драйвер
//
Процедура УстановитьПризнакПереустановкиДрайвера(РабочееМесто, ДрайверОборудования, Признак) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ПодключаемоеОборудование.Ссылка
|ИЗ
| Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
|ГДЕ
| ПодключаемоеОборудование.РабочееМесто = &РабочееМесто
| И ПодключаемоеОборудование.ДрайверОборудования = &ДрайверОборудования
| И НЕ ПодключаемоеОборудование.ТребуетсяПереустановка = &ТребуетсяПереустановка");
Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто);
Запрос.УстановитьПараметр("ДрайверОборудования", ДрайверОборудования);
Запрос.УстановитьПараметр("ТребуетсяПереустановка", Признак);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();
СправочникОбъект.ТребуетсяПереустановка = Признак;
ЗаписатьДанные(СправочникОбъект)
КонецЦикла;
КонецПроцедуры
// Обновить установленные драйвера по справочнику подключаемого оборудования.
//
// Параметры:
// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования
Процедура ОбновитьУстановленныеДрайвераПоТипу(ТипОборудования) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос("ВЫБРАТЬ
| ПодключаемоеОборудование.Ссылка
|ИЗ
| Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
|ГДЕ
| (ПодключаемоеОборудование.ТипОборудования = &ТипОборудования)");
Запрос.УстановитьПараметр("ТипОборудования", ТипОборудования);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();
СправочникОбъект.ТребуетсяПереустановка = Истина;
ЗаписатьДанные(СправочникОбъект)
КонецЦикла;
КонецПроцедуры
// Возвращает таблицу поставляемых в библиотеке драйверов
//
// Возвращаемое значение:
// см. НоваяТаблицаПоставляемыхДрайверовОборудования
Функция ПоставляемыеДрайверы() Экспорт
Возврат МенеджерОборудованияПовтИсп.ПоставляемыеДрайверы();
КонецФункции
#КонецОбласти
#Область РаботаСОборудованием
// Возвращает список подключенного в справочнике ПО по установленному отбору
//
// Параметры:
// Отбор - см. МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор.
//
// Возвращаемое значение:
// Массив из Структура.
//
Функция СписокОборудования(Отбор) Экспорт
Возврат Справочники.ПодключаемоеОборудование.СписокОборудования(Отбор);
КонецФункции
// Функция возвращает структуру с данными устройства.
//
// Параметры:
// Идентификатор - СправочникСсылка.ПодключаемоеОборудование.
// КодЯзыка - Неопределено, Строка -
//
// Возвращаемое значение:
// см. Справочники.ПодключаемоеОборудование.ДанныеУстройства
//
Функция ДанныеУстройства(Идентификатор, КодЯзыка = Неопределено) Экспорт
Возврат Справочники.ПодключаемоеОборудование.ДанныеУстройства(Идентификатор, КодЯзыка);
КонецФункции
// Функция возвращает по идентификатору устройства его параметры
//
// Параметры:
// Идентификатор - СправочникСсылка.ПодключаемоеОборудование.
//
// Возвращаемое значение:
// - Произвольный
// - Структура
//
Функция ПараметрыУстройства(Идентификатор) Экспорт
Возврат Справочники.ПодключаемоеОборудование.ПараметрыУстройства(Идентификатор);
КонецФункции
// Процедура предназначена для сохранения параметров устройства
// в реквизит Параметры типа хранилище значения в элементе справочника.
//
// Параметры:
// Идентификатор - СправочникСсылка.ПодключаемоеОборудование.
// Параметры - Структура - параметры устройства.
//
// Возвращаемое значение:
// Булево.
//
Функция СохранитьПараметрыУстройства(Идентификатор, Параметры) Экспорт
Возврат Справочники.ПодключаемоеОборудование.СохранитьПараметрыУстройства(Идентификатор, Параметры);
КонецФункции
// Функция возвращает структуру с данными драйвера.
//
// Параметры:
// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера.
//
// Возвращаемое значение:
// Структура.
//
Функция ДанныеДрайвераОборудования(ИдентификаторДрайвера) Экспорт
Возврат Справочники.ДрайверыОборудования.ДанныеДрайвераОборудования(ИдентификаторДрайвера);
КонецФункции
// Функция возвращает драйвера по типу оборудования
//
// Параметры:
// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - типы подключаемого оборудования.
// ТолькоДоступные - Булево - признак только доступных драйверов.
// СнятыеСПоддержкиДрайвера - Булево - признак отображения снятых с поддержки драйверов.
// РекомендуемоеИспользование - Булево - признак отображения рекомендуемых к использованию драйверов.
//
// Возвращаемое значение:
// СписокЗначений.
//
Функция ДрайверыПоТипуОборудования(ТипОборудования, ТолькоДоступные = Истина, СнятыеСПоддержкиДрайвера = Ложь, РекомендуемоеИспользование = Ложь) Экспорт
Возврат Справочники.ДрайверыОборудования.ДрайверыПоТипуОборудования(ТипОборудования, ТолькоДоступные, СнятыеСПоддержкиДрайвера, РекомендуемоеИспользование);
КонецФункции
// Функция создает запись в справочнике о новом драйвере.
//
// Параметры:
// ПараметрыСоздания - см. МенеджерОборудованияКлиентСервер.ПараметрыСозданияНовогоДрайвера
//
// Возвращаемое значение:
// СправочникСсылка.ДрайверыОборудования.
//
Функция СоздатьДрайверОборудования(ПараметрыСоздания) Экспорт
Возврат Справочники.ДрайверыОборудования.СоздатьНовыйЭлемент(ПараметрыСоздания);
КонецФункции
// Функция создает запись в справочнике о новом драйвере.
//
// Параметры:
// ПараметрыСоздания - см. МенеджерОборудованияКлиентСервер.ПараметрыСозданияНовогоПодключаемогоОборудования
//
// Возвращаемое значение:
// СправочникСсылка.ПодключаемоеОборудование.
//
Функция СоздатьПодключаемоеОборудование(ПараметрыСоздания) Экспорт
Возврат Справочники.ПодключаемоеОборудование.СоздатьНовыйЭлемент(ПараметрыСоздания);
КонецФункции
// Получить параметры подключения в XML
//
// Параметры:
// Параметры - Структура - Параметры подключения.
// ТипОборудования - Строка - Тип оборудования
// Возвращаемое значение:
// Строка -
//
Функция ПолучитьПараметрыXML(Параметры, ТипОборудования = Неопределено) Экспорт
Результат = "";
Если Параметры <> Неопределено Тогда
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameters");
Если Не ПустаяСтрока(ТипОборудования) Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameter");
ЗаписьXML.ЗаписатьАтрибут("Name", "EquipmentType");
ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(ТипОборудования));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
Для Каждого Параметр ИЗ Параметры Цикл
Если Лев(Параметр.Ключ, 2) = "P_" Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("Parameter");
ЗаписьXML.ЗаписатьАтрибут("Name", Сред(Параметр.Ключ, 3));
ЗаписьXML.ЗаписатьАтрибут("Value", XMLСтрока(Параметр.Значение));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
Результат = ЗаписьXML.Закрыть();
КонецЕсли;
Возврат Результат;
КонецФункции
// Получить параметры подключения из XML
//
// Параметры:
// ПараметрыXML - Строка - Параметры подключения в XML.
// Возвращаемое значение:
// Структура -
//
Функция ЗагрузитьПараметрыXML(ПараметрыXML) Экспорт
Параметры = Новый Структура();
Если НЕ ПустаяСтрока(ПараметрыXML) Тогда
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ПараметрыXML);
ЧтениеXML.ПерейтиКСодержимому();
Если ЧтениеXML.Имя = "Parameters" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.Имя = "Parameter" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ПараметрИмя = ЧтениеXML.ЗначениеАтрибута("Name");
ПараметрЗначение = ЧтениеXML.ЗначениеАтрибута("Value");
Если ПараметрИмя <> "EquipmentType" Тогда
ПараметрИмя = "P_" + ПараметрИмя;
Параметры.Вставить(ПараметрИмя, ПараметрЗначение);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Параметры;
КонецФункции
// Параметры приложения для драйвера.
//
// Возвращаемое значение:
// Строка
//
Функция ПараметрыПриложенияДляДрайвера() Экспорт
ПриложениеНазвание = "1C:Connected Equipment Library, ver 3.2";
ПриложениеВерсия = ВерсияБиблиотеки();
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("ApplicationSettings");
ЗаписьXML.ЗаписатьАтрибут("ApplicationName", XMLСтрока(ПриложениеНазвание));
ЗаписьXML.ЗаписатьАтрибут("ApplicationVersion", XMLСтрока(ПриложениеВерсия));
ЗаписьXML.ЗаписатьКонецЭлемента();
Результат = ЗаписьXML.Закрыть();
Возврат Результат;
КонецФункции
#КонецОбласти
#Область ЕМРЦ
// Получает цену ЕМРЦ из данных информационной базы на дату.
//
// Параметры:
// ОсобенностьУчета - ПеречислениеСсылка.ВидыМаркированнойПродукцииБПО - тип маркированной продукции для проверки цены.
// Период - Дата - дата проверки цены.
// ЕМРЦ - Число - значение ЕМРЦ.
//
Процедура ПолучитьЦенуЕМРЦ(ОсобенностьУчета, Период = Неопределено, ЕМРЦ = 0) Экспорт
// ++ Локализация
РегистрыСведений.ЗначенияЕМРЦ.ПолучитьЦенуЕМРЦ(Перечисления.ВидыМаркированнойПродукцииБПО.Табак, Период, ЕМРЦ);
// -- Локализация
КонецПроцедуры
#КонецОбласти
#Область ПлатежныеОперации
// Проверяет были ли совершены сторнирования по документу основания.
//
// Параметры:
// ДокументОснования - ОпределяемыйТип.ОснованиеФискальнойОперацииБПО - документ основание.
//
// Возвращаемое значение:
// Булево
//
Функция ВозможнаОтменаОплатыПоЧеку(ДокументОснования) Экспорт
Если ОбщегоНазначенияБПО.ИспользуетсяПлатежныеСистемы() Тогда
МодульОборудованиеПлатежныеСистемы = ОбщегоНазначенияБПО.ОбщийМодуль("ОборудованиеПлатежныеСистемы");
Возврат МодульОборудованиеПлатежныеСистемы.ВозможнаОтменаОплатыПоЧеку(ДокументОснования);
КонецЕсли;
КонецФункции
#КонецОбласти
#Область ПодключениеОборудования
// Добавить на форму список подключаемого оборудования
// Параметры:
// Форма - ФормаКлиентскогоПриложения
// ТипыОборудования - см. МенеджерОборудованияКлиентСервер.ПараметрыТипыОборудования
Процедура ПриСозданииНаСервере(Форма, ТипыОборудования) Экспорт
ПодключаемоеОборудование = ПодключаемоеОборудованиеНаФорме(Форма);
Если ЕстьПодключаемоеОборудование() Тогда
ПодключаемоеОборудование.ТипыПО = ТипыОборудования;
Отбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор();
Отбор.ТипыПО = ТипыОборудования;
РабочееМестоКлиентаНаСервере = МенеджерОборудованияВызовСервера.РабочееМестоКлиента();
Если ЗначениеЗаполнено(РабочееМестоКлиентаНаСервере) Тогда
ПодключаемоеОборудование.СписокОборудования = СписокОборудования(Отбор);
Иначе
ПодключаемоеОборудование.ТребуетсяЗапросСпискаОборудованияНаКлиенте = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Проверяет существует ли в базе подключаемое оборудование, и возвращает
// Истина если в справочнике Подключаемое оборудование отсутствует хотя бы один элемент.
//
// Возвращаемое значение:
// Булево
Функция ЕстьПодключаемоеОборудование() Экспорт
Если ОбщегоНазначенияБПО.РазделениеВключено()
И Не ОбщегоНазначенияБПО.ДоступноИспользованиеРазделенныхДанных() Тогда
Возврат Ложь;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ПодключаемоеОборудование.Ссылка КАК Ссылка
|ИЗ
| Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование";
Результат = Запрос.Выполнить();
Возврат Не Результат.Пустой();
КонецФункции
#КонецОбласти
#Область УстаревшиеПроцедурыИФункции
#Область Интеграция
// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриОпределенииНастроекРегламентныхЗаданий.
// Вызывается из процедуры РегламентныеЗаданияПереопределяемый.ПриОпределенииНастроекРегламентныхЗаданий
// для установки доступности регламентного задания, определяет зависимость от функциональных опций.
//
// Параметры:
// Настройки - ТаблицаЗначений
// ФункциональнаяОпция - ОбъектМетаданныхФункциональнаяОпция
Процедура ПриОпределенииНастроекРегламентныхЗаданий(Настройки, ФункциональнаяОпция) Экспорт
ИнтеграцияПодсистемБПО.ПриОпределенииНастроекРегламентныхЗаданий(Настройки, ФункциональнаяОпция);
КонецПроцедуры
// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриПолученииСпискаШаблонов.
// См. ОчередьЗаданийПереопределяемый.ПриПолученииСпискаШаблонов
Процедура ПриПолученииСпискаШаблонов(ШаблоныЗаданий) Экспорт
ИнтеграцияПодсистемБПО.ПриПолученииСпискаШаблонов(ШаблоныЗаданий);
КонецПроцедуры
// Устарела: следует использовать ИнтеграцияПодсистемБПО.ПриОпределенииПсевдонимовОбработчиков.
// См. ОчередьЗаданийПереопределяемый.ПриОпределенииПсевдонимовОбработчиков
Процедура ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам) Экспорт
ИнтеграцияПодсистемБПО.ПриОпределенииПсевдонимовОбработчиков(СоответствиеИменПсевдонимам);
КонецПроцедуры
#КонецОбласти
// Функция возвращает драйвера по типу оборудования
//
// Параметры:
// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - типы подключаемого оборудования.
// ТолькоДоступные - Булево - признак только доступных драйверов.
// СнятыеСПоддержкиДрайвера - Булево - признак отображения снятых с поддержки драйверов.
// РекомендуемоеИспользование - Булево - признак отображения рекомендуемых к использованию драйверов.
//
// Возвращаемое значение:
// СписокЗначений.
//
Функция ДрайвераПоТипуОборудования(ТипОборудования, ТолькоДоступные = Истина, СнятыеСПоддержкиДрайвера = Ложь, РекомендуемоеИспользование = Ложь) Экспорт
Возврат ДрайверыПоТипуОборудования(ТипОборудования, ТолькоДоступные, СнятыеСПоддержкиДрайвера, РекомендуемоеИспользование);
КонецФункции
#КонецОбласти
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
#Область ТипыОборудования
// Структура типа оборудования
//
// Параметры:
// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования -
// Возвращаемое значение:
// Структура
//
Функция ПараметрыТипыОборудования(ТипОборудования = Неопределено) Экспорт
ТипыОборудования = МенеджерОборудованияПовтИсп.ПараметрыТипыОборудования();
ТипыОборудования = ОбщегоНазначенияБПО.СкопироватьРекурсивно(ТипыОборудования); // Структура
Если ЗначениеЗаполнено(ТипОборудования) Тогда
ИмяЗначенияПеречисления = ОбщегоНазначенияБПО.ИмяЗначенияПеречисления(ТипОборудования);
Если ТипыОборудования.Свойство(ИмяЗначенияПеречисления) Тогда
ТипыОборудования[ИмяЗначенияПеречисления] = Истина;
КонецЕсли;
КонецЕсли;
Возврат ТипыОборудования;
КонецФункции
// Формирования массива типов оборудования
//
// Параметры:
// ТипыОборудования - Структура, Массив, Строка - тип оборудования.
// Возвращаемое значение:
// Массив из ОпределяемыйТип.ТипыПодключаемогоОборудования
//
Функция МассивТиповОборудования(ТипыОборудования) Экспорт
МассивТипов = Новый Массив();
Если ТипЗнч(ТипыОборудования) = Тип("Строка") Тогда
ТипыВМассиве = СтрРазделить(ТипыОборудования, ",", Ложь);
Для Каждого ТипОборудования Из ТипыВМассиве Цикл
МассивТипов.Добавить(ТипОборудованияПоСтроке(ТипОборудования));
КонецЦикла;
ИначеЕсли ТипЗнч(ТипыОборудования) = Тип("Массив") Тогда
ДоступныеТипыОборудования = ДоступныеТипыОборудования(Истина);
Для Каждого ТипОборудования Из ТипыОборудования Цикл
Если ТипЗнч(ТипОборудования) = Тип("Строка") Тогда
МассивТипов.Добавить(ТипОборудованияПоСтроке(ТипОборудования));
ИначеЕсли ДоступныеТипыОборудования.Найти(ТипОборудования) <> Неопределено Тогда
МассивТипов.Добавить(ТипОборудования);
КонецЕсли;
КонецЦикла;
ИначеЕсли ТипЗнч(ТипыОборудования) = Тип("Структура") Тогда
СоответствиеТипов = СоответствиеТиповОборудования();
Для каждого Тип Из ТипыОборудования Цикл
Если Тип.Значение Тогда
МассивТипов.Добавить(СоответствиеТипов[Тип.Ключ]);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат МассивТипов;
КонецФункции
// Получить соответствие типов оборудования
//
// Возвращаемое значение:
// Соответствие -
//
Функция СоответствиеТиповОборудования() Экспорт
Возврат МенеджерОборудованияПовтИсп.СоответствиеТиповОборудования();
КонецФункции
// Получить тип оборудования по строке
//
// Параметры:
// ТипОборудования - Строка - тип оборудования.
// Возвращаемое значение:
// ПеречислениеСсылка.ТипыПодключаемогоОборудования -
//
Функция ТипОборудованияПоСтроке(ТипОборудования) Экспорт
Соответствие = СоответствиеТиповОборудования();
Возврат Соответствие.Получить(ТипОборудования);
КонецФункции
// Возвращает массив прочих типов оборудования, не входящих в БПО
//
// Возвращаемое значение:
// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования
//
Функция ДоступныеТипыНесертифицированногоОборудования() Экспорт
ТипыОборудования = Новый Массив();
ТипыОборудования.Добавить(Перечисления.ТипыПодключаемогоОборудования.Несертифицируемое);
Возврат ТипыОборудования;
КонецФункции
#КонецОбласти
// Заполняет данные о макетах
//
// Параметры:
// ИмяДрайвера - Строка-
// ИмяМакетаДрайвера - Строка-
// МакетДоступен - Булево-
// ШаблонЛокализации - Строка-
// КодЯзыка - Строка-
//
Процедура ЗаполнитьДанныеМакетов(ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, ШаблонЛокализации, КодЯзыка = "") Экспорт
ИмяМакетаДрайвера = ?(ПустаяСтрока(ИмяМакетаДрайвера), ИмяДрайвера, ИмяМакетаДрайвера);
ИмяМакетаДрайвераПатч = ИмяМакетаДрайвера + "_fix";
МакетДрайвера = Метаданные.ОбщиеМакеты.Найти(ИмяМакетаДрайвера);
МакетДрайвераПатч = Метаданные.ОбщиеМакеты.Найти(ИмяМакетаДрайвераПатч);
Если МакетДрайвераПатч <> Неопределено И МакетДрайвераПатч.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ВнешняяКомпонента Тогда
МакетДоступен = Истина;
Если Не ПустаяСтрока(КодЯзыка) Тогда // Проверяем файл с наличием локализации
МакетШаблонЛокализации = ИмяМакетаДрайвераПатч + "_" + КодЯзыка;
МакетШаблон = Метаданные.ОбщиеМакеты.Найти(МакетШаблонЛокализации);
Если МакетШаблон <> Неопределено И МакетШаблон.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ТекстовыйДокумент Тогда
ШаблонЛокализации = ПолучитьОбщийМакет(МакетШаблонЛокализации).ПолучитьТекст();
КонецЕсли;
КонецЕсли;
ИмяМакетаДрайвера = ИмяМакетаДрайвераПатч;
ИначеЕсли МакетДрайвера <> Неопределено И МакетДрайвера.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ВнешняяКомпонента Тогда
МакетДоступен = Истина;
Если Не ПустаяСтрока(КодЯзыка) Тогда // Проверяем файл с наличием локализации
МакетШаблонЛокализации = ИмяМакетаДрайвера + "_" + КодЯзыка;
МакетШаблон = Метаданные.ОбщиеМакеты.Найти(МакетШаблонЛокализации);
Если МакетШаблон <> Неопределено И МакетШаблон.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ТекстовыйДокумент Тогда
ШаблонЛокализации = ПолучитьОбщийМакет(МакетШаблонЛокализации).ПолучитьТекст();
КонецЕсли;
КонецЕсли;
Иначе // Проверяем наличие драйвера по маске типа "*_ru"
Если ПустаяСтрока(КодЯзыка) Тогда
КодЯзыка = ТекущийЯзык().КодЯзыка;
КонецЕсли;
ИмяМакетаДрайвера = ИмяМакетаДрайвера + "_" + КодЯзыка;
МакетШаблон = Метаданные.ОбщиеМакеты.Найти(ИмяМакетаДрайвера);
МакетДоступен = МакетШаблон <> Неопределено И МакетШаблон.ТипМакета = Метаданные.СвойстваОбъектов.ТипМакета.ВнешняяКомпонента;
КонецЕсли;
ИмяМакетаДрайвера = "ОбщийМакет." + ИмяМакетаДрайвера;
КонецПроцедуры
// Заполняет данные об используемых внешних компонентах
//
// Параметры:
// Компоненты - ТаблицаЗначений
Процедура ЗаполнитьИспользуемыеВнешниеКомпоненты(Компоненты) Экспорт
Если ОбщегоНазначенияБПО.ПодсистемаСуществует("СтандартныеПодсистемы.ГенерацияШтрихкода") Тогда
НоваяСтрока = Компоненты.Добавить();
НоваяСтрока.Идентификатор = "Barcode";
НоваяСтрока.ОбновлятьАвтоматически = Истина;
КонецЕсли;
Если ОбщегоНазначенияБПО.ПодсистемаСуществует("ПоддержкаОборудования.ЭлектронныеСертификаты") Тогда
МодульЭлектронныеСертификатыНСПККлиентСервер = ОбщегоНазначенияБПО.ОбщийМодуль("ЭлектронныеСертификатыНСПККлиентСервер");
ОписаниеКомпоненты = МодульЭлектронныеСертификатыНСПККлиентСервер.ОписаниеКомпоненты();
НоваяСтрока = Компоненты.Добавить();
НоваяСтрока.Идентификатор = ОписаниеКомпоненты.ИмяОбъекта;
НоваяСтрока.ОбновлятьАвтоматически = Истина;
КонецЕсли;
// добавить драйверы оборудования которое присутсвует в справочнике подключаемое оборудование
ИдентификаторыДрайверов = МенеджерОборудованияПовтИсп.ИдентификаторыДрайверов();
Для Каждого Идентификатор Из ИдентификаторыДрайверов Цикл
НоваяСтрока = Компоненты.Добавить();
НоваяСтрока.Идентификатор = Идентификатор;
НоваяСтрока.ОбновлятьАвтоматически = Истина;
КонецЦикла
КонецПроцедуры
// Возвращает пустую таблицу поставляемых драйверов оборудования.
//
// Возвращаемое значение:
// ТаблицаЗначений:
// * ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - тип оборудования
// * Наименование - Строка - наименование оборудования
// * ИдентификаторОбъекта - Строка - уникальный идентификатор объекта
// * ИмяДрайвера - Строка - внутреннее имя драйвера
// * ИмяМакетаДрайвера - Строка - имя макета драйвера, если оно отличается от имени драйвера
// * ВерсияДрайвера - Строка
// * СнятСПоддержки - Булево - признак того, что драйвер снят с поддержки
// * СпособПодключения - ПеречислениеСсылка.СпособПодключенияДрайвера
// * ЛокальныйРежим - Булево - признак локальности драйвера
// * СетевойРежим - Булево - признак работы в сетевом режиме
// * СерверныйРежим - Булево
// * БезопасноеПодключение - Булево - Подключение драйвера в отдельном потоке
// * РекомендуемоеИспользование - Булево - Драйвер рекомендован к использованию
//
Функция НоваяТаблицаПоставляемыхДрайверовОборудования() Экспорт
ДрайвераОборудования = Новый ТаблицаЗначений;
// Общие свойства.
ДрайвераОборудования.Колонки.Добавить("ТипОборудования" , Новый ОписаниеТипов("ПеречислениеСсылка.ТипыПодключаемогоОборудования"));
ДрайвераОборудования.Колонки.Добавить("Наименование" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0)));
ДрайвераОборудования.Колонки.Добавить("ИдентификаторОбъекта", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0)));
ДрайвераОборудования.Колонки.Добавить("ИмяДрайвера" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0)));
ДрайвераОборудования.Колонки.Добавить("ИмяМакетаДрайвера" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0)));
ДрайвераОборудования.Колонки.Добавить("ВерсияДрайвера" , Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(0)));
ДрайвераОборудования.Колонки.Добавить("СнятСПоддержки" , Новый ОписаниеТипов("Булево"));
ДрайвераОборудования.Колонки.Добавить("СпособПодключения" , Новый ОписаниеТипов("ПеречислениеСсылка.СпособПодключенияДрайвера"));
ДрайвераОборудования.Колонки.Добавить("БезопасноеПодключение" , Новый ОписаниеТипов("Булево"));
ДрайвераОборудования.Колонки.Добавить("РекомендуемоеИспользование" , Новый ОписаниеТипов("Булево"));
// Параметры работы
ДрайвераОборудования.Колонки.Добавить("ЛокальныйРежим", Новый ОписаниеТипов("Булево"));
ДрайвераОборудования.Колонки.Добавить("СетевойРежим" , Новый ОписаниеТипов("Булево"));
ДрайвераОборудования.Колонки.Добавить("СерверныйРежим", Новый ОписаниеТипов("Булево"));
Возврат ДрайвераОборудования;
КонецФункции
// Возвращает массив содержащий имена макетов для переустановки драйверов, для которых требуется переустановка,
// а так же снимает флаг признака переустановки у найденных элементов.
//
// Параметры:
// РабочееМесто - СправочникСсылка.РабочиеМеста - Текущее рабочее место
//
// Возвращаемое значение:
// Массив из Структура - имена макетов внешних компонент, которые требуется переустановить
Функция МакетыДляПереустановкиДрайверов(РабочееМесто) Экспорт
ОборудованиеДляПереустановки = Новый Массив();
// Переустановить драйверы помеченные флагом для переустановки.
Если ЗначениеЗаполнено(РабочееМесто) Тогда
СписокОтбор = МенеджерОборудованияКлиентСервер.СписокОборудованияОтбор();
СписокОтбор.РабочееМесто = РабочееМесто;
СписокОборудования = СписокОборудования(СписокОтбор);
ДрайверыОборудования = Новый Массив();
Для Каждого Оборудование Из СписокОборудования Цикл
Если Оборудование.ПодключениеИзМакета И Оборудование.МакетДоступен И Оборудование.ТребуетсяПереустановка Тогда
ОписаниеОборудованияДляПереустановки = Новый Структура();
ОписаниеОборудованияДляПереустановки.Вставить("ИмяМакетаДрайвера", Оборудование.ИмяМакетаДрайвера);
ОписаниеОборудованияДляПереустановки.Вставить("Наименование", Оборудование.Наименование);
ОписаниеОборудованияДляПереустановки.Вставить("Версия", Оборудование.ВерсияДрайвера);
ОписаниеОборудованияДляПереустановки.Вставить("МакетДоступен", Оборудование.МакетДоступен);
ОписаниеОборудованияДляПереустановки.Вставить("ПодключениеИзМакета", Оборудование.ПодключениеИзМакета);
ОборудованиеДляПереустановки.Добавить(ОписаниеОборудованияДляПереустановки);
ДрайверыОборудования.Добавить(Оборудование.ДрайверОборудования);
КонецЕсли;
КонецЦикла;
УстановитьПризнакПереустановкиДрайверовПоРабочемуМесту(
РабочееМесто,
ДрайверыОборудования,
Ложь);
КонецЕсли;
Возврат ОборудованиеДляПереустановки;
КонецФункции
// Установить флаг обновления по переданным типам подключаемого оборудования
//
// Параметры:
// ТипыОборудования - Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования
//
Процедура УстановитьФлагОбновленияПоТипам(ТипыОборудования) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос("ВЫБРАТЬ
| ПодключаемоеОборудование.Ссылка
|ИЗ
| Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
|ГДЕ
| (ПодключаемоеОборудование.ТипОборудования В (&ТипыОборудования))");
Запрос.УстановитьПараметр("ТипыОборудования", ТипыОборудования);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();
СправочникОбъект.ТребуетсяПереустановка = Истина;
ЗаписатьДанные(СправочникОбъект);
КонецЦикла;
КонецПроцедуры
#Область РабочиеМеста
Функция ПараметрыРабочегоМестаПриЗапуске(РабочееМесто) Экспорт
ПараметрыРабочегоМеста = МенеджерОборудованияКлиентСервер.НовыеПараметрыРабочегоМеста();
ПараметрыРабочегоМеста.Рабочееместо = РабочееМесто;
Если ЗначениеЗаполнено(РабочееМесто) Тогда
ЗаполнитьЗаписанныеРеквизитыРабочегоМеста(РабочееМесто, ПараметрыРабочегоМеста.ЗаписанныеРеквизитыПоиска);
КонецЕсли;
ЗаполнитьАктуальныеРеквизитыРабочегоМеста(ПараметрыРабочегоМеста.АктуальныеРеквизитыПоиска);
Возврат ПараметрыРабочегоМеста;
КонецФункции
Процедура ЗаполнитьЗаписанныеРеквизитыРабочегоМеста(РабочееМесто, РеквизитыРабочегоМеста) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если ЗначениеЗаполнено(РабочееМесто) Тогда
Реквизиты = ОбщегоНазначенияБПО.ЗначенияРеквизитовОбъекта(РабочееМесто, "Код, ИмяКомпьютера, MACАдрес, MACАдреса");
РеквизитыРабочегоМеста.MACАдреса = Реквизиты.MACАдреса.Выгрузить().ВыгрузитьКолонку("Адрес");
РеквизитыРабочегоМеста.ИмяКомпьютера = Реквизиты.ИмяКомпьютера;
РеквизитыРабочегоМеста.ИдентификаторКлиента = Реквизиты.Код;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьАктуальныеРеквизитыРабочегоМеста(РеквизитыРабочегоМеста) Экспорт
Если РеквизитыРабочегоМеста = Неопределено Тогда
РеквизитыРабочегоМеста = МенеджерОборудованияКлиентСервер.НовыеРеквизитыПоискаРабочегоМеста();
КонецЕсли;
Если Не ЗначениеЗаполнено(РеквизитыРабочегоМеста.ИмяКомпьютера) Тогда
ИмяКомпьютера = ОбщегоНазначенияБПО.ИмяКомпьютераКлиента();
РеквизитыРабочегоМеста.ИмяКомпьютера = ИмяКомпьютера;
КонецЕсли;
Если Не ЗначениеЗаполнено(РеквизитыРабочегоМеста.ИдентификаторКлиента) Тогда
ИдентификаторКлиента = МенеджерОборудованияКлиентСервер.ИдентификаторКлиентаДляРабочегоМеста();
РеквизитыРабочегоМеста.ИдентификаторКлиента = ИдентификаторКлиента;
КонецЕсли;
КонецПроцедуры
Процедура ОбновитьРеквизитыРабочегоМеста(РабочееМесто, АктуальныеРеквизитыРабочегоМеста) Экспорт
Если Не ЗначениеЗаполнено(РабочееМесто) Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
РеквизитыРабочегоМеста = МенеджерОборудованияКлиентСервер.НовыеРеквизитыПоискаРабочегоМеста();
ЗаполнитьЗаписанныеРеквизитыРабочегоМеста(РабочееМесто, РеквизитыРабочегоМеста);
РеквизитыДляЗаписи = Новый Структура;
Если ЗначениеЗаполнено(АктуальныеРеквизитыРабочегоМеста.ИмяКомпьютера)
И АктуальныеРеквизитыРабочегоМеста.ИмяКомпьютера <> РеквизитыРабочегоМеста.ИмяКомпьютера Тогда
РеквизитыДляЗаписи.Вставить("ИмяКомпьютера", АктуальныеРеквизитыРабочегоМеста.ИмяКомпьютера);
КонецЕсли;
Если АктуальныеРеквизитыРабочегоМеста.MACАдреса.Количество() > 0
И Не ОбщегоНазначенияБПОКлиентСервер.МассивыСовпадают(
АктуальныеРеквизитыРабочегоМеста.MACАдреса, РеквизитыРабочегоМеста.MACАдреса) Тогда
РеквизитыДляЗаписи.Вставить("MACАдреса", АктуальныеРеквизитыРабочегоМеста.MACАдреса);
КонецЕсли;
Если РеквизитыДляЗаписи.Количество() > 0 Тогда
ОбъектРабочееМесто = РабочееМесто.ПолучитьОбъект();
Если РеквизитыДляЗаписи.Свойство("Код") Тогда
ОбъектРабочееМесто.Код = РеквизитыДляЗаписи.Код;
КонецЕсли;
Если РеквизитыДляЗаписи.Свойство("ИмяКомпьютера") Тогда
ОбъектРабочееМесто.ИмяКомпьютера = РеквизитыДляЗаписи.ИмяКомпьютера;
КонецЕсли;
Если РеквизитыДляЗаписи.Свойство("MACАдреса") Тогда
ОбъектРабочееМесто.MACАдреса.Очистить();
Для Каждого MACАдрес Из РеквизитыДляЗаписи.MACАдреса Цикл
НовыйАдрес = ОбъектРабочееМесто.MACАдреса.Добавить();
НовыйАдрес.Адрес = MACАдрес;
КонецЦикла;
КонецЕсли;
Если ОбъектРабочееМесто.ПроверитьЗаполнение() Тогда
ОбъектРабочееМесто.Записать();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура УдалитьУстаревшиеДрайвера()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДрайверыОборудования.Ссылка КАК Ссылка,
| ДрайверыОборудования.Представление КАК Представление
|ИЗ
| Справочник.ДрайверыОборудования КАК ДрайверыОборудования
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
| ПО ДрайверыОборудования.Ссылка = ПодключаемоеОборудование.ДрайверОборудования
|ГДЕ
| ДрайверыОборудования.ТипОборудования = ЗНАЧЕНИЕ(Перечисление.ТипыПодключаемогоОборудования.ПустаяСсылка)
| И ПодключаемоеОборудование.Ссылка ЕСТЬ NULL";
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат;
КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
УстаревшийДрайверОбъект = Выборка.Ссылка.ПолучитьОбъект();
Попытка
УстаревшийДрайверОбъект.Заблокировать();
УстаревшийДрайверОбъект.ОбменДанными.Загрузка = Истина;
УстаревшийДрайверОбъект.ОбменДанными.Получатели.АвтоЗаполнение = Ложь;
УстаревшийДрайверОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");
УстаревшийДрайверОбъект.Удалить();
Исключение
ТекстОшибки = СтрШаблон(НСтр("ru = 'Не удается заблокировать удаляемый драйвер %1.'",
ОбщегоНазначенияБПО.КодОсновногоЯзыка()), Выборка.Представление);
ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации(ТекстОшибки);
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Функция ПодключаемоеОборудованиеНаФорме(Форма)
ЗначенияСвойств = Новый Структура("ПодключаемоеОборудованиеБПО", Null);
ЗаполнитьЗначенияСвойств(ЗначенияСвойств, Форма);
Результат = ЗначенияСвойств.ПодключаемоеОборудованиеБПО;
Если ТипЗнч(Результат) <> Тип("Структура") Тогда
Если Результат = Null Тогда
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПодключаемоеОборудованиеБПО", Новый ОписаниеТипов));
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("СписокОборудования", Новый Массив());
Результат.Вставить("ТребуетсяЗапросСпискаОборудованияНаКлиенте", Ложь);
Результат.Вставить("ТипыПО", ПараметрыТипыОборудования());
Форма.ПодключаемоеОборудованиеБПО = Результат;
КонецЕсли;
Возврат Результат;
КонецФункции
// Устанавливает признак необходимости переустановки оборудования для подключаемого оборудования на рабочем месте.
//
// Параметры:
// РабочееМесто - СправочникСсылка.РабочиеМеста.
// ДрайверыОборудования - Массив из СправочникСсылка.ДрайверыОборудования.
// Признак - Булево - требуется переустановить драйвер
//
Процедура УстановитьПризнакПереустановкиДрайверовПоРабочемуМесту(РабочееМесто, ДрайверыОборудования, Признак) Экспорт
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос(
"ВЫБРАТЬ
| ПодключаемоеОборудование.Ссылка КАК Ссылка
|ИЗ
| Справочник.ПодключаемоеОборудование КАК ПодключаемоеОборудование
|ГДЕ
| (ПодключаемоеОборудование.РабочееМесто = &РабочееМесто ИЛИ ПодключаемоеОборудование.ТипПодключения = ЗНАЧЕНИЕ(Перечисление.ТипыПодключенияОборудования.ОбщийДоступ))
| И ПодключаемоеОборудование.ДрайверОборудования В(&ДрайверыОборудования)
| И ПодключаемоеОборудование.ТребуетсяПереустановка <> &ТребуетсяПереустановка");
Запрос.УстановитьПараметр("РабочееМесто", РабочееМесто);
Запрос.УстановитьПараметр("ДрайверыОборудования", ДрайверыОборудования);
Запрос.УстановитьПараметр("ТребуетсяПереустановка", Признак);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект();
СправочникОбъект.ТребуетсяПереустановка = Признак;
ЗаписатьДанные(СправочникОбъект)
КонецЦикла;
КонецПроцедуры
// Возвращает массив типов оборудования которые необходимо переустановить при обновлении
//
// Возвращаемое значение:
// Массив из ПеречислениеСсылка.ТипыПодключаемогоОборудования
//
Функция ТипыДрайверовОбязательныхКОбновлению()
Результат = Новый Массив();
Результат.Добавить(Перечисления.ТипыПодключаемогоОборудования.ККТ);
Результат.Добавить(Перечисления.ТипыПодключаемогоОборудования.ПринтерЭтикеток);
Результат.Добавить(Перечисления.ТипыПодключаемогоОборудования.СканерШтрихкода);
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецЕсли