#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаЗагрузки(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователяИБ)
Если НЕ ПроверитьПраваДоступа("ОбработкаЗагрузки") Тогда
Возврат;
КонецЕсли;
ТипСтрока = Тип("Строка");
ТипСтруктура = Тип("Структура");
ТипХранилищеЗначения = Тип("ХранилищеЗначения");
ТипЛентаНовостей = Тип("СправочникСсылка.ЛентыНовостей");
ТипПользователь = Тип("СправочникСсылка.Пользователи");
Если ТипЗнч(ИмяПользователяИБ) = ТипПользователь Тогда
лкИмяПользователяИБ = ОбработкаНовостейСлужебный.ПолучитьИмяПользователяИБ(ИмяПользователяИБ);
ИначеЕсли ПустаяСтрока(ИмяПользователяИБ) Тогда
лкИмяПользователяИБ = ОбработкаНовостейСлужебный.ПолучитьИмяПользователяИБ(Неопределено);
Иначе
лкИмяПользователяИБ = ИмяПользователяИБ;
КонецЕсли;
Если (КлючОбъекта = "НастройкиПолученияНовостей")
ИЛИ (КлючОбъекта = "НастройкиАвтоудаленияНовостей")
ИЛИ (КлючОбъекта = "СистемнаяИнформация_ВерсияПриложения")
ИЛИ (КлючОбъекта = "СостояниеПодсистемы")
ИЛИ (КлючОбъекта = "НастройкиЖурналаРегистрации") Тогда
УстановитьПривилегированныйРежим(Истина);
Настройки = Неопределено;
ЗначениеКонстанты = Неопределено;
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| НастройкиНовостей.Значение КАК Значение
|ИЗ
| Константа.НастройкиНовостей КАК НастройкиНовостей
|";
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
Если Выборка.Следующий() Тогда
ЗначениеКонстанты = Выборка.Значение;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(ЗначениеКонстанты) = ТипХранилищеЗначения Тогда
ХранилищеНастроекНовостей = ЗначениеКонстанты.Получить();
Иначе
ХранилищеНастроекНовостей = Неопределено;
КонецЕсли;
Если ТипЗнч(ХранилищеНастроекНовостей) = ТипСтруктура Тогда
ХранилищеНастроекНовостейЭталон = Новый Структура;
ХранилищеНастроекНовостейЭталон.Вставить("НастройкиПолученияНовостей" , Неопределено);
ХранилищеНастроекНовостейЭталон.Вставить("НастройкиАвтоудаленияНовостей" , Неопределено);
ХранилищеНастроекНовостейЭталон.Вставить("СистемнаяИнформация_ВерсияПриложения", Неопределено);
ХранилищеНастроекНовостейЭталон.Вставить("СостояниеПодсистемы" , Неопределено);
ХранилищеНастроекНовостейЭталон.Вставить("НастройкиЖурналаРегистрации" , Неопределено);
ЗаполнитьЗначенияСвойств(ХранилищеНастроекНовостейЭталон, ХранилищеНастроекНовостей);
Настройки = ХранилищеНастроекНовостейЭталон[КлючОбъекта];
Если (ТипЗнч(Настройки) = ТипСтруктура)
ИЛИ ((КлючОбъекта = "СистемнаяИнформация_ВерсияПриложения") И (ТипЗнч(Настройки) = ТипСтрока)) Тогда
Иначе
Настройки = Неопределено;
КонецЕсли;
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
УстановитьПривилегированныйРежим(Ложь);
ИначеЕсли (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистратором") Тогда
УстановитьПривилегированныйРежим(Истина);
Настройки = Неопределено;
ЗначениеКонстанты = Неопределено;
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| НастройкиНовостей.Значение КАК Значение
|ИЗ
| Константа.НастройкиНовостей КАК НастройкиНовостей
|";
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
Если Выборка.Следующий() Тогда
ЗначениеКонстанты = Выборка.Значение;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(ЗначениеКонстанты) = ТипХранилищеЗначения Тогда
ХранилищеНастроекНовостей = ЗначениеКонстанты.Получить();
Иначе
ХранилищеНастроекНовостей = Неопределено;
КонецЕсли;
Если ТипЗнч(ХранилищеНастроекНовостей) = ТипСтруктура Тогда
ХранилищеНастроекНовостейЭталон = Новый Структура;
ХранилищеНастроекНовостейЭталон.Вставить("НастройкиПоказаНовостейНастроенныеАдминистратором", Неопределено);
ЗаполнитьЗначенияСвойств(ХранилищеНастроекНовостейЭталон, ХранилищеНастроекНовостей);
Настройки = ХранилищеНастроекНовостейЭталон[КлючОбъекта];
Если (ТипЗнч(Настройки) = ТипСтруктура) Тогда
Иначе
Настройки = Неопределено;
КонецЕсли;
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
УстановитьПривилегированныйРежим(Ложь);
ИначеЕсли (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанных")
ИЛИ (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанныхДляРедактирования") Тогда
УстановитьПривилегированныйРежим(Истина);
Настройки = Неопределено;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
НастройкаПолученаИзОбластиДанных = Ложь;
Если (ОбработкаНовостейСлужебный.РазделениеВключено())
И (ОбработкаНовостейСлужебный.ДоступноИспользованиеРазделенныхДанных()) Тогда
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ ПЕРВЫЕ 1
| Рег.Значение КАК Значение
|ИЗ
| РегистрСведений.НастройкиНовостейОбластиДанных КАК Рег
|ГДЕ
| Рег.Настройка = &Настройка_СписокНовостей_ИнтервалАвтообновления
|";
Запрос.УстановитьПараметр("Настройка_СписокНовостей_ИнтервалАвтообновления", "СписокНовостей_ИнтервалАвтообновления");
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
Если Выборка.Следующий() Тогда
Настройки.СписокНовостей_ИнтервалАвтообновления = Выборка.Значение;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
Если Настройки.СписокНовостей_ИнтервалАвтообновления <> 0 Тогда
НастройкаПолученаИзОбластиДанных = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если НастройкаПолученаИзОбластиДанных = Ложь Тогда
Если (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанных") Тогда
ОбработкаЗагрузки(
"НастройкиПоказаНовостейНастроенныеАдминистратором",
КлючНастроек,
Настройки,
ОписаниеНастроек,
ИмяПользователяИБ);
ИначеЕсли (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанныхДляРедактирования") Тогда
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейНастроенныеАдминистратором" Тогда
Запрос = Новый Запрос;
Запрос.Текст = "
|// 1. Не должны попадать категории, которых нет в свойствах ленты новостей (табличная часть ДоступныеКатегорииНовостей).
|ВЫБРАТЬ
| Рег.ЛентаНовостей КАК ЛентаНовостей,
| Рег.КатегорияНовостей КАК КатегорияНовостей,
| Рег.ЗначениеКатегорииНовостей КАК ЗначениеКатегорииНовостей
|ИЗ
| РегистрСведений.ОтборыПоЛентамНовостейОбщие КАК Рег
| ЛЕВОЕ СОЕДИНЕНИЕ
| Справочник.ЛентыНовостей.ДоступныеКатегорииНовостей КАК Спр
| ПО
| Рег.ЛентаНовостей = Спр.Ссылка
| И Рег.КатегорияНовостей = Спр.КатегорияНовостей
|ГДЕ
| НЕ Спр.КатегорияНовостей ЕСТЬ NULL
| И Рег.КатегорияНовостей.ЗаполняетсяАвтоматически = ЛОЖЬ
| И Спр.КатегорияНовостей.ЗаполняетсяАвтоматически = ЛОЖЬ
| И
| (
| Рег.ЛентаНовостей = &ЛентаНовостей // По конкретной ленте новостей
| ИЛИ &ЛентаНовостей = Неопределено // или по всем лентам новостей
| )
|";
Если ТипЗнч(КлючНастроек) = Тип("СправочникСсылка.ЛентыНовостей") Тогда
Запрос.УстановитьПараметр("ЛентаНовостей", КлючНастроек);
Иначе
Запрос.УстановитьПараметр("ЛентаНовостей", Неопределено);
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Настройки = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.Прямой);
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейДляОбластиДанных" Тогда
ВернутьПустойСписок = Ложь;
Если (ОбработкаНовостейСлужебный.РазделениеВключено()) Тогда
Если (НЕ ОбработкаНовостейСлужебный.ДоступноИспользованиеРазделенныхДанных()) Тогда
ВернутьПустойСписок = Истина;
КонецЕсли;
КонецЕсли;
Если ВернутьПустойСписок = Истина Тогда
Настройки = Неопределено;
Иначе
Запрос = Новый Запрос;
Запрос.Текст = "
|// 1. Не должны попадать категории, которых нет в свойствах ленты новостей (табличная часть ДоступныеКатегорииНовостей).
|ВЫБРАТЬ
| Рег.ЛентаНовостей КАК ЛентаНовостей,
| Рег.КатегорияНовостей КАК КатегорияНовостей,
| Рег.ЗначениеКатегорииНовостей КАК ЗначениеКатегорииНовостей
|ИЗ
| РегистрСведений.ОтборыПоЛентамНовостейДляОбластиДанных КАК Рег
| ЛЕВОЕ СОЕДИНЕНИЕ
| Справочник.ЛентыНовостей.ДоступныеКатегорииНовостей КАК Спр
| ПО
| Рег.ЛентаНовостей = Спр.Ссылка
| И Рег.КатегорияНовостей = Спр.КатегорияНовостей
|ГДЕ
| НЕ Спр.КатегорияНовостей ЕСТЬ NULL
| И Рег.КатегорияНовостей.ЗаполняетсяАвтоматически = ЛОЖЬ
| И Спр.КатегорияНовостей.ЗаполняетсяАвтоматически = ЛОЖЬ
| И
| (
| Рег.ЛентаНовостей = &ЛентаНовостей // По конкретной ленте новостей
| ИЛИ &ЛентаНовостей = Неопределено // или по всем лентам новостей
| )
|";
Если ТипЗнч(КлючНастроек) = Тип("СправочникСсылка.ЛентыНовостей") Тогда
Запрос.УстановитьПараметр("ЛентаНовостей", КлючНастроек);
Иначе
Запрос.УстановитьПараметр("ЛентаНовостей", Неопределено);
КонецЕсли;
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Настройки = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.Прямой);
КонецЕсли;
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
ИначеЕсли КлючОбъекта = "НастройкиПоказаНовостей" Тогда
Если (ОбработкаНовостейСлужебный.РазделениеВключено())
И (ОбработкаНовостейСлужебный.СеансЗапущенБезРазделителей())
И (НЕ ОбработкаНовостейСлужебный.ДоступноИспользованиеРазделенныхДанных()) Тогда
Настройки = Новый Структура;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
Иначе
УстановитьПривилегированныйРежим(Истина);
Настройки = Новый Структура;
НайденныйПользователь = ОбработкаНовостейСлужебный.ПолучитьПользователяПоИмениПользователяИБ(лкИмяПользователяИБ);
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Рег.НастройкиПоказаНовостей КАК НастройкиПоказаНовостей
|ИЗ
| РегистрСведений.НастройкиПользователейБИП КАК Рег
|ГДЕ
| Рег.Пользователь = &Пользователь
|";
Запрос.УстановитьПараметр("Пользователь", НайденныйПользователь);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
Если Выборка.Следующий() Тогда
СохраненныеНастройкиПоказаНовостей = Выборка.НастройкиПоказаНовостей.Получить();
Если ТипЗнч(СохраненныеНастройкиПоказаНовостей) = ТипСтруктура Тогда
Настройки = СохраненныеНастройкиПоказаНовостей;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
ИначеЕсли КлючОбъекта = "ОтключенныеПанелиКонтекстныхНовостей" Тогда
Настройки = Новый Структура;
Если (ОбработкаНовостейСлужебный.РазделениеВключено())
И (ОбработкаНовостейСлужебный.СеансЗапущенБезРазделителей())
И (НЕ ОбработкаНовостейСлужебный.ДоступноИспользованиеРазделенныхДанных()) Тогда
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
Иначе
УстановитьПривилегированныйРежим(Истина);
ИмяМетаданных = "";
ИмяФормы = "";
МассивИзмерений = СтрРазделить(КлючНастроек, "|", Истина);
Если МассивИзмерений.Количество() >= 1 Тогда
ИмяМетаданных = МассивИзмерений[0];
КонецЕсли;
Если МассивИзмерений.Количество() >= 2 Тогда
ИмяФормы = МассивИзмерений[1];
КонецЕсли;
Если НЕ ПустаяСтрока(ИмяМетаданных) Тогда
НайденныйПользователь = ОбработкаНовостейСлужебный.ПолучитьПользователяПоИмениПользователяИБ(лкИмяПользователяИБ);
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Рег.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных,
| Рег.Метаданные КАК ИмяМетаданных,
| Рег.Форма КАК ИмяФормы,
| Рег.ДатаОтключения КАК ДатаОтключения,
| Рег.ДатаПоследнейНовости КАК ДатаПоследнейНовости
|ИЗ
| РегистрСведений.ОтключенныеПанелиКонтекстныхНовостей КАК Рег
|ГДЕ
| Рег.Пользователь = &Пользователь
| И Рег.Метаданные = &Метаданные
| И Рег.Форма = &Форма
|";
Запрос.УстановитьПараметр("Пользователь", НайденныйПользователь);
Запрос.УстановитьПараметр("Метаданные", ИмяМетаданных);
Запрос.УстановитьПараметр("Форма", ИмяФормы);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
Если Выборка.Следующий() Тогда
Настройки.Вставить("ОбластьДанных", Выборка.ОбластьДанных);
Настройки.Вставить("Метаданные", Выборка.ИмяМетаданных);
Настройки.Вставить("Форма", Выборка.ИмяФормы);
Настройки.Вставить("ДатаОтключения", Выборка.ДатаОтключения);
Настройки.Вставить("ДатаПоследнейНовости", Выборка.ДатаПоследнейНовости);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейПользовательские" Тогда
Если (ОбработкаНовостейСлужебный.РазделениеВключено())
И (ОбработкаНовостейСлужебный.СеансЗапущенБезРазделителей())
И (НЕ ОбработкаНовостейСлужебный.ДоступноИспользованиеРазделенныхДанных()) Тогда
Настройки = Неопределено;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
Иначе
Запрос = Новый Запрос;
Запрос.Текст = "
|// 1. Не должны попадать категории, которых нет в свойствах ленты новостей (табличная часть ДоступныеКатегорииНовостей);
|// 2. Не должны попадать категории, значение которых вычисляется автоматически (КатегорияНовостей.ЗаполняетсяАвтоматически = Истина);
|// 3. Если администратор запретил настройку пользователем (неважно - настроил он отбор по категории или нет),
|// то категория не должна попасть;
|// 4. Если администратор настроил отбор по категории и разрешил настройку пользователем,
|// то значение категории должно быть из списка, определенного администратором (общие или для области данных);
|// 5. Если администратор не настраивал отбор по этой категории и ленте новостей, то пользователь может вводить любые значения.
|
|// 1. Разрешенные категории (есть в табличной части ДоступныеКатегорииНовостей);
|// 2. Не должны попадать категории, значение которых вычисляется автоматически;
|// 3. Если администратор запретил отбор по этой категории, то она не должна попасть в список.
|ВЫБРАТЬ
| Рег.ЛентаНовостей КАК ЛентаНовостей,
| Рег.КатегорияНовостей КАК КатегорияНовостей,
| Рег.ЗначениеКатегорииНовостей КАК ЗначениеКатегорииНовостей,
| ЕСТЬNULL(Спр.РазрешеноНастраиватьПользователям, ЛОЖЬ) КАК РазрешеноНастраиватьПользователям
|ПОМЕСТИТЬ
| ВТ_РазрешенныеКатегорииИЗначения
|ИЗ
| РегистрСведений.ОтборыПоЛентамНовостейПользовательские КАК Рег
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| Справочник.ЛентыНовостей.ДоступныеКатегорииНовостей КАК Спр
| ПО
| Рег.ЛентаНовостей = Спр.Ссылка
| И Рег.КатегорияНовостей = Спр.КатегорияНовостей
|
|ГДЕ
| НЕ Спр.КатегорияНовостей ЕСТЬ NULL // Такая категория есть в ленте новостей
| И ЕСТЬNULL(Спр.РазрешеноНастраиватьПользователям, ЛОЖЬ) = ИСТИНА // Разрешено настраивать пользователю
| И Рег.Пользователь = &ТекущийПользователь
| И Рег.КатегорияНовостей.ЗаполняетсяАвтоматически = ЛОЖЬ // Значение отбора не заполняется автоматически
|
|ИНДЕКСИРОВАТЬ ПО
| ЛентаНовостей,
| КатегорияНовостей
|;
|
|// Итоговые количества настроенных отборов.
|ВЫБРАТЬ
| Спр.Ссылка КАК ЛентаНовостей,
| Спр.КатегорияНовостей КАК КатегорияНовостей,
| ЕСТЬNULL(КОЛИЧЕСТВО(РегОбщие.ЗначениеКатегорииНовостей), 0) КАК ВсегоОтборовОбщих,
| ЕСТЬNULL(КОЛИЧЕСТВО(РегДляОбластиДанных.ЗначениеКатегорииНовостей), 0) КАК ВсегоОтборовДляОбластиДанных
|ПОМЕСТИТЬ
| ВТ_КоличествоНастроенныхАдминистративныхОтборов
|ИЗ
| Справочник.ЛентыНовостей.ДоступныеКатегорииНовостей КАК Спр
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ОтборыПоЛентамНовостейОбщие КАК РегОбщие
| ПО
| РегОбщие.ЛентаНовостей = Спр.Ссылка
| И РегОбщие.КатегорияНовостей = Спр.КатегорияНовостей
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ОтборыПоЛентамНовостейДляОбластиДанных КАК РегДляОбластиДанных
| ПО
| РегДляОбластиДанных.ЛентаНовостей = Спр.Ссылка
| И РегДляОбластиДанных.КатегорияНовостей = Спр.КатегорияНовостей
|
|ГДЕ
| Спр.РазрешеноНастраиватьПользователям = ИСТИНА
| И Спр.КатегорияНовостей.ЗаполняетсяАвтоматически = ЛОЖЬ
|
|СГРУППИРОВАТЬ ПО
| Спр.Ссылка,
| Спр.КатегорияНовостей
|
|ИНДЕКСИРОВАТЬ ПО
| ЛентаНовостей,
| КатегорияНовостей
|;
|
|// 4.2. Если есть административные отборы (общие или для области данных), то отборы,
|// настроенные пользователем не должны использовать значения категорий, не настроенные администратором.
|// 4.3. Если есть отборы и общие и для области данных, то отборы по области данных должны быть жестче, чем общие,
|// т.е. для области данных не может быть значений, которых нет в общих отборах.
|// 5. Или администратор не настраивал отбор по этой категории.
|
|// Проверок, что настроенные пользователем отборы входят в административные отборы (общие и для области данных)
|// делать не надо, т.к. они будут делаться на этапе валидации.
|ВЫБРАТЬ
| Рег.ЛентаНовостей КАК ЛентаНовостей,
| Рег.КатегорияНовостей КАК КатегорияНовостей,
| Рег.ЗначениеКатегорииНовостей КАК ЗначениеКатегорииНовостей,
| Рег.РазрешеноНастраиватьПользователям КАК РазрешеноНастраиватьПользователям // Уже всегда = ИСТИНА
|ИЗ
| ВТ_РазрешенныеКатегорииИЗначения КАК Рег
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ВТ_КоличествоНастроенныхАдминистративныхОтборов КАК ВТ_Итоги
| ПО
| Рег.ЛентаНовостей = ВТ_Итоги.ЛентаНовостей
| И Рег.КатегорияНовостей = ВТ_Итоги.КатегорияНовостей
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ОтборыПоЛентамНовостейОбщие КАК РегОбщий
| ПО
| Рег.ЛентаНовостей = РегОбщий.ЛентаНовостей
| И Рег.КатегорияНовостей = РегОбщий.КатегорияНовостей
| И Рег.ЗначениеКатегорииНовостей = РегОбщий.ЗначениеКатегорииНовостей
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрСведений.ОтборыПоЛентамНовостейДляОбластиДанных КАК РегДляОбластиДанных
| ПО
| Рег.ЛентаНовостей = РегДляОбластиДанных.ЛентаНовостей
| И Рег.КатегорияНовостей = РегДляОбластиДанных.КатегорияНовостей
| И Рег.ЗначениеКатегорииНовостей = РегДляОбластиДанных.ЗначениеКатегорииНовостей
|
|ГДЕ
| // Если по этому значению есть общий отбор или отбор для области данных, но значение пользовательского
| // отбора не входит в административный отбор, то это ошибка.
| ВЫБОР
| КОГДА ((ВТ_Итоги.ВсегоОтборовОбщих = 0) И (ВТ_Итоги.ВсегоОтборовДляОбластиДанных = 0))
| ТОГДА ЛОЖЬ // Административные отборы вообще не настроены, допустимо любое значение пользовательского отбора.
| КОГДА ((ВТ_Итоги.ВсегоОтборовОбщих > 0) И (НЕ РегОбщий.ЗначениеКатегорииНовостей ЕСТЬ NULL))
| ТОГДА ЛОЖЬ // Значение пользовательского отбора входит в множество значений общего отбора.
| КОГДА ((ВТ_Итоги.ВсегоОтборовДляОбластиДанных > 0) И (НЕ РегДляОбластиДанных.ЗначениеКатегорииНовостей ЕСТЬ NULL))
| ТОГДА ЛОЖЬ // Значение пользовательского отбора входит в множество значений отбора для области данных.
| ИНАЧЕ ИСТИНА // Это ошибка
| КОНЕЦ = ЛОЖЬ
|";
Запрос.УстановитьПараметр("ТекущийПользователь", ОбработкаНовостейСлужебный.ПолучитьПользователяПоИмениПользователяИБ(лкИмяПользователяИБ));
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Настройки = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.Прямой);
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
КонецЕсли;
ИначеЕсли КлючОбъекта = "ОтключенныеЛентыНовостей" Тогда
Настройки = ОбработкаНовостей.ПолучитьОтключенныеЛентыНовостей(лкИмяПользователяИБ);
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
ИначеЕсли КлючОбъекта = "ДоступныеЛентыНовостей" Тогда
Если (ОбработкаНовостейСлужебный.РазделениеВключено())
И (ОбработкаНовостейСлужебный.СеансЗапущенБезРазделителей())
И (НЕ ОбработкаНовостейСлужебный.ДоступноИспользованиеРазделенныхДанных()) Тогда
Настройки = Неопределено;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
Иначе
МассивОтключенныхЛентНовостей = Загрузить("ОтключенныеЛентыНовостей", КлючНастроек, ОписаниеНастроек, ИмяПользователяИБ);
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| Спр.Ссылка КАК ЛентаНовостей
|ИЗ
| Справочник.ЛентыНовостей КАК Спр
|ГДЕ
| НЕ Спр.Ссылка В (&МассивОтключенныхЛентНовостей)
|";
Запрос.УстановитьПараметр("МассивОтключенныхЛентНовостей", МассивОтключенныхЛентНовостей);
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Настройки = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.Прямой).ВыгрузитьКолонку("ЛентаНовостей");
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
КонецЕсли;
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаВключена" Тогда
Настройки = ОбработкаНовостей.ПолучитьЛентыНовостейПодпискаВключена(лкИмяПользователяИБ);
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаВключенаПользователем" Тогда
Настройки = ОбработкаНовостей.ПолучитьЛентыНовостейПодпискаВключенаПользователем(лкИмяПользователяИБ);
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаОтключенаПользователем" Тогда
Настройки = ОбработкаНовостей.ПолучитьЛентыНовостейПодпискаОтключенаПользователем(лкИмяПользователяИБ);
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
ИначеЕсли КлючОбъекта = "ЛентыНовостейВсеНастройки" Тогда
Если (ТипЗнч(КлючНастроек) = ТипЛентаНовостей) И (НЕ КлючНастроек.Пустая()) Тогда
ОтборПоЛентеНовостей = КлючНастроек;
Иначе
ОтборПоЛентеНовостей = Неопределено;
КонецЕсли;
Настройки = ОбработкаНовостей.ПолучитьНастройкиЛентНовостей(лкИмяПользователяИБ, ОтборПоЛентеНовостей);
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
ИначеЕсли КлючОбъекта = "ВидимостьЛентНовостей" Тогда
Если (ОбработкаНовостейСлужебный.РазделениеВключено())
И (ОбработкаНовостейСлужебный.СеансЗапущенБезРазделителей())
И (НЕ ОбработкаНовостейСлужебный.ДоступноИспользованиеРазделенныхДанных()) Тогда
Настройки = Неопределено;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
Иначе
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = "
|// Исключения видимости.
|ВЫБРАТЬ
| Ссылка КАК ЛентаНовостей,
| ИСТИНА КАК ЕстьИсключение
|ПОМЕСТИТЬ
| ВТ_ИсключенияВидимости
|ИЗ
| Справочник.ЛентыНовостей.ИсключенияВидимости КАК Спр
|ГДЕ
| Спр.Пользователь = &ТекущийПользователь
|ИНДЕКСИРОВАТЬ ПО
| ЛентаНовостей
|;
|
|// Запрос к отключенным для области данных лентам новостей (за исключением обязательных).
|ВЫБРАТЬ
| Рег.ЛентаНовостей КАК ЛентаНовостей,
| ЛОЖЬ КАК Видимость
|ПОМЕСТИТЬ
| ВТ_ОтключенныеДляОбластиДанныхЛентыНовостей
|ИЗ
| РегистрСведений.ОтключенныеЛентыНовостейДляОбластиДанных КАК Рег
|ГДЕ
| Рег.ЛентаНовостей.ОбязательныйКанал <> ИСТИНА // Лента не обязательна (ее можно отключить)
|;
|
|// Основной запрос.
|ВЫБРАТЬ
| Спр.Ссылка КАК ЛентаНовостей,
| Спр.ПометкаУдаления КАК ПометкаУдаления,
| Спр.ОбязательныйКанал КАК ОбязательныйКанал,
| ВЫБОР
| КОГДА ЕСТЬNULL(ВТ_ИсключенияВидимости.ЕстьИсключение, ЛОЖЬ) = ИСТИНА ТОГДА // Это - исключение
| (НЕ Спр.ВидимостьПоУмолчанию)
| И (НЕ Спр.ПометкаУдаления)
| И (ЕСТЬNULL(ВТ_ОтключенныеДляОбластиДанныхЛентыНовостей.Видимость, ИСТИНА))
| ИНАЧЕ
| (Спр.ВидимостьПоУмолчанию)
| И (НЕ Спр.ПометкаУдаления)
| И (ЕСТЬNULL(ВТ_ОтключенныеДляОбластиДанныхЛентыНовостей.Видимость, ИСТИНА))
| КОНЕЦ КАК Видимость,
| Спр.ВидимостьПоУмолчанию КАК ВидимостьПоУмолчанию
|ИЗ
| Справочник.ЛентыНовостей КАК Спр
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ВТ_ИсключенияВидимости
| ПО
| Спр.Ссылка = ВТ_ИсключенияВидимости.ЛентаНовостей
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| ВТ_ОтключенныеДляОбластиДанныхЛентыНовостей
| ПО
| Спр.Ссылка = ВТ_ОтключенныеДляОбластиДанныхЛентыНовостей.ЛентаНовостей
|
|";
Запрос.УстановитьПараметр("ТекущийПользователь", ОбработкаНовостейСлужебный.ПолучитьПользователяПоИмениПользователяИБ(лкИмяПользователяИБ));
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Настройки = РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.Прямой);
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПолученияОписания(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователяИБ)
Если НЕ ПроверитьПраваДоступа("ОбработкаПолученияОписания") Тогда
Возврат;
КонецЕсли;
Если (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистратором")
ИЛИ (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанных")
ИЛИ (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанныхДляРедактирования")
ИЛИ (КлючОбъекта = "НастройкиПолученияНовостей")
ИЛИ (КлючОбъекта = "НастройкиАвтоудаленияНовостей")
ИЛИ (КлючОбъекта = "СистемнаяИнформация_ВерсияПриложения")
ИЛИ (КлючОбъекта = "СостояниеПодсистемы")
ИЛИ (КлючОбъекта = "НастройкиЖурналаРегистрации") Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейНастроенныеАдминистратором" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейДляОбластиДанных" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "НастройкиПоказаНовостей" Тогда
ИначеЕсли КлючОбъекта = "ОтключенныеПанелиКонтекстныхНовостей" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейПользовательские" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "ОтключенныеЛентыНовостей" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "ДоступныеЛентыНовостей" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаВключена" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаВключенаПользователем" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаОтключенаПользователем" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "ЛентыНовостейВсеНастройки" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
ИначеЕсли КлючОбъекта = "ВидимостьЛентНовостей" Тогда
ОписаниеНастроек = Новый ОписаниеНастроек;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаСохранения(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователяИБ)
Если НЕ ПроверитьПраваДоступа("ОбработкаСохранения") Тогда
Возврат;
КонецЕсли;
ТипСтруктура = Тип("Структура");
ТипХранилищеЗначения = Тип("ХранилищеЗначения");
Если ПустаяСтрока(ИмяПользователяИБ) Тогда
лкИмяПользователяИБ = ОбработкаНовостейСлужебный.ПолучитьИмяПользователяИБ(Неопределено);
Иначе
лкИмяПользователяИБ = ИмяПользователяИБ;
КонецЕсли;
Если (КлючОбъекта = "НастройкиПолученияНовостей")
ИЛИ (КлючОбъекта = "НастройкиАвтоудаленияНовостей")
ИЛИ (КлючОбъекта = "СистемнаяИнформация_ВерсияПриложения")
ИЛИ (КлючОбъекта = "СостояниеПодсистемы")
ИЛИ (КлючОбъекта = "НастройкиЖурналаРегистрации") Тогда
УстановитьПривилегированныйРежим(Истина);
ЗначениеКонстанты = Неопределено;
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| НастройкиНовостей.Значение КАК Значение
|ИЗ
| Константа.НастройкиНовостей КАК НастройкиНовостей
|";
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
Если Выборка.Следующий() Тогда
ЗначениеКонстанты = Выборка.Значение;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(ЗначениеКонстанты) = ТипХранилищеЗначения Тогда
лкХранилищеНастроекНовостей = ЗначениеКонстанты.Получить();
Иначе
лкХранилищеНастроекНовостей = Неопределено;
КонецЕсли;
Если ТипЗнч(лкХранилищеНастроекНовостей) <> ТипСтруктура Тогда
лкХранилищеНастроекНовостей = Новый Структура;
КонецЕсли;
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
лкХранилищеНастроекНовостей.Вставить(КлючОбъекта, Настройки);
Попытка
Константы.НастройкиНовостей.Установить(Новый ХранилищеЗначения(лкХранилищеНастроекНовостей));
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Не удалось записать константу НастройкиНовостей.
|Возможно, в этот момент происходит запись в фоновом задании или в другом сеансе.
|КлючОбъекта: %1
|Настройки:
|%2
|Номер сеанса: %3
|Номер соединения: %4
|Подробности:
|%5'"),
КлючОбъекта,
ОбработкаНовостейКлиентСервер.ПредставлениеЗначения(Настройки, "=", Символы.ПС),
НомерСеансаИнформационнойБазы(),
НомерСоединенияИнформационнойБазы(),
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Предупреждение,
,
,
ТекстСообщения,
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
КонецПопытки;
УстановитьПривилегированныйРежим(Ложь);
ИначеЕсли (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистратором") Тогда
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
УстановитьПривилегированныйРежим(Истина);
ЗначениеКонстанты = Неопределено;
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ
| НастройкиНовостей.Значение КАК Значение
|ИЗ
| Константа.НастройкиНовостей КАК НастройкиНовостей
|";
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.Прямой);
Если Выборка.Следующий() Тогда
ЗначениеКонстанты = Выборка.Значение;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(ЗначениеКонстанты) = ТипХранилищеЗначения Тогда
лкХранилищеНастроекНовостей = ЗначениеКонстанты.Получить();
Иначе
лкХранилищеНастроекНовостей = Неопределено;
КонецЕсли;
Если ТипЗнч(лкХранилищеНастроекНовостей) <> ТипСтруктура Тогда
лкХранилищеНастроекНовостей = Новый Структура;
КонецЕсли;
лкХранилищеНастроекНовостей.Вставить(КлючОбъекта, Настройки);
Попытка
Константы.НастройкиНовостей.Установить(Новый ХранилищеЗначения(лкХранилищеНастроекНовостей));
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Не удалось записать константу НастройкиНовостей.
|Возможно, в этот момент происходит запись в фоновом задании или в другом сеансе.
|КлючОбъекта: %1
|Настройки:
|%2
|Номер сеанса: %3
|Номер соединения: %4
|Подробности:
|%5'"),
КлючОбъекта,
ОбработкаНовостейКлиентСервер.ПредставлениеЗначения(Настройки, "=", Символы.ПС),
НомерСеансаИнформационнойБазы(),
НомерСоединенияИнформационнойБазы(),
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке));
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Предупреждение,
,
,
ТекстСообщения,
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
КонецПопытки;
УстановитьПривилегированныйРежим(Ложь);
ИначеЕсли (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанных")
ИЛИ (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанныхДляРедактирования") Тогда
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
УстановитьПривилегированныйРежим(Истина);
Запись = РегистрыСведений.НастройкиНовостейОбластиДанных.СоздатьМенеджерЗаписи();
Запись.Настройка = "СписокНовостей_ИнтервалАвтообновления";
Если Настройки.СписокНовостей_ИнтервалАвтообновления = 0 Тогда
Запись.Удалить();
Иначе
Запись.Значение = Настройки.СписокНовостей_ИнтервалАвтообновления;
Запись.Записать(Истина);
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейНастроенныеАдминистратором" Тогда
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
НаборЗаписей = РегистрыСведений.ОтборыПоЛентамНовостейОбщие.СоздатьНаборЗаписей();
Если ТипЗнч(КлючНастроек) = Тип("СправочникСсылка.ЛентыНовостей") Тогда
НаборЗаписей.Отбор["ЛентаНовостей"].Установить(КлючНастроек, Истина);
Иначе
НаборЗаписей.Отбор["ЛентаНовостей"].Установить(, Ложь);
КонецЕсли;
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Загрузить(Настройки);
Если НаборЗаписей.ПроверитьЗаполнение() Тогда
НаборЗаписей.Записать(Истина);
Иначе
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
,
,
НСтр("ru='Ошибка при проверке набора записей регистра ОтборыПоЛентамНовостейОбщие (ключ объекта ОтборыПоЛентамНовостейНастроенныеАдминистратором) - возможно, не заполнены какие-то поля.'"),
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
КонецЕсли;
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейДляОбластиДанных" Тогда
ЗаписыватьДанные = Истина;
Если (ОбработкаНовостейСлужебный.РазделениеВключено()) Тогда
Если (НЕ ОбработкаНовостейСлужебный.ДоступноИспользованиеРазделенныхДанных()) Тогда
ЗаписыватьДанные = Ложь;
КонецЕсли;
КонецЕсли;
Если ЗаписыватьДанные = Истина Тогда
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
НаборЗаписей = РегистрыСведений.ОтборыПоЛентамНовостейДляОбластиДанных.СоздатьНаборЗаписей();
Если ТипЗнч(КлючНастроек) = Тип("СправочникСсылка.ЛентыНовостей") Тогда
НаборЗаписей.Отбор["ЛентаНовостей"].Установить(КлючНастроек, Истина);
Иначе
НаборЗаписей.Отбор["ЛентаНовостей"].Установить(, Ложь);
КонецЕсли;
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Загрузить(Настройки);
Если НаборЗаписей.ПроверитьЗаполнение() Тогда
НаборЗаписей.Записать(Истина);
Иначе
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
,
,
НСтр("ru='Ошибка при проверке набора записей регистра ОтборыПоЛентамНовостейДляОбластиДанных (ключ объекта ОтборыПоЛентамНовостейДляОбластиДанных) - возможно, не заполнены какие-то поля.'"),
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
КонецЕсли;
КонецЕсли;
ИначеЕсли КлючОбъекта = "НастройкиПоказаНовостей" Тогда
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
НайденныйПользователь = ОбработкаНовостейСлужебный.ПолучитьПользователяПоИмениПользователяИБ(лкИмяПользователяИБ);
Запись = РегистрыСведений.НастройкиПользователейБИП.СоздатьМенеджерЗаписи();
Запись.Пользователь = НайденныйПользователь;
Запись.Прочитать();
Запись.Пользователь = НайденныйПользователь;
Запись.НастройкиПоказаНовостей = Новый ХранилищеЗначения(Настройки, Новый СжатиеДанных(0));
Запись.Записать(Истина);
ИначеЕсли КлючОбъекта = "ОтключенныеПанелиКонтекстныхНовостей" Тогда
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
ИмяМетаданных = "";
ИмяФормы = "";
МассивИзмерений = СтрРазделить(КлючНастроек, "|", Истина);
Если МассивИзмерений.Количество() >= 1 Тогда
ИмяМетаданных = МассивИзмерений[0];
КонецЕсли;
Если МассивИзмерений.Количество() >= 2 Тогда
ИмяФормы = МассивИзмерений[1];
КонецЕсли;
Если НЕ ПустаяСтрока(ИмяМетаданных) Тогда
НайденныйПользователь = ОбработкаНовостейСлужебный.ПолучитьПользователяПоИмениПользователяИБ(лкИмяПользователяИБ);
Запись = РегистрыСведений.ОтключенныеПанелиКонтекстныхНовостей.СоздатьМенеджерЗаписи();
Запись.Пользователь = НайденныйПользователь;
Запись.Метаданные = ИмяМетаданных;
Запись.Форма = ИмяФормы;
Запись.ДатаОтключения = Настройки.ДатаОтключения;
Запись.МесяцОтключения = НачалоМесяца(Настройки.ДатаОтключения);
Запись.ДатаПоследнейНовости = Настройки.ДатаПоследнейНовости;
Запись.Записать(Истина);
КонецЕсли;
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейПользовательские" Тогда
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
НайденныйПользователь = ОбработкаНовостейСлужебный.ПолучитьПользователяПоИмениПользователяИБ(лкИмяПользователяИБ);
НаборЗаписей = РегистрыСведений.ОтборыПоЛентамНовостейПользовательские.СоздатьНаборЗаписей();
НаборЗаписей.Отбор["Пользователь"].Установить(НайденныйПользователь, Истина);
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Загрузить(Настройки);
Для Каждого ТекущаяЗапись Из НаборЗаписей Цикл
ТекущаяЗапись.Пользователь = НайденныйПользователь;
КонецЦикла;
Если НаборЗаписей.ПроверитьЗаполнение() Тогда
НаборЗаписей.Записать(Истина);
Иначе
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
,
,
НСтр("ru='Ошибка при проверке набора записей регистра ОтборыПоЛентамНовостейПользовательские (ключ объекта ОтборыПоЛентамНовостейПользовательские) - возможно, не заполнены какие-то поля.'"),
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
КонецЕсли;
ИначеЕсли КлючОбъекта = "ОтключенныеЛентыНовостей" Тогда
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, "");
НайденныйПользователь = ОбработкаНовостейСлужебный.ПолучитьПользователяПоИмениПользователяИБ(лкИмяПользователяИБ);
НаборЗаписей = РегистрыСведений.ОтключенныеЛентыНовостей.СоздатьНаборЗаписей();
НаборЗаписей.Отбор["Пользователь"].Установить(НайденныйПользователь, Истина);
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
Для Каждого ТекущаяЛентаНовостей Из Настройки Цикл
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Пользователь = НайденныйПользователь;
НоваяЗапись.ЛентаНовостей = ТекущаяЛентаНовостей;
КонецЦикла;
Если НаборЗаписей.ПроверитьЗаполнение() Тогда
НаборЗаписей.Записать(Истина);
Иначе
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
,
,
НСтр("ru='Ошибка при проверке набора записей регистра ОтключенныеЛентыНовостей (ключ объекта ОтключенныеЛентыНовостей) - возможно, не заполнены какие-то поля.'"),
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
КонецЕсли;
ИначеЕсли КлючОбъекта = "ДоступныеЛентыНовостей" Тогда
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
,
,
НСтр("ru='Ошибка при записи настроек новостей. Настройки для ключа ДоступныеЛентыНовостей не должны записываться. Записывать можно только ОтключенныеЛентыНовостей.'"),
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаВключена" Тогда
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
,
,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Ошибка при записи настроек новостей. Настройки для ключа [%1] не должны записываться через ХранилищеНастроек.НастройкиНовостей.'"),
КлючОбъекта),
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаВключенаПользователем" Тогда
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
,
,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Ошибка при записи настроек новостей. Настройки для ключа [%1] не должны записываться через ХранилищеНастроек.НастройкиНовостей.'"),
КлючОбъекта),
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаОтключенаПользователем" Тогда
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
,
,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Ошибка при записи настроек новостей. Настройки для ключа [%1] не должны записываться через ХранилищеНастроек.НастройкиНовостей.'"),
КлючОбъекта),
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
ИначеЕсли КлючОбъекта = "ЛентыНовостейВсеНастройки" Тогда
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
НСтр("ru='Новости. Хранилище настроек новостей. ОбработкаСохранения. Ошибка'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,
,
,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Ошибка при записи настроек новостей. Настройки для ключа [%1] не должны записываться через ХранилищеНастроек.НастройкиНовостей.'"),
КлючОбъекта),
ОбработкаНовостейСлужебный.ВестиПодробныйЖурналРегистрации());
ИначеЕсли КлючОбъекта = "ВидимостьЛентНовостей" Тогда
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаУстановкиОписания(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователяИБ)
Если НЕ ПроверитьПраваДоступа("ОбработкаУстановкиОписания") Тогда
Возврат;
КонецЕсли;
Если (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистратором")
ИЛИ (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанных")
ИЛИ (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанныхДляРедактирования")
ИЛИ (КлючОбъекта = "НастройкиПолученияНовостей")
ИЛИ (КлючОбъекта = "НастройкиАвтоудаленияНовостей")
ИЛИ (КлючОбъекта = "СистемнаяИнформация_ВерсияПриложения")
ИЛИ (КлючОбъекта = "СостояниеПодсистемы")
ИЛИ (КлючОбъекта = "НастройкиЖурналаРегистрации") Тогда
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейНастроенныеАдминистратором" Тогда
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейДляОбластиДанных" Тогда
ИначеЕсли КлючОбъекта = "НастройкиПоказаНовостей" Тогда
ИначеЕсли КлючОбъекта = "ОтключенныеПанелиКонтекстныхНовостей" Тогда
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейПользовательские" Тогда
ИначеЕсли КлючОбъекта = "ОтключенныеЛентыНовостей" Тогда
ИначеЕсли КлючОбъекта = "ДоступныеЛентыНовостей" Тогда
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаВключена" Тогда
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаВключенаПользователем" Тогда
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаОтключенаПользователем" Тогда
ИначеЕсли КлючОбъекта = "ЛентыНовостейВсеНастройки" Тогда
ИначеЕсли КлючОбъекта = "ВидимостьЛентНовостей" Тогда
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек) Экспорт
ТипСтруктура = Тип("Структура");
ТипЧисло = Тип("Число");
ТипБулево = Тип("Булево");
ТипСтрока = Тип("Строка");
ТипДата = Тип("Дата");
ТипСписокЗначений = Тип("СписокЗначений");
ТипМассив = Тип("Массив");
ТипЛентаНовостей = Тип("СправочникСсылка.ЛентыНовостей");
ТипПользовательСистемыВзаимодействия = Тип("ПользовательСистемыВзаимодействия");
Если (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистратором") Тогда
Результат = Новый Структура("
|СписокНовостей_ИнтервалАвтообновления",
360);
Если ТипЗнч(Настройки) = ТипСтруктура Тогда
ЗаполнитьЗначенияСвойств(Результат, Настройки);
Если ТипЗнч(Результат.СписокНовостей_ИнтервалАвтообновления) = ТипЧисло
И (Результат.СписокНовостей_ИнтервалАвтообновления >= 1)
И (Результат.СписокНовостей_ИнтервалАвтообновления <= 999999) Тогда
Иначе
Результат.СписокНовостей_ИнтервалАвтообновления = 360;
КонецЕсли;
КонецЕсли;
ИначеЕсли (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанных")
ИЛИ (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанныхДляРедактирования") Тогда
Если (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанных") Тогда
Результат = Новый Структура("
|СписокНовостей_ИнтервалАвтообновления",
360);
ИначеЕсли (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанныхДляРедактирования") Тогда
Результат = Новый Структура("
|СписокНовостей_ИнтервалАвтообновления",
0);
КонецЕсли;
Если ТипЗнч(Настройки) = ТипСтруктура Тогда
ЗаполнитьЗначенияСвойств(Результат, Настройки);
Если (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанных") Тогда
Если ТипЗнч(Результат.СписокНовостей_ИнтервалАвтообновления) = ТипЧисло
И (Результат.СписокНовостей_ИнтервалАвтообновления >= 1)
И (Результат.СписокНовостей_ИнтервалАвтообновления <= 999999) Тогда
Иначе
Результат.СписокНовостей_ИнтервалАвтообновления = 360;
КонецЕсли;
ИначеЕсли (КлючОбъекта = "НастройкиПоказаНовостейНастроенныеАдминистраторомДляОбластиДанныхДляРедактирования") Тогда
Если ТипЗнч(Результат.СписокНовостей_ИнтервалАвтообновления) = ТипЧисло
И (
(Результат.СписокНовостей_ИнтервалАвтообновления = 0)
ИЛИ (Результат.СписокНовостей_ИнтервалАвтообновления = 60)
ИЛИ (Результат.СписокНовостей_ИнтервалАвтообновления = 180)
ИЛИ (Результат.СписокНовостей_ИнтервалАвтообновления = 360)) Тогда
Иначе
Результат.СписокНовостей_ИнтервалАвтообновления = 0;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ИначеЕсли КлючОбъекта = "НастройкиПоказаНовостей" Тогда
ПустойСписокЗначений = Новый СписокЗначений;
Результат = Новый Структура;
Результат.Вставить("ОтборНовостей_ТолькоАктивные" , Истина);
Результат.Вставить("Форма_РазмещениеПанелей" , "Текст новости справа от списка новостей");
Результат.Вставить("ОтображаемыеНовости_Вариант" , "Все");
Результат.Вставить("ОтображаемыеНовости_Количество" , 25);
Результат.Вставить("ОтображаемыеНовости_ПериодЧасов", 168);
Результат.Вставить("СписокРаскрытыхПапок" , ПустойСписокЗначений);
Если ТипЗнч(Настройки) = ТипСтруктура Тогда
ЗаполнитьЗначенияСвойств(Результат, Настройки);
Если ТипЗнч(Результат.ОтборНовостей_ТолькоАктивные) <> ТипБулево Тогда
Результат.ОтборНовостей_ТолькоАктивные = Истина;
КонецЕсли;
Если ТипЗнч(Результат.ОтображаемыеНовости_Вариант) <> ТипСтрока
ИЛИ (
ВРег(Результат.ОтображаемыеНовости_Вариант) <> ВРег("Все")
И ВРег(Результат.ОтображаемыеНовости_Вариант) <> ВРег("Количество")
И ВРег(Результат.ОтображаемыеНовости_Вариант) <> ВРег("Период")) Тогда
Результат.ОтображаемыеНовости_Вариант = "Все";
КонецЕсли;
Если ТипЗнч(Результат.ОтображаемыеНовости_Количество) <> ТипЧисло
ИЛИ Результат.ОтображаемыеНовости_Количество < 1
ИЛИ Результат.ОтображаемыеНовости_Количество > 9999 Тогда
Результат.ОтображаемыеНовости_Количество = 25;
КонецЕсли;
Если ТипЗнч(Результат.ОтображаемыеНовости_ПериодЧасов) <> ТипЧисло
ИЛИ Результат.ОтображаемыеНовости_ПериодЧасов < 1
ИЛИ Результат.ОтображаемыеНовости_ПериодЧасов > 999999 Тогда
Результат.ОтображаемыеНовости_ПериодЧасов = 168;
КонецЕсли;
Если ТипЗнч(Результат.Форма_РазмещениеПанелей) <> ТипСтрока
ИЛИ (
ВРег(Результат.Форма_РазмещениеПанелей) <> ВРег("Текст новости справа от списка новостей")
И ВРег(Результат.Форма_РазмещениеПанелей) <> ВРег("Текст новости под списком новостей")
И ВРег(Результат.Форма_РазмещениеПанелей) <> ВРег("Текст новости не отображается")
И ВРег(Результат.Форма_РазмещениеПанелей) <> ВРег("Текст новости не отображается, есть предпросмотр")) Тогда
Результат.Форма_РазмещениеПанелей = "Текст новости справа от списка новостей";
КонецЕсли;
Если ТипЗнч(Результат.СписокРаскрытыхПапок) <> ТипСписокЗначений Тогда
Результат.СписокРаскрытыхПапок = Новый СписокЗначений;
Иначе
МаксимальныйВариантОтбора = 9;
ПравильныйСписок = Новый СписокЗначений;
Для Каждого ТекущийЭлемент Из Результат.СписокРаскрытыхПапок Цикл
Если ТипЗнч(ТекущийЭлемент.Значение) = ТипСтруктура Тогда
ТекущийЭлементЗначениеЭталон = Новый Структура;
ТекущийЭлементЗначениеЭталон.Вставить("ВариантОтбора" , Неопределено);
ТекущийЭлементЗначениеЭталон.Вставить("ЗначениеОтбора", Неопределено);
ЗаполнитьЗначенияСвойств(ТекущийЭлементЗначениеЭталон, ТекущийЭлемент.Значение);
ЭтоПравильныйЭлемент = Истина;
Если НЕ ((ТипЗнч(ТекущийЭлементЗначениеЭталон.ВариантОтбора) = ТипЧисло)
И ТекущийЭлементЗначениеЭталон.ВариантОтбора >= 0
И ТекущийЭлементЗначениеЭталон.ВариантОтбора <= МаксимальныйВариантОтбора) Тогда
ЭтоПравильныйЭлемент = Ложь;
КонецЕсли;
Если (ТипЗнч(ТекущийЭлементЗначениеЭталон.ЗначениеОтбора) <> ТипСтрока
И ТипЗнч(ТекущийЭлементЗначениеЭталон.ЗначениеОтбора) <> ТипЛентаНовостей
И ТекущийЭлементЗначениеЭталон.ЗначениеОтбора <> Неопределено) Тогда
ЭтоПравильныйЭлемент = Ложь;
КонецЕсли;
Если ЭтоПравильныйЭлемент = Истина Тогда
ПравильныйСписок.Добавить(ТекущийЭлемент.Значение);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Результат.СписокРаскрытыхПапок = ПравильныйСписок;
КонецЕсли;
КонецЕсли;
Если (ОбработкаНовостейСлужебный.РазделениеВключено()) Тогда
Если (ОбработкаНовостейСлужебный.СеансЗапущенБезРазделителей()) Тогда
Результат.ОтборНовостей_ТолькоАктивные = Ложь;
КонецЕсли;
КонецЕсли;
ИначеЕсли КлючОбъекта = "ОтключенныеПанелиКонтекстныхНовостей" Тогда
НастройкиЭталон = Новый Структура;
НастройкиЭталон.Вставить("ОбластьДанных" , 0);
НастройкиЭталон.Вставить("Метаданные" , "");
НастройкиЭталон.Вставить("Форма" , "");
НастройкиЭталон.Вставить("ДатаОтключения" , '00010101');
НастройкиЭталон.Вставить("ДатаПоследнейНовости", '00010101');
ИмяМетаданных = "";
ИмяФормы = "";
МассивИзмерений = СтрРазделить(КлючНастроек, "|", Истина);
Если МассивИзмерений.Количество() >= 1 Тогда
ИмяМетаданных = МассивИзмерений[0];
КонецЕсли;
Если МассивИзмерений.Количество() >= 2 Тогда
ИмяФормы = МассивИзмерений[1];
КонецЕсли;
Если ТипЗнч(Настройки) = ТипСтруктура Тогда
ЗаполнитьЗначенияСвойств(НастройкиЭталон, Настройки);
Если ТипЗнч(НастройкиЭталон.ДатаОтключения) <> ТипДата Тогда
НастройкиЭталон.ДатаОтключения = '00010101';
КонецЕсли;
Если ТипЗнч(НастройкиЭталон.ДатаПоследнейНовости) <> ТипДата Тогда
НастройкиЭталон.ДатаПоследнейНовости = '00010101';
КонецЕсли;
Если НЕ ПустаяСтрока(ИмяМетаданных) Тогда
НастройкиЭталон.Метаданные = ИмяМетаданных;
КонецЕсли;
Если НЕ ПустаяСтрока(ИмяФормы) Тогда
НастройкиЭталон.Форма = ИмяФормы;
КонецЕсли;
КонецЕсли;
Настройки = НастройкиЭталон;
ИначеЕсли КлючОбъекта = "НастройкиПолученияНовостей" Тогда
Результат = Новый Структура;
Результат.Вставить("ВебСервисыТаймаутСоединенияСекунд" , 30);
Результат.Вставить("ВебСервисыКоличествоПопытокСоединения" , 1);
Результат.Вставить("HTTPСоединениеТаймаутСоединенияСекунд" , 30);
Результат.Вставить("HTTPСоединениеКоличествоПопытокСоединения" , 1);
Результат.Вставить("HTTPСоединениеКоличествоПопытокПолученияФайла", 1);
Если ТипЗнч(Настройки) = ТипСтруктура Тогда
ЗаполнитьЗначенияСвойств(Результат, Настройки);
Если ТипЗнч(Результат.ВебСервисыТаймаутСоединенияСекунд) <> ТипЧисло
ИЛИ Результат.ВебСервисыТаймаутСоединенияСекунд < 1
ИЛИ Результат.ВебСервисыТаймаутСоединенияСекунд > 999 Тогда
Результат.ВебСервисыТаймаутСоединенияСекунд = 30;
КонецЕсли;
Если ТипЗнч(Результат.ВебСервисыКоличествоПопытокСоединения) <> ТипЧисло
ИЛИ Результат.ВебСервисыКоличествоПопытокСоединения < 1
ИЛИ Результат.ВебСервисыКоличествоПопытокСоединения > 5 Тогда
Результат.ВебСервисыКоличествоПопытокСоединения = 1;
КонецЕсли;
Если ТипЗнч(Результат.HTTPСоединениеТаймаутСоединенияСекунд) <> ТипЧисло
ИЛИ Результат.HTTPСоединениеТаймаутСоединенияСекунд < 1
ИЛИ Результат.HTTPСоединениеТаймаутСоединенияСекунд > 999 Тогда
Результат.HTTPСоединениеТаймаутСоединенияСекунд = 30;
КонецЕсли;
Если ТипЗнч(Результат.HTTPСоединениеКоличествоПопытокСоединения) <> ТипЧисло
ИЛИ Результат.HTTPСоединениеКоличествоПопытокСоединения < 1
ИЛИ Результат.HTTPСоединениеКоличествоПопытокСоединения > 5 Тогда
Результат.HTTPСоединениеКоличествоПопытокСоединения = 1;
КонецЕсли;
Если ТипЗнч(Результат.HTTPСоединениеКоличествоПопытокПолученияФайла) <> ТипЧисло
ИЛИ Результат.HTTPСоединениеКоличествоПопытокПолученияФайла < 1
ИЛИ Результат.HTTPСоединениеКоличествоПопытокПолученияФайла > 5 Тогда
Результат.HTTPСоединениеКоличествоПопытокПолученияФайла = 1;
КонецЕсли;
КонецЕсли;
ИначеЕсли КлючОбъекта = "НастройкиАвтоудаленияНовостей" Тогда
Результат = Новый Структура;
Результат.Вставить("АвтоудалениеНовостей_Актуальные_Месяцев" , 0);
Результат.Вставить("АвтоудалениеНовостей_Неактуальные_Дней" , 30);
Результат.Вставить("АвтоудалениеНовостей_ПомеченныеНаУдаление_Дней", 30);
Результат.Вставить("АвтоудалениеНовостей_СтараяВерсия_Дней" , 30);
Если ТипЗнч(Настройки) = ТипСтруктура Тогда
ЗаполнитьЗначенияСвойств(Результат, Настройки);
Если ТипЗнч(Результат.АвтоудалениеНовостей_Актуальные_Месяцев) <> ТипЧисло
ИЛИ Результат.АвтоудалениеНовостей_Актуальные_Месяцев < 1
ИЛИ Результат.АвтоудалениеНовостей_Актуальные_Месяцев > 999 Тогда
Результат.АвтоудалениеНовостей_Актуальные_Месяцев = 0;
КонецЕсли;
Если ТипЗнч(Результат.АвтоудалениеНовостей_Неактуальные_Дней) <> ТипЧисло
ИЛИ Результат.АвтоудалениеНовостей_Неактуальные_Дней < 1
ИЛИ Результат.АвтоудалениеНовостей_Неактуальные_Дней > 99 Тогда
Результат.АвтоудалениеНовостей_Неактуальные_Дней = 10;
КонецЕсли;
Если ТипЗнч(Результат.АвтоудалениеНовостей_ПомеченныеНаУдаление_Дней) <> ТипЧисло
ИЛИ Результат.АвтоудалениеНовостей_ПомеченныеНаУдаление_Дней < 1
ИЛИ Результат.АвтоудалениеНовостей_ПомеченныеНаУдаление_Дней > 99 Тогда
Результат.АвтоудалениеНовостей_ПомеченныеНаУдаление_Дней = 10;
КонецЕсли;
Если ТипЗнч(Результат.АвтоудалениеНовостей_СтараяВерсия_Дней) <> ТипЧисло
ИЛИ Результат.АвтоудалениеНовостей_СтараяВерсия_Дней < 1
ИЛИ Результат.АвтоудалениеНовостей_СтараяВерсия_Дней > 99 Тогда
Результат.АвтоудалениеНовостей_СтараяВерсия_Дней = 10;
КонецЕсли;
КонецЕсли;
ИначеЕсли КлючОбъекта = "ОтборыПоЛентамНовостейПользовательские"
ИЛИ КлючОбъекта = "ОтборыПоЛентамНовостейНастроенныеАдминистратором"
ИЛИ КлючОбъекта = "ОтборыПоЛентамНовостейДляОбластиДанных" Тогда
ПравильнаяТаблица = Новый ТаблицаЗначений;
ПравильнаяТаблица.Колонки.Добавить("ЛентаНовостей", Новый ОписаниеТипов("СправочникСсылка.ЛентыНовостей"));
ПравильнаяТаблица.Колонки.Добавить("КатегорияНовостей", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.КатегорииНовостей"));
ПравильнаяТаблица.Колонки.Добавить("ЗначениеКатегорииНовостей");
Запрос = Новый Запрос;
Запрос.Текст = "
|// Доступные категории по ленте новостей;
|// Категории, разрешенные пользователю для настройки;
|// Категории НЕ заполняемые автоматически.
|ВЫБРАТЬ
| Спр.Ссылка КАК ЛентаНовостей,
| Спр.КатегорияНовостей КАК КатегорияНовостей,
| Спр.КатегорияНовостей.ЗаполняетсяАвтоматически КАК КатегорияНовостейЗаполняетсяАвтоматически,
| Спр.РазрешеноНастраиватьПользователям КАК РазрешеноНастраиватьПользователям
|ИЗ
| Справочник.ЛентыНовостей.ДоступныеКатегорииНовостей КАК Спр
|ГДЕ
| Спр.КатегорияНовостей.ЗаполняетсяАвтоматически = ЛОЖЬ
|;
|
|// Настроенные администратором отборы.
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Рег.ЛентаНовостей КАК ЛентаНовостей,
| Рег.КатегорияНовостей КАК КатегорияНовостей,
| Рег.КатегорияНовостей.ЗаполняетсяАвтоматически КАК КатегорияНовостейЗаполняетсяАвтоматически,
| Рег.ЗначениеКатегорииНовостей КАК ЗначениеКатегорииНовостей,
| ЕСТЬNULL(Спр.РазрешеноНастраиватьПользователям, ЛОЖЬ) КАК РазрешеноНастраиватьПользователям
|ИЗ
| РегистрСведений.ОтборыПоЛентамНовостейОбщие КАК Рег
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| Справочник.ЛентыНовостей.ДоступныеКатегорииНовостей КАК Спр
| ПО
| Рег.ЛентаНовостей = Спр.Ссылка
| И Рег.КатегорияНовостей = Спр.КатегорияНовостей
|
|ГДЕ
| НЕ Спр.КатегорияНовостей ЕСТЬ NULL
| И Рег.КатегорияНовостей.ЗаполняетсяАвтоматически = ЛОЖЬ
|;
|
|// Настроенные для области данных отборы.
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Рег.ЛентаНовостей КАК ЛентаНовостей,
| Рег.КатегорияНовостей КАК КатегорияНовостей,
| Рег.КатегорияНовостей.ЗаполняетсяАвтоматически КАК КатегорияНовостейЗаполняетсяАвтоматически,
| Рег.ЗначениеКатегорииНовостей КАК ЗначениеКатегорииНовостей,
| ЕСТЬNULL(Спр.РазрешеноНастраиватьПользователям, ЛОЖЬ) КАК РазрешеноНастраиватьПользователям
|ИЗ
| РегистрСведений.ОтборыПоЛентамНовостейДляОбластиДанных КАК Рег
|
| ЛЕВОЕ СОЕДИНЕНИЕ
| Справочник.ЛентыНовостей.ДоступныеКатегорииНовостей КАК Спр
| ПО
| Рег.ЛентаНовостей = Спр.Ссылка
| И Рег.КатегорияНовостей = Спр.КатегорияНовостей
|
|ГДЕ
| НЕ Спр.КатегорияНовостей ЕСТЬ NULL
| И Рег.КатегорияНовостей.ЗаполняетсяАвтоматически = ЛОЖЬ
|;
|";
РезультатыЗапроса = Запрос.ВыполнитьПакет();
Если НЕ РезультатыЗапроса[0].Пустой() Тогда
ДоступныеКатегорииНовостей = РезультатыЗапроса[0].Выгрузить(ОбходРезультатаЗапроса.Прямой);
Иначе
ДоступныеКатегорииНовостей = Новый ТаблицаЗначений;
ДоступныеКатегорииНовостей.Колонки.Добавить("ЛентаНовостей", Новый ОписаниеТипов("СправочникСсылка.ЛентыНовостей"));
ДоступныеКатегорииНовостей.Колонки.Добавить("КатегорияНовостей", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.КатегорииНовостей"));
ДоступныеКатегорииНовостей.Колонки.Добавить("РазрешеноНастраиватьПользователям", Новый ОписаниеТипов("Булево"));
КонецЕсли;
Если НЕ РезультатыЗапроса[1].Пустой() Тогда
НастроенныеОбщиеОтборы = РезультатыЗапроса[1].Выгрузить(ОбходРезультатаЗапроса.Прямой);
Иначе
НастроенныеОбщиеОтборы = Новый ТаблицаЗначений;
НастроенныеОбщиеОтборы.Колонки.Добавить("ЛентаНовостей", Новый ОписаниеТипов("СправочникСсылка.ЛентыНовостей"));
НастроенныеОбщиеОтборы.Колонки.Добавить("КатегорияНовостей", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.КатегорииНовостей"));
НастроенныеОбщиеОтборы.Колонки.Добавить("ЗначениеКатегорииНовостей");
КонецЕсли;
Если НЕ РезультатыЗапроса[2].Пустой() Тогда
НастроенныеДляОбластиДанныхОтборы = РезультатыЗапроса[2].Выгрузить(ОбходРезультатаЗапроса.Прямой);
Иначе
НастроенныеДляОбластиДанныхОтборы = Новый ТаблицаЗначений;
НастроенныеДляОбластиДанныхОтборы.Колонки.Добавить("ЛентаНовостей", Новый ОписаниеТипов("СправочникСсылка.ЛентыНовостей"));
НастроенныеДляОбластиДанныхОтборы.Колонки.Добавить("КатегорияНовостей", Новый ОписаниеТипов("ПланВидовХарактеристикСсылка.КатегорииНовостей"));
НастроенныеДляОбластиДанныхОтборы.Колонки.Добавить("ЗначениеКатегорииНовостей");
КонецЕсли;
Если ТипЗнч(Настройки) = Тип("ТаблицаЗначений") Тогда
Для Каждого ТекущаяСтрока Из Настройки Цикл
Если (НЕ ТекущаяСтрока.ЛентаНовостей.Пустая())
И (НЕ ТекущаяСтрока.КатегорияНовостей.Пустая()) Тогда
НайденныеСтроки = ДоступныеКатегорииНовостей.НайтиСтроки(
Новый Структура("ЛентаНовостей, КатегорияНовостей",
ТекущаяСтрока.ЛентаНовостей,
ТекущаяСтрока.КатегорияНовостей));
Если НайденныеСтроки.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
Если КлючОбъекта = "ОтборыПоЛентамНовостейПользовательские" Тогда
Если НайденныеСтроки[0].РазрешеноНастраиватьПользователям = Ложь Тогда
Продолжить;
КонецЕсли;
НайденныеНастроенныеОбщиеОтборы = НастроенныеОбщиеОтборы.НайтиСтроки(
Новый Структура("ЛентаНовостей, КатегорияНовостей",
ТекущаяСтрока.ЛентаНовостей,
ТекущаяСтрока.КатегорияНовостей));
НайденныеНастроенныеДляОбластиДанныхОтборы = НастроенныеДляОбластиДанныхОтборы.НайтиСтроки(
Новый Структура("ЛентаНовостей, КатегорияНовостей",
ТекущаяСтрока.ЛентаНовостей,
ТекущаяСтрока.КатегорияНовостей));
НайденныеНастроенныеАдминистраторомОтборы = Новый Массив;
Если (НайденныеНастроенныеОбщиеОтборы.Количество() = 0)
И (НайденныеНастроенныеДляОбластиДанныхОтборы.Количество() = 0) Тогда
ИначеЕсли (НайденныеНастроенныеОбщиеОтборы.Количество() > 0)
И (НайденныеНастроенныеДляОбластиДанныхОтборы.Количество() = 0) Тогда
Для Каждого ТекущаяСтрокаОтбора Из НайденныеНастроенныеОбщиеОтборы Цикл
СтруктураСтрокиОтбора = Новый Структура("ЛентаНовостей, КатегорияНовостей, ЗначениеКатегорииНовостей");
ЗаполнитьЗначенияСвойств(СтруктураСтрокиОтбора, ТекущаяСтрокаОтбора);
НайденныеНастроенныеАдминистраторомОтборы.Добавить(СтруктураСтрокиОтбора);
КонецЦикла;
ИначеЕсли (НайденныеНастроенныеОбщиеОтборы.Количество() = 0)
И (НайденныеНастроенныеДляОбластиДанныхОтборы.Количество() > 0) Тогда
Для Каждого ТекущаяСтрокаОтбора Из НайденныеНастроенныеДляОбластиДанныхОтборы Цикл
СтруктураСтрокиОтбора = Новый Структура("ЛентаНовостей, КатегорияНовостей, ЗначениеКатегорииНовостей");
ЗаполнитьЗначенияСвойств(СтруктураСтрокиОтбора, ТекущаяСтрокаОтбора);
НайденныеНастроенныеАдминистраторомОтборы.Добавить(СтруктураСтрокиОтбора);
КонецЦикла;
Иначе
Для Каждого ТекущаяСтрокаОтбораДляОбластиДанных Из НайденныеНастроенныеДляОбластиДанныхОтборы Цикл
ОтборНайден = Ложь;
Для Каждого ТекущаяСтрокаОтбораОбщего Из НайденныеНастроенныеОбщиеОтборы Цикл
Если ТекущаяСтрокаОтбораДляОбластиДанных.ЗначениеКатегорииНовостей = ТекущаяСтрокаОтбораОбщего.ЗначениеКатегорииНовостей Тогда
ОтборНайден = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ОтборНайден = Истина Тогда
СтруктураСтрокиОтбора = Новый Структура("ЛентаНовостей, КатегорияНовостей, ЗначениеКатегорииНовостей");
ЗаполнитьЗначенияСвойств(СтруктураСтрокиОтбора, ТекущаяСтрокаОтбораДляОбластиДанных);
НайденныеНастроенныеАдминистраторомОтборы.Добавить(СтруктураСтрокиОтбора);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если НайденныеНастроенныеАдминистраторомОтборы.Количество() = 0 Тогда
Иначе
ЭтоРазрешенныйОтбор = Ложь;
Для Каждого ТекущийНастроенныйАдминистраторомОтбор Из НайденныеНастроенныеАдминистраторомОтборы Цикл
Если ТекущийНастроенныйАдминистраторомОтбор.ЗначениеКатегорииНовостей = ТекущаяСтрока.ЗначениеКатегорииНовостей Тогда
ЭтоРазрешенныйОтбор = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЭтоРазрешенныйОтбор = Ложь Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
КонецЕсли;
НоваяСтрока = ПравильнаяТаблица.Добавить();
НоваяСтрока.ЛентаНовостей = ТекущаяСтрока.ЛентаНовостей;
НоваяСтрока.КатегорияНовостей = ТекущаяСтрока.КатегорияНовостей;
НоваяСтрока.ЗначениеКатегорииНовостей = ТекущаяСтрока.КатегорияНовостей.ТипЗначения.ПривестиЗначение(ТекущаяСтрока.ЗначениеКатегорииНовостей);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПравильнаяТаблица.Свернуть("ЛентаНовостей, КатегорияНовостей, ЗначениеКатегорииНовостей");
Результат = ПравильнаяТаблица;
ИначеЕсли КлючОбъекта = "ОтключенныеЛентыНовостей" Тогда
ПравильныйМассив = Новый Массив;
Если ТипЗнч(Настройки) = ТипМассив Тогда
Для Каждого ТекущаяЛентаНовостей Из Настройки Цикл
Если ТипЗнч(ТекущаяЛентаНовостей) = ТипЛентаНовостей Тогда
ПравильныйМассив.Добавить(ТекущаяЛентаНовостей);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат = ПравильныйМассив;
ИначеЕсли КлючОбъекта = "ДоступныеЛентыНовостей" Тогда
ПравильныйМассив = Новый Массив;
Если ТипЗнч(Настройки) = ТипМассив Тогда
Для Каждого ТекущаяЛентаНовостей Из Настройки Цикл
Если ТипЗнч(ТекущаяЛентаНовостей) = ТипЛентаНовостей Тогда
ПравильныйМассив.Добавить(ТекущаяЛентаНовостей);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат = ПравильныйМассив;
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаВключена" Тогда
ПравильныйМассив = Новый Массив;
Если ТипЗнч(Настройки) = ТипМассив Тогда
Для Каждого ТекущаяЛентаНовостей Из Настройки Цикл
Если ТипЗнч(ТекущаяЛентаНовостей) = ТипЛентаНовостей Тогда
ПравильныйМассив.Добавить(ТекущаяЛентаНовостей);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат = ПравильныйМассив;
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаВключенаПользователем" Тогда
ПравильныйМассив = Новый Массив;
Если ТипЗнч(Настройки) = ТипМассив Тогда
Для Каждого ТекущаяЛентаНовостей Из Настройки Цикл
Если ТипЗнч(ТекущаяЛентаНовостей) = ТипЛентаНовостей Тогда
ПравильныйМассив.Добавить(ТекущаяЛентаНовостей);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат = ПравильныйМассив;
ИначеЕсли КлючОбъекта = "ЛентыНовостейПодпискаОтключенаПользователем" Тогда
ПравильныйМассив = Новый Массив;
Если ТипЗнч(Настройки) = ТипМассив Тогда
Для Каждого ТекущаяЛентаНовостей Из Настройки Цикл
Если ТипЗнч(ТекущаяЛентаНовостей) = ТипЛентаНовостей Тогда
ПравильныйМассив.Добавить(ТекущаяЛентаНовостей);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат = ПравильныйМассив;
ИначеЕсли КлючОбъекта = "ЛентыНовостейВсеНастройки" Тогда
Если (ТипЗнч(КлючНастроек) = ТипЛентаНовостей) И (НЕ КлючНастроек.Пустая()) Тогда
ОтборПоЛентеНовостей = КлючНастроек;
Иначе
ОтборПоЛентеНовостей = Неопределено;
КонецЕсли;
ПравильныйМассив = Новый Массив;
Если ТипЗнч(Настройки) = ТипМассив Тогда
Для Каждого ТекущиеНастройки Из Настройки Цикл
Если ТипЗнч(ТекущиеНастройки) = ТипСтруктура Тогда
Если (ОтборПоЛентеНовостей = Неопределено) ИЛИ (ОтборПоЛентеНовостей = ТекущиеНастройки.ЛентаНовостей) Тогда
НастройкиЭталон = Новый Структура;
НастройкиЭталон.Вставить("КодЛентыНовостей" , "");
НастройкиЭталон.Вставить("ЛентаНовостей" , Справочники.ЛентыНовостей.ПустаяСсылка());
НастройкиЭталон.Вставить("ОбязательныйКанал" , Ложь);
НастройкиЭталон.Вставить("СпособОповещения" , Перечисления.СпособыОповещенияПользователяОНовостях.ПоУмолчанию);
НастройкиЭталон.Вставить("ПодпискаПринудительно" , "Неопределено");
НастройкиЭталон.Вставить("ПодпискаСамостоятельно", "Подписан");
ЗаполнитьЗначенияСвойств(НастройкиЭталон, ТекущиеНастройки);
ПравильныйМассив.Добавить(ТекущиеНастройки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если (ОтборПоЛентеНовостей <> Неопределено) И (ПравильныйМассив.Количество() = 0) Тогда
НастройкиЭталон = Новый Структура;
НастройкиЭталон.Вставить("КодЛентыНовостей" , ОтборПоЛентеНовостей.Код);
НастройкиЭталон.Вставить("ЛентаНовостей" , ОтборПоЛентеНовостей);
НастройкиЭталон.Вставить("ОбязательныйКанал" , ОтборПоЛентеНовостей.ОбязательныйКанал);
НастройкиЭталон.Вставить("СпособОповещения" , Перечисления.СпособыОповещенияПользователяОНовостях.ПоУмолчанию);
НастройкиЭталон.Вставить("ПодпискаПринудительно" , "Неопределено");
НастройкиЭталон.Вставить("ПодпискаСамостоятельно", "Подписан");
ПравильныйМассив.Добавить(НастройкиЭталон);
КонецЕсли;
Результат = ПравильныйМассив;
ИначеЕсли КлючОбъекта = "ВидимостьЛентНовостей" Тогда
ПравильнаяТаблица = Новый ТаблицаЗначений;
ПравильнаяТаблица.Колонки.Добавить("ЛентаНовостей", Новый ОписаниеТипов("СправочникСсылка.ЛентыНовостей"));
ПравильнаяТаблица.Колонки.Добавить("ПометкаУдаления", Новый ОписаниеТипов("Булево"));
ПравильнаяТаблица.Колонки.Добавить("ОбязательныйКанал", Новый ОписаниеТипов("Булево"));
ПравильнаяТаблица.Колонки.Добавить("Видимость", Новый ОписаниеТипов("Булево"));
ПравильнаяТаблица.Колонки.Добавить("ВидимостьПоУмолчанию", Новый ОписаниеТипов("Булево"));
Если ТипЗнч(Настройки) = Тип("ТаблицаЗначений") Тогда
Для Каждого ТекущаяЛентаНовостей Из Настройки Цикл
Если ТекущаяЛентаНовостей.ЛентаНовостей.Пустая() Тогда
Продолжить;
КонецЕсли;
НайденнаяСтрока = ПравильнаяТаблица.Найти(ТекущаяЛентаНовостей.ЛентаНовостей, "ЛентаНовостей");
Если НайденнаяСтрока = Неопределено Тогда
НоваяСтрока = ПравильнаяТаблица.Добавить();
НоваяСтрока.ЛентаНовостей = ТекущаяЛентаНовостей.ЛентаНовостей;
НоваяСтрока.ПометкаУдаления = ТекущаяЛентаНовостей.ПометкаУдаления;
НоваяСтрока.ОбязательныйКанал = ТекущаяЛентаНовостей.ОбязательныйКанал;
НоваяСтрока.Видимость = ТекущаяЛентаНовостей.Видимость;
НоваяСтрока.ВидимостьПоУмолчанию = ТекущаяЛентаНовостей.ВидимостьПоУмолчанию;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Результат = ПравильнаяТаблица;
ИначеЕсли КлючОбъекта = "СистемнаяИнформация_ВерсияПриложения" Тогда
Результат = Настройки;
Если ТипЗнч(Результат) <> ТипСтрока Тогда
Результат = "0.0.0.0";
КонецЕсли;
ИначеЕсли КлючОбъекта = "НастройкиЖурналаРегистрации" Тогда
Результат = Новый Структура("ЖурналРегистрации_ПодробнаяЗапись",
Истина);
Если ТипЗнч(Настройки) = ТипСтруктура Тогда
ЗаполнитьЗначенияСвойств(Результат, Настройки);
Если ТипЗнч(Результат.ЖурналРегистрации_ПодробнаяЗапись) <> ТипБулево Тогда
Результат.ЖурналРегистрации_ПодробнаяЗапись = Истина;
КонецЕсли;
КонецЕсли;
ИначеЕсли КлючОбъекта = "СостояниеПодсистемы" Тогда
ТекущаяДатаДляУстановки = ТекущаяУниверсальнаяДата();
Результат = Новый Структура;
Результат.Вставить("ТекущееСостояние" , "Активна");
Результат.Вставить("ДатаУстановкиТекущегоСостояния" , ТекущаяДатаДляУстановки);
Результат.Вставить("ДатаПринудительногоСбросаТекущегоСостояния", '00010101');
Если ТипЗнч(Настройки) = ТипСтруктура Тогда
ЗаполнитьЗначенияСвойств(Результат, Настройки);
Если (Результат.ТекущееСостояние <> "Активна")
И (Результат.ТекущееСостояние <> "ТребуетсяПересчетОтборовПослеДлительногоОжидания")
И (Результат.ТекущееСостояние <> "СейчасЗагружаютсяНовости") Тогда
Результат.ТекущееСостояние = "Активна";
КонецЕсли;
Если ТипЗнч(Результат.ДатаУстановкиТекущегоСостояния) <> ТипДата
ИЛИ (Результат.ДатаУстановкиТекущегоСостояния = '00010101') Тогда
Результат.ДатаУстановкиТекущегоСостояния = ТекущаяДатаДляУстановки;
КонецЕсли;
Если ТипЗнч(Результат.ДатаПринудительногоСбросаТекущегоСостояния) <> ТипДата Тогда
Результат.ДатаПринудительногоСбросаТекущегоСостояния = '00010101';
КонецЕсли;
Если (Результат.ТекущееСостояние = "Активна") Тогда
Результат.ДатаПринудительногоСбросаТекущегоСостояния = '00010101';
ИначеЕсли (Результат.ТекущееСостояние = "ТребуетсяПересчетОтборовПослеДлительногоОжидания") Тогда
ПредельнаяДата = ТекущаяДатаДляУстановки + 1*60*60;
Если Результат.ДатаПринудительногоСбросаТекущегоСостояния > ПредельнаяДата Тогда
Результат.ДатаПринудительногоСбросаТекущегоСостояния = ПредельнаяДата;
КонецЕсли;
ИначеЕсли (Результат.ТекущееСостояние = "СейчасЗагружаютсяНовости") Тогда
ПредельнаяДата = ТекущаяДатаДляУстановки + 6*60*60;
Если Результат.ДатаПринудительногоСбросаТекущегоСостояния > ПредельнаяДата Тогда
Результат.ДатаПринудительногоСбросаТекущегоСостояния = ПредельнаяДата;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ПроверитьПраваДоступа(ИмяПроцедуры)
Результат = Истина;
Если (НЕ ОбработкаНовостейПовтИсп.ЕстьРолиЧтенияНовостей())
И (НЕ ПривилегированныйРежим()) Тогда
ОбработкаНовостейСлужебный.ЗаписатьСообщениеВЖурналРегистрации(
НСтр("ru='БИП:Новости.Хранилище настроек новостей'", ОбщегоНазначения.КодОсновногоЯзыка()),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Новости. Хранилище настроек новостей. %1. Нарушение прав доступа'", ОбщегоНазначения.КодОсновногоЯзыка()),
ИмяПроцедуры),
УровеньЖурналаРегистрации.Ошибка,
,
,
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Попытка вызова ХранилищаНастроек.НастройкиНовостей.%1, когда недоступна роль ЧтениеНовостей или ПолныеПрава и не включен привилегированный режим.'",
ОбщегоНазначения.КодОсновногоЯзыка()),
ИмяПроцедуры),
Истина);
Результат = Ложь;
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецЕсли