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