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

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