TSDZakazScladVasilek/Catalogs/ДрайверыОборудования/Ext/ManagerModule.bsl

423 lines
32 KiB
Plaintext
Raw 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.

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
// Определяет настройки начального заполнения элементов
//
// Параметры:
// ПолноеИмяОбъекта - Строка - имя объекта, для которого вызывается заполнение.
// Настройки - Структура:
// * ПриНачальномЗаполненииЭлемента - Булево - если Истина, то для каждого элемента будет
// вызвана процедура индивидуального заполнения ПриНачальномЗаполненииЭлемента.
// * ПредопределенныеДанные - ТаблицаЗначений - данные заполненные в процедуре ПриНачальномЗаполненииЭлементов.
//
Процедура ПриНастройкеНачальногоЗаполненияЭлементов(ПолноеИмяОбъекта, Настройки) Экспорт
Настройки.ПриНачальномЗаполненииЭлемента = Ложь;
КонецПроцедуры
// Процедура заполняет предопределенные элементы в справочнике драйверов оборудования.
//
// Параметры:
// ДрайверыОборудования - ТаблицаЗначений
//
Процедура ПриНачальномЗаполненииЭлементов(ДрайверыОборудования) Экспорт
ТекущийЯзык = ТекущийЯзык();
КодЯзыка = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка);
ТаблицаДрайверов = Новый ТаблицаЗначений();
ТаблицаДрайверов.Колонки.Добавить("Ссылка");
ТаблицаДрайверов.Колонки.Добавить("ИмяПредопределенныхДанных");
ТаблицаДрайверов.Колонки.Добавить("ВРегИмяПредопределенныхДанных");
ТаблицаДрайверов.Индексы.Добавить("ВРегИмяПредопределенныхДанных");
ТаблицаДрайверов.Колонки.Добавить("СпособПодключения");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДрайверыОборудования.Ссылка КАК Ссылка,
| ДрайверыОборудования.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
| ДрайверыОборудования.СпособПодключения КАК СпособПодключения
|ИЗ
| Справочник.ДрайверыОборудования КАК ДрайверыОборудования
|ГДЕ
| ДрайверыОборудования.ИмяПредопределенныхДанных В(&СписокИмена)";
Запрос.УстановитьПараметр("СписокИмена", ДрайверыОборудования.ВыгрузитьКолонку("ИмяДрайвера"));
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ТаблицаДрайверов.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
НоваяСтрока.ВРегИмяПредопределенныхДанных = ВРег(НоваяСтрока.ИмяПредопределенныхДанных);
КонецЦикла;
НачатьТранзакцию();
Попытка
Блокировка = Новый БлокировкаДанных();
ЭлементБлокировки = Блокировка.Добавить("Справочник.ДрайверыОборудования");
ЭлементБлокировки.ИсточникДанных = ТаблицаДрайверов;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Ссылка", "Ссылка");
Блокировка.Заблокировать();
Для Каждого ДрайверОборудования Из ДрайверыОборудования Цикл
ПараметрыДрайвера = МенеджерОборудованияКлиентСервер.ПараметрыСозданияНовогоДрайвера();
ЗаполнитьЗначенияСвойств(ПараметрыДрайвера, ДрайверОборудования);
ПараметрыДрайвера.Предопределенный = Истина;
Если ТипЗнч(ПараметрыДрайвера.ТипОборудования) = Тип("Строка") Тогда
ПараметрыДрайвера.ТипОборудования = МенеджерОборудования.ТипОборудованияПоСтроке(ПараметрыДрайвера.ТипОборудования);
КонецЕсли;
СтрокаТаблицы = ТаблицаДрайверов.Найти(ВРег(ПараметрыДрайвера.ИмяДрайвера),"ВРегИмяПредопределенныхДанных");
Если СтрокаТаблицы <> Неопределено Тогда
Драйвер = СтрокаТаблицы.Ссылка.ПолучитьОбъект();
ПараметрыДрайвера.СпособПодключения = СтрокаТаблицы.СпособПодключения;
МакетДоступен = Ложь;
ИмяМакетаДрайвера = ПараметрыДрайвера.ИмяМакетаДрайвера;
МенеджерОборудования.ЗаполнитьДанныеМакетов(ПараметрыДрайвера.ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, Неопределено, КодЯзыка);
Если Не МакетДоступен Тогда
ПараметрыДрайвера.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы;
КонецЕсли;
Иначе
Драйвер = Справочники.ДрайверыОборудования.СоздатьЭлемент();
Драйвер.ИмяПредопределенныхДанных = ПараметрыДрайвера.ИмяДрайвера;
МакетДоступен = Ложь;
ИмяМакетаДрайвера = ПараметрыДрайвера.ИмяМакетаДрайвера;
МенеджерОборудования.ЗаполнитьДанныеМакетов(ПараметрыДрайвера.ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, Неопределено, КодЯзыка);
Если НЕ ЗначениеЗаполнено(ПараметрыДрайвера.СпособПодключения) Тогда
Если МакетДоступен Тогда
ПараметрыДрайвера.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета;
Иначе
ПараметрыДрайвера.СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзИнформационнойБазы;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если (Драйвер.Наименование <> ПараметрыДрайвера.Наименование)
Или (Драйвер.ИдентификаторОбъекта <> Строка(ПараметрыДрайвера.ИдентификаторОбъекта))
Или (Драйвер.ВерсияДрайвера <> Строка(ПараметрыДрайвера.ВерсияДрайвера))
Или (Драйвер.ИмяМакетаДрайвера <> Строка(ПараметрыДрайвера.ИмяМакетаДрайвера))
Или (Драйвер.ТипОборудования <> ПараметрыДрайвера.ТипОборудования)
Или (Драйвер.СпособПодключения <> ПараметрыДрайвера.СпособПодключения)
Или (Драйвер.СнятСПоддержки <> ПараметрыДрайвера.СнятСПоддержки)
Или (Драйвер.БезопасноеПодключение <> ПараметрыДрайвера.БезопасноеПодключение)
Или (Драйвер.РекомендуемоеИспользование <> ПараметрыДрайвера.РекомендуемоеИспользование) Тогда
Драйвер.Наименование = ПараметрыДрайвера.Наименование;
Драйвер.ИдентификаторОбъекта = ПараметрыДрайвера.ИдентификаторОбъекта;
Драйвер.ВерсияДрайвера = ПараметрыДрайвера.ВерсияДрайвера;
Драйвер.ИмяМакетаДрайвера = ПараметрыДрайвера.ИмяМакетаДрайвера;
Драйвер.ТипОборудования = ПараметрыДрайвера.ТипОборудования;
Драйвер.СпособПодключения = ПараметрыДрайвера.СпособПодключения;
Драйвер.СнятСПоддержки = ПараметрыДрайвера.СнятСПоддержки;
Драйвер.БезопасноеПодключение = ПараметрыДрайвера.БезопасноеПодключение;
Драйвер.РекомендуемоеИспользование = ПараметрыДрайвера.РекомендуемоеИспользование;
Если Драйвер.СнятСПоддержки Тогда
Драйвер.СообщениеПриИспользовании = Истина;
КонецЕсли;
Драйвер.Записать();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ОбщегоНазначенияБПО.ЗаписатьОшибкуВЖурналРегистрации(
НСтр("ru = 'Заполнение предопределенных элементов драйвера'", ОбщегоНазначенияБПО.КодОсновногоЯзыка()));
КонецПопытки;
КонецПроцедуры
// Процедура заполняет элемент в справочнике драйверов оборудования.
//
// Параметры:
// ПараметрыСоздания - Структура - параметры создания оборудования.
//
// Возвращаемое значение:
// СправочникСсылка.ДрайверыОборудования -
//
Функция СоздатьНовыйЭлемент(ПараметрыСоздания) Экспорт
НовыйЭлемент = Справочники.ДрайверыОборудования.СоздатьЭлемент();
Если ТипЗнч(ПараметрыСоздания.ТипОборудования) = Тип("Строка") Тогда
ПараметрыСоздания.ТипОборудования = МенеджерОборудования.ТипОборудованияПоСтроке(ПараметрыСоздания.ТипОборудования);
КонецЕсли;
НовыйЭлемент.ТипОборудования = ПараметрыСоздания.ТипОборудования;
НовыйЭлемент.ИдентификаторОбъекта = ПараметрыСоздания.ИдентификаторОбъекта;
НовыйЭлемент.Наименование = ПараметрыСоздания.Наименование;
НовыйЭлемент.ИмяМакетаДрайвера = ПараметрыСоздания.ИмяМакетаДрайвера;
НовыйЭлемент.ВерсияДрайвера = ПараметрыСоздания.ВерсияДрайвера;
НовыйЭлемент.СнятСПоддержки = ПараметрыСоздания.СнятСПоддержки;
НовыйЭлемент.СпособПодключения = ПараметрыСоздания.СпособПодключения;
НовыйЭлемент.БезопасноеПодключение = ПараметрыСоздания.БезопасноеПодключение;
Если ПараметрыСоздания.Предопределенный Тогда
НовыйЭлемент.ИмяПредопределенныхДанных = ПараметрыСоздания.ИмяДрайвера;
КонецЕсли;
НовыйЭлемент.Записать();
Возврат НовыйЭлемент.Ссылка;
КонецФункции
// Получает ссылку предопределенного элемента по его полному имени.
//
// Параметры:
// ПолноеИмяПредопределенного - Строка - имя предопределенного элемента.
//
// Возвращаемое значение:
// СправочникСсылка.ПодключаемоеОборудование,
// Неопределено.
//
Функция ПредопределенныйЭлемент(Знач ПолноеИмяПредопределенного) Экспорт
ИмяПредопределенного = ВРег(ПолноеИмяПредопределенного);
Точка = Найти(ИмяПредопределенного, ".");
ИмяКоллекции = Лев(ИмяПредопределенного, Точка - 1);
ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1);
Точка = Найти(ИмяПредопределенного, ".");
ИмяТаблицы = Лев(ИмяПредопределенного, Точка - 1);
ИмяПредопределенного = Сред(ИмяПредопределенного, Точка + 1);
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 Ссылка ИЗ &ПолноеИмяТаблицы ГДЕ ИмяПредопределенныхДанных = &ИмяПредопределенного";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ПолноеИмяТаблицы", ИмяКоллекции + "." + ИмяТаблицы);
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ИмяПредопределенного", ИмяПредопределенного);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат Неопределено;
Иначе
Возврат Результат.Выгрузить()[0].Ссылка;
КонецЕсли;
КонецФункции
// Функция возвращает структуру с данными драйвера оборудования
// (со значениями реквизитов элемента справочника).
//
// Параметры:
// ИдентификаторДрайвера - СправочникСсылка.ДрайверыОборудования - идентификатор драйвера.
//
// Возвращаемое значение:
// Структура.
//
Функция ДанныеДрайвераОборудования(ИдентификаторДрайвера) Экспорт
ТекущийЯзык = ТекущийЯзык();
КодЯзыка = ?(ТипЗнч(ТекущийЯзык) = Тип("Строка"), ТекущийЯзык, ТекущийЯзык.КодЯзыка);
ДанныеДрайвера = Новый Структура();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДрайверыОборудованияПереопределяемый.Ссылка КАК Ссылка,
| ДрайверыОборудованияПереопределяемый.Наименование КАК Наименование,
| ДрайверыОборудованияПереопределяемый.ИдентификаторОбъекта КАК ИдентификаторОбъекта,
| ДрайверыОборудованияПереопределяемый.ВерсияДрайвера КАК ВерсияДрайвера,
| ДрайверыОборудованияПереопределяемый.ИмяМакетаДрайвера КАК ИмяМакетаДрайвера,
| ДрайверыОборудованияПереопределяемый.СнятСПоддержки КАК СнятСПоддержки,
| ДрайверыОборудованияПереопределяемый.СообщениеПриИспользовании КАК СообщениеПриИспользовании,
| ДрайверыОборудованияПереопределяемый.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных,
| ДрайверыОборудованияПереопределяемый.ТипОборудования КАК ТипОборудования,
| ДрайверыОборудованияПереопределяемый.Предопределенный КАК Предопределенный,
| ДрайверыОборудованияПереопределяемый.СпособПодключения КАК СпособПодключения,
| ДрайверыОборудованияПереопределяемый.БезопасноеПодключение КАК БезопасноеПодключение
|ИЗ
| Справочник.ДрайверыОборудования КАК ДрайверыОборудованияПереопределяемый
|ГДЕ
| ДрайверыОборудованияПереопределяемый.Ссылка = &Идентификатор";
Запрос.УстановитьПараметр("Идентификатор", ИдентификаторДрайвера);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
// Заполним структуру данных устройства.
ДанныеДрайвера.Вставить("Ссылка" , Выборка.Ссылка);
ДанныеДрайвера.Вставить("Наименование" , Выборка.Наименование);
ДанныеДрайвера.Вставить("ИдентификаторОбъекта" , Выборка.ИдентификаторОбъекта);
ДанныеДрайвера.Вставить("ВерсияДрайвера" , Выборка.ВерсияДрайвера);
ДанныеДрайвера.Вставить("СнятСПоддержки" , Выборка.СнятСПоддержки);
ДанныеДрайвера.Вставить("СообщениеПриИспользовании", Выборка.СообщениеПриИспользовании);
ДанныеДрайвера.Вставить("ИмяПредопределенныхДанных", Выборка.ИмяПредопределенныхДанных);
ДанныеДрайвера.Вставить("ТипыОборудования" , МенеджерОборудования.ПараметрыТипыОборудования(Выборка.ТипОборудования));
ДанныеДрайвера.Вставить("ТипОборудования" , Выборка.ТипОборудования);
ДанныеДрайвера.Вставить("ТипОборудованияИмя" , XMLСтрока(Выборка.ТипОборудования));
ДанныеДрайвера.Вставить("БезопасноеПодключение" , Выборка.БезопасноеПодключение);
СпособПодключения = Выборка.СпособПодключения;
ПодключениеИзМакета = СпособПодключения = Перечисления.СпособПодключенияДрайвера.ИзМакета;
ПодключениеЛокальноПоИдентификатору = СпособПодключения = Перечисления.СпособПодключенияДрайвера.ЛокальноПоИдентификатору;
ШаблонЛокализации = Неопределено;
МакетДоступен = Ложь;
ИмяДрайвера = Выборка.ИмяПредопределенныхДанных;
ИмяМакетаДрайвера = Выборка.ИмяМакетаДрайвера;
Если Не ПустаяСтрока(ИмяДрайвера) Тогда
МенеджерОборудования.ЗаполнитьДанныеМакетов(ИмяДрайвера, ИмяМакетаДрайвера, МакетДоступен, ШаблонЛокализации, КодЯзыка);
КонецЕсли;
ДанныеДрайвера.Вставить("СпособПодключения" , СпособПодключения);
ДанныеДрайвера.Вставить("ПодключениеИзМакета" , ПодключениеИзМакета);
ДанныеДрайвера.Вставить("ПодключениеЛокальноПоИдентификатору", ПодключениеЛокальноПоИдентификатору);
ДанныеДрайвера.Вставить("ИмяМакетаДрайвера" , ИмяМакетаДрайвера);
ДанныеДрайвера.Вставить("МакетДоступен" , МакетДоступен);
ДанныеДрайвера.Вставить("ШаблонЛокализации" , ШаблонЛокализации);
ТипыОборудования = МенеджерОборудования.ДоступныеТипыНесертифицированногоОборудования();
Если ТипыОборудования.Найти(Выборка.ТипОборудования) = Неопределено Тогда
Несертифицированное = Ложь;
Иначе
Несертифицированное = Истина;
КонецЕсли;
ДанныеДрайвера.Вставить("Несертифицированное" , Несертифицированное);
КонецЦикла;
Возврат ДанныеДрайвера;
КонецФункции
// Функция возвращает драйверы по типу оборудования
//
// Параметры:
// ТипОборудования - ПеречислениеСсылка.ТипыПодключаемогоОборудования - типы подключаемого оборудования.
// ТолькоДоступные - Булево - признак только доступных драйверов.
// СнятыеСПоддержкиДрайвера - Булево - признак отображения снятых с поддержки драйверов.
// ТолькоРекомендуемоеИспользование - Булево - признак отображения только рекомендуемых к использованию драйверов.
//
// Возвращаемое значение:
// Массив Из СправочникСсылка.ДрайверыОборудования
//
Функция ДрайверыПоТипуОборудования(ТипОборудования, ТолькоДоступные = Истина, СнятыеСПоддержкиДрайвера = Ложь, РекомендуемоеИспользование = Истина) Экспорт
СписокДрайверов = Новый СписокЗначений();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДрайверыОборудованияПереопределяемый.Ссылка КАК Ссылка,
| ДрайверыОборудованияПереопределяемый.Наименование КАК Наименование,
| ДрайверыОборудованияПереопределяемый.ТипОборудования КАК ТипОборудования,
| ДрайверыОборудованияПереопределяемый.Предопределенный КАК Предопределенный
|ИЗ
| Справочник.ДрайверыОборудования КАК ДрайверыОборудованияПереопределяемый
|ГДЕ
| ДрайверыОборудованияПереопределяемый.ТипОборудования = &ТипОборудования
| И (НЕ &ТолькоДоступные
| ИЛИ НЕ ДрайверыОборудованияПереопределяемый.ПометкаУдаления)
| И (&СнятыеСПоддержки
| ИЛИ НЕ ДрайверыОборудованияПереопределяемый.СнятСПоддержки)
| И (НЕ &РекомендуемоеИспользование
| ИЛИ ДрайверыОборудованияПереопределяемый.РекомендуемоеИспользование)
|
|УПОРЯДОЧИТЬ ПО
| ДрайверыОборудованияПереопределяемый.Наименование";
Запрос.УстановитьПараметр("ТолькоДоступные" , ТолькоДоступные);
Запрос.УстановитьПараметр("СнятыеСПоддержки", СнятыеСПоддержкиДрайвера);
Запрос.УстановитьПараметр("РекомендуемоеИспользование", РекомендуемоеИспользование);
Запрос.УстановитьПараметр("ТипОборудования" , ТипОборудования);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
СписокДрайверов.Добавить(ВыборкаДетальныеЗаписи.Ссылка, ВыборкаДетальныеЗаписи.Наименование);
КонецЦикла;
Возврат СписокДрайверов;
КонецФункции
// СтандартныеПодсистемы.УправлениеДоступом
// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
//
// Параметры:
// Ограничение - Структура:
// * Текст - Строка - ограничение доступа для пользователей.
// Если пустая строка, значит, доступ разрешен.
// * ТекстДляВнешнихПользователей - Строка - ограничение доступа для внешних пользователей.
// Если пустая строка, значит, доступ запрещен.
// * ПоВладельцуБезЗаписиКлючейДоступа - Неопределено - определить автоматически.
// - Булево - если Ложь, то всегда записывать ключи доступа,
// если Истина, тогда не записывать ключи доступа,
// а использовать ключи доступа владельца (требуется,
// чтобы ограничение было строго по объекту-владельцу).
// * ПоВладельцуБезЗаписиКлючейДоступаДляВнешнихПользователей - Неопределено, Булево - также
// как у параметра ПоВладельцуБезЗаписиКлючейДоступа.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Менеджер = "Справочник.ДрайверыОборудования";
МенеджерОборудованияВызовСервераПереопределяемый.ПриЗаполненииОграниченияДоступа(Менеджер, Ограничение);
КонецПроцедуры
// Конец СтандартныеПодсистемы.УправлениеДоступом
#КонецОбласти
#Область СлужебныйПрограммныйИнтерфейс
// Возвращает массив идентификаторов всех драйверов Библиотеки
//
// Возвращаемое значение:
// Массив из Строка - массив содержащий идентификаторы драйверов
Функция ИдентификаторыДрайверов() Экспорт
УстановитьПривилегированныйРежим(Истина);
Идентификаторы = Новый Массив();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДрайверыОборудования.ИдентификаторОбъекта КАК Идентификатор
|ИЗ
| Справочник.ДрайверыОборудования КАК ДрайверыОборудования
|ГДЕ
| ДрайверыОборудования.Предопределенный
| И НЕ ДрайверыОборудования.СнятСПоддержки";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Идентификаторы.Добавить(Выборка.Идентификатор);
КонецЦикла;
МенеджерОборудованияВызовСервераПереопределяемый.ПриПолученииИдентификаторовДрайверов(Идентификаторы);
Возврат Идентификаторы;
КонецФункции
Процедура ЗарегистрироватьНесертифицированныеДрайверы(ДрайверыОборудования) Экспорт
КонецПроцедуры
#КонецОбласти
#КонецЕсли