#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура Удалить(КлючОбъекта, КлючНастроек, ИмяПользователяИБ = "") Экспорт
Если ПустаяСтрока(ИмяПользователяИБ) Тогда
ПараметрыТекущегоПользователя = ОбработкаНовостейСлужебный.ПараметрыТекущегоПользователя();
лкИмяПользователяИБ = ПараметрыТекущегоПользователя.ИмяПользователяИБ;
Иначе
лкИмяПользователяИБ = ИмяПользователяИБ;
КонецЕсли;
ХранилищеОбщихНастроек.Удалить("БуферОбмена/" + КлючОбъекта, КлючНастроек, лкИмяПользователяИБ);
КонецПроцедуры
Процедура ОбработкаЗагрузки(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователяИБ = "")
Если ПустаяСтрока(ИмяПользователяИБ) Тогда
ПараметрыТекущегоПользователя = ОбработкаНовостейСлужебный.ПараметрыТекущегоПользователя();
лкИмяПользователяИБ = ПараметрыТекущегоПользователя.ИмяПользователяИБ;
Иначе
лкИмяПользователяИБ = ИмяПользователяИБ;
КонецЕсли;
Если ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииПростые")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииИнтервалыВерсий")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.ПривязкаКМетаданным")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.БинарныеДанные")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.Действия")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Продукты.Родители")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Продукты.КаналыРаспространенияНовостей")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Пользователи.ПраваДоступаКТематическимПодборкам") Тогда
Настройки = ХранилищеОбщихНастроек.Загрузить("БуферОбмена/" + КлючОбъекта, КлючНастроек, ОписаниеНастроек, лкИмяПользователяИБ);
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПолученияОписания(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователяИБ = "")
Если ПустаяСтрока(ИмяПользователяИБ) Тогда
ПараметрыТекущегоПользователя = ОбработкаНовостейСлужебный.ПараметрыТекущегоПользователя();
лкИмяПользователяИБ = ПараметрыТекущегоПользователя.ИмяПользователяИБ;
Иначе
лкИмяПользователяИБ = ИмяПользователяИБ;
КонецЕсли;
Если ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииПростые")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииИнтервалыВерсий")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.ПривязкаКМетаданным")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.БинарныеДанные")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.Действия")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Продукты.Родители")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Продукты.КаналыРаспространенияНовостей")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Пользователи.ПраваДоступаКТематическимПодборкам") Тогда
ОписаниеНастроек = ХранилищеОбщихНастроек.ПолучитьОписание("БуферОбмена/" + КлючОбъекта, КлючНастроек, лкИмяПользователяИБ);
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаСохранения(КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, ИмяПользователяИБ = "")
Если ПустаяСтрока(ИмяПользователяИБ) Тогда
ПараметрыТекущегоПользователя = ОбработкаНовостейСлужебный.ПараметрыТекущегоПользователя();
лкИмяПользователяИБ = ПараметрыТекущегоПользователя.ИмяПользователяИБ;
Иначе
лкИмяПользователяИБ = ИмяПользователяИБ;
КонецЕсли;
Если ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииПростые")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииИнтервалыВерсий")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.ПривязкаКМетаданным")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.БинарныеДанные")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.Действия")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Продукты.Родители")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Продукты.КаналыРаспространенияНовостей")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Пользователи.ПраваДоступаКТематическимПодборкам") Тогда
Настройки = ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек);
ХранилищеОбщихНастроек.Сохранить("БуферОбмена/" + КлючОбъекта, КлючНастроек, Настройки, ОписаниеНастроек, лкИмяПользователяИБ);
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаУстановкиОписания(КлючОбъекта, КлючНастроек, ОписаниеНастроек, ИмяПользователяИБ = "")
Если ПустаяСтрока(ИмяПользователяИБ) Тогда
ПараметрыТекущегоПользователя = ОбработкаНовостейСлужебный.ПараметрыТекущегоПользователя();
лкИмяПользователяИБ = ПараметрыТекущегоПользователя.ИмяПользователяИБ;
Иначе
лкИмяПользователяИБ = ИмяПользователяИБ;
КонецЕсли;
Если ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииПростые")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииИнтервалыВерсий")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.ПривязкаКМетаданным")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.БинарныеДанные")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.Действия")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Продукты.Родители")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Продукты.КаналыРаспространенияНовостей")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Пользователи.ПраваДоступаКТематическимПодборкам") Тогда
ХранилищеОбщихНастроек.УстановитьОписание("БуферОбмена/" + КлючОбъекта, КлючНастроек, ОписаниеНастроек, лкИмяПользователяИБ);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ПолучитьСписок(КлючОбъекта, ИмяПользователяИБ = "") Экспорт
Если ПустаяСтрока(ИмяПользователяИБ) Тогда
ПараметрыТекущегоПользователя = ОбработкаНовостейСлужебный.ПараметрыТекущегоПользователя();
лкИмяПользователяИБ = ПараметрыТекущегоПользователя.ИмяПользователяИБ;
Иначе
лкИмяПользователяИБ = ИмяПользователяИБ;
КонецЕсли;
Результат = ХранилищеОбщихНастроек.ПолучитьСписок("БуферОбмена/" + КлючОбъекта, лкИмяПользователяИБ);
Возврат Результат;
КонецФункции
Функция ПровестиВалидациюНастроек(Настройки, КлючОбъекта, КлючНастроек = "") Экспорт
ТипСтрока = Тип("Строка");
ТипСтруктура = Тип("Структура");
ТипСписокЗначений = Тип("СписокЗначений");
Если ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииПростые")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииИнтервалыВерсий")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.ПривязкаКМетаданным")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.БинарныеДанные")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Продукты.Родители")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Продукты.КаналыРаспространенияНовостей")
ИЛИ ВРег(КлючОбъекта) = ВРег("Справочники.Пользователи.ПраваДоступаКТематическимПодборкам") Тогда
Результат = Новый СписокЗначений;
Если ТипЗнч(Настройки) = ТипСписокЗначений Тогда
Для каждого ТекущееЗначение Из Настройки Цикл
Если ТипЗнч(ТекущееЗначение.Значение) = ТипСтруктура Тогда
НовоеТекущееЗначение = ОбработкаНовостейКлиентСервер.ПолучитьОписаниеПолейБуфераОбмена(КлючОбъекта);
ЗаполнитьЗначенияСвойств(НовоеТекущееЗначение, ТекущееЗначение.Значение);
Если ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииПростые")
ИЛИ ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииИнтервалыВерсий") Тогда
Если НЕ НовоеТекущееЗначение.КатегорияНовостей.Пустая() Тогда
НовоеТекущееЗначение.КатегорияНовостейКод = НовоеТекущееЗначение.КатегорияНовостей.Код;
Иначе
Если НЕ ПустаяСтрока(НовоеТекущееЗначение.КатегорияНовостейКод) Тогда
НовоеТекущееЗначение.КатегорияНовостей = ПланыВидовХарактеристик.КатегорииНовостей.НайтиПоКоду(НовоеТекущееЗначение.КатегорияНовостейКод);
КонецЕсли;
КонецЕсли;
Если НЕ НовоеТекущееЗначение.КатегорияНовостей.Пустая() Тогда
Если НовоеТекущееЗначение.КатегорияНовостей.ТипЗначения.Типы()[0] = Тип("СправочникСсылка.ЗначенияКатегорийНовостей") Тогда
Если (ТипЗнч(НовоеТекущееЗначение.ЗначениеКатегорииНовостей) <> Тип("СправочникСсылка.ЗначенияКатегорийНовостей"))
ИЛИ ((ТипЗнч(НовоеТекущееЗначение.ЗначениеКатегорииНовостей) = Тип("СправочникСсылка.ЗначенияКатегорийНовостей"))
И НовоеТекущееЗначение.ЗначениеКатегорииНовостей.Пустая()) Тогда
Если НЕ ПустаяСтрока(НовоеТекущееЗначение.ЗначениеКатегорииНовостейКод) Тогда
НовоеТекущееЗначение.ЗначениеКатегорииНовостей =
Справочники.ЗначенияКатегорийНовостей.НайтиПоКоду(НовоеТекущееЗначение.ЗначениеКатегорииНовостейКод, Ложь, , НовоеТекущееЗначение.КатегорияНовостей);
КонецЕсли;
КонецЕсли;
Если (ТипЗнч(НовоеТекущееЗначение.ЗначениеКатегорииНовостей) = Тип("СправочникСсылка.ЗначенияКатегорийНовостей")) Тогда
Если ПустаяСтрока(НовоеТекущееЗначение.ЗначениеКатегорииНовостейКод) Тогда
НовоеТекущееЗначение.ЗначениеКатегорииНовостейКод = НовоеТекущееЗначение.ЗначениеКатегорииНовостей.Код;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ВРег(КлючОбъекта) = ВРег("Документы.Новости.КатегорииИнтервалыВерсий") Тогда
Если ТипЗнч(НовоеТекущееЗначение.Продукт) = ТипСтрока Тогда
НовоеТекущееЗначение.ПродуктКод = НовоеТекущееЗначение.Продукт;
Иначе
Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(НовоеТекущееЗначение.Продукт)) = Истина Тогда
НовоеТекущееЗначение.ПродуктКод = СокрЛП(НовоеТекущееЗначение.Продукт.Код);
КонецЕсли;
КонецЕсли;
ИмяСправочника = "Продукты";
Если Метаданные.Справочники.Найти(ИмяСправочника) <> Неопределено Тогда
Если НЕ ПустаяСтрока(НовоеТекущееЗначение.ПродуктКод) Тогда
НовоеТекущееЗначение.Продукт = Справочники[ИмяСправочника].НайтиПоКоду(НовоеТекущееЗначение.ПродуктКод);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Результат.Добавить(НовоеТекущееЗначение);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ИначеЕсли ВРег(КлючОбъекта) = ВРег("Документы.Новости.Действия") Тогда
Результат = Новый СписокЗначений;
Если ТипЗнч(Настройки) = ТипСписокЗначений Тогда
Для каждого ТекущееЗначение Из Настройки Цикл
Если ТипЗнч(ТекущееЗначение.Значение) <> ТипСтруктура Тогда
Продолжить;
КонецЕсли;
ТекущееЗначениеЗначениеЭталон = Новый Структура;
ТекущееЗначениеЗначениеЭталон.Вставить("ПараметрыДействий", Неопределено);
ЗаполнитьЗначенияСвойств(ТекущееЗначениеЗначениеЭталон, ТекущееЗначение.Значение);
НовоеТекущееЗначение = ОбработкаНовостейКлиентСервер.ПолучитьОписаниеПолейБуфераОбмена(КлючОбъекта);
ЗаполнитьЗначенияСвойств(НовоеТекущееЗначение, ТекущееЗначение.Значение);
СписокПараметровДействий = Новый СписокЗначений;
Если ТипЗнч(ТекущееЗначениеЗначениеЭталон.ПараметрыДействий) = ТипСписокЗначений Тогда
Для каждого ТекущийПараметрДействия Из ТекущееЗначениеЗначениеЭталон.ПараметрыДействий Цикл
НовоеТекущееЗначениеПараметраДействий = ОбработкаНовостейКлиентСервер.ПолучитьОписаниеПолейБуфераОбмена("Документы.Новости.ПараметрыДействий");
ЗаполнитьЗначенияСвойств(НовоеТекущееЗначениеПараметраДействий, ТекущийПараметрДействия.Значение);
СписокПараметровДействий.Добавить(НовоеТекущееЗначениеПараметраДействий);
КонецЦикла;
КонецЕсли;
НовоеТекущееЗначение.ПараметрыДействий = СписокПараметровДействий;
Результат.Добавить(НовоеТекущееЗначение);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#КонецЕсли