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