Files
2020-08-06 17:12:00 +03:00

1209 lines
70 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2020, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
#Область ОписаниеПеременных
&НаКлиенте
Перем КонтекстВыбора;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Взаимодействия.ИнициализироватьФормуСпискаВзаимодействий(ЭтотОбъект, Параметры);
Элементы.СписокСоздатьЭлектронноеПисьмоОтдельнаяКнопкаДерево.Видимость = ТолькоПочта;
Элементы.ГруппаСоздатьДерево.Видимость = НЕ ТолькоПочта;
Если ТолькоПочта Тогда
ЗаголовокУчастникиПочта = НСтр("ru = 'Кому, от'");
Элементы.ДеревоВзаимодействийУчастники.Заголовок = ЗаголовокУчастникиПочта;
Элементы.Участники.Заголовок = ЗаголовокУчастникиПочта;
КонецЕсли;
Если Параметры.Свойство("Отбор") Тогда
ШаблонЗаголовка = НСтр("ru = 'Взаимодействия по %1'");
Если Параметры.Отбор.Свойство("Предмет") Тогда
Если Параметры.Свойство("ДополнительныеПараметры")
И Параметры.ДополнительныеПараметры.Свойство("ТипВзаимодействия") Тогда
Если Параметры.ДополнительныеПараметры.ТипВзаимодействия = "Взаимодействие" Тогда
ПредметДляОтбора = Взаимодействия.ПолучитьЗначениеПредмета(Параметры.Отбор.Предмет);
Параметры.Отбор.Предмет = ПредметДляОтбора ;
ИначеЕсли Параметры.ДополнительныеПараметры.ТипВзаимодействия = "Предмет" Тогда
ПредметДляОтбора = Параметры.Отбор.Предмет;
КонецЕсли;
КонецЕсли;
Параметры.Отбор.Удалить("Предмет");
УстановитьОтборПоПредмету();
Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ОбщегоНазначения.ПредметСтрокой(ПредметДляОтбора));
ИначеЕсли Параметры.Отбор.Свойство("Контакт") Тогда
Контакт = Параметры.Отбор.Контакт;
Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ОбщегоНазначения.ПредметСтрокой(Контакт));
Параметры.Отбор.Удалить("Контакт");
УстановитьОтборПоКонтакту();
КонецЕсли;
КонецЕсли;
Взаимодействия.ЗаполнитьСписокДоступныхДляСозданияДокументов(ДокументыДоступныеДляСоздания);
Взаимодействия.ЗаполнитьПодменюПоТипуВзаимодействия(Элементы.ДеревоТипВзаимодействия, ЭтотОбъект);
Взаимодействия.ЗаполнитьПодменюПоТипуВзаимодействия(Элементы.СписокТипВзаимодействия, ЭтотОбъект);
ТипВзаимодействия = ?(ТолькоПочта,"ВсеПисьма","Все");
Статус = "Все";
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
Статус = Настройки.Получить("Статус");
Если Статус <> Неопределено Тогда
Настройки.Удалить("Статус");
КонецЕсли;
Если Не ИспользоватьПризнакРассмотрено Или НЕ ЗначениеЗаполнено(Статус) Тогда
Статус = "Все";
КонецЕсли;
Ответственный = Настройки.Получить("Ответственный");
Если Ответственный <> Неопределено Тогда
Настройки.Удалить("Ответственный");
КонецЕсли;
ВВидеДерева = Настройки.Получить("ВВидеДерева");
Если ВВидеДерева <> Неопределено Тогда
Настройки.Удалить("ВВидеДерева");
КонецЕсли;
Взаимодействия.ПриЗагрузкеТипаВзаимодействийИзНастроек(ЭтотОбъект, Настройки);
УправлениеСтраницамиСервер();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ВзаимодействияКлиентСервер.ЯвляетсяВзаимодействием(Источник) Тогда
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаДерево Тогда
ЗаполнитьДеревоВзаимодействийКлиент();
Иначе
Если ОтборПоПредмету Тогда
УстановитьОтборПоПредмету();
Иначе
УстановитьОтборПоКонтакту();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.Пользователи.Форма.ФормаСписка") Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
МассивИзмененныхДокументов = Новый Массив;
ВыполненаЗамена = Ложь;
УстановитьОтветственного(ВыбранноеЗначение, МассивИзмененныхДокументов);
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
Если МассивИзмененныхДокументов.Количество() > 0 Тогда
Элементы.Список.Обновить();
КонецЕсли;
Иначе
Если МассивИзмененныхДокументов.Количество() > 0 Тогда
РазвернутьВсеСтрокиДерева();
КонецЕсли;
КонецЕсли;
Для Каждого ИзмененныйДокумент Из МассивИзмененныхДокументов Цикл
Оповестить("ЗаписьВзаимодействия", ИзмененныйДокумент);
КонецЦикла;
КонецЕсли;
ИначеЕсли КонтекстВыбора = "ПредметВыполнитьТипПредмета" Тогда
Если ВыбранноеЗначение = Неопределено Тогда
Возврат;
КонецЕсли;
КонтекстВыбора = "ПредметВыполнить";
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ОткрытьФорму(ВыбранноеЗначение + ".ФормаВыбора", ПараметрыФормы, ЭтотОбъект);
Возврат;
ИначеЕсли КонтекстВыбора = "ПредметВыполнить" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
Если ОтборПоПредмету И ПредметДляОтбора = ВыбранноеЗначение Тогда
Возврат;
КонецЕсли;
ВыполненаЗамена = Ложь;
УстановитьПредмет(ВыбранноеЗначение, ВыполненаЗамена);
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
Если ВыполненаЗамена Тогда
Элементы.Список.Обновить();
КонецЕсли;
Иначе
Если ВыполненаЗамена Тогда
РазвернутьВсеСтрокиДерева();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ОтветственныйПриИзменении(Элемент)
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект, Элемент.Имя,, ОтборПоПредмету);
Иначе
ЗаполнитьДеревоВзаимодействийКлиент();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтатусПриИзменении(Элемент)
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
ДатаДляОтбора = ОбщегоНазначенияКлиент.ДатаСеанса();
ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,Элемент.Имя, ДатаДляОтбора, ОтборПоПредмету);
Иначе
ЗаполнитьДеревоВзаимодействийКлиент();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
ЗначенияЗаполнения = Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт);
ВзаимодействияКлиент.СписокПередНачаломДобавления(
Элемент,Отказ,Копирование,ТолькоПочта,ДокументыДоступныеДляСоздания,
Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения));
КонецПроцедуры
&НаКлиенте
Процедура ДеревоВзаимодействийВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(, ТекущиеДанные.Ссылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоВзаимодействийПередУдалением(Элемент, Отказ)
Отказ = Истина;
Если Элементы.ДеревоВзаимодействий.ВыделенныеСтроки.Количество() > 0 Тогда
ЕстьПомеченныеНаУдаление = Ложь;
Для каждого ВыделеннаяСтрока Из Элементы.ДеревоВзаимодействий.ВыделенныеСтроки Цикл
Если Элементы.ДеревоВзаимодействий.ДанныеСтроки(ВыделеннаяСтрока).ПометкаУдаления Тогда
ЕстьПомеченныеНаУдаление = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьПомеченныеНаУдаление Тогда
ТекстВопроса = НСтр("ru = 'Снять с выделенных элементов пометку на удаление?'");
Иначе
ТекстВопроса = НСтр("ru = 'Пометить выделенные строки на удаление?'");
КонецЕсли;
ДополнительныеПараметры = Новый Структура("ЕстьПомеченныеНаУдаление", ЕстьПомеченныеНаУдаление);
ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВопросОПометкеНаУдалениеПослеЗавершения", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(ОбработчикОповещенияОЗакрытии,
ТекстВопроса,РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоВзаимодействийПередНачаломИзменения(Элемент, Отказ)
Отказ = Истина;
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ПоказатьЗначение(, ТекущиеДанные.Ссылка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДеревоВзаимодействийПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Отказ = Истина;
Если Копирование Тогда
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
Если ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее")
ИЛИ ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее") Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Копирование электронных писем запрещено'"));
ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.Встреча") Тогда
ОткрытьФорму("Документ.Встреча.ФормаОбъекта",
Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтотОбъект);
ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ЗапланированноеВзаимодействие") Тогда
ОткрытьФорму("Документ.ЗапланированноеВзаимодействие.ФормаОбъекта",
Новый Структура("ЗначениеКопирования", ТекущиеДанные.Ссылка), ЭтотОбъект);
ИначеЕсли ТипЗнч(ТекущиеДанные.Ссылка) = Тип("ДокументСсылка.ТелефонныйЗвонок") Тогда
ОткрытьФорму("Документ.ТелефонныйЗвонок.ФормаОбъекта",
Новый Структура("ЗначениеКопирования",ТекущиеДанные.Ссылка), ЭтотОбъект);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТипВзаимодействияПриИзменении(Элемент)
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(ЭтотОбъект, ТипВзаимодействия);
Иначе
ЗаполнитьДеревоВзаимодействийКлиент();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТипВзаимодействияСтатусОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
// Изменяет отбор по типу взаимодействия в списке.
//
// Параметры:
// Команда - КомандаФормы - выполняемая команда.
//
&НаКлиенте
Процедура Подключаемый_ИзменитьОтборТипВзаимодействия(Команда)
ИзменитьОтборТипВзаимодействияСервер(Команда.Имя);
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница <> Элементы.СтраницаСписок Тогда
ЗаполнитьДеревоВзаимодействийКлиент();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РассмотреноВыполнить(Команда)
Если НЕ ВыборКорректен() Тогда
Возврат;
КонецЕсли;
ФлагРассмотрено = (Не Команда.Имя = "НеРассмотрено");
ВыполненаЗамена = Ложь;
МассивВзаимодействий = Новый Массив;
УстановитьФлагРассмотрено(ВыполненаЗамена, ФлагРассмотрено, МассивВзаимодействий);
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
Если ВыполненаЗамена Тогда
Элементы.Список.Обновить();
КонецЕсли;
Иначе
Если ВыполненаЗамена Тогда
РазвернутьВсеСтрокиДерева();
КонецЕсли;
КонецЕсли;
Если ВыполненаЗамена Тогда
Для Каждого Взаимодействие Из МассивВзаимодействий Цикл
Оповестить("ЗаписьВзаимодействия", Взаимодействие);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтветственныйВыполнить()
Если НЕ ВыборКорректен() Тогда
Возврат;
КонецЕсли;
КонтекстВыбора = Неопределено;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимВыбора", Истина);
ОткрытьФорму("Справочник.Пользователи.Форма.ФормаСписка", ПараметрыФормы, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПредметВыполнить()
Если НЕ ВыборКорректен() Тогда
Возврат;
КонецЕсли;
КонтекстВыбора = "ПредметВыполнитьТипПредмета";
ОткрытьФорму("ЖурналДокументов.Взаимодействия.Форма.ВыборТипаПредмета",,ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьИнтервал(Команда)
Диалог = Новый ДиалогРедактированияСтандартногоПериода();
Диалог.Период = Интервал;
ОбработчикОповещенияЗакрытия = Новый ОписаниеОповещения("ВыборИнтервалаЗакрытие", ЭтотОбъект);
Диалог.Показать(ОбработчикОповещенияЗакрытия);
КонецПроцедуры
&НаКлиенте
Процедура ОтложитьРассмотрениеВыполнить(Команда)
Если НЕ ВыборКорректен() Тогда
Возврат;
КонецЕсли;
ДатаОтработки = ОбщегоНазначенияКлиент.ДатаСеанса();
ОбработчикОповещенияОЗакрытии = Новый ОписаниеОповещения("ВводДатыОтложитьРассмотрениеПослеЗавершения", ЭтотОбъект);
ПоказатьВводДаты(ОбработчикОповещенияОЗакрытии, ДатаОтработки, НСтр("ru = 'Отработать после'"));
КонецПроцедуры
&НаКлиенте
Процедура СоздатьВстречу(Команда)
СоздатьНовоеВзаимодействие("Встреча");
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЗапланированноеВзаимодействие(Команда)
СоздатьНовоеВзаимодействие("ЗапланированноеВзаимодействие");
КонецПроцедуры
&НаКлиенте
Процедура СоздатьТелефонныйЗвонок(Команда)
СоздатьНовоеВзаимодействие("ТелефонныйЗвонок");
КонецПроцедуры
&НаКлиенте
Процедура СоздатьЭлектронноеПисьмо(Команда)
СоздатьНовоеВзаимодействие("ЭлектронноеПисьмоИсходящее");
КонецПроцедуры
&НаКлиенте
Процедура СоздатьНовоеВзаимодействие(ТипОбъекта)
ЗначенияЗаполнения = Новый Структура("Предмет,Контакт",ПредметДляОтбора,Контакт);
ВзаимодействияКлиент.СоздатьНовоеВзаимодействие(
ТипОбъекта,
Новый Структура("ЗначенияЗаполнения", ЗначенияЗаполнения),
ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьСообщениеSMS(Команда)
СоздатьНовоеВзаимодействие("СообщениеSMS");
КонецПроцедуры
&НаКлиенте
Процедура ПереключитьРежимПросмотра(Команда)
ПереключитьРежимПросмотраСервер();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьДерево(Команда)
ЗаполнитьДеревоВзаимодействийКлиент();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "ДеревоВзаимодействий.Дата", Элементы.ДеревоВзаимодействийДата.Имя);
СтандартныеПодсистемыСервер.УстановитьУсловноеОформлениеПоляДата(ЭтотОбъект, "Список.Дата", Элементы.Список.Имя);
//
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Список.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Рассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение);
//
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоВзаимодействий.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоВзаимодействий.Рассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПризнакРассмотрено");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("Шрифт", Метаданные.ЭлементыСтиля.ОсновнойЭлементСписка.Значение);
КонецПроцедуры
&НаСервере
Процедура ИзменитьОтборТипВзаимодействияСервер(ИмяКоманды)
ТипВзаимодействия = Взаимодействия.ТипВзаимодействияПоИмениКоманды(ИмяКоманды, ТолькоПочта);
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
ПриИзмененииТипаСервер();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьФлагРассмотрено(ВыполненаЗамена, ФлагРассмотрено, МассивВзаимодействий)
ВыполненаЗамена = Ложь;
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
ТипГруппировка = Тип("СтрокаГруппировкиДинамическогоСписка");
Для Каждого Взаимодействие Из ВыделенныеСтроки Цикл
Если ЗначениеЗаполнено(Взаимодействие)
И ТипЗнч(Взаимодействие) <> ТипГруппировка Тогда
МассивВзаимодействий.Добавить(Взаимодействие);
КонецЕсли;
КонецЦикла;
Взаимодействия.УстановитьПризнакРассмотрено(МассивВзаимодействий,ФлагРассмотрено, ВыполненаЗамена);
Иначе
ВыделенныеСтроки = Элементы.ДеревоВзаимодействий.ВыделенныеСтроки;
Для каждого Взаимодействие Из ВыделенныеСтроки Цикл
ЭлементДерева = ДеревоВзаимодействий.НайтиПоИдентификатору(Взаимодействие);
Если ЭлементДерева <> Неопределено И (НЕ ЭлементДерева.Рассмотрено = ФлагРассмотрено) Тогда
МассивВзаимодействий.Добавить(ЭлементДерева.Ссылка);
КонецЕсли;
КонецЦикла;
Взаимодействия.УстановитьПризнакРассмотрено(МассивВзаимодействий,ФлагРассмотрено, ВыполненаЗамена);
Если ВыполненаЗамена Тогда
ЗаполнитьДеревоВзаимодействий();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьОтветственного(Ответственный, МассивИзмененныхДокументов)
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
ТипГруппировка = Тип("СтрокаГруппировкиДинамическогоСписка");
Для Каждого Взаимодействие Из ВыделенныеСтроки Цикл
Если ЗначениеЗаполнено(Взаимодействие)
И ТипЗнч(Взаимодействие) <> ТипГруппировка
И Взаимодействие.Ответственный <> Ответственный Тогда
Взаимодействия.ЗаменитьОтветственногоВДокументе(Взаимодействие, Ответственный);
МассивИзмененныхДокументов.Добавить(Взаимодействие);
КонецЕсли;
КонецЦикла;
Иначе
ВыделенныеСтроки = Элементы.ДеревоВзаимодействий.ВыделенныеСтроки;
Для каждого Взаимодействие Из ВыделенныеСтроки Цикл
ЭлементДерева = ДеревоВзаимодействий.НайтиПоИдентификатору(Взаимодействие);
Если ЭлементДерева <> Неопределено И ЭлементДерева.Ответственный <> Ответственный Тогда
Взаимодействия.ЗаменитьОтветственногоВДокументе(ЭлементДерева.Ссылка, Ответственный);
МассивИзмененныхДокументов.Добавить(ЭлементДерева.Ссылка);
КонецЕсли;
КонецЦикла;
Если МассивИзмененныхДокументов.Количество() > 0 Тогда
ЗаполнитьДеревоВзаимодействий();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьПредмет(Предмет,ВыполненаЗамена)
МассивВзаимодействий = Новый Массив;
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
ТипГруппировка = Тип("СтрокаГруппировкиДинамическогоСписка");
Для Каждого Взаимодействие Из ВыделенныеСтроки Цикл
Если ЗначениеЗаполнено(Взаимодействие)
И ТипЗнч(Взаимодействие) <> ТипГруппировка Тогда
МассивВзаимодействий.Добавить(Взаимодействие)
КонецЕсли;
КонецЦикла;
Если МассивВзаимодействий.Количество() > 0 Тогда
ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(МассивВзаимодействий, Предмет, Истина);
ВыполненаЗамена = Истина;
КонецЕсли;
Иначе
ВыделенныеСтроки = Элементы.ДеревоВзаимодействий.ВыделенныеСтроки;
Для каждого Взаимодействие Из ВыделенныеСтроки Цикл
ЭлементДерева = ДеревоВзаимодействий.НайтиПоИдентификатору(Взаимодействие);
Если ЭлементДерева <> Неопределено И ЭлементДерева.Предмет <> Предмет Тогда
МассивВзаимодействий.Добавить(ЭлементДерева.Ссылка);
КонецЕсли;
КонецЦикла;
Если МассивВзаимодействий.Количество() > 0 Тогда
ВзаимодействияВызовСервера.УстановитьПредметДляМассиваВзаимодействий(МассивВзаимодействий, Предмет, Истина);
ВыполненаЗамена = Истина;
ЗаполнитьДеревоВзаимодействий();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОтложитьРассмотрение(ДатаРассмотрения, ВыполненаЗамена = Ложь)
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
ВыделенныеСтроки = Элементы.Список.ВыделенныеСтроки;
МассивВзаимодействий = Новый Массив;
ТипГруппировка = Тип("СтрокаГруппировкиДинамическогоСписка");
Для Каждого Взаимодействие Из ВыделенныеСтроки Цикл
Если ЗначениеЗаполнено(Взаимодействие)
И ТипЗнч(Взаимодействие) <> ТипГруппировка Тогда
МассивВзаимодействий.Добавить(Взаимодействие);
КонецЕсли;
КонецЦикла;
МассивВзаимодействий = Взаимодействия.МассивВзаимодействийДляИзмененияДатыРассмотрения(МассивВзаимодействий, ДатаРассмотрения);
Для Каждого Взаимодействие Из МассивВзаимодействий Цикл
Реквизиты = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия();
Реквизиты.РассмотретьПосле = ДатаРассмотрения;
Реквизиты.РассчитыватьРассмотрено = Ложь;
РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(Взаимодействие, Реквизиты);
ВыполненаЗамена = Истина;
КонецЦикла;
Иначе
ВыделенныеСтроки = Элементы.ДеревоВзаимодействий.ВыделенныеСтроки;
МассивВзаимодействий = Новый Массив;
Для каждого Взаимодействие Из ВыделенныеСтроки Цикл
ЭлементДерева = ДеревоВзаимодействий.НайтиПоИдентификатору(Взаимодействие);
Если ЭлементДерева <> Неопределено И НЕ ЭлементДерева.Рассмотрено Тогда
Реквизиты = РегистрыСведений.ПредметыПапкиВзаимодействий.РеквизитыВзаимодействия();
Реквизиты.РассмотретьПосле = ДатаРассмотрения;
Реквизиты.РассчитыватьРассмотрено = Ложь;
РегистрыСведений.ПредметыПапкиВзаимодействий.ЗаписатьПредметыПапкиВзаимодействий(ЭлементДерева.Ссылка, Реквизиты);
ВыполненаЗамена = Истина;
КонецЕсли;
КонецЦикла;
Если ВыполненаЗамена Тогда
ЗаполнитьДеревоВзаимодействий();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ВыборКорректен()
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
Если Элементы.Список.ВыделенныеСтроки.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
Для Каждого Элемент Из Элементы.Список.ВыделенныеСтроки Цикл
Если ТипЗнч(Элемент) <> Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
Возврат Истина;
КонецЕсли;
КонецЦикла;
Возврат Ложь;
Иначе
Если Элементы.ДеревоВзаимодействий.ВыделенныеСтроки.Количество() = 0 Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецЕсли;
КонецФункции
&НаСервере
Процедура ПереключитьРежимПросмотраСервер()
ВВидеДерева = НЕ ВВидеДерева;
УправлениеСтраницамиСервер();
КонецПроцедуры
&НаСервере
Процедура УправлениеСтраницамиСервер()
Если ВВидеДерева Тогда
Интервал = Элементы.Список.Период;
Команды.ПереключитьРежимПросмотра.Подсказка = НСтр("ru = 'Установить режим просмотра в виде списка'");
Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаДерево;
ЗаполнитьДеревоВзаимодействий();
Иначе
ДатаДляОтбора = ТекущаяДатаСеанса();
Элементы.Список.Период = Интервал;
Команды.ПереключитьРежимПросмотра.Подсказка = НСтр("ru = 'Установить режим просмотра в виде дерева'");
Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок;
ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Статус", ДатаДляОтбора, ОтборПоПредмету);
ВзаимодействияКлиентСервер.БыстрыйОтборСписокПриИзменении(ЭтотОбъект,"Ответственный", ДатаДляОтбора, ОтборПоПредмету);
ПриИзмененииТипаСервер();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДеревоВзаимодействий()
Если ОтборПоПредмету Тогда
СхемаОтбора = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("ИерархияВзаимодействийПредмет");
Иначе
СхемаОтбора = ЖурналыДокументов.Взаимодействия.ПолучитьМакет("ИерархияВзаимодействийКонтакт");
КонецЕсли;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных();
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаОтбора));
КомпоновщикНастроек.ЗагрузитьНастройки(СхемаОтбора.НастройкиПоУмолчанию);
Если ОтборПоПредмету Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(КомпоновщикНастроек.Настройки.Отбор,
"Предмет", ВидСравненияКомпоновкиДанных.Равно, ПредметДляОтбора);
Иначе
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Контакт",Контакт);
КонецЕсли;
КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Интервал",Интервал);
ОтборНастройщикаКомпоновок = КомпоновщикНастроек.Настройки.Отбор;
Если ТолькоПочта Тогда
СписокТипыПрочиеВзаимодействия = Новый СписокЗначений;
СписокТипыПрочиеВзаимодействия.Добавить(Тип("ДокументСсылка.Встреча"));
СписокТипыПрочиеВзаимодействия.Добавить(Тип("ДокументСсылка.ЗапланированноеВзаимодействие"));
СписокТипыПрочиеВзаимодействия.Добавить(Тип("ДокументСсылка.ТелефонныйЗвонок"));
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип", ВидСравненияКомпоновкиДанных.НеВСписке, СписокТипыПрочиеВзаимодействия);
КонецЕсли;
// Быстрый отбор "Ответственный".
Если НЕ Ответственный.Пустая() Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,"Ответственный",
ВидСравненияКомпоновкиДанных.Равно, Ответственный);
КонецЕсли;
// Быстрый отбор "Статус"
Если Статус = "КРассмотрению" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Рассмотрено", ВидСравненияКомпоновкиДанных.Равно, Ложь);
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"РассмотретьПосле", ВидСравненияКомпоновкиДанных.МеньшеИлиРавно, ТекущаяДатаСеанса());
ИначеЕсли Статус = "Отложенные" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Рассмотрено", ВидСравненияКомпоновкиДанных.Равно, Ложь);
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"РассмотретьПосле", ВидСравненияКомпоновкиДанных.Заполнено,);
ИначеЕсли Статус = "Рассмотренные" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Рассмотрено" ,ВидСравненияКомпоновкиДанных.Равно, Истина);
КонецЕсли;
// Быстрый отбор "Тип взаимодействия".
Если ТипВзаимодействия = "ВсеПисьма" Или ТолькоПочта Тогда
СписокТипыПисьма = Новый СписокЗначений;
СписокТипыПисьма.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее"));
СписокТипыПисьма.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"));
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип",ВидСравненияКомпоновкиДанных.ВСписке,СписокТипыПисьма);
ИначеЕсли ТипВзаимодействия = "ВходящиеПисьма" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип",ВидСравненияКомпоновкиДанных.Равно,Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее"));
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"ПометкаУдаления", ВидСравненияКомпоновкиДанных.Равно, Ложь);
ИначеЕсли ТипВзаимодействия = "ПисьмаЧерновики" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип",ВидСравненияКомпоновкиДанных.Равно,Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"));
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"ПометкаУдаления",ВидСравненияКомпоновкиДанных.Равно,Ложь);
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"СтатусИсходящегоПисьма", ВидСравненияКомпоновкиДанных.Равно,
Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик);
ИначеЕсли ТипВзаимодействия = "ИсходящиеПисьма" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип",ВидСравненияКомпоновкиДанных.Равно,Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"));
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"ПометкаУдаления",ВидСравненияКомпоновкиДанных.Равно,Ложь);
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"СтатусИсходящегоПисьма", ВидСравненияКомпоновкиДанных.Равно,
Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Исходящее);
ИначеЕсли ТипВзаимодействия = "Отправленные" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип",ВидСравненияКомпоновкиДанных.Равно, Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"));
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"ПометкаУдаления", ВидСравненияКомпоновкиДанных.Равно, Ложь);
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок, "СтатусИсходящегоПисьма",
ВидСравненияКомпоновкиДанных.Равно,
Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Отправлено);
ИначеЕсли ТипВзаимодействия = "УдаленныеПисьма" Тогда
СписокТипыПисьма = Новый СписокЗначений;
СписокТипыПисьма.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоВходящее"));
СписокТипыПисьма.Добавить(Тип("ДокументСсылка.ЭлектронноеПисьмоИсходящее"));
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип", ВидСравненияКомпоновкиДанных.ВСписке, СписокТипыПисьма);
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"ПометкаУдаления", ВидСравненияКомпоновкиДанных.Равно, Истина);
ИначеЕсли ТипВзаимодействия = "Встречи" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип", ВидСравненияКомпоновкиДанных.Равно, Тип("ДокументСсылка.Встреча"));
ИначеЕсли ТипВзаимодействия = "ЗапланированныеВзаимодействия" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип", ВидСравненияКомпоновкиДанных.Равно, Тип("ДокументСсылка.ЗапланированноеВзаимодействие"));
ИначеЕсли ТипВзаимодействия = "ТелефонныеЗвонки" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип",ВидСравненияКомпоновкиДанных.Равно, Тип("ДокументСсылка.ТелефонныйЗвонок"));
ИначеЕсли ТипВзаимодействия = "ИсходящиеЗвонки" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип",ВидСравненияКомпоновкиДанных.Равно,Тип("ДокументСсылка.ТелефонныйЗвонок"));
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Входящий",ВидСравненияКомпоновкиДанных.Равно,Ложь);
ИначеЕсли ТипВзаимодействия = "ВходящиеЗвонки" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип",ВидСравненияКомпоновкиДанных.Равно,Тип("ДокументСсылка.ТелефонныйЗвонок"));
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Входящий",ВидСравненияКомпоновкиДанных.Равно,Истина);
ИначеЕсли ТипВзаимодействия = "СообщенияSMS" Тогда
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ОтборНастройщикаКомпоновок,
"Тип",ВидСравненияКомпоновкиДанных.Равно,Тип("ДокументСсылка.СообщениеSMS"));
КонецЕсли;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СхемаОтбора, КомпоновщикНастроек.ПолучитьНастройки(),,,
Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
// Инициализация процессора компоновки.
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных);
ДеревоОбъект = РеквизитФормыВЗначение("ДеревоВзаимодействий");
ДеревоОбъект.Строки.Очистить();
// Получение результата
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений =
Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.УстановитьОбъект(ДеревоОбъект);
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений.Вывести(ПроцессорКомпоновкиДанных);
ЗначениеВРеквизитФормы(ДеревоОбъект,"ДеревоВзаимодействий");
ШаблонЗаголовка = НСтр("ru = 'Тип взаимодействий: %1'");
ПредставлениеТипа = Взаимодействия.СписокОтборовПоТипуВзаимодействий(ТолькоПочта).НайтиПоЗначению(ТипВзаимодействия).Представление;
Элементы.ДеревоТипВзаимодействия.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗаголовка, ПредставлениеТипа);
Для Каждого ЭлементПодменю Из Элементы.ДеревоТипВзаимодействия.ПодчиненныеЭлементы Цикл
Если ЭлементПодменю.Имя = ("УстановитьОтборТипВзаимодействия_ДеревоТипВзаимодействия_" + ТипВзаимодействия) Тогда
ЭлементПодменю.Пометка = Истина;
Иначе
ЭлементПодменю.Пометка = Ложь;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДеревоВзаимодействийКлиент()
ЗаполнитьДеревоВзаимодействий();
РазвернутьВсеСтрокиДерева();
КонецПроцедуры
&НаКлиенте
Процедура РазвернутьВсеСтрокиДерева()
Для каждого СтрокаВерхнегоУровня Из ДеревоВзаимодействий.ПолучитьЭлементы() Цикл
Элементы.ДеревоВзаимодействий.Развернуть(СтрокаВерхнегоУровня.ПолучитьИдентификатор(), Истина);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбработатьИзменениеПометкиУдаленияВДереве(ЗНАЧ ВыделенныеСтроки,СниматьПометку);
Для каждого ВыделеннаяСтрока Из ВыделенныеСтроки Цикл
ДанныеСтроки =ДеревоВзаимодействий.НайтиПоИдентификатору(ВыделеннаяСтрока);
Если ДанныеСтроки.ПометкаУдаления = СниматьПометку Тогда
ВзаимодействиеОбъект = ДанныеСтроки.Ссылка.ПолучитьОбъект();
ВзаимодействиеОбъект.УстановитьПометкуУдаления(Не СниматьПометку);
ДанныеСтроки.ПометкаУдаления = НЕ ДанныеСтроки.ПометкаУдаления;
ДанныеСтроки.НомерКартинки = ?(СниматьПометку,
ДанныеСтроки.НомерКартинки - ?(ДанныеСтроки.Рассмотрено,5,10),
ДанныеСтроки.НомерКартинки + ?(ДанныеСтроки.Рассмотрено,5,10));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Получает массив, который передается в качестве параметра запроса при получении взаимодействий по контакту.
//
// Параметры:
// Контакт - Ссылка - контакт, для которого необходимо выполнить поиск связанных контактов.
//
// Возвращаемое значение:
// Массив
//
&НаСервере
Функция ПараметрКонтактВЗависимостиОтТипа(Контакт)
МассивОписанияКонтактов = ВзаимодействияКлиентСервер.ОписанияКонтактов();
ЕстьДополнительныеТаблицы = Ложь;
ТекстЗапроса = "";
ИмяТаблицыКонтакта = Контакт.Метаданные().Имя;
Для каждого ЭлементМассиваОписания Из МассивОписанияКонтактов Цикл
Если ЭлементМассиваОписания.Имя = ИмяТаблицыКонтакта Тогда
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СправочникКонтакт.Ссылка КАК Контакт
|ИЗ
| &ИмяТаблицы КАК СправочникКонтакт
|ГДЕ
| СправочникКонтакт.Ссылка = &Контакт";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", "Справочник." + ЭлементМассиваОписания.Имя);
Связь = ЭлементМассиваОписания.Связь;
Если НЕ ПустаяСтрока(Связь) Тогда
ТекстЗапроса = ТекстЗапроса + "
|
|ОБЪЕДИНИТЬ ВСЕ
|";
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ
| СправочникКонтакт.Ссылка
|ИЗ
| &ИмяТаблицы КАК СправочникКонтакт
|ГДЕ
| СправочникКонтакт." + Прав(Связь,СтрДлина(Связь) - СтрНайти(Связь,".")) + " = &Контакт";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", "Справочник." + Лев(Связь,СтрНайти(Связь,".")-1));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяРеквизитаСравнения", "СправочникКонтакт." + Прав(Связь,СтрДлина(Связь) - СтрНайти(Связь,".")));
ЕстьДополнительныеТаблицы = Истина;
КонецЕсли;
ИначеЕсли ЭлементМассиваОписания.ИмяВладельца = ИмяТаблицыКонтакта Тогда
ТекстЗапроса = ТекстЗапроса + "
|
|ОБЪЕДИНИТЬ ВСЕ
|";
ТекстЗапроса = ТекстЗапроса + "
|ВЫБРАТЬ
| СправочникКонтакт.Ссылка
|ИЗ
| &ИмяТаблицы КАК СправочникКонтакт
|ГДЕ
| СправочникКонтакт.Владелец = &Контакт";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ИмяТаблицы", "Справочник." + ЭлементМассиваОписания.Имя);
ЕстьДополнительныеТаблицы = Истина;
КонецЕсли;
КонецЦикла;
Если ПустаяСтрока(ТекстЗапроса) ИЛИ (НЕ ЕстьДополнительныеТаблицы) Тогда
Возврат Новый Массив;
Иначе
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Контакт",Контакт);
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
Возврат Новый Массив;
Иначе
Возврат РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Контакт");
КонецЕсли;
КонецЕсли;
КонецФункции
&НаСервере
Процедура УстановитьОтборПоКонтакту()
Запрос = Новый Запрос(
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| КонтактыВзаимодействий.Взаимодействие КАК Ссылка
|ИЗ
| ЖурналДокументов.Взаимодействия КАК Взаимодействия
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КонтактыВзаимодействий КАК КонтактыВзаимодействий
| ПО Взаимодействия.Ссылка = КонтактыВзаимодействий.Взаимодействие
|ГДЕ
| КонтактыВзаимодействий.Контакт В(&Контакт)");
МассивПараметрКонтакт = ПараметрКонтактВЗависимостиОтТипа(Контакт);
Если МассивПараметрКонтакт.Количество() = 0 Тогда
МассивПараметрКонтакт.Добавить(Контакт);
КонецЕсли;
Запрос.УстановитьПараметр("Контакт",МассивПараметрКонтакт);
СписокОтбора = Новый СписокЗначений;
СписокОтбора.ЗагрузитьЗначения(
Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"));
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список,
"Ссылка",СписокОтбора,ВидСравненияКомпоновкиДанных.ВСписке,,Истина);
КонецПроцедуры
&НаСервере
Процедура УстановитьОтборПоПредмету()
ОтборПоПредмету = Истина;
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Предмет",
ПредметДляОтбора,ВидСравненияКомпоновкиДанных.Равно,,Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВопросОПометкеНаУдалениеПослеЗавершения(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ОбработатьИзменениеПометкиУдаленияВДереве(Элементы.ДеревоВзаимодействий.ВыделенныеСтроки, ДополнительныеПараметры.ЕстьПомеченныеНаУдаление);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВводДатыОтложитьРассмотрениеПослеЗавершения(ВведеннаяДата, ДополнительныеПараметры) Экспорт
Если ВведеннаяДата <> Неопределено Тогда
ВыполненаЗамена = Ложь;
ОтложитьРассмотрение(ВведеннаяДата,ВыполненаЗамена);
Если Элементы.СтраницыСписокДерево.ТекущаяСтраница = Элементы.СтраницаСписок Тогда
Если ВыполненаЗамена Тогда
Элементы.Список.Обновить();
КонецЕсли;
Иначе
Если ВыполненаЗамена Тогда
РазвернутьВсеСтрокиДерева();
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыборИнтервалаЗакрытие(ВыбранныйПериод, ДополнительныеПараметры) Экспорт
Если ВыбранныйПериод <> Неопределено Тогда
Интервал = ВыбранныйПериод;
ЗаполнитьДеревоВзаимодействийКлиент();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииТипаСервер()
Взаимодействия.ОбработатьПодменюОтборПоТипуВзаимодействий(ЭтотОбъект);
ВзаимодействияКлиентСервер.ПриИзмененииОтбораТипВзаимодействий(ЭтотОбъект, ТипВзаимодействия);
КонецПроцедуры
#КонецОбласти