#Область ОписаниеПеременных
&НаКлиенте
Перем КонтекстВыбора;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.РежимВыбора Тогда
РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
Элементы.Список.РежимВыбора = Истина;
КонецЕсли;
ИнформационнаяБазаФайловая = ОбщегоНазначения.ИнформационнаяБазаФайловая();
ИндексПолнотекстовогоПоискаАктуален = ПолнотекстовыйПоискСервер.ИндексПоискаАктуален();
РазделениеВключено = ОбщегоНазначения.РазделениеВключено();
ГиперссылкаЦвет = ЦветаСтиля.ГиперссылкаЦвет;
Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтотОбъект, Параметры);
ОпределитьДоступностьПолнотекстовыйПоиск();
ПравоПометкиУдаленияПапок = ПравоДоступа("Изменение", Метаданные.Справочники.ПапкиЭлектронныхПисем);
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Закладки, "Владелец",
Пользователи.ТекущийПользователь(),,, Истина);
ДополнитьМенюПанелиНавигации();
Взаимодействия.ЗаполнитьПодменюСтатус(Элементы.СписокСтатус, ЭтотОбъект);
Взаимодействия.ЗаполнитьПодменюПоТипуВзаимодействия(Элементы.СписокТипВзаимодействия, ЭтотОбъект);
Для Каждого ТипПредмета Из Метаданные.РегистрыСведений.ПредметыПапкиВзаимодействий.Ресурсы.Предмет.Тип.Типы() Цикл
Если ТолькоПочта
И (ТипПредмета = Тип("ДокументСсылка.Встреча") ИЛИ ТипПредмета = Тип("ДокументСсылка.ТелефонныйЗвонок")
ИЛИ ТипПредмета = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") ИЛИ ТипПредмета = Тип("ДокументСсылка.СообщениеSMS")) Тогда
Продолжить;
КонецЕсли;
СписокВыбораТипаПредмета.Добавить(Метаданные.НайтиПоТипу(ТипПредмета).ПолноеИмя(), Строка(ТипПредмета));
КонецЦикла;
ТипВзаимодействия = ?(ТолькоПочта, "ВсеПисьма","Все");
Статус = "Все";
ИмяТекущейПанелиНавигации = Параметры.ИмяТекущейПанелиНавигации;
Если ЗначениеЗаполнено(Параметры.ТекущаяСтрока) Тогда
ПодготовитьНастройкиФормыКВыводуТекущейСсылки(Параметры.ТекущаяСтрока);
КонецЕсли;
ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения();
ПараметрыРазмещения.Вставить("КоманднаяПанель", Элементы.ГруппаПанельНавигацииСписок.ПодчиненныеЭлементы.КоманднаяПанельВариантаНавигации);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения);
Взаимодействия.ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания);
ЗапрещеноОтображениеНебезопасногоСодержимогоВПисьмах = Взаимодействия.ЗапрещеноОтображениеНебезопасногоСодержимогоВПисьмах();
ПроверитьСостояниеОтправкиПисемНаСервере();
СФормироватьДекорациюТолькоЗначимыеПредметы();
СФормироватьДекорациюТолькоЗначимыеКонтакты();
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
Если РазделениеВключено
И Не ОтправкаПолучениеПисемВыполняется Тогда
ОтправитьПолучитьПочтуПользователяКлиент();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки)
Если Не ПустаяСтрока(Параметры.ИмяТекущейПанелиНавигации) Тогда
Настройки.Удалить("ИмяТекущейПанелиНавигации");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
Если ПустаяСтрока(ИмяТекущейПанелиНавигации) Или Элементы.Найти(ИмяТекущейПанелиНавигации) = Неопределено Тогда
ИмяТекущейПанелиНавигации = "СтраницаПредмет";
ИначеЕсли ИмяТекущейПанелиНавигации = "СтраницаСвойства" Тогда
Если ТаблицаДопРеквизитовСвойств.НайтиСтроки(
Новый Структура("ДопРеквизитСведение", ТекущееСвойствоПанелиНавигации)).Количество() = 0 Тогда
ИмяТекущейПанелиНавигации = "СтраницаПредмет";
КонецЕсли;
КонецЕсли;
Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы[ИмяТекущейПанелиНавигации];
Статус = Настройки.Получить("Статус");
Если Статус <> Неопределено Тогда
Настройки.Удалить("Статус");
КонецЕсли;
Если Не ИспользоватьПризнакРассмотрено Тогда
Статус = "Все";
КонецЕсли;
Если ЗначениеЗаполнено(Статус) Тогда
ПриИзмененииСтатусаСервер(Ложь);
КонецЕсли;
Ответственный = Настройки.Получить("Ответственный");
Если Ответственный <> Неопределено Тогда
ПриИзмененииОтветственногоСервер(Ложь);
Настройки.Удалить("Ответственный");
КонецЕсли;
Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтотОбъект, Настройки);
ПриИзмененииТипаСервер(Ложь);
ОбновитьПанельНавигацииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ВРег(ИмяСобытия) = ВРег("Запись_ЗакладкиВзаимодействий") Тогда
Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда
Элементы.Закладки.Обновить();
ОбработатьАктивизациюСтрокиПанелиНавигации();
КонецЕсли;
ИначеЕсли ВРег(ИмяСобытия) = ВРег("Запись_ПапкиЭлектронныхПисем")
Или ВРег(ИмяСобытия) = ВРег("ПримененыПравилаОбработкиПисем")
Или ВРег(ИмяСобытия) = ВРег("ВыполненаОтправкаПолучениеПисем") Тогда
Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда
ОбновитьПанельНавигации();
ВосстановитьРаскрытыеУзлыДерева();
КонецЕсли;
Если ВРег(ИмяСобытия) = ВРег("ВыполненаОтправкаПолучениеПисем") Тогда
Если РазделениеВключено Тогда
ПодключитьОбработчикОжидания("ПроверитьНеобходимостьОтправкиПолученияПочты", 150, Истина);
КонецЕсли;
КонецЕсли;
ИначеЕсли ВРег(ИмяСобытия) = ВРег("ИзменениеПредметаВзаимодействий") Тогда
Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет Тогда
ОбновитьПанельНавигации();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ПустаяСтрока(ИмяТекущейПанелиНавигации) Или ПустаяСтрока(Статус) Или ПустаяСтрока(ТипВзаимодействия) Тогда
УстановитьНачальныеЗначенияПриОткрытии();
КонецЕсли;
ВосстановитьРаскрытыеУзлыДерева();
Если РазделениеВключено Тогда
ОтправитьПолучитьПочтуПользователяКлиент();
Иначе
ПодключитьОбработчикОжидания("ПроверитьСостояниеОтправкиПисем", 60, Истина);
КонецЕсли;
#Если МобильныйКлиент Тогда
Элементы.СписокСтатус.Вид = ВидГруппыФормы.ГруппаКнопок;
Элементы.СписокТипВзаимодействия.Вид = ВидГруппыФормы.ГруппаКнопок;
#КонецЕсли
КонецПроцедуры
&НаСервере
Процедура УстановитьНачальныеЗначенияПриОткрытии()
Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет;
Статус = "Все";
ТипВзаимодействия = "Все";
ПриИзмененииСтатусаСервер(Ложь);
ПриИзмененииТипаСервер(Ложь);
ОбновитьПанельНавигацииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаПерехода(ОбъектПерехода, СтандартнаяОбработка)
Если Не ЗначениеЗаполнено(ОбъектПерехода) Или ОбъектПерехода = Элементы.Список.ТекущаяСтрока Тогда
Возврат;
КонецЕсли;
ОбработкаПереходаНаСервере(ОбъектПерехода);
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если КонтекстВыбора = "ОтветственныйВыполнить" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
УстановитьОтветственного(ВыбранноеЗначение, Неопределено);
КонецЕсли;
ВосстановитьРаскрытыеУзлыДерева();
ИначеЕсли КонтекстВыбора = "ОтветственныйСписок" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
УстановитьОтветственного(ВыбранноеЗначение, Элементы.Список.ВыделенныеСтроки);
КонецЕсли;
ВосстановитьРаскрытыеУзлыДерева();
ИначеЕсли КонтекстВыбора = "ПредметВыполнитьТипПредмета" Тогда
Если ВыбранноеЗначение = Неопределено Тогда
Возврат;
КонецЕсли;
КонтекстВыбора = "ПредметВыполнить";
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ОткрытьФорму(ВыбранноеЗначение + ".ФормаВыбора", ПараметрыФормы, ЭтотОбъект);
Возврат;
ИначеЕсли КонтекстВыбора = "ПредметСписокТипПредмета" Тогда
Если ВыбранноеЗначение = Неопределено Тогда
Возврат;
КонецЕсли;
КонтекстВыбора = "ПредметСписок";
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ОткрытьФорму(ВыбранноеЗначение + ".ФормаВыбора", ПараметрыФормы, ЭтотОбъект);
Возврат;
ИначеЕсли КонтекстВыбора = "ПредметВыполнить" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
УстановитьПредмет(ВыбранноеЗначение, Неопределено);
КонецЕсли;
ВосстановитьРаскрытыеУзлыДерева();
ИначеЕсли КонтекстВыбора = "ПредметСписок" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
УстановитьПредмет(ВыбранноеЗначение, Элементы.Список.ВыделенныеСтроки);
КонецЕсли;
ВосстановитьРаскрытыеУзлыДерева();
ИначеЕсли КонтекстВыбора = "ПеренестиВПапку" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
ИмяТекущегоЭлемента = ТекущийЭлемент.Имя;
ПапкиТекущиеДанные = Элементы.Папки.ТекущиеДанные;
Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") Тогда
ВыполнитьПереносВПапкуМассиваПисем(Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки, ВыбранноеЗначение);
Иначе
УстановитьРодителяУПапки(ПапкиТекущиеДанные.Значение, ВыбранноеЗначение);
КонецЕсли;
ВосстановитьРаскрытыеУзлыДерева();
КонецЕсли;
КонецЕсли;
КонтекстВыбора = Неопределено;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ПанельНавигацииПриАктивизацииСтроки(Элемент)
Если Элемент.Имя = "Предметы"
И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаПредмет Тогда
Возврат;
ИначеЕсли Элемент.Имя = "Контакты"
И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаКонтакт Тогда
Возврат;
ИначеЕсли Элемент.Имя = "Закладки"
И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаЗакладки Тогда
Возврат;
ИначеЕсли Элемент.Имя = "Свойства"
И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаСвойства Тогда
Возврат;
ИначеЕсли Элемент.Имя = "Папки"
И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаПапки Тогда
Возврат;
ИначеЕсли Элемент.Имя = "Категории"
И Элементы.СтраницыПанелиНавигации.ТекущаяСтраница <> Элементы.СтраницаКатегории Тогда
Возврат;
КонецЕсли;
Если Элемент.Имя = "Папки" Тогда
ТекущиеДанные = Элементы.Папки.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат
КонецЕсли;
Элементы.ПапкиКонтекстноеМенюУдалить.Доступность = Не (ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты")
Или ТекущиеДанные.ЕстьПравоНаИзменение = 0
Или ТекущиеДанные.ПредопределеннаяПапка);
КонецЕсли;
Если НеОтрабатыватьАктивизациюПанелиНавигации Тогда
НеОтрабатыватьАктивизациюПанелиНавигации = Ложь;
Иначе
ПодключитьОбработчикОжидания("ОбработатьАктивизациюСтрокиПанелиНавигации", 0.2, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтветственныйПриИзменении(Элемент)
ПриИзмененииОтветственногоСервер(Истина);
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура ТипВзаимодействияПриИзменении(Элемент)
ПриИзмененииТипаСервер();
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура СписокПриИзменении(Элемент)
ОбновитьПанельНавигации();
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура ПерсональныеНастройки(Команда)
ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.НастройкиРаботыСПочтой", , ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
Если Элементы.Список.ТекущиеДанные = Неопределено И ОтображатьОбластьЧтения Тогда
Если Элементы.СтраницыПредпросмотр.ТекущаяСтраница <> Элементы.СтраницаПредпросмотрОбычныйТекст Тогда
Элементы.СтраницыПредпросмотр.ТекущаяСтраница = Элементы.СтраницаПредпросмотрОбычныйТекст;
КонецЕсли;
ОчиститьПредпросмотр();
Иначе
Если ВыборКорректен(Элемент.Имя,Истина)
И ВзаимодействиеДляКоторогоСформированПредпросмотр <> Элементы.Список.ТекущиеДанные.Ссылка Тогда
Если Элементы.Список.ВыделенныеСтроки.Количество() = 1 Тогда
ПодключитьОбработчикОжидания("ОбработатьАктивизациюСтрокиСписка",0.1,Истина);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьПредпросмотр()
Предпросмотр = "";
ПредпросмотрHTML = "<HTML><BODY></BODY></HTML>";
ВзаимодействиеДляКоторогоСформированПредпросмотр = Неопределено;
КонецПроцедуры
&НаКлиенте
Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Элементы.Список.РежимВыбора Тогда
СтандартнаяОбработка = Ложь;
ОповеститьОВыборе(ВыбраннаяСтрока);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПапкиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
#Если НЕ МобильныйКлиент Тогда
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элемент.ТекущиеДанные;
ПоказатьЗначение(, ТекущиеДанные.Значение);
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура КонтактыПанелиНавигацииВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
#Если НЕ МобильныйКлиент Тогда
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элемент.ТекущиеДанные;
Если Не ТипЗнч(ТекущиеДанные.Контакт) = Тип("СправочникСсылка.СтроковыеКонтактыВзаимодействий") Тогда
ПоказатьЗначение( ,ТекущиеДанные.Контакт);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПредметыПанельНавигацииВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
#Если НЕ МобильныйКлиент Тогда
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение( ,ТекущиеДанные.Предмет);
КонецЕсли;
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Процедура ПредметыПанельНавигацииПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПредметыПанельНавигацииПередНачаломИзменения(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура КонтактыПередНачаломИзменения(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура КонтактыПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПапкиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина;
ТекущиеДанные = Элементы.Папки.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТекущиеДанные.ЕстьПравоНаИзменение = 0 Тогда
ВызватьИсключение(НСтр("ru = 'Недостаточно прав для создания папки.'"), КатегорияОшибки.НарушениеПравДоступа);
КонецЕсли;
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("Владелец", ТекущиеДанные.УчетнаяЗапись);
Если ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.ПапкиЭлектронныхПисем") Тогда
СтруктураПараметры.Вставить("Родитель", ТекущиеДанные.Значение);
КонецЕсли;
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", СтруктураПараметры);
ОткрытьФорму("Справочник.ПапкиЭлектронныхПисем.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПапкиПередУдалением(Элемент, Отказ)
Отказ = Истина;
ТекущиеДанные = Элементы.Папки.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты")
ИЛИ ТекущиеДанные.ЕстьПравоНаИзменение = 0 ИЛИ ТекущиеДанные.ПредопределеннаяПапка Тогда
Возврат;
КонецЕсли;
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Удалить папку ""%1"" и переместить все ее содержимое в папку ""Удаленные""?'"),
Строка(ТекущиеДанные.Значение));
ДополнительныеПараметры = Новый Структура("ТекущиеДанные", ТекущиеДанные);
ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОУдаленииПапкиПослеЗавершения", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(ОбработчикОповещенияОЗакрытии, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаСервере
Функция УдалитьПапкуСервер(Знач Папка)
ОписаниеОшибки = "";
Взаимодействия.ВыполнитьУдалениеПапкиЭлектронныхПисем(Папка, ОписаниеОшибки);
Если ПустаяСтрока(ОписаниеОшибки) Тогда
ОбновитьПанельНавигации();
КонецЕсли;
Возврат ОписаниеОшибки;
КонецФункции
&НаКлиенте
Процедура СтатусПриИзменении(Элемент)
ПриИзмененииСтатусаСервер(Истина);
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура ТипВзаимодействияСтатусОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура СтрокаПоискаПриИзменении(Элемент)
ОписанияНайденоПолнотекстовымПоиском.Очистить();
Если СтрокаПоиска <> "" Тогда
ПроверитьИндексПолнотекстовогоПоиска();
Иначе
РасширенныйПоиск = Ложь;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
Список,
"Поиск",
Неопределено,
ВидСравненияКомпоновкиДанных.Равно,,Ложь);
Элементы.ОписаниеНайденоПолнотекстовымПоиском.Видимость = РасширенныйПоиск;
Элементы.ПредупреждениеОНеактуальностиИндекса.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтрокаПоискаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДанныеВыбора = Новый СписокЗначений;
КоличествоНайденных = 0;
Для каждого ЭлементСписка Из Элементы.СтрокаПоиска.СписокВыбора Цикл
Если ЛЕВ(ВРег(ЭлементСписка.Значение), СтрДлина(СокрЛП(Текст))) = ВРег(СокрЛП(Текст)) Тогда
ДанныеВыбора.Добавить(ЭлементСписка.Значение);
КоличествоНайденных = КоличествоНайденных + 1;
Если КоличествоНайденных > 7 Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
ВзаимодействияКлиент.СписокПередНачаломДобавления(Элемент, Отказ, Копирование, ТолькоПочта, ДокументыДоступныеДляСоздания);
КонецПроцедуры
&НаКлиенте
Процедура УзелДереваПанелиНавигацииПередСворачиванием(Элемент, Строка, Отказ)
ИмяДерева = Элемент.Имя;
Если Элемент.ТекущаяСтрока <> Неопределено Тогда
ДанныеСтроки = Элементы[ИмяДерева].ДанныеСтроки(Строка);
Если ДанныеСтроки <> Неопределено Тогда
СохранитьСостояниеУзлаВНастройках(ИмяДерева, ДанныеСтроки.Значение, Ложь);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УзелДереваПанелиНавигацииПередРазворачиванием(Элемент, Строка, Отказ)
ИмяДерева = Элемент.Имя;
Если Элемент.ТекущаяСтрока <> Неопределено Тогда
ДанныеСтроки = Элементы[ИмяДерева].ДанныеСтроки(Строка);
Если ДанныеСтроки <> Неопределено Тогда
СохранитьСостояниеУзлаВНастройках(ИмяДерева, ДанныеСтроки.Значение, Истина);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПредпросмотрHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
ВзаимодействияКлиент.ПолеHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПредупреждениеОНеотправленныхПисьмахНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
ВзаимодействияКлиент.ОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияТолькоЗначимыеПредметыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылкаФорматированнойСтроки = "ИзменитьТолькоЗначимыеПредметы" Тогда
ТолькоЗначимыеПредметы = Не ТолькоЗначимыеПредметы;
ЗаполнитьПанельПредметов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияТолькоЗначимыеКонтактыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылкаФорматированнойСтроки = "ИзменитьТолькоЗначимыеКонтакты" Тогда
ТолькоЗначимыеКонтакты = Не ТолькоЗначимыеКонтакты;
ЗаполнитьПанельКонтактов();
КонецЕсли;
КонецПроцедуры
#Область ОбработкаПеретаскивания
&НаКлиенте
Процедура ПредметыПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
Если (Строка = Неопределено) ИЛИ (ПараметрыПеретаскивания.Значение = Неопределено) Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда
Для каждого ЭлементМассива Из ПараметрыПеретаскивания.Значение Цикл
Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ЭлементМассива) Тогда
Возврат;
КонецЕсли;
КонецЦикла;
КонецЕсли;
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
КонецПроцедуры
&НаКлиенте
Процедура ПредметыПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда
ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(ПараметрыПеретаскивания.Значение,
Строка, Истина);
КонецЕсли;
ОбновитьПанельНавигации();
КонецПроцедуры
&НаКлиенте
Процедура ПапкиПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
Если (Строка = Неопределено) ИЛИ (ПараметрыПеретаскивания.Значение = Неопределено) Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
СтрокаНазначение = Папки.НайтиПоИдентификатору(Строка);
Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда
Если ТипЗнч(СтрокаНазначение.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты")
ИЛИ СтрокаНазначение.ЕстьПравоНаИзменение = 0 Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
Для каждого ЭлементМассива Из ПараметрыПеретаскивания.Значение Цикл
Если Не ВзаимодействияКлиент.ЯвляетсяЭлектроннымПисьмом(ЭлементМассива) Тогда
Продолжить;
КонецЕсли;
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
ДанныеСтроки = Элементы.Список.ДанныеСтроки(ЭлементМассива);
Если ДанныеСтроки.УчетнаяЗапись = СтрокаНазначение.УчетнаяЗапись Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Перемещение;
Возврат;
КонецЕсли;
КонецЦикла;
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Число") Тогда
СтрокаПеретаскивание = Папки.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение);
Если СтрокаПеретаскивание.УчетнаяЗапись <> СтрокаНазначение.УчетнаяЗапись Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
СтрокаРодитель = СтрокаНазначение;
Пока ТипЗнч(СтрокаРодитель.Значение) <> Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Цикл
Если СтрокаПеретаскивание = СтрокаРодитель Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
СтрокаРодитель = СтрокаРодитель.ПолучитьРодителя();
КонецЦикла;
Иначе
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПапкиПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
СтрокаНазначение = Папки.НайтиПоИдентификатору(Строка);
Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда
ВыполнитьПереносВПапкуМассиваПисем(ПараметрыПеретаскивания.Значение, СтрокаНазначение.Значение);
ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Число") Тогда
ДанныеСтрокиПеретаскивания = Папки.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение);
Если НЕ ДанныеСтрокиПеретаскивания.ПолучитьРодителя() = СтрокаНазначение Тогда
УстановитьРодителяУПапки(ДанныеСтрокиПеретаскивания.Значение,
?(ТипЗнч(СтрокаНазначение.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты"),
ПредопределенноеЗначение("Справочник.ПапкиЭлектронныхПисем.ПустаяСсылка"),
СтрокаНазначение.Значение));
КонецЕсли;
КонецЕсли;
ОбновитьПанельНавигации(СтрокаНазначение.Значение);
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура ПапкиНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
Если ПараметрыПеретаскивания.Значение = Неопределено Тогда
Возврат;
КонецЕсли;
ДанныеСтроки = Папки.НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение);
Если ТипЗнч(ДанныеСтроки.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты")
ИЛИ ДанныеСтроки.ПредопределеннаяПапка ИЛИ ДанныеСтроки.ЕстьПравоНаИзменение = 0 Тогда
Выполнение = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
СписокИменФайлов = Новый СписокЗначений;
Если ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Файл")
И ПараметрыПеретаскивания.Значение.ЭтоФайл() Тогда
СписокИменФайлов.Добавить(ПараметрыПеретаскивания.Значение.ПолноеИмя,ПараметрыПеретаскивания.Значение.Имя);
ИначеЕсли ТипЗнч(ПараметрыПеретаскивания.Значение) = Тип("Массив") Тогда
Если ПараметрыПеретаскивания.Значение.Количество() >= 1
И ТипЗнч(ПараметрыПеретаскивания.Значение[0]) = Тип("Файл") Тогда
Для Каждого ФайлПринятый Из ПараметрыПеретаскивания.Значение Цикл
Если ТипЗнч(ФайлПринятый) = Тип("Файл") И ФайлПринятый.ЭтоФайл() Тогда
СписокИменФайлов.Добавить(ФайлПринятый.ПолноеИмя,ФайлПринятый.Имя);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ПараметрыФормы = Новый Структура("Вложения", СписокИменФайлов);
ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СписокПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Обновить(Команда)
ОбновитьНаСервере();
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьПолучитьПочтуВыполнить(Команда)
ОчиститьСообщения();
Если Не РазделениеВключено И Не ИнформационнаяБазаФайловая Тогда
Возврат;
КонецЕсли;
Если ОтправкаПолучениеПисемВыполняется Тогда
ТекстСообщения = НСтр("ru = 'В настоящий момент отправка и получение почты уже выполняется.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецЕсли;
Если ДатаПредыдущегоПолученияОтправкиПочты + 15 > ОбщегоНазначенияКлиент.ДатаСеанса() Тогда
ТекстСообщения = НСтр("ru = 'С момента завершения предыдущей отправки и получения почты прошло менее 15 секунд. Повторите позже.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецЕсли;
Если ДатаПредыдущегоВыполненияКомандыОтправкиПолученияПочты + 15 > ОбщегоНазначенияКлиент.ДатаСеанса() Тогда
ТекстСообщения = НСтр("ru = 'С момента предыдущего выполнения команды отправки и получения почты прошло менее 15 секунд. Повторите позже.'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
Возврат;
КонецЕсли;
ДатаПредыдущегоВыполненияКомандыОтправкиПолученияПочты = ОбщегоНазначенияКлиент.ДатаСеанса();
ОтправитьПолучитьПочтуПользователяКлиент(Истина);
КонецПроцедуры
&НаКлиенте
Процедура Ответить(Команда)
Если ВыборКорректен(Элементы.Список.Имя, Истина) Тогда
ТекущееВзаимодействие = Элементы.Список.ТекущиеДанные.Ссылка;
Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Команда ""Ответить"" может быть выполнена только для входящего письма.'"));
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
Основание = Новый Структура("Основание,Команда",ТекущееВзаимодействие, "Ответить");
ПараметрыОткрытия = Новый Структура("Основание", Основание);
ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура ОтветитьВсем(Команда)
Если ВыборКорректен(Элементы.Список.Имя, Истина) Тогда
ТекущееВзаимодействие = Элементы.Список.ТекущиеДанные.Ссылка;
Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Команда ""Ответить всем"" может быть выполнена только для входящего письма.'"));
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
Основание = Новый Структура("Основание,Команда",ТекущееВзаимодействие, "ОтветитьВсем");
ПараметрыОткрытия = Новый Структура("Основание", Основание);
ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура Переслать(Команда)
Если ВыборКорректен(Элементы.Список.Имя, Истина) Тогда
ТекущееВзаимодействие = Элементы.Список.ТекущиеДанные.Ссылка;
Если ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")
И ТипЗнч(ТекущееВзаимодействие) <> Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Команда ""Переслать"" может быть выполнена только для писем.'"));
Возврат;
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
Основание = Новый Структура("Основание,Команда", ТекущееВзаимодействие, "Переслать");
ПараметрыОткрытия = Новый Структура("Основание", Основание);
ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура ПереключитьПанельНавигации(Команда)
ПереключитьПанельНавигацииСервер(Команда.Имя);
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВариантНавигацииПоКонтакту(Команда)
ПереключитьПанельНавигации(Команда);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВариантНавигацииПоПредмету(Команда)
ПереключитьПанельНавигации(Команда);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВариантНавигацииПоЗакладкам(Команда)
ПереключитьПанельНавигации(Команда);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВариантНавигацииПоПапкам(Команда)
ПереключитьПанельНавигации(Команда);
КонецПроцедуры
&НаКлиенте
Процедура ОтветственныйВыполнить(Команда)
КонтекстВыбора = "ОтветственныйВыполнить";
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ОткрытьФорму("Справочник.Пользователи.ФормаСписка", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОтветственныйСписок(Команда)
ИмяТекущегоЭлемента = Элементы.Список.Имя;
Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда
Возврат;
КонецЕсли;
КонтекстВыбора = "ОтветственныйСписок";
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора",Истина);
ОткрытьФорму("Справочник.Пользователи.ФормаСписка", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура РассмотреноВыполнить(Команда)
УстановитьФлагРассмотрено(Неопределено,Истина);
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПризнакРассмотрено(Команда)
РассмотреноВыполнитьСписок(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВзаимодействияПоПредмету(Команда)
ИмяТекущегоЭлемента = Элементы.Список.Имя;
Если Не ВыборКорректен(ИмяТекущегоЭлемента, Истина) Тогда
Возврат;
КонецЕсли;
Предмет = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные.Предмет;
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Предмет", Предмет);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", СтруктураОтбора);
ПараметрыФормы.Вставить("ТипВзаимодействия", "");
Если ВзаимодействияКлиентСервер.ЯвляетсяПредметом(Предмет) Тогда
ПараметрыФормы.ТипВзаимодействия = "Предмет";
ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Предмет) Тогда
ПараметрыФормы.ТипВзаимодействия = "Взаимодействие";
Иначе
Возврат;
КонецЕсли;
ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ФормаСпискаПараметрическая",
ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СнятьПризнакРассмотрено(Команда)
РассмотреноВыполнитьСписок(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура РассмотреноВыполнитьСписок(ЗначенияПризнака)
ИмяТекущегоЭлемента = Элементы.Список.Имя;
Если Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда
Возврат;
КонецЕсли;
УстановитьФлагРассмотрено(Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки, ЗначенияПризнака);
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура ПредметВыполнить(Команда)
КонтекстВыбора = "ПредметВыполнитьТипПредмета";
ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ВыборТипаПредмета",,ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПредметСписок(Команда)
ИмяТекущегоЭлемента = Элементы.Список.Имя;
Если Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда
Возврат;
КонецЕсли;
КонтекстВыбора = "ПредметСписокТипПредмета";
ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ВыборТипаПредмета",,ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьВЗакладки(Команда)
ИмяТекущегоЭлемента = ТекущийЭлемент.Имя;
Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Не выбран элемент для добавления в закладки.'"));
Возврат;
КонецЕсли;
ЭлементДляДобавления = Неопределено;
Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") Тогда
ЭлементДляДобавления = Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки;
ИначеЕсли ИмяТекущегоЭлемента = "Свойства" Или ИмяТекущегоЭлемента = "Категории" Или ИмяТекущегоЭлемента = "Папки" Тогда
ТекущиеДанные = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ЭлементДляДобавления = Новый Структура("Значение", ТекущиеДанные.Значение);
КонецЕсли;
ИначеЕсли ИмяТекущегоЭлемента = "ПредметыПанельНавигации" Тогда
ТекущиеДанные = Элементы.ПредметыПанельНавигации.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ЭлементДляДобавления = Новый Структура("Значение", ТекущиеДанные.Предмет);
КонецЕсли;
ИначеЕсли ИмяТекущегоЭлемента = "КонтактыПанелиНавигации" Тогда
ТекущиеДанные = Элементы.КонтактыПанелиНавигации.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ЭлементДляДобавления = Новый Структура("Значение", ТекущиеДанные.Контакт);
КонецЕсли;
Иначе
ТекущиеДанные = Элементы[ИмяТекущегоЭлемента].ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ЭлементДляДобавления = Новый Структура("Значение,ОписаниеТипов", ТекущиеДанные.Значение, ТекущиеДанные.ОписаниеТипов);
КонецЕсли;
КонецЕсли;
Если ЭлементДляДобавления = Неопределено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Не выбран элемент для добавления в закладки.'"));
Возврат;
КонецЕсли;
Результат = ДобавитьВЗакладкиСервер(ЭлементДляДобавления, ИмяТекущегоЭлемента);
Если Не Результат.ЭлементДобавлен Тогда
ПоказатьПредупреждение(, Результат.ТекстСообщенияОшибка);
Возврат;
КонецЕсли;
ПоказатьОповещениеПользователя(НСтр("ru = 'Добавлены в закладки:'"),
Результат.НавигационнаяСсылкаЭлемента, Результат.ПредставлениеЭлемента, БиблиотекаКартинок.ДиалогИнформация);
КонецПроцедуры
&НаКлиенте
Процедура ОтложитьРассмотрениеВыполнить(Команда)
ИмяТекущегоЭлемента = ТекущийЭлемент.Имя;
Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда
Возврат;
КонецЕсли;
ДатаОтработки = ОбщегоНазначенияКлиент.ДатаСеанса();
ДополнительныеПараметры = Новый Структура("ИмяТекущегоЭлемента", Неопределено);
ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВыборДатыОтработкиПриЗавершении", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВводДаты(ОбработчикОповещенияОЗакрытии, ДатаОтработки, НСтр("ru = 'Отработать после'"), ЧастиДаты.ДатаВремя);
КонецПроцедуры
&НаКлиенте
Процедура ОтложитьРассмотрениеСписок(Команда)
ИмяТекущегоЭлемента = Элементы.Список.Имя;
Если Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда
Возврат;
КонецЕсли;
ДатаОтработки = ОбщегоНазначенияКлиент.ДатаСеанса();
ДополнительныеПараметры = Новый Структура("ИмяТекущегоЭлемента", ИмяТекущегоЭлемента);
ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВыборДатыОтработкиПриЗавершении", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВводДаты(ОбработчикОповещенияОЗакрытии, ДатаОтработки, НСтр("ru = 'Отработать после'"), ЧастиДаты.ДатаВремя);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьВстречу(Команда)
СоздатьНовоеВзаимодействие("Встреча");
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЗапланированноеВзаимодействие(Команда)
СоздатьНовоеВзаимодействие("ЗапланированноеВзаимодействие");
КонецПроцедуры
&НаКлиенте
Процедура СоздатьТелефонныйЗвонок(Команда)
СоздатьНовоеВзаимодействие("ТелефонныйЗвонок");
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЭлектронноеПисьмо(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьЭлектронноеПисьмоПродолжение", ЭтотОбъект, );
РаботаСПочтовымиСообщениямиКлиент.ПроверитьНаличиеУчетнойЗаписиДляОтправкиПочты(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЭлектронноеПисьмоПродолжение(ПроверкаВыполнена, ДополнительныеПараметры) Экспорт
Если ПроверкаВыполнена = Истина Тогда
СоздатьНовоеВзаимодействие("ЭлектронноеПисьмоИсходящее");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьСообщениеSMS(Команда)
СоздатьНовоеВзаимодействие("СообщениеSMS");
КонецПроцедуры
&НаКлиенте
Процедура ПрименитьПравилаОбработки(Команда)
ТекущиеДанные = Элементы.Папки.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТекущиеДанные.ЕстьПравоНаИзменение = 0
ИЛИ ТипЗнч(ТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты") Тогда
Возврат;
КонецЕсли;
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("УчетнаяЗапись", ТекущиеДанные.УчетнаяЗапись);
СтруктураПараметры.Вставить("ДляПисемВПапке", ТекущиеДанные.Значение);
ОткрытьФорму("Справочник.ПравилаОбработкиЭлектроннойПочты.Форма.ПрименениеПравил", СтруктураПараметры);
КонецПроцедуры
&НаКлиенте
Процедура ПеренестиВПапку(Команда)
ИмяТекущегоЭлемента = ТекущийЭлемент.Имя;
Если СтрНачинаетсяС(ИмяТекущегоЭлемента, "Список") И Не ВыборКорректен(ИмяТекущегоЭлемента) Тогда
Возврат;
КонецЕсли;
ПапкиТекущиеДанные = Элементы.Папки.ТекущиеДанные;
Если ПапкиТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ИмяТекущегоЭлемента = "Папки" Тогда
Если ТипЗнч(ПапкиТекущиеДанные.Значение) = Тип("СправочникСсылка.УчетныеЗаписиЭлектроннойПочты")
ИЛИ ПапкиТекущиеДанные.ПредопределеннаяПапка Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Команда не может быть выполнена для данного объекта'"));
Возврат;
ИначеЕсли ПапкиТекущиеДанные.ЕстьПравоНаИзменение = 0 Тогда
ВызватьИсключение(НСтр("ru = 'Недостаточно прав для изменения папок.'"), КатегорияОшибки.НарушениеПравДоступа);
КонецЕсли;
КонецЕсли;
КонтекстВыбора = "ПеренестиВПапку";
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", Новый Структура("Владелец", ПапкиТекущиеДанные.УчетнаяЗапись));
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ОткрытьФорму("Справочник.ПапкиЭлектронныхПисем.ФормаВыбора", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЗначениеПанелиНавигации(Команда)
Элемент = ТекущийЭлементСписокПанелиНавигации();
Если Элемент = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ПоказываемоеЗначение = Неопределено;
Если ТекущиеДанные.Свойство("Контакт") И ТипЗнч(ТекущиеДанные.Контакт) <> Тип("СправочникСсылка.СтроковыеКонтактыВзаимодействий") Тогда
ПоказываемоеЗначение = ТекущиеДанные.Контакт;
ИначеЕсли ТекущиеДанные.Свойство("Предмет") Тогда
ПоказываемоеЗначение = ТекущиеДанные.Предмет;
ИначеЕсли ТекущиеДанные.Свойство("Значение") И ТипЗнч(ТекущиеДанные.Значение) <> Тип("Строка") Тогда
ПоказываемоеЗначение = ТекущиеДанные.Значение;
КонецЕсли;
Если ПоказываемоеЗначение <> Неопределено Тогда
ПоказатьЗначение(, ПоказываемоеЗначение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТолькоАктивныеПредметы(Команда)
ПоказыватьВсеАктивныеПредметы = Не ПоказыватьВсеАктивныеПредметы;
ЗаполнитьПанельПредметов();
КонецПроцедуры
&НаКлиенте
Процедура ОтображатьОбластьЧтения(Команда)
ОтображатьОбластьЧтения = Не ОтображатьОбластьЧтения;
СписокПриАктивизацииСтроки(Элементы.Список);
УправлениеВидимостьюПриПереключенииПанелиНавигации();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ИзменитьОтборСтатус(Команда)
ИзменитьОтборСтатусСервер(Команда.Имя);
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ИзменитьОтборТипВзаимодействия(Команда)
ИзменитьОтборТипВзаимодействияСервер(Команда.Имя);
ВосстановитьРаскрытыеУзлыДерева();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьОтображениеПанелиНавигации(Команда)
ПанельНавигацииСкрыта = Не ПанельНавигацииСкрыта;
УправлениеВидимостьюПриПереключенииПанелиНавигации();
КонецПроцедуры
&НаКлиенте
Процедура ПереслатьКакВложение(Команда)
ОчиститьСообщения();
Если НЕ ВыборКорректен("Список", Истина) Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы.Список.ТекущиеДанные;
Если ТекущиеДанные.Тип = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее")
Или (ТекущиеДанные.Тип = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее")
И ТекущиеДанные.СтатусИсходящегоПисьма = ПредопределенноеЗначение("Перечисление.СтатусыИсходящегоЭлектронногоПисьма.Отправлено")) Тогда
Основание = Новый Структура("Основание,Команда",ТекущиеДанные.Ссылка, "ПереслатьКакВложение");
ПараметрыОткрытия = Новый Структура("Основание", Основание);
ОткрытьФорму("Документ.ЭлектронноеПисьмоИсходящее.ФормаОбъекта", ПараметрыОткрытия);
Иначе
ТекстСообщения = НСтр("ru = 'Пересылать как вложения можно только отправленные и полученные письма.'");
ПоказатьПредупреждение(, ТекстСообщения);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
ПредметыПанельНавигации.УсловноеОформление.Элементы.Очистить();
КонтактыПанельНавигации.УсловноеОформление.Элементы.Очистить();
СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "Список.Дата", Элементы.Дата.Имя);
СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "Список.ПолученоОтправлено", Элементы.ПолученоОтправлено.Имя);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Свойства.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Свойства.НеРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ОтборЭлемента.ПравоеЗначение = 0;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Папки.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Папки.НеРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ОтборЭлемента.ПравоеЗначение = 0;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Категории.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Категории.НеРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ОтборЭлемента.ПравоеЗначение = 0;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Список.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Рассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СтрокаПоиска.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СтрокаПоиска");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = "";
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("РасширенныйПоиск");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", ЦветаСтиля.ЦветФонаПоля);
#Область РассмотреноКонтакты
Элемент = КонтактыПанельНавигации.УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("Контакт");
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("КоличествоНеРассмотрено");
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("КоличествоНеРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение);
#КонецОбласти
#Область РассмотреноПредметы
Элемент = ПредметыПанельНавигации.УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("Предмет");
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("КоличествоНеРассмотрено");
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("КоличествоНеРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение);
#КонецОбласти
КонецПроцедуры
#Область ОбработкаИзмененияБыстрыхОтборов
&НаСервере
Процедура ИзменитьОтборТипВзаимодействияСервер(Знач ИмяКоманды)
ТипВзаимодействия = Взаимодействия.ТипВзаимодействияПоИмениКоманды(ИмяКоманды, ТолькоПочта);
ПриИзмененииТипаСервер();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииСтатусаСервер(Знач ОбновлятьПанельНавигации)
ДатаДляОтбора = ТекущаяДатаСеанса();
ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект, "Статус", ДатаДляОтбора);
ШаблонЗаголовка = НСтр("ru = 'Статус: %1'");
НайденныйСтатус = Взаимодействия.СписокСтатусов().НайтиПоЗначению(Статус);
Если НайденныйСтатус = Неопределено Тогда
Статус = "Все";
ПредставлениеСтатуса = НСтр("ru = 'Все'");
Иначе
ПредставлениеСтатуса = НайденныйСтатус.Представление;
КонецЕсли;
Элементы.СписокСтатус.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеСтатуса);
Для Каждого ЭлементПодменю Из Элементы.СписокСтатус.ПодчиненныеЭлементы Цикл
Если ЭлементПодменю.Имя = ("УстановитьОтборСтатус_" + Статус) Тогда
ЭлементПодменю.Пометка = Истина;
Иначе
ЭлементПодменю.Пометка = Ложь;
КонецЕсли;
КонецЦикла;
Если ОбновлятьПанельНавигации Тогда
ОбновитьПанельНавигации();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ИзменитьОтборСтатусСервер(Знач ИмяКоманды)
Статус = СтатусПоИмениКоманды(ИмяКоманды);
ПриИзмененииСтатусаСервер(Истина);
КонецПроцедуры
&НаСервере
Функция СтатусПоИмениКоманды(ИмяКоманды)
НайденнаяПозиция = СтрНайти(ИмяКоманды, "_");
Если НайденнаяПозиция = 0 Тогда
Возврат "Все";
КонецЕсли;
СтрокаСтатус = Прав(ИмяКоманды, СтрДлина(ИмяКоманды) - НайденнаяПозиция);
Если Взаимодействия.СписокСтатусов().НайтиПоЗначению(СтрокаСтатус) = Неопределено Тогда
Возврат "Все";
КонецЕсли;
Возврат СтрокаСтатус;
КонецФункции
&НаСервере
Процедура ПриИзмененииОтветственногоСервер(Знач ОбновлятьПанельНавигации)
ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Ответственный");
Если ОбновлятьПанельНавигации Тогда
ОбновитьПанельНавигации();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииТипаСервер(ОбновлятьПанельНавигации = Истина)
Взаимодействия.ОбработатьПодменюОтборПоТипуВзаимодействий(ЭтотОбъект);
ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(ЭтотОбъект, ТипВзаимодействия);
Если ОбновлятьПанельНавигации Тогда
ОбновитьПанельНавигации();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработкаАктивизацииСтрокСписковИПанелиНавигации
&НаКлиенте
Процедура ОбработатьАктивизациюСтрокиСписка()
ЕстьНебезопасноеСодержимое = Ложь;
ВключитьНебезопасноеСодержимое = Ложь;
УстановитьВидимостьПредупрежденияБезопасности(ЭтотОбъект);
Если ВыборКорректен("Список",Истина) Тогда
Если ОтображатьОбластьЧтения Тогда
ИмяСтраницыПредпросмотра = Элементы.СтраницыПредпросмотр.ТекущаяСтраница.Имя;
Если ВзаимодействиеДляКоторогоСформированПредпросмотр <> Элементы.Список.ТекущиеДанные.Ссылка Тогда
ОтобразитьПредпросмотрВзаимодействия(Элементы.Список.ТекущиеДанные.Ссылка, ИмяСтраницыПредпросмотра);
Если ИмяСтраницыПредпросмотра <> Элементы.СтраницыПредпросмотр.ТекущаяСтраница.Имя Тогда
Элементы.СтраницыПредпросмотр.ТекущаяСтраница = Элементы[ИмяСтраницыПредпросмотра];
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если РасширенныйПоиск Тогда
ЗаполнитьОписаниеНайденоПолнотекстовымПоиском(Элементы.Список.ТекущиеДанные.Ссылка);
Иначе
ОписаниеНайденоПолнотекстовымПоиском = "";
КонецЕсли;
Иначе
Если ОтображатьОбластьЧтения Тогда
Если Элементы.СтраницыПредпросмотр.ТекущаяСтраница <> Элементы.СтраницаПредпросмотрОбычныйТекст Тогда
Элементы.СтраницыПредпросмотр.ТекущаяСтраница = Элементы.СтраницаПредпросмотрОбычныйТекст;
КонецЕсли;
Предпросмотр = "";
ПредпросмотрHTML = "<HTML><BODY></BODY></HTML>";
ВзаимодействиеДляКоторогоСформированПредпросмотр = Неопределено;
КонецЕсли;
ОписаниеНайденоПолнотекстовымПоиском = "";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьАктивизациюСтрокиПанелиНавигации();
Если ПанельНавигацииСкрыта Тогда
Возврат;
КонецЕсли;
Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт Тогда
ТекущиеДанные = Элементы.КонтактыПанелиНавигации.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
Если ТекущиеДанные.Контакт = ТекущееЗначениеПанелиНавигации Тогда
Возврат;
Иначе
ТекущееЗначениеПанелиНавигации = ТекущиеДанные.Контакт;
КонецЕсли;
ИзменитьОтборСписок("Контакты",Новый Структура("Значение,ОписаниеТипов",
ТекущиеДанные.Контакт, Неопределено));
СохранитьТекущееАктивноеЗначениеВНастройках("Контакты",ТекущиеДанные.Контакт);
КонецЕсли;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет Тогда
ТекущиеДанные = Элементы.ПредметыПанельНавигации.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
Если ТекущиеДанные.Предмет = ТекущееЗначениеПанелиНавигации Тогда
Возврат;
Иначе
ОчиститьПредпросмотр();
ТекущееЗначениеПанелиНавигации = ТекущиеДанные.Предмет;
КонецЕсли;
ИзменитьОтборСписок("Предметы",Новый Структура("Значение,ОписаниеТипов",
ТекущиеДанные.Предмет, Неопределено));
СохранитьТекущееАктивноеЗначениеВНастройках("Предметы", ТекущиеДанные.Предмет);
ТекущиеДанные = Элементы.ПредметыПанельНавигации.ТекущиеДанные;
Если ТекущиеДанные = Неопределено
Или ТекущиеДанные.Предмет <> ТекущееЗначениеПанелиНавигации Тогда
Элементы.ПредметыПанельНавигации.ТекущаяСтрока = ТекущееЗначениеПанелиНавигации;
КонецЕсли;
Иначе
ИзменитьОтборСписок("Предметы",Новый Структура("Значение,ОписаниеТипов",
Неопределено, Неопределено));
КонецЕсли;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда
ТекущиеДанные = Элементы.Папки.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ИзменитьОтборСписок("Папки",Новый Структура("Значение,УчетнаяЗапись",
ТекущиеДанные.Значение, ТекущиеДанные.УчетнаяЗапись));
СохранитьТекущееАктивноеЗначениеВНастройках("Папки", ТекущиеДанные.Значение);
КонецЕсли;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда
ТекущиеДанные = Элементы.Закладки.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено И НЕ ТекущиеДанные.ЭтоГруппа Тогда
ИзменитьОтборСписок("Закладки",Новый Структура("Значение", ТекущиеДанные.Ссылка));
СохранитьТекущееАктивноеЗначениеВНастройках("Закладки", ТекущиеДанные.Ссылка);
Иначе
СоздатьГруппуОтбораПанелиНавигации();
КонецЕсли;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства Тогда
ТекущиеДанные = Элементы.Свойства.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ИзменитьОтборСписок("Свойства", Новый Структура("Значение", ТекущиеДанные.Значение));
СохранитьТекущееАктивноеЗначениеВНастройках("Свойства", ТекущиеДанные.Значение);
КонецЕсли;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКатегории Тогда
ТекущиеДанные = Элементы.Категории.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ИзменитьОтборСписок("Категории",Новый Структура("Значение", ТекущиеДанные.Значение));
СохранитьТекущееАктивноеЗначениеВНастройках("Категории", ТекущиеДанные.Значение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьТекущееАктивноеЗначениеВНастройках(ИмяДерева, Значение)
Если ИмяДерева = "Свойства" Тогда
ИмяДерева = "Свойства_" + Строка(ТекущееСвойствоПанелиНавигации);
КонецЕсли;
НайденныеСтроки = НастройкиДеревьевПанелиНавигации.НайтиСтроки(Новый Структура("ИмяДерева",ИмяДерева));
Если НайденныеСтроки.Количество() = 1 Тогда
СтрокаДереваНастроек = НайденныеСтроки[0];
ИначеЕсли НайденныеСтроки.Количество() > 1 Тогда
СтрокаДереваНастроек = НайденныеСтроки[0];
Для Инд = 1 По НайденныеСтроки.Количество()-1 Цикл
НастройкиДеревьевПанелиНавигации.Удалить(НайденныеСтроки[инд]);
КонецЦикла;
Иначе
СтрокаДереваНастроек = НастройкиДеревьевПанелиНавигации.Добавить();
СтрокаДереваНастроек.ИмяДерева = ИмяДерева;
КонецЕсли;
СтрокаДереваНастроек.ТекущееЗначение = Значение;
КонецПроцедуры
&НаСервере
Функция СоздатьГруппуОтбораПанелиНавигации()
Возврат ОбщегоНазначенияКлиентСервер.СоздатьГруппуЭлементовОтбора(
ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы,
"ОтборПанелиНавигации",
ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ);
КонецФункции
&НаСервере
Процедура ИзменитьОтборСписок(ИмяТаблицы, ДанныеДляОбработки)
Если ИмяТаблицы = "Предметы" Или ИмяТаблицы = "Контакты" Или ИмяТаблицы = "Закладки" Тогда
ТекстЗапросаДинамическогоСписка = Взаимодействия.ТекстЗапросаСпискаВзаимодействий(ДанныеДляОбработки.Значение);
Иначе
ТекстЗапросаДинамическогоСписка = Взаимодействия.ТекстЗапросаСпискаВзаимодействий();
КонецЕсли;
СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
СвойстваСписка.ТекстЗапроса = ТекстЗапросаДинамическогоСписка;
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка);
ГруппаОтбора = СоздатьГруппуОтбораПанелиНавигации();
Если ДанныеДляОбработки.Значение = "ВсеЗначения" Тогда
ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы.Удалить(ГруппаОтбора);
Возврат;
КонецЕсли;
ШаблонЗаголовка = "%1 (%2)";
Если ИмяТаблицы = "Предметы" Тогда
ИмяПоля = "Предмет";
ВидСравненияЭлементаОтбора = ВидСравненияКомпоновкиДанных.Равно;
ПравоеЗначение = ДанныеДляОбработки.Значение;
ИмяОтбора = НСтр("ru = 'Предмет'");
ЗначениеОтбора = ДанныеДляОбработки.Значение;
ИначеЕсли ИмяТаблицы = "Папки" Тогда
ИмяПоля = "Тип";
ВидСравненияЭлементаОтбора = ВидСравненияКомпоновкиДанных.ВСписке;
СписокТипов = Новый СписокЗначений;
СписокТипов.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее"));
СписокТипов.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"));
ПравоеЗначение = СписокТипов;
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ГруппаОтбора, ИмяПоля,
ВидСравненияЭлементаОтбора, ПравоеЗначение);
ЗначениеОтбора = ДанныеДляОбработки.Значение;
Если ТипЗнч(ДанныеДляОбработки.Значение) = Тип("СправочникСсылка.ПапкиЭлектронныхПисем") Тогда
ИмяПоля = "Папка";
ВидСравненияЭлементаОтбора = ВидСравненияКомпоновкиДанных.Равно;
ПравоеЗначение = ДанныеДляОбработки.Значение;
ИмяОтбора = НСтр("ru = 'Папка'");
Иначе
ИмяПоля = "УчетнаяЗапись";
ВидСравненияЭлементаОтбора = ВидСравненияКомпоновкиДанных.Равно;
ПравоеЗначение = ДанныеДляОбработки.Значение;
ИмяОтбора = НСтр("ru = 'Почта'");
КонецЕсли;
ИначеЕсли ИмяТаблицы = "Контакты" Тогда
ИмяПоля = "Контакт";
ВидСравненияЭлементаОтбора = ВидСравненияКомпоновкиДанных.Равно;
ПравоеЗначение = ДанныеДляОбработки.Значение;
ИмяОтбора = НСтр("ru = 'Контакт'");
ЗначениеОтбора = ДанныеДляОбработки.Значение;
ИначеЕсли ИмяТаблицы = "Свойства" Тогда
ИмяПоля = "Ссылка.[" + Строка(ТекущееСвойствоПанелиНавигации) + "]";
ИмяОтбора = Строка(ТекущееСвойствоПанелиНавигации);
Если ТипЗнч(ДанныеДляОбработки.Значение) = Тип("Строка")
И ДанныеДляОбработки.Значение = "НеУказан" Тогда
ВидСравненияЭлементаОтбора = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ПравоеЗначение = "";
ЗначениеОтбора = НСтр("ru = 'Не указан'");
Иначе
ВидСравненияЭлементаОтбора = ВидСравненияКомпоновкиДанных.Равно;
ПравоеЗначение = ДанныеДляОбработки.Значение;
ЗначениеОтбора = ДанныеДляОбработки.Значение;
КонецЕсли;
ИначеЕсли ИмяТаблицы = "Категории" Тогда
ИмяПоля = "Ссылка.[" + Строка(ДанныеДляОбработки.Значение) + "]";
ВидСравненияЭлементаОтбора = ВидСравненияКомпоновкиДанных.Равно;
ПравоеЗначение = Истина;
ИмяОтбора = НСтр("ru = 'Категория'");
ЗначениеОтбора = Строка(ДанныеДляОбработки.Значение);
ИначеЕсли ИмяТаблицы = "Закладки" Тогда
НастройкаКомпоновки = ДанныеДляОбработки.Значение.КомпоновщикНастроек.Получить();
Если НастройкаКомпоновки = Неопределено Тогда
Возврат;
КонецЕсли;
СхемаКомпоновки = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("СхемаОтборВзаимодействия");
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки ,УникальныйИдентификатор);
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
КомпоновщикНастроек.ЗагрузитьНастройки(НастройкаКомпоновки);
КомпоновщикНастроек.Восстановить(СпособВосстановленияНастроекКомпоновкиДанных.ПроверятьДоступность);
СкопироватьОтбор(ГруппаОтбора,КомпоновщикНастроек.Настройки.Отбор);
ЗаголовокПанелиНавигации = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонЗаголовка, НСтр("ru = 'Закладка'"), ДанныеДляОбработки.Значение);
Возврат;
Иначе
ЗаголовокПанелиНавигации = "";
Возврат;
КонецЕсли;
ЗаголовокПанелиНавигацииПодсказка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка,
ЗначениеОтбора, ИмяОтбора);
ЗаголовокПанелиНавигации = ЗначениеОтбора;
Если СтрДлина(ЗаголовокПанелиНавигации) > 30 Тогда
ЗаголовокПанелиНавигации = Лев(ЗаголовокПанелиНавигации, 27) + "...";
КонецЕсли;
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ГруппаОтбора, ИмяПоля,
ВидСравненияЭлементаОтбора, ПравоеЗначение);
КонецПроцедуры
&НаСервере
Процедура ОтобразитьПредпросмотрВзаимодействия(СсылкаДокументВзаимодействий, ИмяТекущейСтраницы)
Если ТипЗнч(СсылкаДокументВзаимодействий) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее") Тогда
ИмяТекущейСтраницы = Элементы.СтраницаПредпросмотрHTML.Имя;
ПредпросмотрHTML = Взаимодействия.СформироватьТекстHTMLДляВходящегоПисьма(СсылкаДокументВзаимодействий, Ложь, Ложь,
Не ВключитьНебезопасноеСодержимое, ЕстьНебезопасноеСодержимое);
Предпросмотр = "";
ИначеЕсли ТипЗнч(СсылкаДокументВзаимодействий) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда
ИмяТекущейСтраницы = Элементы.СтраницаПредпросмотрHTML.Имя;
ПредпросмотрHTML = Взаимодействия.СформироватьТекстHTMLДляИсходящегоПисьма(СсылкаДокументВзаимодействий, Ложь, Ложь,
Не ВключитьНебезопасноеСодержимое, ЕстьНебезопасноеСодержимое);
Предпросмотр = "";
Иначе
ЕстьНебезопасноеСодержимое = Ложь;
ИмяТекущейСтраницы = Элементы.СтраницаПредпросмотрОбычныйТекст.Имя;
Если ТипЗнч(СсылкаДокументВзаимодействий) = Тип("ДокументСсылка.СообщениеSMS") Тогда
Предпросмотр = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаДокументВзаимодействий, "ТекстСообщения");
Иначе
Предпросмотр = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СсылкаДокументВзаимодействий, "Описание");
КонецЕсли;
ПредпросмотрHTML = "<HTML><BODY></BODY></HTML>";
КонецЕсли;
Если СтрНайти(ПредпросмотрHTML,"<BODY>") = 0 Тогда
ПредпросмотрHTML = "<HTML><BODY>" + ПредпросмотрHTML + "</BODY></HTML>";
КонецЕсли;
ВзаимодействиеДляКоторогоСформированПредпросмотр = СсылкаДокументВзаимодействий;
УстановитьВидимостьПредупрежденияБезопасности(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ПереключениеИЗаполнениеПанелейНавигации
&НаСервере
Процедура ПереключитьПанельНавигацииСервер(ИмяКоманды)
Если ИмяКоманды = "УстановитьВариантНавигацииПоКонтакту" Тогда
ЗаполнитьПанельКонтактов();
Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт;
ИначеЕсли ИмяКоманды = "УстановитьВариантНавигацииПоПредмету" Тогда
ЗаполнитьПанельПредметов();
Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет;
ИначеЕсли ИмяКоманды = "УстановитьВариантНавигацииПоПапкам" Тогда
ЗаполнитьДеревоПапок();
Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки;
ИначеЕсли ИмяКоманды = "УстановитьВариантНавигацииПоЗакладкам" Тогда
Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки;
ИначеЕсли ИмяКоманды = "УстановитьВариантПоКатегориям" Тогда
ЗаполнитьТаблицуКатегорий();
Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКатегории;
ИначеЕсли СтрНайти(ИмяКоманды,"УстановитьВариантПоСвойству") > 0 Тогда
ЗаполнитьДеревоСвойств(ИмяКоманды);
Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства;
КонецЕсли;
ПанельНавигацииСкрыта = Ложь;
ИмяТекущейПанелиНавигации = Элементы.СтраницыПанелиНавигации.ТекущаяСтраница.Имя;
УправлениеВидимостьюПриПереключенииПанелиНавигации();
ПослеЗаполненияПанелиНавигации();
КонецПроцедуры
&НаСервере
Процедура УправлениеВидимостьюПриПереключенииПанелиНавигации()
ТекущаяСтраницаПанелиНавигации = Элементы.СтраницыПанелиНавигации.ТекущаяСтраница;
ЭтоПапки = (ТекущаяСтраницаПанелиНавигации = Элементы.СтраницаПапки);
Элементы.СписокКонтекстноеМенюПеренестиВПапку.Видимость = ЭтоПапки;
Элементы.ПолученоОтправлено.Видимость = ЭтоПапки;
Элементы.Размер.Видимость = ЭтоПапки;
Элементы.СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопка.Видимость = ЭтоПапки Или ТолькоПочта;
Элементы.СписокОтветить.Видимость = ЭтоПапки Или ТолькоПочта;
Элементы.СписокОтветитьВсем.Видимость = ЭтоПапки Или ТолькоПочта;
Элементы.СписокПереслать.Видимость = ЭтоПапки Или ТолькоПочта;
Элементы.СписокОтправитьПолучитьПочту.Видимость = (ЭтоПапки Или ТолькоПочта)
И (ИнформационнаяБазаФайловая Или РазделениеВключено);
Элементы.Дата.Видимость = НЕ ЭтоПапки;
Элементы.ГруппаСоздать.Видимость = НЕ ЭтоПапки И НЕ ТолькоПочта;
Элементы.СписокКонтекстноеМенюСкопировать.Видимость = Не ЭтоПапки И Не ТолькоПочта;
Элементы.Скопировать.Видимость = Не ЭтоПапки И Не ТолькоПочта;
Элементы.СтраницыПредпросмотр.Видимость = ОтображатьОбластьЧтения;
Элементы.СписокОтображатьОбластьЧтения.Пометка = ОтображатьОбластьЧтения;
Элементы.СписокТипВзаимодействия.Видимость = Не ЭтоПапки;
Если ЭтоПапки Тогда
ТипВзаимодействия = "Все";
ПриИзмененииТипаСервер(Ложь);
КонецЕсли;
Элементы.ГруппаПанельНавигации.Видимость = НЕ ПанельНавигацииСкрыта;
КомандаИзменитьОтображениеПанелиНавигации = Команды.Найти("ИзменитьОтображениеПанелиНавигации");
Если ПанельНавигацииСкрыта Тогда
Элементы.ИзменитьОтображениеПанелиНавигации.Картинка = БиблиотекаКартинок.СтрелкаВправо;
КомандаИзменитьОтображениеПанелиНавигации.Подсказка = НСтр("ru = 'Показать панель навигации'");
КомандаИзменитьОтображениеПанелиНавигации.Заголовок = НСтр("ru = 'Показать панель навигации'");
Иначе
Элементы.ИзменитьОтображениеПанелиНавигации.Картинка = БиблиотекаКартинок.СтрелкаВлево;
КомандаИзменитьОтображениеПанелиНавигации.Подсказка = НСтр("ru = 'Скрыть панель навигации'");
КомандаИзменитьОтображениеПанелиНавигации.Заголовок = НСтр("ru = 'Скрыть панель навигации'");
КонецЕсли;
УстановитьЗаголовокВидаПанелиНавигации();
СФормироватьДекорациюТолькоЗначимыеПредметы();
СФормироватьДекорациюТолькоЗначимыеКонтакты();
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовокВидаПанелиНавигации(ЗначениеОтбора = Неопределено)
Для каждого ПодчиненныйЭлемент Из Элементы.ВыборВариантаНавигации.ПодчиненныеЭлементы Цикл
Если ТипЗнч(ПодчиненныйЭлемент) = Тип("КнопкаФормы") Тогда
ПодчиненныйЭлемент.Пометка = Ложь;
КонецЕсли;
КонецЦикла;
Если ПанельНавигацииСкрыта Тогда
Элементы.ВыборВариантаНавигации.Заголовок = ?(ПустаяСтрока(ЗаголовокПанелиНавигации),
НСтр("ru = 'Не указан'"),
ЗаголовокПанелиНавигации);
Элементы.ВыборВариантаНавигации.Подсказка = ?(ПустаяСтрока(ЗаголовокПанелиНавигации),
НСтр("ru = 'Не указан'") + ЗаголовокПанелиНавигацииПодсказка,
ЗаголовокПанелиНавигацииПодсказка);
Иначе
Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства Тогда
Элементы.ВыборВариантаНавигации.Заголовок = НСтр("ru = 'По'") + " " + ПредставлениеТекущегоСвойства;
НайденныеСтроки = ТаблицаДопРеквизитовСвойств.НайтиСтроки(Новый Структура("ДопРеквизитСведение",
ТекущееСвойствоПанелиНавигации));
Если НайденныеСтроки.Количество() > 0 Тогда
Элементы["ДопКнопкаВыбораВариантаНавигацииСвойства_" + XMLСтрока(НайденныеСтроки[0].ПорядковыйНомер)].Пометка = Истина;
КонецЕсли;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда
Элементы.ВыборВариантаНавигации.Заголовок = НСтр("ru = 'По закладкам'");
Элементы.УстановитьВариантНавигацииПоЗакладкам.Пометка = Истина;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет Тогда
Элементы.ВыборВариантаНавигации.Заголовок = НСтр("ru = 'По предметам'");
Элементы.УстановитьВариантНавигацииПоПредмету.Пометка = Истина;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт Тогда
Элементы.ВыборВариантаНавигации.Заголовок = НСтр("ru = 'По контактам'");
Элементы.УстановитьВариантНавигацииПоКонтакту.Пометка = Истина;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда
Элементы.ВыборВариантаНавигации.Заголовок = НСтр("ru = 'По папкам'");
Элементы.УстановитьВариантНавигацииПоПапкам.Пометка = Истина;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКатегории Тогда
Элементы.ВыборВариантаНавигации.Заголовок = НСтр("ru = 'По категориям'");
Элементы["ДопКнопкаВыбораВариантаНавигацииКатегории"].Пометка = Истина;
КонецЕсли;
Элементы.ВыборВариантаНавигации.Подсказка = НСтр("ru = 'Выберите вариант навигации'");
КонецЕсли;
Элементы.ГруппаПанельНавигации.Заголовок = ?(ПустаяСтрока(ЗаголовокПанелиНавигации),
НСтр("ru = 'Отбор не установлен'"),
НСтр("ru = 'Установлен отбор'"));
КонецПроцедуры
&НаСервере
Процедура ДобавитьСтрокуВсе(ДанныеФормыКоллекция, НомерКартинки = 0)
Если ТипЗнч(ДанныеФормыКоллекция) = Тип("ДанныеФормыДерево") Тогда
НоваяСтрока = ДанныеФормыКоллекция.ПолучитьЭлементы().Добавить();
Иначе
НоваяСтрока = ДанныеФормыКоллекция.Добавить();
КонецЕсли;
НоваяСтрока.Значение = "ВсеЗначения";
НоваяСтрока.Представление = НСтр("ru = 'Все'");
НоваяСтрока.НомерКартинки = НомерКартинки;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДеревоСвойств(ИмяКоманды = "")
Свойства.ПолучитьЭлементы().Очистить();
Если Не ПустаяСтрока(ИмяКоманды) Тогда
НомерСвойстваВТаблице = Число(Прав(ИмяКоманды, 1));
НайденныеСтроки = ТаблицаДопРеквизитовСвойств.НайтиСтроки(Новый Структура("ПорядковыйНомер", НомерСвойстваВТаблице));
ТекущееСвойствоПанелиНавигации = НайденныеСтроки[0].ДопРеквизитСведение;
ТекущееСвойствоПанелиНавигацииЯвляетсяРеквизитом = НайденныеСтроки[0].ЭтоРеквизит;
ПредставлениеТекущегоСвойства = НайденныеСтроки[0].Представление;
КонецЕсли;
Элементы.СвойстваПредставление.Заголовок = ПредставлениеТекущегоСвойства;
Запрос = Новый Запрос;
ТекстУсловия = "";
ТекстУсловияПоОтборуСписка = ПолучитьТекстЗапросаПоОтборуСписка(Запрос);
Если Не ПустаяСтрока(ТекстУсловияПоОтборуСписка) Тогда
Запрос.Текст = ТекстУсловияПоОтборуСписка;
ТекстУсловия = " ГДЕ
|(ДокументВзаимодействий.Ссылка В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОтборСписка.Ссылка
| ИЗ
| ОтборСписка КАК ОтборСписка))";
КонецЕсли;
Если ТекущееСвойствоПанелиНавигацииЯвляетсяРеквизитом Тогда
Запрос.Текст = Запрос.Текст + "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВложенныйЗапрос.Значение КАК Значение,
| СУММА(ВложенныйЗапрос.НеРассмотрено) КАК НеРассмотрено,
| 1 КАК НомерКартинки,
| ВЫБОР
| КОГДА ВложенныйЗапрос.Значение = &НеУказан
| ТОГДА &НеУказанПредставление
| ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Значение)
| КОНЕЦ КАК Представление
|ИЗ
| (ВЫБРАТЬ
| ДокументВзаимодействий.Ссылка КАК Ссылка,
| ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан) КАК Значение,
| ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ КАК НеРассмотрено
| ИЗ
| Документ.ЭлектронноеПисьмоИсходящее КАК ДокументВзаимодействий
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ДокументВзаимодействий.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоИсходящее.ДополнительныеРеквизиты КАК ДокументВзаимодействийДополнительныеРеквизиты
| ПО (ДокументВзаимодействийДополнительныеРеквизиты.Ссылка = ДокументВзаимодействий.Ссылка)
| И (ДокументВзаимодействийДополнительныеРеквизиты.Свойство = &Свойство)
| И &ТекстУсловия
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДокументВзаимодействий.Ссылка,
| ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан),
| ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ
| ИЗ
| Документ.ЭлектронноеПисьмоВходящее КАК ДокументВзаимодействий
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ДокументВзаимодействий.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее.ДополнительныеРеквизиты КАК ДокументВзаимодействийДополнительныеРеквизиты
| ПО (ДокументВзаимодействийДополнительныеРеквизиты.Ссылка = ДокументВзаимодействий.Ссылка)
| И (ДокументВзаимодействийДополнительныеРеквизиты.Свойство = &Свойство)
| И &ТекстУсловия
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДокументВзаимодействий.Ссылка,
| ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан),
| ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ
| ИЗ
| Документ.Встреча КАК ДокументВзаимодействий
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ДокументВзаимодействий.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.Встреча.ДополнительныеРеквизиты КАК ДокументВзаимодействийДополнительныеРеквизиты
| ПО (ДокументВзаимодействийДополнительныеРеквизиты.Ссылка = ДокументВзаимодействий.Ссылка)
| И (ДокументВзаимодействийДополнительныеРеквизиты.Свойство = &Свойство)
| И &ТекстУсловия
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДокументВзаимодействий.Ссылка,
| ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан),
| ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ
| ИЗ
| Документ.ТелефонныйЗвонок КАК ДокументВзаимодействий
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ДокументВзаимодействий.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ТелефонныйЗвонок.ДополнительныеРеквизиты КАК ДокументВзаимодействийДополнительныеРеквизиты
| ПО (ДокументВзаимодействийДополнительныеРеквизиты.Ссылка = ДокументВзаимодействий.Ссылка)
| И (ДокументВзаимодействийДополнительныеРеквизиты.Свойство = &Свойство)
| И &ТекстУсловия
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДокументВзаимодействий.Ссылка,
| ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан),
| ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ
| ИЗ
| Документ.СообщениеSMS КАК ДокументВзаимодействий
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ДокументВзаимодействий.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СообщениеSMS.ДополнительныеРеквизиты КАК ДокументВзаимодействийДополнительныеРеквизиты
| ПО (ДокументВзаимодействийДополнительныеРеквизиты.Ссылка = ДокументВзаимодействий.Ссылка)
| И (ДокументВзаимодействийДополнительныеРеквизиты.Свойство = &Свойство)
| И &ТекстУсловия
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДокументВзаимодействий.Ссылка,
| ЕСТЬNULL(ДокументВзаимодействийДополнительныеРеквизиты.Значение, &НеУказан),
| ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ
| ИЗ
| Документ.ЗапланированноеВзаимодействие КАК ДокументВзаимодействий
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ДокументВзаимодействий.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗапланированноеВзаимодействие.ДополнительныеРеквизиты КАК ДокументВзаимодействийДополнительныеРеквизиты
| ПО (ДокументВзаимодействийДополнительныеРеквизиты.Ссылка = ДокументВзаимодействий.Ссылка)
| И (ДокументВзаимодействийДополнительныеРеквизиты.Свойство = &Свойство)
| И &ТекстУсловия) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Значение
|
|УПОРЯДОЧИТЬ ПО
| Значение
|ИТОГИ ПО
| Значение ИЕРАРХИЯ";
Иначе
Запрос.Текст = Запрос.Текст + "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ВложенныйЗапрос.Значение КАК Значение,
| СУММА(ВложенныйЗапрос.НеРассмотрено) КАК НеРассмотрено,
| 1 КАК НомерКартинки,
| ВЫБОР
| КОГДА ВложенныйЗапрос.Значение = &НеУказан
| ТОГДА &НеУказанПредставление
| ИНАЧЕ ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Значение)
| КОНЕЦ КАК Представление
| ИЗ
| (ВЫБРАТЬ
| ДокументВзаимодействий.Ссылка КАК Ссылка,
| ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ КАК НеРассмотрено,
| ЕСТЬNULL(ДополнительныеСведения.Значение, &НеУказан) КАК Значение
| ИЗ
| ЖурналДокументов.Взаимодействия КАК ДокументВзаимодействий
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ДокументВзаимодействий.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
| ПО ДокументВзаимодействий.Ссылка = ДополнительныеСведения.Объект
| И (ДополнительныеСведения.Свойство = &Свойство)
| И &ТекстУсловия) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Значение
|
|УПОРЯДОЧИТЬ ПО
|Значение
|
|ИТОГИ ПО
|Значение ИЕРАРХИЯ";
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И &ТекстУсловия", ТекстУсловия);
Запрос.УстановитьПараметр("Свойство", ТекущееСвойствоПанелиНавигации);
Запрос.УстановитьПараметр("НеУказан", "НеУказан");
Запрос.УстановитьПараметр("НеУказанПредставление", НСтр("ru = 'Не указан'"));
Результат = Запрос.Выполнить();
Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
СтрокиПервыйУровень = Свойства.ПолучитьЭлементы();
Для Каждого Строка Из Дерево.Строки Цикл
СтрокаСвойства = СтрокиПервыйУровень.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСвойства, Строка);
СтрокаСвойства.НомерКартинки = ?(ТипЗнч(СтрокаСвойства.Значение) = Тип("Строка"), 0, 1);
СтрокаСвойства.Представление = Строка(СтрокаСвойства.Значение)
+ ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено,
"", " (" + Строка(Строка.НеРассмотрено) + ")");
ДобавитьСтрокиВДеревоНавигации(Строка, СтрокаСвойства, Истина, 1);
КонецЦикла;
ДобавитьСтрокуВсе(Свойства, 2);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПанельПредметов()
ПараметрыСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
ОтборПриемник = ПредметыПанельНавигации.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
ОтборПриемник.Элементы.Очистить();
Если ТолькоЗначимыеПредметы Тогда
Запрос = Новый Запрос;
ТекстЗапросаПоОтбору = ПолучитьТекстЗапросаПоОтборуСписка(Запрос);
ПозицияГде = СтрНайти(ТекстЗапросаПоОтбору, "ГДЕ");
Если ПозицияГде = 0 Тогда
СтрокаПоКоторойИщем = "";
Иначе
СтрокаПоКоторойИщем = Прав(ТекстЗапросаПоОтбору, СтрДлина(ТекстЗапросаПоОтбору) - ПозицияГде + 1);
КонецЕсли;
МассивСтрокУсловия = СтрРазделить(СтрокаПоКоторойИщем, Символы.ПС, Ложь);
ТекстУсловийПоЖурналуДокументов = "";
ТекстУсловийПоРегистру = "";
КонструкцияИ = Символы.Таб + "И";
Для Каждого СтрокаУсловия Из МассивСтрокУсловия Цикл
СтрокаУсловия = СтрЗаменить(СтрокаУсловия, "&П", "&Пар");
Если СтрНайти(СтрокаУсловия, "ЖурналДокументовВзаимодействия") Тогда
Если ПустаяСтрока(ТекстУсловийПоЖурналуДокументов)
И СтрНачинаетсяС(СтрокаУсловия, КонструкцияИ) Тогда
СтрокаУсловия = Прав(СтрокаУсловия, СтрДлина(СтрокаУсловия) - СтрДлина(КонструкцияИ));
КонецЕсли;
ТекстУсловийПоЖурналуДокументов = ТекстУсловийПоЖурналуДокументов + СтрокаУсловия + Символы.ПС;
ИначеЕсли СтрНайти(СтрокаУсловия, "ПредметыВзаимодействий") Тогда
Если ПустаяСтрока(ТекстУсловийПоРегистру)
И СтрНачинаетсяС(СтрокаУсловия, КонструкцияИ) Тогда
СтрокаУсловия = Прав(СтрокаУсловия, СтрДлина(СтрокаУсловия) - СтрДлина(КонструкцияИ));
КонецЕсли;
ТекстУсловийПоРегистру = ТекстУсловийПоРегистру + СтрокаУсловия + Символы.ПС;
КонецЕсли;
КонецЦикла;
ТекстЗапросаДинамическийСписок =
"ВЫБРАТЬ
| СостоянияПредметовВзаимодействий.Предмет КАК Предмет,
| СостоянияПредметовВзаимодействий.КоличествоНеРассмотрено КАК КоличествоНеРассмотрено,
| СостоянияПредметовВзаимодействий.ДатаПоследнегоВзаимодействия КАК ДатаПоследнегоВзаимодействия,
| СостоянияПредметовВзаимодействий.Активен КАК Активен,
| ТИПЗНАЧЕНИЯ(СостоянияПредметовВзаимодействий.Предмет) КАК ТипПредмета
|ИЗ
| РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий
|ГДЕ
| ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия
| ПО
| ПредметыВзаимодействий.Предмет = СостоянияПредметовВзаимодействий.Предмет
| И ПредметыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка
| И &ТекстУсловияЖурналДокументов
| ГДЕ
| &ТекстУсловияРегистрПапки)";
ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "&ТекстУсловияЖурналДокументов",
?(ПустаяСтрока(ТекстУсловийПоЖурналуДокументов), "ИСТИНА", ТекстУсловийПоЖурналуДокументов));
ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "&ТекстУсловияРегистрПапки",
?(ПустаяСтрока(ТекстУсловийПоРегистру), "ИСТИНА", ТекстУсловийПоРегистру));
ПараметрыСписка.ТекстЗапроса = ТекстЗапросаДинамическийСписок;
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.ПредметыПанельНавигации, ПараметрыСписка);
Для каждого ПараметрЗапроса Из Запрос.Параметры Цикл
Если СтрНачинаетсяС(ПараметрЗапроса.Ключ, "П") Тогда
ИмяПараметра = "Пар" + Прав(ПараметрЗапроса.Ключ, СтрДлина(ПараметрЗапроса.Ключ)-1);
Иначе
ИмяПараметра = ПараметрЗапроса.Ключ;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(ПредметыПанельНавигации, ИмяПараметра, ПараметрЗапроса.Значение);
КонецЦикла;
Иначе
ТекстЗапросаДинамическийСписок = "
|ВЫБРАТЬ
| СостоянияПредметовВзаимодействий.Предмет,
| СостоянияПредметовВзаимодействий.КоличествоНеРассмотрено,
| СостоянияПредметовВзаимодействий.ДатаПоследнегоВзаимодействия,
| СостоянияПредметовВзаимодействий.Активен КАК Активен,
| ТИПЗНАЧЕНИЯ(СостоянияПредметовВзаимодействий.Предмет) КАК ТипПредмета
|ИЗ
| РегистрСведений.СостоянияПредметовВзаимодействий КАК СостоянияПредметовВзаимодействий
|ГДЕ
| ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия
| ПО ПредметыПапкиВзаимодействий.Предмет = СостоянияПредметовВзаимодействий.Предмет
| И ПредметыПапкиВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка)";
ПараметрыСписка.ТекстЗапроса = ТекстЗапросаДинамическийСписок;
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.ПредметыПанельНавигации, ПараметрыСписка);
КонецЕсли;
Если ПоказыватьВсеАктивныеПредметы Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ОтборПриемник,"Активен", Истина,ВидСравненияКомпоновкиДанных.Равно);
КонецЕсли;
Элементы.ПредметыПанельНавигацииКонтекстноеМенюТолькоАктивныеПредметы.Пометка = ПоказыватьВсеАктивныеПредметы;
СФормироватьДекорациюТолькоЗначимыеПредметы();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТаблицуКатегорий()
Категории.Очистить();
Запрос = Новый Запрос;
ТекстУсловияРеквизиты = "";
ТекстУсловияСведения = "";
ТекстУсловияПоОтборуСписка = ПолучитьТекстЗапросаПоОтборуСписка(Запрос);
Если Не ПустаяСтрока(ТекстУсловияПоОтборуСписка) Тогда
Запрос.Текст = ТекстУсловияПоОтборуСписка;
ТекстУсловияРеквизиты = " И
|ВзаимодействиеДополнительныеРеквизиты.Ссылка В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОтборСписка.Ссылка
| ИЗ
| ОтборСписка КАК ОтборСписка)";
ТекстУсловияСведения = " И
|ДополнительныеСведения.Объект В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОтборСписка.Ссылка
| ИЗ
| ОтборСписка КАК ОтборСписка)";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СвойстваТипаБулево.ДопРеквизитСведение КАК Свойство,
| СвойстваТипаБулево.ЭтоРеквизит
|ПОМЕСТИТЬ СвойстваТипаБулево
|ИЗ
| &СвойстваТипаБулево КАК СвойстваТипаБулево
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПРЕДСТАВЛЕНИЕ(ВложенныйЗапрос.Свойство) КАК Представление,
| ВложенныйЗапрос.Свойство КАК Значение,
| СУММА(ВложенныйЗапрос.НеРассмотрено) КАК НеРассмотрено
|ИЗ
| (ВЫБРАТЬ
| ВзаимодействиеДополнительныеРеквизиты.Свойство КАК Свойство,
| СУММА(ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ) КАК НеРассмотрено
| ИЗ
| Документ.Встреча.ДополнительныеРеквизиты КАК ВзаимодействиеДополнительныеРеквизиты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Встреча КАК Взаимодействие
| ПО ВзаимодействиеДополнительныеРеквизиты.Ссылка = Взаимодействие.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ВзаимодействиеДополнительныеРеквизиты.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ГДЕ
| ВзаимодействиеДополнительныеРеквизиты.Свойство В
| (ВЫБРАТЬ
| СвойстваТипаБулево.Свойство
| ИЗ
| СвойстваТипаБулево КАК СвойстваТипаБулево
| ГДЕ
| СвойстваТипаБулево.ЭтоРеквизит) И &ТекстУсловияРеквизиты
|
| СГРУППИРОВАТЬ ПО
| ВзаимодействиеДополнительныеРеквизиты.Свойство
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВзаимодействиеДополнительныеРеквизиты.Свойство,
| СУММА(ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ)
| ИЗ
| Документ.ТелефонныйЗвонок.ДополнительныеРеквизиты КАК ВзаимодействиеДополнительныеРеквизиты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ТелефонныйЗвонок КАК Взаимодействие
| ПО ВзаимодействиеДополнительныеРеквизиты.Ссылка = Взаимодействие.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ВзаимодействиеДополнительныеРеквизиты.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ГДЕ
| ВзаимодействиеДополнительныеРеквизиты.Свойство В
| (ВЫБРАТЬ
| СвойстваТипаБулево.Свойство
| ИЗ
| СвойстваТипаБулево КАК СвойстваТипаБулево
| ГДЕ
| СвойстваТипаБулево.ЭтоРеквизит) И &ТекстУсловияРеквизиты
|
| СГРУППИРОВАТЬ ПО
| ВзаимодействиеДополнительныеРеквизиты.Свойство
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВзаимодействиеДополнительныеРеквизиты.Свойство,
| СУММА(ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ)
| ИЗ
| Документ.ЗапланированноеВзаимодействие.ДополнительныеРеквизиты КАК ВзаимодействиеДополнительныеРеквизиты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗапланированноеВзаимодействие КАК Взаимодействие
| ПО ВзаимодействиеДополнительныеРеквизиты.Ссылка = Взаимодействие.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ВзаимодействиеДополнительныеРеквизиты.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ГДЕ
| ВзаимодействиеДополнительныеРеквизиты.Свойство В
| (ВЫБРАТЬ
| СвойстваТипаБулево.Свойство
| ИЗ
| СвойстваТипаБулево КАК СвойстваТипаБулево
| ГДЕ
| СвойстваТипаБулево.ЭтоРеквизит) И &ТекстУсловияРеквизиты
|
| СГРУППИРОВАТЬ ПО
| ВзаимодействиеДополнительныеРеквизиты.Свойство
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВзаимодействиеДополнительныеРеквизиты.Свойство,
| СУММА(ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ)
| ИЗ
| Документ.ЭлектронноеПисьмоВходящее.ДополнительныеРеквизиты КАК ВзаимодействиеДополнительныеРеквизиты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоВходящее КАК Взаимодействие
| ПО ВзаимодействиеДополнительныеРеквизиты.Ссылка = Взаимодействие.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ВзаимодействиеДополнительныеРеквизиты.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ГДЕ
| ВзаимодействиеДополнительныеРеквизиты.Свойство В
| (ВЫБРАТЬ
| СвойстваТипаБулево.Свойство
| ИЗ
| СвойстваТипаБулево КАК СвойстваТипаБулево
| ГДЕ
| СвойстваТипаБулево.ЭтоРеквизит) И &ТекстУсловияРеквизиты
|
| СГРУППИРОВАТЬ ПО
| ВзаимодействиеДополнительныеРеквизиты.Свойство
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВзаимодействиеДополнительныеРеквизиты.Свойство,
| СУММА(ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ)
| ИЗ
| Документ.ЭлектронноеПисьмоИсходящее.ДополнительныеРеквизиты КАК ВзаимодействиеДополнительныеРеквизиты
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЭлектронноеПисьмоИсходящее КАК Взаимодействие
| ПО ВзаимодействиеДополнительныеРеквизиты.Ссылка = Взаимодействие.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО ВзаимодействиеДополнительныеРеквизиты.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ГДЕ
| ВзаимодействиеДополнительныеРеквизиты.Свойство В
| (ВЫБРАТЬ
| СвойстваТипаБулево.Свойство
| ИЗ
| СвойстваТипаБулево КАК СвойстваТипаБулево
| ГДЕ
| СвойстваТипаБулево.ЭтоРеквизит) И &ТекстУсловияРеквизиты
|
| СГРУППИРОВАТЬ ПО
| ВзаимодействиеДополнительныеРеквизиты.Свойство
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДополнительныеСведения.Свойство,
| СУММА(ВЫБОР
| КОГДА ПредметыПапкиВзаимодействий.Рассмотрено
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ)
| ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК Взаимодействия
| ПО ДополнительныеСведения.Объект = Взаимодействия.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО Взаимодействия.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
| ГДЕ
| ДополнительныеСведения.Свойство В
| (ВЫБРАТЬ
| СвойстваТипаБулево.Свойство
| ИЗ
| СвойстваТипаБулево КАК СвойстваТипаБулево
| ГДЕ
| (НЕ СвойстваТипаБулево.ЭтоРеквизит))
| И ТИПЗНАЧЕНИЯ(ДополнительныеСведения.Объект) В (ТИП(Документ.ЗапланированноеВзаимодействие), ТИП(Документ.Встреча), ТИП(Документ.ТелефонныйЗвонок), ТИП(Документ.ЭлектронноеПисьмоВходящее), ТИП(Документ.ЭлектронноеПисьмоИсходящее), ТИП(Документ.ЗапланированноеВзаимодействие), ТИП(Документ.СообщениеSMS))
| И &ТекстУсловияСведения
|
| СГРУППИРОВАТЬ ПО
| ДополнительныеСведения.Свойство) КАК ВложенныйЗапрос
|
|СГРУППИРОВАТЬ ПО
| ВложенныйЗапрос.Свойство";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И &ТекстУсловияСведения", ТекстУсловияСведения);
Запрос.Текст = СтрЗаменить(Запрос.Текст, "И &ТекстУсловияРеквизиты", ТекстУсловияРеквизиты);
Запрос.УстановитьПараметр("СвойстваТипаБулево", ТаблицаДопРеквизитовСвойствТипаБулево.Выгрузить());
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Категории.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка);
НоваяСтрока.НомерКартинки = 0;
НоваяСтрока.Представление = Строка(Выборка.Представление)
+ ?(Выборка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено,
"", " (" + Строка(Выборка.НеРассмотрено) + ")");
КонецЦикла;
ДобавитьСтрокуВсе(Свойства, 2);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПанельКонтактов()
СтруктураСвойствСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка();
Если ТолькоЗначимыеКонтакты Тогда
Запрос = Новый Запрос;
ТекстЗапросаПоОтбору = ПолучитьТекстЗапросаПоОтборуСписка(Запрос);
ПозицияГде = СтрНайти(ТекстЗапросаПоОтбору, "ГДЕ");
Если ПозицияГде = 0 Тогда
СтрокаПоКоторойИщем = "";
Иначе
СтрокаПоКоторойИщем = Прав(ТекстЗапросаПоОтбору, СтрДлина(ТекстЗапросаПоОтбору) - ПозицияГде + 1);
КонецЕсли;
МассивСтрокУсловия = СтрРазделить(СтрокаПоКоторойИщем, Символы.ПС, Ложь);
ТекстУсловийПоЖурналуДокументов = "";
ТекстУсловийПоРегистру = "";
КонструкцияИ = Символы.Таб + "И";
Для Каждого СтрокаУсловия Из МассивСтрокУсловия Цикл
СтрокаУсловия = СтрЗаменить(СтрокаУсловия, "&П", "&Пар");
Если СтрНайти(СтрокаУсловия, "ЖурналДокументовВзаимодействия") Тогда
Если ПустаяСтрока(ТекстУсловийПоЖурналуДокументов)
И СтрНачинаетсяС(СтрокаУсловия, КонструкцияИ) Тогда
СтрокаУсловия = Прав(СтрокаУсловия, СтрДлина(СтрокаУсловия) - СтрДлина(КонструкцияИ));
КонецЕсли;
ТекстУсловийПоЖурналуДокументов = ТекстУсловийПоЖурналуДокументов + СтрокаУсловия + Символы.ПС;
ИначеЕсли СтрНайти(СтрокаУсловия, "ПредметыВзаимодействий") Тогда
Если ПустаяСтрока(ТекстУсловийПоРегистру)
И СтрНачинаетсяС(СтрокаУсловия, КонструкцияИ) Тогда
СтрокаУсловия = Прав(СтрокаУсловия, СтрДлина(СтрокаУсловия) - СтрДлина(КонструкцияИ));
КонецЕсли;
ТекстУсловийПоРегистру = ТекстУсловийПоРегистру + СтрокаУсловия + Символы.ПС;
КонецЕсли;
КонецЦикла;
ТекстЗапросаДинамическийСписок =
"ВЫБРАТЬ
| СостоянияКонтактовВзаимодействий.Контакт,
| СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено,
| СостоянияКонтактовВзаимодействий.ДатаПоследнегоВзаимодействия,
| 3 КАК НомерКартинки,
| ТИПЗНАЧЕНИЯ(СостоянияКонтактовВзаимодействий.Контакт) КАК ТипКонтакта
|ИЗ
| РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий
|ГДЕ
| ИСТИНА В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА
| ИЗ
| РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов.Взаимодействия КАК ЖурналДокументовВзаимодействия
| ПО
| КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт
| И КонтактыВзаимодействий.Взаимодействие = ЖурналДокументовВзаимодействия.Ссылка
| И &ТекстУсловияЖурналДокументов
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыВзаимодействий
| ПО
| КонтактыВзаимодействий.Контакт = СостоянияКонтактовВзаимодействий.Контакт
| И КонтактыВзаимодействий.Взаимодействие = ПредметыВзаимодействий.Взаимодействие
| И &ТекстУсловияРегистрПапки)";
ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "&ТекстУсловияЖурналДокументов",
?(ПустаяСтрока(ТекстУсловийПоЖурналуДокументов), "ИСТИНА", ТекстУсловийПоЖурналуДокументов));
ТекстЗапросаДинамическийСписок = СтрЗаменить(ТекстЗапросаДинамическийСписок, "&ТекстУсловияРегистрПапки",
?(ПустаяСтрока(ТекстУсловийПоРегистру), "ИСТИНА", ТекстУсловийПоРегистру));
СтруктураСвойствСписка.ТекстЗапроса = ТекстЗапросаДинамическийСписок;
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.КонтактыПанелиНавигации, СтруктураСвойствСписка);
Для каждого ПараметрЗапроса Из Запрос.Параметры Цикл
Если СтрНачинаетсяС(ПараметрЗапроса.Ключ, "П") Тогда
ИмяПараметра = "Пар" + Прав(ПараметрЗапроса.Ключ, СтрДлина(ПараметрЗапроса.Ключ)-1);
Иначе
ИмяПараметра = ПараметрЗапроса.Ключ;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьПараметрДинамическогоСписка(КонтактыПанельНавигации, ИмяПараметра, ПараметрЗапроса.Значение);
КонецЦикла;
Иначе
ТекстЗапросаДинамическийСписок = "
|ВЫБРАТЬ
| СостоянияКонтактовВзаимодействий.Контакт,
| СостоянияКонтактовВзаимодействий.КоличествоНеРассмотрено,
| СостоянияКонтактовВзаимодействий.ДатаПоследнегоВзаимодействия,
| 3 КАК НомерКартинки,
| ТИПЗНАЧЕНИЯ(СостоянияКонтактовВзаимодействий.Контакт) КАК ТипКонтакта
|ИЗ
| РегистрСведений.СостоянияКонтактовВзаимодействий КАК СостоянияКонтактовВзаимодействий";
СтруктураСвойствСписка.ТекстЗапроса = ТекстЗапросаДинамическийСписок;
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.КонтактыПанелиНавигации, СтруктураСвойствСписка);
КонецЕсли;
СФормироватьДекорациюТолькоЗначимыеКонтакты();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДеревоПапок()
Папки.ПолучитьЭлементы().Очистить();
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| УчетныеЗаписиЭлектроннойПочты.Ссылка КАК УчетнаяЗапись,
| ПапкиЭлектронныхПисем.Ссылка КАК Значение,
| ЕСТЬNULL(НеРассмотреноПапки.КоличествоНеРассмотрено, 0) КАК НеРассмотрено,
| ПапкиЭлектронныхПисем.ПредопределеннаяПапка КАК ПредопределеннаяПапка,
| ВЫБОР
| КОГДА ВЫБОР
| КОГДА УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
| ТОГДА НастройкиУчетныхЗаписейЭлектроннойПочты.ОтветственныйЗаВедениеПапок = &ТекущийПользователь
| ИНАЧЕ УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = &ТекущийПользователь
| КОНЕЦ
| ИЛИ &РольПолныеПравДоступна
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ЕстьПравоНаИзменение,
| ВЫБОР
| КОГДА УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = &ТекущийПользователь ТОГДА 1
| КОГДА УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) ТОГДА 2
| ИНАЧЕ 3
| КОНЕЦ КАК ЗначениеУпорядочивания,
| ВЫБОР
| КОГДА НЕ ПапкиЭлектронныхПисем.ПредопределеннаяПапка
| ТОГДА 7
| ИНАЧЕ ВЫБОР
| КОГДА ПапкиЭлектронныхПисем.ТипПредопределеннойПапки = ЗНАЧЕНИЕ(Перечисление.ТипыПредопределенныхПапокПисем.Входящие)
| ТОГДА 1
| КОГДА ПапкиЭлектронныхПисем.ТипПредопределеннойПапки = ЗНАЧЕНИЕ(Перечисление.ТипыПредопределенныхПапокПисем.Отправленные)
| ТОГДА 2
| КОГДА ПапкиЭлектронныхПисем.ТипПредопределеннойПапки = ЗНАЧЕНИЕ(Перечисление.ТипыПредопределенныхПапокПисем.Черновики)
| ТОГДА 3
| КОГДА ПапкиЭлектронныхПисем.ТипПредопределеннойПапки = ЗНАЧЕНИЕ(Перечисление.ТипыПредопределенныхПапокПисем.Исходящие)
| ТОГДА 4
| КОГДА ПапкиЭлектронныхПисем.ТипПредопределеннойПапки = ЗНАЧЕНИЕ(Перечисление.ТипыПредопределенныхПапокПисем.НежелательнаяПочта)
| ТОГДА 5
| КОГДА ПапкиЭлектронныхПисем.ТипПредопределеннойПапки = ЗНАЧЕНИЕ(Перечисление.ТипыПредопределенныхПапокПисем.Удаленные)
| ТОГДА 6
| КОНЕЦ
| КОНЕЦ КАК НомерКартинки
|ИЗ
| Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПапкиЭлектронныхПисем КАК ПапкиЭлектронныхПисем
| ПО (ПапкиЭлектронныхПисем.Владелец = УчетныеЗаписиЭлектроннойПочты.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостоянияПапокПисем КАК НеРассмотреноПапки
| ПО (НеРассмотреноПапки.Папка = ПапкиЭлектронныхПисем.Ссылка)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НастройкиУчетныхЗаписейЭлектроннойПочты КАК НастройкиУчетныхЗаписейЭлектроннойПочты
| ПО (ПапкиЭлектронныхПисем.Владелец = НастройкиУчетныхЗаписейЭлектроннойПочты.УчетнаяЗаписьЭлектроннойПочты)
|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
| ПО УчетныеЗаписиЭлектроннойПочты.ВладелецУчетнойЗаписи = Пользователи.Ссылка
| И (ПапкиЭлектронныхПисем.Владелец = УчетныеЗаписиЭлектроннойПочты.Ссылка)
|ГДЕ
| НЕ ЕСТЬNULL(НастройкиУчетныхЗаписейЭлектроннойПочты.НеИспользоватьВоВстроенномПочтовомКлиенте, ЛОЖЬ)
| И НЕ ПапкиЭлектронныхПисем.ПометкаУдаления
| И НЕ УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления
| И ВЫБОР
| КОГДА &РольПолныеПравДоступна
| ТОГДА ИСТИНА
| ИНАЧЕ (НЕ ЕСТЬNULL(Пользователи.Недействителен, ЛОЖЬ)) ИЛИ УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки ИЛИ УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| ЗначениеУпорядочивания,
| ПапкиЭлектронныхПисем.Код
|ИТОГИ
| СУММА(НеРассмотрено),
| СУММА(ЕстьПравоНаИзменение)
|ПО
| УчетнаяЗапись,
| Значение ИЕРАРХИЯ";
Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь());
Запрос.УстановитьПараметр("РольПолныеПравДоступна", Пользователи.ЭтоПолноправныйПользователь());
Результат = Запрос.Выполнить();
Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
СтрокиПервыйУровень = Папки.ПолучитьЭлементы();
Для Каждого Строка Из Дерево.Строки Цикл
СтрокаУчЗаписи = СтрокиПервыйУровень.Добавить();
СтрокаУчЗаписи.УчетнаяЗапись = Строка.УчетнаяЗапись;
СтрокаУчЗаписи.Значение = Строка.УчетнаяЗапись;
СтрокаУчЗаписи.НомерКартинки = 0;
СтрокаУчЗаписи.НеРассмотрено = Строка.НеРассмотрено;
СтрокаУчЗаписи.ЕстьПравоНаИзменение = Строка.ЕстьПравоНаИзменение;
СтрокаУчЗаписи.Представление = Строка(СтрокаУчЗаписи.Значение)
+ ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено,
"", " (" + Строка(Строка.НеРассмотрено) + ")");
ДобавитьСтрокиВДеревоНавигации(Строка, СтрокаУчЗаписи);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДобавитьСтрокиВДеревоНавигации(РодительскаяСтрока, СтрокаРодитель, ВыполнятьПроверку = Истина, НомерКартинки = -1)
Для Каждого Строка Из РодительскаяСтрока.Строки Цикл
Если ВыполнятьПроверку И (Строка.Значение = РодительскаяСтрока.Значение Или Строка.Значение = Неопределено) Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = СтрокаРодитель.ПолучитьЭлементы().Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,Строка);
Если Строка.НомерКартинки = Null И НомерКартинки <> -1 Тогда
НоваяСтрока.НомерКартинки = НомерКартинки;
КонецЕсли;
Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Строка.Значение) Тогда
СтрокаДетали = Строка.Строки[0];
НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 от %2 %3'"),
?(ПустаяСтрока(СтрокаДетали.Тема),НСтр("ru = 'Тема не указана'"), СтрокаДетали.Тема),
Формат(СтрокаДетали.Дата, "ДЛФ=DT"),
?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено, "","(" + Строка(Строка.НеРассмотрено) + ")"));
НоваяСтрока.НомерКартинки = СтрокаДетали.НомерКартинки;
Иначе
НоваяСтрока.Представление = Строка(НоваяСтрока.Значение)
+ ?(Строка.НеРассмотрено = 0 Или Не ИспользоватьПризнакРассмотрено,
"",
" (" + Строка(Строка.НеРассмотрено) + ")");
Если Строка.НомерКартинки = Null И НомерКартинки = -1 И Строка.Строки.Количество() > 0 Тогда
НоваяСтрока.НомерКартинки = Строка.Строки[0].НомерКартинки;
КонецЕсли;
КонецЕсли;
ДобавитьСтрокиВДеревоНавигации(Строка, НоваяСтрока);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьТекстЗапросаПоОтборуСписка(Запрос)
Если ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы.Количество() > 0 Тогда
СхемаОтборВзаимодействия = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("СхемаОтборВзаимодействия");
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаОтборВзаимодействия));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаОтборВзаимодействия.НастройкиПоУмолчанию);
СкопироватьОтбор(КомпоновщикНастроек.Настройки.Отбор, ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список),,, Истина);
Если ЗначениеЗаполнено(Элементы.Список.Период.ДатаНачала) ИЛИ ЗначениеЗаполнено(Элементы.Список.Период.ДатаОкончания) Тогда
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Интервал", Элементы.Список.Период);
КонецЕсли;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаОтборВзаимодействия, КомпоновщикНастроек.ПолучитьНастройки(),,,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ЗначенияПараметровМакета = МакетКомпоновкиДанных.ЗначенияПараметров;
Если ЗначенияПараметровМакета.Количество() = 0 Тогда
Возврат "";
ИначеЕсли ЗначенияПараметровМакета.Количество() = 2
И (НЕ ЗначениеЗаполнено(ЗначенияПараметровМакета.НачалоПериодаОтбора.Значение))
И (НЕ ЗначениеЗаполнено(ЗначенияПараметровМакета.КонецПериодаОтбора.Значение)) Тогда
Возврат "";
КонецЕсли;
ТекстЗапроса = МакетКомпоновкиДанных.НаборыДанных.ОсновнойНаборДанных.Запрос;
Для каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл
Запрос.Параметры.Вставить(Параметр.Имя, Параметр.Значение);
КонецЦикла;
ТекстЗапроса = ТекстЗапроса +"
|;
|
|////////////////////////////////////////////////////////////////////////////////
|";
НайденнаяПозицияИЗ = СтрНайти(ТекстЗапроса,"ИЗ");
Если НайденнаяПозицияИЗ <> 0 Тогда
ТекстЗапроса = Лев(ТекстЗапроса,НайденнаяПозицияИЗ - 1) + " ПОМЕСТИТЬ ОтборСписка
| " + Прав(ТекстЗапроса,СтрДлина(ТекстЗапроса) - НайденнаяПозицияИЗ + 1);
КонецЕсли;
Иначе
Возврат "";
КонецЕсли;
Возврат ТекстЗапроса;
КонецФункции
&НаСервере
Процедура ОбновитьПанельНавигации(ЗначениеТекущейСтроки = Неопределено, УстанавливатьПризнакНеОтрабатыватьАктивизациюПанелиНавигации = Истина)
ТекущаяСтраницаПанелиНавигации = Элементы.СтраницыПанелиНавигации.ТекущаяСтраница;
Если ТекущаяСтраницаПанелиНавигации = Элементы.СтраницаКонтакт Тогда
ЗаполнитьПанельКонтактов();
ИначеЕсли ТекущаяСтраницаПанелиНавигации = Элементы.СтраницаПредмет Тогда
ЗаполнитьПанельПредметов();
ИначеЕсли ТекущаяСтраницаПанелиНавигации = Элементы.СтраницаПапки Тогда
ЗаполнитьДеревоПапок();
ИначеЕсли ТекущаяСтраницаПанелиНавигации = Элементы.СтраницаСвойства Тогда
ЗаполнитьДеревоСвойств();
ИначеЕсли ТекущаяСтраницаПанелиНавигации = Элементы.СтраницаКатегории Тогда
ЗаполнитьТаблицуКатегорий();
КонецЕсли;
ПослеЗаполненияПанелиНавигации(УстанавливатьПризнакНеОтрабатыватьАктивизациюПанелиНавигации);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаполненияПанелиНавигации(УстанавливатьПризнакНеОтрабатыватьАктивизациюПанелиНавигации = Истина)
Если НЕ УстанавливатьПризнакНеОтрабатыватьАктивизациюПанелиНавигации Тогда
Возврат;
КонецЕсли;
ТекущееЗначениеПанелиНавигации = Неопределено;
Настройки = ПолучитьСохраненныеНастройкиДереваПанелиНавигации(Элементы.СтраницыПанелиНавигации.ТекущаяСтраница.Имя,
ТекущееСвойствоПанелиНавигации,НастройкиДеревьевПанелиНавигации);
Если Настройки = Неопределено Тогда
Возврат;
КонецЕсли;
ЗначениеНастроек = Настройки.ЗначениеНастроек;
Если НЕ (Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет
ИЛИ Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт
ИЛИ Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки) Тогда
СпозиционироватьсяНаСтрокеСогласноСохраненномуЗначению(ЗначениеНастроек.ТекущееЗначение, Настройки.ИмяДерева);
КонецЕсли;
Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт Тогда
Элементы.КонтактыПанелиНавигации.ТекущаяСтрока = РегистрыСведений.СостоянияКонтактовВзаимодействий.СоздатьКлючЗаписи(Новый Структура("Контакт", ЗначениеНастроек.ТекущееЗначение));
ИзменитьОтборСписок("Контакты",Новый Структура("Значение,ОписаниеТипов",
ЗначениеНастроек.ТекущееЗначение, Неопределено));
ТекущееЗначениеПанелиНавигации = ЗначениеНастроек.ТекущееЗначение;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда
ТекущиеДанные = Папки.НайтиПоИдентификатору(Элементы.Папки.ТекущаяСтрока);
Если ТекущиеДанные = Неопределено И Папки.ПолучитьЭлементы().Количество() > 0 Тогда
ТекущиеДанные = Папки.ПолучитьЭлементы()[0];
КонецЕсли;
Если ТекущиеДанные <> Неопределено Тогда
ИзменитьОтборСписок("Папки",Новый Структура("Значение,УчетнаяЗапись",
ТекущиеДанные.Значение, ТекущиеДанные.УчетнаяЗапись));
КонецЕсли;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет Тогда
Если ЗначениеЗаполнено(Элементы.ПредметыПанельНавигации.ТекущаяСтрока) Тогда
Возврат;
КонецЕсли;
Элементы.ПредметыПанельНавигации.ТекущаяСтрока = РегистрыСведений.СостоянияПредметовВзаимодействий.СоздатьКлючЗаписи(Новый Структура("Предмет", ЗначениеНастроек.ТекущееЗначение));
ИзменитьОтборСписок("Предметы",Новый Структура("Значение,ОписаниеТипов",
ЗначениеНастроек.ТекущееЗначение, Неопределено));
ТекущееЗначениеПанелиНавигации = ЗначениеНастроек.ТекущееЗначение;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства Тогда
ТекущиеДанные = Свойства.НайтиПоИдентификатору(Элементы.Свойства.ТекущаяСтрока);
Если ТекущиеДанные = Неопределено Тогда
Элементы.Свойства.ТекущаяСтрока = НайтиСтрокуВДанныхФормыДерево(Свойства,НСтр("ru = 'Все'"),"Значение",Ложь);
ТекущиеДанные = Свойства.НайтиПоИдентификатору(Элементы.Свойства.ТекущаяСтрока);
КонецЕсли;
Если ТекущиеДанные <> Неопределено Тогда
ИзменитьОтборСписок("Свойства", Новый Структура("Значение", ТекущиеДанные.Значение));
КонецЕсли;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКатегории Тогда
ТекущиеДанные = Категории.НайтиПоИдентификатору(Элементы.Категории.ТекущаяСтрока);
Если ТекущиеДанные = Неопределено Тогда
Элементы.Категории.ТекущаяСтрока = НайтиСтрокуВДанныхФормыКоллекция(Категории,НСтр("ru = 'Все'"),"Значение");
ТекущиеДанные = Категории.НайтиПоИдентификатору(Элементы.Категории.ТекущаяСтрока);
КонецЕсли;
Если ТекущиеДанные <> Неопределено Тогда
ИзменитьОтборСписок("Категории",Новый Структура("Значение", ТекущиеДанные.Значение));
КонецЕсли;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда
Элементы.Закладки.ТекущаяСтрока = ЗначениеНастроек.ТекущееЗначение;
ИзменитьОтборСписок("Закладки", Новый Структура("Значение", ЗначениеНастроек.ТекущееЗначение));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьНаСервере()
ОбновитьПанельНавигации( ,Ложь);
КонецПроцедуры
&НаСервере
Процедура ДополнитьМенюПанелиНавигации()
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Свойства") Тогда
Возврат;
КонецЕсли;
МодульУправлениеСвойствами = ОбщегоНазначения.ОбщийМодуль("УправлениеСвойствами");
Наборы = Новый Массив;
Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_Встреча"));
Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_ЗапланированноеВзаимодействие"));
Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_ТелефонныйЗвонок"));
Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_ЭлектронноеПисьмоВходящее"));
Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_ЭлектронноеПисьмоИсходящее"));
Наборы.Добавить(МодульУправлениеСвойствами.НаборСвойствПоИмени("Документ_СообщениеSMS"));
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Наборы", Наборы);
Запрос.Текст = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ РАЗРЕШЕННЫЕ
| НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Свойство,
| ПРЕДСТАВЛЕНИЕ(НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Свойство) КАК Представление,
| ИСТИНА КАК ЭтоДопРеквизит
|ПОМЕСТИТЬ ДопРеквизитыИСведения
|ИЗ
| Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты
|ГДЕ
| НаборыДополнительныхРеквизитовИСведенийДополнительныеРеквизиты.Ссылка В (&Наборы)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Свойство,
| ПРЕДСТАВЛЕНИЕ(НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Свойство),
| ЛОЖЬ
|ИЗ
| Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения КАК НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения
|ГДЕ
| НаборыДополнительныхРеквизитовИСведенийДополнительныеСведения.Ссылка В (&Наборы)
|;
|
|
|ВЫБРАТЬ
| ДопРеквизитыИСведения.Свойство,
| ДопРеквизитыИСведения.Представление,
| ДопРеквизитыИСведения.ЭтоДопРеквизит,
| ДополнительныеРеквизитыИСведения.ТипЗначения
|ИЗ
| ДопРеквизитыИСведения КАК ДопРеквизитыИСведения
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
| ПО ДопРеквизитыИСведения.Свойство = ДополнительныеРеквизитыИСведения.Ссылка";
Инд = 0;
ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.ТипЗначения = ОписаниеТиповБулево Тогда
НоваяСтрока = ТаблицаДопРеквизитовСвойствТипаБулево.Добавить();
Иначе
НоваяКоманда = Команды.Добавить("УстановитьВариантПоСвойству_" + XMLСтрока(Инд));
НоваяКоманда.Действие = "ПереключитьПанельНавигации";
ЭлементКнопкаПодменю = Элементы.Добавить("ДопКнопкаВыбораВариантаНавигацииСвойства_" + XMLСтрока(Инд),
Тип("КнопкаФормы"), Элементы.ВыборВариантаНавигации);
ЭлементКнопкаПодменю.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
ЭлементКнопкаПодменю.ИмяКоманды = НоваяКоманда.Имя;
ЭлементКнопкаПодменю.Заголовок = НСтр("ru = 'По'") + " " + Выборка.Представление;
НоваяСтрока = ТаблицаДопРеквизитовСвойств.Добавить();
НоваяСтрока.ПорядковыйНомер = Инд;
Инд = Инд + 1;
КонецЕсли;
НоваяСтрока.ДопРеквизитСведение = Выборка.Свойство;
НоваяСтрока.ЭтоРеквизит = Выборка.ЭтоДопРеквизит;
НоваяСтрока.Представление = Выборка.Представление;
КонецЦикла;
Если ТаблицаДопРеквизитовСвойствТипаБулево.Количество() > 0 Тогда
НоваяКоманда = Команды.Добавить("УстановитьВариантПоКатегориям");
НоваяКоманда.Действие = "ПереключитьПанельНавигации";
ЭлементКнопкаПодменю = Элементы.Добавить("ДопКнопкаВыбораВариантаНавигацииКатегории",
Тип("КнопкаФормы"), Элементы.ВыборВариантаНавигации);
ЭлементКнопкаПодменю.Вид = ВидКнопкиФормы.КнопкаКоманднойПанели;
ЭлементКнопкаПодменю.ИмяКоманды = НоваяКоманда.Имя;
ЭлементКнопкаПодменю.Заголовок = НСтр("ru = 'По категориям'");
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьСохраненныеНастройкиДереваПанелиНавигации(
ИмяТекущейСтраницыПанелиНавигации,
ТекущееСвойствоПанелиНавигации,
НастройкиДеревьевПанелиНавигации)
Если ИмяТекущейСтраницыПанелиНавигации = "СтраницаПредмет" Тогда
ИмяДерева = "Предметы";
ИмяНастройки = "Предметы";
ИначеЕсли ИмяТекущейСтраницыПанелиНавигации = "СтраницаКонтакт" Тогда
ИмяДерева = "Контакты";
ИмяНастройки = "Контакты";
ИначеЕсли ИмяТекущейСтраницыПанелиНавигации = "СтраницаКатегории" Тогда
ИмяДерева = "Категории";
ИмяНастройки = "Категории";
ИначеЕсли ИмяТекущейСтраницыПанелиНавигации = "СтраницаПапки" Тогда
ИмяДерева = "Папки";
ИмяНастройки = "Папки";
ИначеЕсли ИмяТекущейСтраницыПанелиНавигации = "СтраницаСвойства" Тогда
ИмяДерева = "Свойства";
ИмяНастройки = "Свойства_" + Строка(ТекущееСвойствоПанелиНавигации);
ИначеЕсли ИмяТекущейСтраницыПанелиНавигации = "СтраницаЗакладки" Тогда
ИмяДерева = "Закладки";
ИмяНастройки = "Закладки";
Иначе
Возврат Неопределено;
КонецЕсли;
НайденныеСтроки = НастройкиДеревьевПанелиНавигации.НайтиСтроки(Новый Структура("ИмяДерева", ИмяНастройки));
Если НайденныеСтроки.Количество() = 1 Тогда
СтрокаДереваНастроек = НайденныеСтроки[0];
ИначеЕсли НайденныеСтроки.Количество() > 1 Тогда
СтрокаДереваНастроек = НайденныеСтроки[0];
Для Инд = 1 По НайденныеСтроки.Количество()-1 Цикл
НастройкиДеревьевПанелиНавигации.Удалить(НайденныеСтроки[инд]);
КонецЦикла;
Иначе
Возврат Неопределено;
КонецЕсли;
Возврат Новый Структура("ИмяДерева,ЗначениеНастроек",ИмяДерева,СтрокаДереваНастроек);
КонецФункции
&НаКлиенте
Процедура СохранитьСостояниеУзлаВНастройках(ИмяДерева, Значение, Разворачивание);
Если ИмяДерева = "Свойства" Тогда
ИмяДерева = "Свойства_" + Строка(ТекущееСвойствоПанелиНавигации);
КонецЕсли;
НайденныеСтроки = НастройкиДеревьевПанелиНавигации.НайтиСтроки(Новый Структура("ИмяДерева",ИмяДерева));
Если НайденныеСтроки.Количество() = 1 Тогда
СтрокаДереваНастроек = НайденныеСтроки[0];
ИначеЕсли НайденныеСтроки.Количество() > 1 Тогда
СтрокаДереваНастроек = НайденныеСтроки[0];
Для Инд = 1 По НайденныеСтроки.Количество()-1 Цикл
НастройкиДеревьевПанелиНавигации.Удалить(НайденныеСтроки[инд]);
КонецЦикла;
Иначе
Если Разворачивание Тогда
СтрокаДереваНастроек = НастройкиДеревьевПанелиНавигации.Добавить();
СтрокаДереваНастроек.ИмяДерева = ИмяДерева;
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
НайденныйЭлементСписка = СтрокаДереваНастроек.РазвернутыеУзлы.НайтиПоЗначению(Значение);
Если Разворачивание Тогда
Если НайденныйЭлементСписка = Неопределено Тогда
СтрокаДереваНастроек.РазвернутыеУзлы.Добавить(Значение);
КонецЕсли;
Иначе
Если НайденныйЭлементСписка <> Неопределено Тогда
СтрокаДереваНастроек.РазвернутыеУзлы.Удалить(НайденныйЭлементСписка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВосстановитьРаскрытыеУзлыДерева()
Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет
ИЛИ Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт Тогда
ПодключитьОбработчикОжидания("ОбработатьАктивизациюСтрокиПанелиНавигации", 0.2, Истина);
Возврат;
КонецЕсли;
Настройки = ПолучитьСохраненныеНастройкиДереваПанелиНавигации(Элементы.СтраницыПанелиНавигации.ТекущаяСтраница.Имя,
ТекущееСвойствоПанелиНавигации,НастройкиДеревьевПанелиНавигации);
Если Настройки = Неопределено Или Настройки.ИмяДерева = "Категории" Тогда
Возврат;
КонецЕсли;
РазвернутыеУзлы = Настройки.ЗначениеНастроек.РазвернутыеУзлы;
Если РазвернутыеУзлы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ИдентификаторыРазвернутыхУзлов = Новый Соответствие;
ОпределитьИдентификаторыРазвернутыхУзлов(РазвернутыеУзлы, ЭтотОбъект[Настройки.ИмяДерева].ПолучитьЭлементы(),
ИдентификаторыРазвернутыхУзлов);
Для каждого ИдентификаторУзла Из ИдентификаторыРазвернутыхУзлов Цикл
Элементы[Настройки.ИмяДерева].Развернуть(ИдентификаторУзла.Значение);
КонецЦикла;
УдаляемыеУзлы = Новый Массив;
Для каждого ЭлементСписка Из РазвернутыеУзлы Цикл
Если ИдентификаторыРазвернутыхУзлов[ЭлементСписка.Значение] = Неопределено Тогда
УдаляемыеУзлы.Добавить(ЭлементСписка);
КонецЕсли;
КонецЦикла;
Для каждого ЭлементСписка Из УдаляемыеУзлы Цикл
РазвернутыеУзлы.Удалить(ЭлементСписка);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОпределитьИдентификаторыРазвернутыхУзлов(СписокРазвернутыхУзлов, СтрокиДерева, ИдентификаторыУзлов)
Для каждого Элемент Из СтрокиДерева Цикл
Если СписокРазвернутыхУзлов.НайтиПоЗначению(Элемент.Значение) <> Неопределено Тогда
ЭлементРодитель = Элемент.ПолучитьРодителя();
Если ЭлементРодитель = Неопределено ИЛИ ИдентификаторыУзлов[ЭлементРодитель.Значение] <> Неопределено Тогда
ИдентификаторыУзлов[Элемент.Значение] = Элемент.ПолучитьИдентификатор();
КонецЕсли;
КонецЕсли;
ОпределитьИдентификаторыРазвернутыхУзлов(СписокРазвернутыхУзлов, Элемент.ПолучитьЭлементы(), ИдентификаторыУзлов);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СпозиционироватьсяНаСтрокеСогласноСохраненномуЗначению(ЗначениеТекущейСтроки,
ИмяЭлемента,
СтрокаВсе = Неопределено)
ТекущаяТаблица = Элементы[ИмяЭлемента];
Если ЗначениеТекущейСтроки <> Неопределено Тогда
Если ИмяЭлемента <> "Категории" Тогда
ИдентификаторНайденнойСтроки = НайтиСтрокуВДанныхФормыДерево(ЭтотОбъект[ИмяЭлемента],
ЗначениеТекущейСтроки,"Значение",Истина);
Иначе
ИдентификаторНайденнойСтроки = НайтиСтрокуВДанныхФормыКоллекция(ЭтотОбъект[ИмяЭлемента],
ЗначениеТекущейСтроки,"Значение");
КонецЕсли;
Если ИдентификаторНайденнойСтроки > 0 Тогда
ТекущаяТаблица.ТекущаяСтрока = ИдентификаторНайденнойСтроки;
Иначе
ТекущаяТаблица.ТекущаяСтрока = ?(СтрокаВсе = Неопределено, 0, СтрокаВсе.ПолучитьИдентификатор());
КонецЕсли;
Иначе
ТекущаяТаблица.ТекущаяСтрока = ?(СтрокаВсе = Неопределено, 0, СтрокаВсе.ПолучитьИдентификатор());
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтветственного(Ответственный, Знач ДанныеДляОбработки)
ОбновлятьПанельНавигации = Ложь;
Если ДанныеДляОбработки <> Неопределено Тогда
Для Каждого Взаимодействие Из ДанныеДляОбработки Цикл
Если ЗначениеЗаполнено(Взаимодействие)
И Взаимодействие.Ответственный <> Ответственный Тогда
Взаимодействия.ЗаменитьОтветственногоВДокументе(Взаимодействие, Ответственный);
ОбновлятьПанельНавигации = Истина;
КонецЕсли;
КонецЦикла;
Иначе
МассивВзаимодействий = ПолучитьВзаимодействияОтборуСписка(Ответственный,"Ответственный");
Для Каждого Взаимодействие Из МассивВзаимодействий Цикл
Взаимодействия.ЗаменитьОтветственногоВДокументе(Взаимодействие, Ответственный);
ОбновлятьПанельНавигации = Истина;
КонецЦикла;
КонецЕсли;
Если ОбновлятьПанельНавигации Тогда
ОбновитьПанельНавигации(, НЕ ЭтоПанельСДинамическимСписком(ИмяТекущейПанелиНавигации));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьФлагРассмотрено(Знач ДанныеДляОбработки, Знач ЗначениеПризнака)
ОбновлятьПанельНавигации = Ложь;
Если ДанныеДляОбработки <> Неопределено Тогда
МассивВзаимодействий = Новый Массив;
Для Каждого Взаимодействие Из ДанныеДляОбработки Цикл
Если ЗначениеЗаполнено(Взаимодействие) Тогда
МассивВзаимодействий.Добавить(Взаимодействие);
КонецЕсли;
КонецЦикла;
Взаимодействия.УстановитьПризнакРассмотрено(МассивВзаимодействий, ЗначениеПризнака, ОбновлятьПанельНавигации);
Иначе
МассивВзаимодействий = ПолучитьВзаимодействияОтборуСписка(ЗначениеПризнака, "Рассмотрено");
Взаимодействия.УстановитьПризнакРассмотрено(МассивВзаимодействий, ЗначениеПризнака, ОбновлятьПанельНавигации);
КонецЕсли;
Если ОбновлятьПанельНавигации Тогда
ОбновитьПанельНавигации(, НЕ ЭтоПанельСДинамическимСписком(ИмяТекущейПанелиНавигации));
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЭтоПанельСДинамическимСписком(ИмяТекущейПанелиНавигации)
Возврат ИмяТекущейПанелиНавигации = "СтраницаПредмет" ИЛИ ИмяТекущейПанелиНавигации = "СтраницаКонтакт";
КонецФункции
&НаСервере
Функция ДобавитьВЗакладкиСервер(Знач ДанныеДляОбработки, ИмяЭлементаФормы)
Результат = Новый Структура;
Результат.Вставить("ЭлементДобавлен", Ложь);
Результат.Вставить("НавигационнаяСсылкаЭлемента", "");
Результат.Вставить("ПредставлениеЭлемента", "");
Результат.Вставить("ТекстСообщенияОшибка", "");
СхемаКомпоновки = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("СхемаОтборВзаимодействия");
АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновки, УникальныйИдентификатор);
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию);
Если СтрНачинаетсяС(ИмяЭлементаФормы, "Список") Тогда
СписокВзаимодействий = Новый СписокЗначений;
Для Каждого Взаимодействие Из ДанныеДляОбработки Цикл
Если ЗначениеЗаполнено(Взаимодействие) Тогда
СписокВзаимодействий.Добавить(Взаимодействие);
КонецЕсли;
КонецЦикла;
Если СписокВзаимодействий.Количество() = 0 Тогда
Результат.ТекстСообщенияОшибка = НСтр("ru = 'Не выбран элемент для добавления в закладки.'");
Возврат Результат;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(КомпоновщикНастроек.Настройки.Отбор,
"Ссылка", ВидСравненияКомпоновкиДанных.ВСписке, СписокВзаимодействий);
НаименованиеЗакладки = ?(ТолькоПочта, НСтр("ru = 'Избранные письма'"), НСтр("ru = 'Избранные взаимодействия'"));
Если СписокВзаимодействий.Количество() > 1 Тогда
Текст = ?(ТолькоПочта, НСтр("ru = 'Выбранные письма (%1)'"), НСтр("ru = 'Выбранные взаимодействия (%1)'"));
Результат.ПредставлениеЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, СписокВзаимодействий.Количество());
Иначе
Результат.ПредставлениеЭлемента = ОбщегоНазначения.ПредметСтрокой(СписокВзаимодействий[0].Значение);
Результат.НавигационнаяСсылкаЭлемента = ПолучитьНавигационнуюСсылку(СписокВзаимодействий[0].Значение);
КонецЕсли;
Иначе
Если ДанныеДляОбработки.Значение = "ВсеЗначения" Тогда
Результат.ТекстСообщенияОшибка = НСтр("ru = 'Закладку без отбора создать нельзя.'");
Возврат Результат;
КонецЕсли;
ГруппаОтбораПоПанелиНавигации = ОбщегоНазначенияКлиентСервер.НайтиЭлементОтбораПоПредставлению(
ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список).Элементы,
"ОтборПанелиНавигации");
Если ГруппаОтбораПоПанелиНавигации = Неопределено Тогда
Результат.ТекстСообщенияОшибка = НСтр("ru = 'Не выбран элемент для добавления в закладки.'");
Возврат Результат;
КонецЕсли;
СкопироватьОтбор(КомпоновщикНастроек.Настройки.Отбор, ГруппаОтбораПоПанелиНавигации, Истина);
Если ИмяЭлементаФормы = "ПредметыПанельНавигации" Тогда
Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ДанныеДляОбработки.Значение) Тогда
НаименованиеЗакладки = НСтр("ru = 'Предмет'") + " = " + Строка(ДанныеДляОбработки.Значение);
Текст = ?(ТолькоПочта, НСтр("ru = 'Письма по предмету %1'"), НСтр("ru = 'Взаимодействия по предмету %1'"));
Результат.ПредставлениеЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ОбщегоНазначения.ПредметСтрокой(ДанныеДляОбработки.Значение));
Результат.НавигационнаяСсылкаЭлемента = ПолучитьНавигационнуюСсылку(ДанныеДляОбработки.Значение);
Иначе
Результат.ТекстСообщенияОшибка = НСтр("ru = 'Не выбран элемент для добавления в закладки.'");
Возврат Результат;
КонецЕсли;
ИначеЕсли ИмяЭлементаФормы = "Свойства" Тогда
НаименованиеТекущегоСвойства = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущееСвойствоПанелиНавигации, "Наименование");
Если ТипЗнч(ДанныеДляОбработки.Значение) = Тип("Строка")
И ДанныеДляОбработки.Значение = "НеУказан" Тогда
НаименованиеЗакладки = НаименованиеТекущегоСвойства + " " + НСтр("ru = 'не указан'");
Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма'"), НСтр("ru = 'Взаимодействия'"));
Иначе
НаименованиеЗакладки = НаименованиеТекущегоСвойства + " = " + Строка(ДанныеДляОбработки.Значение);
Результат.ПредставлениеЭлемента = ?(ТолькоПочта,
НСтр("ru = 'Письма с заданным свойством: %1'"),
НСтр("ru = 'Взаимодействия с заданным свойством: %1'"));
Результат.ПредставлениеЭлемента =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.Значение);
КонецЕсли;
ИначеЕсли ИмяЭлементаФормы = "Категории" Тогда
НаименованиеЗакладки = НСтр("ru = 'Входит в категорию'") + " " + Строка(ДанныеДляОбработки.Значение);
Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма из категории: %1'"), НСтр("ru = 'Взаимодействия из категории: %1'"));
Результат.ПредставлениеЭлемента =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.Значение);
ИначеЕсли ИмяЭлементаФормы = "КонтактыПанелиНавигации" Тогда
Если ОбщегоНазначения.ЗначениеСсылочногоТипа(ДанныеДляОбработки.Значение) Тогда
НаименованиеЗакладки = НСтр("ru = 'Контакт'") + " = " + Строка(ДанныеДляОбработки.Значение);
Текст = ?(ТолькоПочта, НСтр("ru = 'Письма по контакту %1'"), НСтр("ru = 'Взаимодействия по контакту %1'"));
Результат.ПредставлениеЭлемента =
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Текст, ОбщегоНазначения.ПредметСтрокой(ДанныеДляОбработки.Значение));
Результат.НавигационнаяСсылкаЭлемента = ПолучитьНавигационнуюСсылку(ДанныеДляОбработки.Значение);
Иначе
Результат.ТекстСообщенияОшибка = НСтр("ru = 'Не выбран элемент для добавления в закладки.'");
Возврат Результат;
КонецЕсли;
ИначеЕсли ИмяЭлементаФормы = "Папки" Тогда
НаименованиеЗакладки = НСтр("ru = 'В папке'") + " " + Строка(ДанныеДляОбработки.Значение);
Результат.ПредставлениеЭлемента = ?(ТолькоПочта, НСтр("ru = 'Письма в папке: %1'"), НСтр("ru = 'Взаимодействия в папке: %1'"));
Результат.ПредставлениеЭлемента = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Результат.ПредставлениеЭлемента, ДанныеДляОбработки.Значение);
КонецЕсли;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗакладкиВзаимодействий.Ссылка,
| ЗакладкиВзаимодействий.Наименование,
| ЗакладкиВзаимодействий.КомпоновщикНастроек
|ИЗ
| Справочник.ЗакладкиВзаимодействий КАК ЗакладкиВзаимодействий
|ГДЕ
| НЕ ЗакладкиВзаимодействий.ЭтоГруппа
| И НЕ ЗакладкиВзаимодействий.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Если ЗначениеВXML(КомпоновщикНастроек.ПолучитьНастройки()) = ЗначениеВXML(Выборка.КомпоновщикНастроек.Получить()) Тогда
Результат.ТекстСообщенияОшибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Закладка с такими настройками уже существует : %1'"),
Выборка.Наименование);
Возврат Результат;
КонецЕсли;
КонецЦикла;
Закладка = Справочники.ЗакладкиВзаимодействий.СоздатьЭлемент();
Закладка.Владелец = Пользователи.АвторизованныйПользователь();
Закладка.Наименование = НаименованиеЗакладки;
Закладка.КомпоновщикНастроек = Новый ХранилищеЗначения(КомпоновщикНастроек.ПолучитьНастройки());
Закладка.Записать();
Элементы.Закладки.Обновить();
Результат.ЭлементДобавлен = Истина;
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция ЗначениеВXML(Значение)
Запись = Новый ЗаписьXML();
Запись.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(Запись, Значение);
Возврат Запись.Закрыть();
КонецФункции
&НаСервере
Процедура УстановитьПредмет(Предмет, Знач ДанныеДляОбработки)
Если ДанныеДляОбработки <> Неопределено Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Взаимодействия.Ссылка
|ИЗ
| ЖурналДокументов.Взаимодействия КАК Взаимодействия
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ПредметыПапкиВзаимодействий КАК ПредметыПапкиВзаимодействий
| ПО Взаимодействия.Ссылка = ПредметыПапкиВзаимодействий.Взаимодействие
|ГДЕ
| ПредметыПапкиВзаимодействий.Предмет <> &Предмет
| И Взаимодействия.Ссылка В (&МассивВзаимодействий)";
Запрос.УстановитьПараметр("МассивВзаимодействий",ДанныеДляОбработки );
Запрос.УстановитьПараметр("Предмет", Предмет);
МассивВзаимодействий = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Иначе
МассивВзаимодействий = ПолучитьВзаимодействияОтборуСписка(Предмет, "Предмет");
КонецЕсли;
Если МассивВзаимодействий.Количество() > 0 Тогда
ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(МассивВзаимодействий, Предмет, Истина);
ОбновитьПанельНавигации();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОтложитьРассмотрение(ДатаРассмотрения, Знач ДанныеДляОбработки)
Если ДанныеДляОбработки <> Неопределено Тогда
МассивВзаимодействий = Взаимодействия.МассивВзаимодействийДляИзмененияДатыРассмотрения(ДанныеДляОбработки, ДатаРассмотрения);
Иначе
МассивВзаимодействий = ПолучитьВзаимодействияОтборуСписка(Истина, "Рассмотрено");
КонецЕсли;
Для Каждого Взаимодействие Из МассивВзаимодействий Цикл
Реквизиты = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия();
Реквизиты.РассмотретьПосле = ДатаРассмотрения;
Реквизиты.РассчитыватьРассмотрено = Ложь;
РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Взаимодействие, Реквизиты);
КонецЦикла;
Если МассивВзаимодействий.Количество() > 0 Тогда
ОбновитьПанельНавигации();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьНовоеВзаимодействие(ТипОбъекта)
ПараметрыСоздания = Новый Структура;
Если ИмяТекущейПанелиНавигации = "СтраницаКонтакт" Тогда
ТекущиеДанные = Элементы.КонтактыПанелиНавигации.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ПараметрыСоздания.Вставить("ЗначенияЗаполнения", Новый Структура("Контакт", ТекущиеДанные.Контакт));
КонецЕсли;
ИначеЕсли ИмяТекущейПанелиНавигации = "СтраницаПредмет" Тогда
ТекущиеДанные = Элементы.ПредметыПанельНавигации.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ПараметрыСоздания.Вставить("ЗначенияЗаполнения", Новый Структура("Предмет", ТекущиеДанные.Предмет));
КонецЕсли;
ИначеЕсли ИмяТекущейПанелиНавигации = "СтраницаПапки" Тогда
ТекущиеДанные = Элементы.Папки.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ПараметрыСоздания.Вставить("ЗначенияЗаполнения", Новый Структура("УчетнаяЗапись", ТекущиеДанные.УчетнаяЗапись));
КонецЕсли;
КонецЕсли;
ВзаимодействияКлиент.СоздатьНовоеВзаимодействие(ТипОбъекта, ПараметрыСоздания, ЭтотОбъект);
КонецПроцедуры
&НаСервере
Функция ПолучитьВзаимодействияОтборуСписка(ЗначениеРеквизитаДопОтбора = Неопределено, ИмяРеквизитаДопОтбора = "")
Запрос = Новый Запрос;
Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт
Или Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаЗакладки Тогда
СхемаОтбора = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("СхемаОтборВзаимодействияКонтакт");
Иначе
СхемаОтбора = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("СхемаОтборВзаимодействия");
КонецЕсли;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаОтбора));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаОтбора.НастройкиПоУмолчанию);
СкопироватьОтбор(КомпоновщикНастроек.Настройки.Отбор, ВзаимодействияКлиентСервер.ОтборДинамическогоСписка(Список));
Если ЗначениеРеквизитаДопОтбора <> Неопределено Тогда
ЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяРеквизитаДопОтбора);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.ПравоеЗначение = ЗначениеРеквизитаДопОтбора;
КонецЕсли;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаОтбора, КомпоновщикНастроек.ПолучитьНастройки()
,,, Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ТекстЗапроса = МакетКомпоновкиДанных.НаборыДанных.ОсновнойНаборДанных.Запрос;
Для каждого Параметр Из МакетКомпоновкиДанных.ЗначенияПараметров Цикл
Запрос.Параметры.Вставить(Параметр.Имя, Параметр.Значение);
КонецЦикла;
Запрос.Текст = ТекстЗапроса;
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
КонецФункции
&НаСервере
Процедура УстановитьРодителяУПапки(Знач Папка, Знач НовыйРодитель)
Взаимодействия.УстановитьРодителяУПапки(Папка, НовыйРодитель);
ОбновитьПанельНавигации();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьПереносВПапкуМассиваПисем(Знач МассивПисем, Знач Папка)
Взаимодействия.УстановитьПапкуДляМассиваПисем(МассивПисем, Папка);
ОбновитьПанельНавигации(Папка);
КонецПроцедуры
#КонецОбласти
#Область ПолнотекстовыйПоиск
&НаСервере
Процедура ОпределитьДоступностьПолнотекстовыйПоиск()
Если ПолучитьФункциональнуюОпцию("ИспользоватьПолнотекстовыйПоиск")
И ПолнотекстовыйПоиск.ПолучитьРежимПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Разрешить Тогда
ИсторияПоиска = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ИсторияПоискаВзаимодействия", "");
Если ИсторияПоиска <> Неопределено Тогда
Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(ИсторияПоиска);
КонецЕсли;
Иначе
Элементы.СтрокаПоиска.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПолнотекстовыйПоиск()
Результат = РезультатПоискаВзаимодействийПолнотекстовымПоиском();
Если Не Результат.ЕстьОшибка Тогда
РасширенныйПоиск = Истина;
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
?(ТолькоПочта, НСтр("ru = 'Найдено писем: %1.'"), НСтр("ru = 'Найдено взаимодействий: %1.'")),
Строка(Результат.КоличествоЭлементовНайдено));
ПоказатьОповещениеПользователя(НСтр("ru = 'Результаты поиска'"),, ТекстОповещения);
ТекущиеДанные = Элементы.Список.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ЗаполнитьОписаниеНайденоПолнотекстовымПоиском(Элементы.Список.ТекущиеДанные.Ссылка);
Иначе
ОписаниеНайденоПолнотекстовымПоиском = "";
КонецЕсли;
Иначе
Если Результат.ИдентификаторОшибки = "НичегоНеНайдено" Тогда
РасширенныйПоиск = Ложь;
Иначе
ПоказатьОповещениеПользователя(Результат.ТекстОшибки);
КонецЕсли;
КонецЕсли;
Элементы.ОписаниеНайденоПолнотекстовымПоиском.Видимость = РасширенныйПоиск;
КонецПроцедуры
&НаСервере
Функция РезультатПоискаВзаимодействийПолнотекстовымПоиском()
Результат = Новый Структура;
Результат.Вставить("ЕстьОшибка", Ложь);
Результат.Вставить("ТекстОшибки", "");
Результат.Вставить("ИдентификаторОшибки", "");
Результат.Вставить("КоличествоЭлементовНайдено", 0);
ОбластьПоиска = Новый Массив;
РазмерПорции = 200;
СтрокаПолнотекстовогоПоиска = СтрокаПоиска;
Если СтрНайти(СтрокаПолнотекстовогоПоиска, "*") = 0 Тогда
СтрокаПолнотекстовогоПоиска = "*" + СтрокаПолнотекстовогоПоиска + "*";
КонецЕсли;
СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(СтрокаПолнотекстовогоПоиска, РазмерПорции);
ОбластьПоиска.Добавить(Метаданные.Документы.ЭлектронноеПисьмоВходящее);
ОбластьПоиска.Добавить(Метаданные.Документы.ЭлектронноеПисьмоИсходящее);
ОбластьПоиска.Добавить(Метаданные.Справочники.ЭлектронноеПисьмоВходящееПрисоединенныеФайлы);
ОбластьПоиска.Добавить(Метаданные.Справочники.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы);
ОбластьПоиска.Добавить(Метаданные.РегистрыСведений.ПредметыПапкиВзаимодействий);
Если Не ТолькоПочта Тогда
ОбластьПоиска.Добавить(Метаданные.Документы.ТелефонныйЗвонок);
ОбластьПоиска.Добавить(Метаданные.Документы.Встреча);
ОбластьПоиска.Добавить(Метаданные.Документы.ЗапланированноеВзаимодействие);
ОбластьПоиска.Добавить(Метаданные.Справочники.ТелефонныйЗвонокПрисоединенныеФайлы);
ОбластьПоиска.Добавить(Метаданные.Справочники.ВстречаПрисоединенныеФайлы);
ОбластьПоиска.Добавить(Метаданные.Справочники.ЗапланированноеВзаимодействиеПрисоединенныеФайлы);
КонецЕсли;
СписокПоиска.ОбластьПоиска = ОбластьПоиска;
СписокПоиска.ПерваяЧасть();
Если СписокПоиска.СлишкомМногоРезультатов() Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
Список,
"Поиск",
Документы.ЭлектронноеПисьмоВходящее.ПустаяСсылка(),
ВидСравненияКомпоновкиДанных.Равно,, Истина);
Элементы.СтрокаПоиска.ЦветФона = ЦветаСтиля.ОшибкаПолнотекстовыйПоискФон;
Результат.ЕстьОшибка = Истина;
Результат.ИдентификаторОшибки = "СлишкомМногоРезультатов";
Результат.ТекстОшибки = НСтр("ru = 'Слишком много результатов, уточните запрос.'");
Возврат Результат;
КонецЕсли;
Если СписокПоиска.ПолноеКоличество() = 0 Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
Список,
"Поиск",
Документы.ЭлектронноеПисьмоВходящее.ПустаяСсылка(),
ВидСравненияКомпоновкиДанных.Равно,, Истина);
Элементы.СтрокаПоиска.ЦветФона = ЦветаСтиля.ОшибкаПолнотекстовыйПоискФон;
Результат.ЕстьОшибка = Истина;
Результат.ИдентификаторОшибки = "НичегоНеНайдено";
Результат.ТекстОшибки = НСтр("ru = 'Ничего не найдено.'");
Возврат Результат;
КонецЕсли;
Результат.КоличествоЭлементовНайдено = СписокПоиска.ПолноеКоличество();
НачальнаяПозиция = 0;
КонечнаяПозиция = ?(Результат.КоличествоЭлементовНайдено > РазмерПорции, РазмерПорции, Результат.КоличествоЭлементовНайдено) - 1;
ЕстьСледующаяПорция = Истина;
Пока ЕстьСледующаяПорция Цикл
Для СчетчикЭлементов = 0 По КонечнаяПозиция Цикл
Элемент = СписокПоиска.Получить(СчетчикЭлементов);
НоваяСтрока = ОписанияНайденоПолнотекстовымПоиском.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,Элемент);
Если ВзаимодействияКлиентСервер.ЯвляетсяПрисоединеннымФайломВзаимодействий(Элемент.Значение) Тогда
НоваяСтрока.Взаимодействие = Элемент.Значение.ВладелецФайла;
ИначеЕсли ТипЗнч(Элемент.Значение) = Тип("РегистрСведенийКлючЗаписи.ПредметыПапкиВзаимодействий") Тогда
НоваяСтрока.Взаимодействие = Элемент.Значение.Взаимодействие;
Иначе
НоваяСтрока.Взаимодействие = Элемент.Значение;
КонецЕсли;
КонецЦикла;
НачальнаяПозиция = НачальнаяПозиция + РазмерПорции;
ЕстьСледующаяПорция = (НачальнаяПозиция < Результат.КоличествоЭлементовНайдено - 1);
Если ЕстьСледующаяПорция Тогда
КонечнаяПозиция =
?(Результат.КоличествоЭлементовНайдено > НачальнаяПозиция + РазмерПорции, РазмерПорции,
Результат.КоличествоЭлементовНайдено - НачальнаяПозиция) - 1;
СписокПоиска.СледующаяЧасть();
КонецЕсли;
КонецЦикла;
Если ОписанияНайденоПолнотекстовымПоиском.Количество() = 0 Тогда
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
Список,
"Поиск",
Документы.ЭлектронноеПисьмоВходящее.ПустаяСсылка(),
ВидСравненияКомпоновкиДанных.Равно,, Истина);
Элементы.СтрокаПоиска.ЦветФона = ЦветаСтиля.ОшибкаПолнотекстовыйПоискФон;
Результат.ЕстьОшибка = Истина;
Результат.ИдентификаторОшибки = "НичегоНеНайдено";
Результат.ТекстОшибки = НСтр("ru = 'Ничего не найдено.'");
Возврат Результат;
КонецЕсли;
НомерНайденногоЭлементаСписка = Элементы.СтрокаПоиска.СписокВыбора.НайтиПоЗначению(СтрокаПоиска);
Пока НомерНайденногоЭлементаСписка <> Неопределено Цикл
Элементы.СтрокаПоиска.СписокВыбора.Удалить(НомерНайденногоЭлементаСписка);
НомерНайденногоЭлементаСписка = Элементы.СтрокаПоиска.СписокВыбора.НайтиПоЗначению(СтрокаПоиска);
КонецЦикла;
Элементы.СтрокаПоиска.СписокВыбора.Вставить(0, СтрокаПоиска);
Пока Элементы.СтрокаПоиска.СписокВыбора.Количество() > 100 Цикл
Элементы.СтрокаПоиска.СписокВыбора.Удалить(Элементы.СтрокаПоиска.СписокВыбора.Количество() - 1);
КонецЦикла;
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(
"ИсторияПоискаВзаимодействия",
"",
Элементы.СтрокаПоиска.СписокВыбора.ВыгрузитьЗначения());
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(
Список,
"Поиск",
ОписанияНайденоПолнотекстовымПоиском.Выгрузить(,"Взаимодействие").ВыгрузитьКолонку("Взаимодействие"),
ВидСравненияКомпоновкиДанных.ВСписке,, Истина);
Элементы.СтрокаПоиска.ЦветФона = ЦветаСтиля.ЦветФонаПоля;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьОписаниеНайденоПолнотекстовымПоиском(Взаимодействие)
СтрокаОписания = ОписанияНайденоПолнотекстовымПоиском.НайтиСтроки(Новый Структура("Взаимодействие", Взаимодействие));
Если СтрокаОписания.Количество() = 0 Тогда
ОписаниеНайденоПолнотекстовымПоиском = "";
Возврат;
КонецЕсли;
СтрокаТаблицыСОписанием = СтрокаОписания[0];
Если ВзаимодействияКлиентСервер.ЯвляетсяПрисоединеннымФайломВзаимодействий(СтрокаТаблицыСОписанием.Значение) Тогда
ТекстНайдено = НСтр("ru = 'Найдено в присоединенном файле %1.'");
Иначе
ТекстНайдено = НСтр("ru = 'Найдено в %1.'");
КонецЕсли;
ОписаниеНайденоПолнотекстовымПоиском = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстНайдено,
СтрокаТаблицыСОписанием.Описание);
КонецПроцедуры
&НаСервере
Функция НайтиСтрокуВДанныхФормыКоллекция(ГдеИскать, Значение, Колонка)
НайденныеСтроки = ГдеИскать.НайтиСтроки(Новый Структура(Колонка, Значение));
Если НайденныеСтроки.Количество() > 0 Тогда
Возврат НайденныеСтроки[0].ПолучитьИдентификатор();
КонецЕсли;
Возврат -1;
КонецФункции
&НаСервере
Функция НайтиСтрокуВДанныхФормыДерево(ГдеИскать, Значение, Колонка, ИскатьВПодчиненных)
ЭлементыДерева = ГдеИскать.ПолучитьЭлементы();
Для каждого ЭлементДерева Из ЭлементыДерева Цикл
Если ЭлементДерева[Колонка] = Значение Тогда
Возврат ЭлементДерева.ПолучитьИдентификатор();
ИначеЕсли ИскатьВПодчиненных Тогда
НайденныйИдентификаторСтроки = НайтиСтрокуВДанныхФормыДерево(ЭлементДерева, Значение,Колонка, ИскатьВПодчиненных);
Если НайденныйИдентификаторСтроки >=0 Тогда
Возврат НайденныйИдентификаторСтроки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат -1;
КонецФункции
&НаКлиенте
Функция ТекущийЭлементСписокПанелиНавигации()
Если Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКонтакт Тогда
Возврат Элементы.КонтактыПанелиНавигации;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПредмет Тогда
Возврат Элементы.ПредметыПанельНавигации;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаПапки Тогда
Возврат Элементы.Папки;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаСвойства Тогда
Возврат Элементы.Свойства;
ИначеЕсли Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы.СтраницаКатегории Тогда
Возврат Элементы.Категории;
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
&НаКлиенте
Функция ВыборКорректен(ИмяСписка, ПоТекущейСтроке = Ложь)
ТипГруппировка = Тип("СтрокаГруппировкиДинамическогоСписка");
Если ПоТекущейСтроке Тогда
Если ТипЗнч(Элементы[ИмяСписка].ТекущаяСтрока) <> ТипГруппировка И Элементы[ИмяСписка].ТекущиеДанные <> Неопределено Тогда
Возврат Истина;
КонецЕсли;
Иначе
Для Каждого Элемент Из Элементы[ИмяСписка].ВыделенныеСтроки Цикл
Если ТипЗнч(Элемент) <> ТипГруппировка Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Ложь;
КонецФункции
&НаСервере
Процедура СкопироватьОтбор(Приемник, Источник, УдалятьПредставлениеГруппы = Ложь, УдалятьНеиспользуемые = Истина, НеВключатьОтборПанелиНавигации = Ложь)
Для каждого ЭлементОтбораИсточник Из Источник.Элементы Цикл
Если УдалятьНеиспользуемые И (Не ЭлементОтбораИсточник.Использование) Тогда
Продолжить;
КонецЕсли;
Если НеВключатьОтборПанелиНавигации И ТипЗнч(ЭлементОтбораИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных")
И ЭлементОтбораИсточник.Представление = "ОтборПанелиНавигации" Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(ЭлементОтбораИсточник) = Тип("ЭлементОтбораКомпоновкиДанных")
И ЭлементОтбораИсточник.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Поиск") Тогда
Продолжить;
КонецЕсли;
ЭлементОтбора = Приемник.Элементы.Добавить(ТипЗнч(ЭлементОтбораИсточник));
ЗаполнитьЗначенияСвойств(ЭлементОтбора, ЭлементОтбораИсточник);
Если ТипЗнч(ЭлементОтбораИсточник) = Тип("ГруппаЭлементовОтбораКомпоновкиДанных") Тогда
Если УдалятьПредставлениеГруппы Тогда
ЭлементОтбора.Представление = "";
КонецЕсли;
СкопироватьОтбор(ЭлементОтбора, ЭлементОтбораИсточник);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ВопросОУдаленииПапкиПослеЗавершения(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ОписаниеОшибки = УдалитьПапкуСервер(ДополнительныеПараметры.ТекущиеДанные.Значение);
Если НЕ ПустаяСтрока(ОписаниеОшибки) Тогда
ПоказатьПредупреждение(, ОписаниеОшибки);
Иначе
ВосстановитьРаскрытыеУзлыДерева();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыборДатыОтработкиПриЗавершении(ВыбраннаяДата, ДополнительныеПараметры) Экспорт
ИмяТекущегоЭлемента = ДополнительныеПараметры.ИмяТекущегоЭлемента;
Если ВыбраннаяДата <> Неопределено Тогда
ОтложитьРассмотрение(ВыбраннаяДата, ?(ИмяТекущегоЭлемента = Неопределено, Неопределено, Элементы[ИмяТекущегоЭлемента].ВыделенныеСтроки));
ВосстановитьРаскрытыеУзлыДерева();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьПанельНавигацииНаСервере()
ОбновитьПанельНавигации();
УправлениеВидимостьюПриПереключенииПанелиНавигации();
КонецПроцедуры
&НаСервере
Процедура ПодготовитьНастройкиФормыКВыводуТекущейСсылки(ТекущаяСсылка)
ИмяТекущейПанелиНавигации = "СтраницаПредмет";
Если ВзаимодействияКлиентСервер.ЯвляетсяПредметом(ТекущаяСсылка) Тогда
Предмет = ТекущаяСсылка;
ИначеЕсли ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(ТекущаяСсылка) Тогда
Предмет = Взаимодействия.СтруктураРеквизитовВзаимодействия(ТекущаяСсылка).Предмет;
Иначе
Предмет = Неопределено;
КонецЕсли;
Если ЗначениеЗаполнено(Предмет) Тогда
Элементы.ПредметыПанельНавигации.ТекущаяСтрока = РегистрыСведений.СостоянияПредметовВзаимодействий.СоздатьКлючЗаписи(Новый Структура("Предмет", Предмет));
ИзменитьОтборСписок("Предметы", Новый Структура("Значение, ОписаниеТипов", Предмет, Неопределено));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПереходаНаСервере(Знач ТекущаяСсылка)
ПодготовитьНастройкиФормыКВыводуТекущейСсылки(ТекущаяСсылка);
Если СтрокаПоиска <> "" Тогда
СтрокаПоиска = "";
РасширенныйПоиск = Ложь;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Поиск", Неопределено,
ВидСравненияКомпоновкиДанных.Равно,, Ложь);
Элементы.ОписаниеНайденоПолнотекстовымПоиском.Видимость = РасширенныйПоиск;
КонецЕсли;
ТипВзаимодействия = "Все";
Статус = "Все";
Ответственный = Неопределено;
ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект, "Ответственный");
ПриИзмененииТипаСервер(Истина);
ПанельНавигацииСкрыта = Ложь;
Элементы.СтраницыПанелиНавигации.ТекущаяСтраница = Элементы[ИмяТекущейПанелиНавигации];
УправлениеВидимостьюПриПереключенииПанелиНавигации();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список);
КонецПроцедуры
&НаКлиенте
Процедура ПредупреждениеОНебезопасномСодержимомОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
Если НавигационнаяСсылкаФорматированнойСтроки = "ВключитьНебезопасноеСодержимое" Тогда
СтандартнаяОбработка = Ложь;
ВключитьНебезопасноеСодержимое = Истина;
ОтобразитьПредпросмотрВзаимодействия(ВзаимодействиеДляКоторогоСформированПредпросмотр, Элементы.СтраницыПредпросмотр.ТекущаяСтраница.Имя);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьПредупрежденияБезопасности(Форма)
Форма.Элементы.ПредупреждениеБезопасности.Видимость = Не Форма.ЗапрещеноОтображениеНебезопасногоСодержимогоВПисьмах
И Форма.ЕстьНебезопасноеСодержимое И Не Форма.ВключитьНебезопасноеСодержимое;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСостояниеОтправкиПисем()
ПроверитьСостояниеОтправкиПисемНаСервере();
Интервал = ?(Элементы.ПредупреждениеОНеотправленныхПисьмах.Видимость, 60, 600);
ПодключитьОбработчикОжидания("ПроверитьСостояниеОтправкиПисем", Интервал, Истина);
КонецПроцедуры
&НаСервере
Процедура ПроверитьСостояниеОтправкиПисемНаСервере()
Элементы.ПредупреждениеОНеотправленныхПисьмах.Видимость = Взаимодействия.ОтправкаПисемПриостановлена();
Элементы.ПредупреждениеОНеотправленныхПисьмахНадпись.Заголовок = Взаимодействия.ТекстПредупрежденияОПриостановкеОтправкиПисем();
КонецПроцедуры
&НаСервере
Процедура СФормироватьДекорациюТолькоЗначимыеКонтакты()
Если ТолькоЗначимыеКонтакты Тогда
ТекстЗаголовка = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Контакты с взаимодействиями по отбору, <a href = ""%1"">изменить</a>'"),
"ИзменитьТолькоЗначимыеКонтакты");
Иначе
ТекстЗаголовка = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Отображаются все контакты, <a href = ""%1"">изменить</a>'"),
"ИзменитьТолькоЗначимыеКонтакты");
КонецЕсли;
Элементы.ДекорацияТолькоЗначимыеКонтакты.Заголовок = ТекстЗаголовка;
КонецПроцедуры
&НаСервере
Процедура СФормироватьДекорациюТолькоЗначимыеПредметы()
Если ТолькоЗначимыеПредметы Тогда
ТекстЗаголовка = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Предметы с взаимодействиями по отбору, <a href = ""%1"">изменить</a>'"),
"ИзменитьТолькоЗначимыеПредметы");
Иначе
ТекстЗаголовка = СтроковыеФункции.ФорматированнаяСтрока(НСтр("ru='Отображаются все предметы, <a href = ""%1"">изменить</a>'"),
"ИзменитьТолькоЗначимыеПредметы");
КонецЕсли;
Элементы.ДекорацияТолькоЗначимыеПредметы.Заголовок = ТекстЗаголовка;
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьПолучитьПочтуПользователяКлиент(ВыводитьПрогресс = Ложь)
ОчиститьСообщения();
УправлениеЭлектроннойПочтойКлиент.ОтправитьЗагрузитьПочтуПользователя(УникальныйИдентификатор, ЭтотОбъект,
Элементы.Список, ВыводитьПрогресс);
ПодключитьОбработчикОжидания("ПроверитьНеобходимостьОтправкиПолученияПочты", 30, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьНеобходимостьОтправкиПолученияПочты()
Если Не РазделениеВключено Тогда
Возврат;
КонецЕсли;
Если Не ОтправкаПолучениеПисемВыполняется
И (ОбщегоНазначенияКлиент.ДатаСеанса() > ДатаПредыдущегоПолученияОтправкиПочты + 300) Тогда
ОтправитьПолучитьПочтуПользователяКлиент();
КонецЕсли;
ПодключитьОбработчикОжидания("ПроверитьНеобходимостьОтправкиПолученияПочты", 30, Истина);
КонецПроцедуры
#КонецОбласти
#Область ВыполнениеПоиска
&НаКлиенте
Процедура ПроверитьИндексПолнотекстовогоПоиска()
Если Не ИндексПолнотекстовогоПоискаАктуален Тогда
Если ИнформационнаяБазаФайловая Тогда
ОповещениеПослеОтветаНаВопрос = Новый ОписаниеОповещения("ПроверитьИндексПолнотекстовогоПоискаЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОповещениеПослеОтветаНаВопрос,
НСтр("ru = 'Индекс полнотекстового поиска неактуален. Обновить индекс?'"), РежимДиалогаВопрос.ДаНет);
Иначе
Элементы.ПредупреждениеОНеактуальностиИндекса.Видимость = Истина;
ВыполнитьПолнотекстовыйПоиск();
КонецЕсли;
Иначе
Элементы.ПредупреждениеОНеактуальностиИндекса.Видимость = Ложь;
ВыполнитьПолнотекстовыйПоиск();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьИндексПолнотекстовогоПоискаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ПодключитьОбработчикОжидания("ОбновитьИндексПолнотекстовогоПоиска",0.2,Истина);
Иначе
Элементы.ПредупреждениеОНеактуальностиИндекса.Видимость = Истина;
ВыполнитьПолнотекстовыйПоиск();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьИндексПолнотекстовогоПоиска()
Состояние(НСтр("ru = 'Идет обновление индекса полнотекстового поиска...'"));
ОбновитьИндексПолнотекстовогоПоискаСервер();
ИндексПолнотекстовогоПоискаАктуален = Истина;
Элементы.ПредупреждениеОНеактуальностиИндекса.Видимость = Ложь;
Состояние(НСтр("ru = 'Обновление индекса полнотекстового поиска завершено...'"));
ВыполнитьПолнотекстовыйПоиск();
КонецПроцедуры
&НаСервере
Процедура ОбновитьИндексПолнотекстовогоПоискаСервер()
УстановитьПривилегированныйРежим(Истина);
ПолнотекстовыйПоиск.ОбновитьИндекс();
КонецПроцедуры
#КонецОбласти
#КонецОбласти