При записи документа. Заполняет данные регистра сведений КонтактыВзаимодействий для переданного массива взаимодействий.
// Заполняет данные регистра сведений КонтактыВзаимодействий для переданного массива взаимодействий.
//
// Параметры:
// МассивВзаимодействий - Массив - массив для которого будут заполнены данные о контактах.
// РассчитыватьРассмотрено - Булево - признак необходимости расчета состояний контактов взаимодействий.
//
Процедура ПриЗаписиДокумента(ДокументОбъект) Экспорт
УстановитьПривилегированныйРежим(Истина);
Если НеЗаписыватьКонтакты(ДокументОбъект.ДополнительныеСвойства) Тогда
Возврат;
КонецЕсли;
НаборЗаписей = РегистрыСведений.КонтактыВзаимодействий.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Взаимодействие.Установить(ДокументОбъект.Ссылка);
Таблица = Новый ТаблицаЗначений;
ОписаниеТиповКонтактов = Новый ОписаниеТипов(ТипыКонтактов());
Таблица.Колонки.Добавить("Контакт", ОписаниеТиповКонтактов);
Таблица.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(100, ДопустимаяДлина.Переменная)));
Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.Встреча") Тогда
Для Каждого Участник Из ДокументОбъект.Участники Цикл
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Контакт = Участник.Контакт;
НоваяСтрока.Представление = Участник.ПредставлениеКонтакта;
КонецЦикла;
ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЗапланированноеВзаимодействие") Тогда
Для Каждого Участник Из ДокументОбъект.Участники Цикл
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Контакт = Участник.Контакт;
НоваяСтрока.Представление = Участник.ПредставлениеКонтакта;
КонецЦикла;
ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ТелефонныйЗвонок") Тогда
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Контакт = ДокументОбъект.АбонентКонтакт;
НоваяСтрока.Представление = ДокументОбъект.АбонентПредставление;
ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.СообщениеSMS") Тогда
Для Каждого Абонент Из ДокументОбъект.Адресаты Цикл
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Контакт = Абонент.Контакт;
НоваяСтрока.Представление = Абонент.ПредставлениеКонтакта;
КонецЦикла;
ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЭлектронноеПисьмоВходящее") Тогда
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Контакт = ДокументОбъект.ОтправительКонтакт;
НоваяСтрока.Представление = ДокументОбъект.ОтправительПредставление;
ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ЭлектронноеПисьмоИсходящее") Тогда
Для Каждого Адресат Из ДокументОбъект.ПолучателиПисьма Цикл
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Контакт = Адресат.Контакт;
НоваяСтрока.Представление = Адресат.Представление;
КонецЦикла;
Для Каждого Адресат Из ДокументОбъект.ПолучателиКопий Цикл
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Контакт = Адресат.Контакт;
НоваяСтрока.Представление = Адресат.Представление;
КонецЦикла;
Для Каждого Адресат Из ДокументОбъект.ПолучателиСкрытыхКопий Цикл
НоваяСтрока = Таблица.Добавить();
НоваяСтрока.Контакт = Адресат.Контакт;
НоваяСтрока.Представление = Адресат.Представление;
КонецЦикла;
КонецЕсли;
Для Каждого СтрокаТаблицы Из Таблица Цикл
Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.Контакт) Тогда
СтрокаТаблицы.Контакт = Справочники.Пользователи.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.Текст = "
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ТаблицаКонтактов.Контакт,
| ТаблицаКонтактов.Представление
|ПОМЕСТИТЬ ТаблицаКонтактов
|ИЗ
| &ТаблицаКонтактов КАК ТаблицаКонтактов
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВЫБОР
| КОГДА ТаблицаКонтактов.Контакт = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка)
| ТОГДА ЕСТЬNULL(СтроковыеКонтактыВзаимодействий.Ссылка, НЕОПРЕДЕЛЕНО)
| ИНАЧЕ ТаблицаКонтактов.Контакт
| КОНЕЦ КАК Контакт,
| ТаблицаКонтактов.Представление
|ИЗ
| ТаблицаКонтактов КАК ТаблицаКонтактов
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СтроковыеКонтактыВзаимодействий КАК СтроковыеКонтактыВзаимодействий
| ПО ТаблицаКонтактов.Представление = СтроковыеКонтактыВзаимодействий.Наименование
| И (НЕ СтроковыеКонтактыВзаимодействий.ПометкаУдаления)";
Запрос.УстановитьПараметр("ТаблицаКонтактов", Таблица);
Таблица = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаТаблицы Из Таблица Цикл
Если СтрокаТаблицы.Контакт = Неопределено Тогда
СтроковыйКонтактВзаимодействий = Справочники.СтроковыеКонтактыВзаимодействий.СоздатьЭлемент();
СтроковыйКонтактВзаимодействий.Наименование = СтрокаТаблицы.Представление;
СтроковыйКонтактВзаимодействий.Записать();
СтрокаТаблицы.Контакт = СтроковыйКонтактВзаимодействий.Ссылка;
КонецЕсли;
КонецЦикла;
Таблица.Свернуть("Контакт");
Таблица.Колонки.Добавить("Взаимодействие");
Таблица.ЗаполнитьЗначения(ДокументОбъект.Ссылка, "Взаимодействие");
НаборЗаписей.ДополнительныеСвойства.Вставить("РассчитыватьРассмотрено", Истина);
НаборЗаписей.Загрузить(Таблица);
НаборЗаписей.Записать();
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПриЗаписиВзаимодействияИзФормы (БСП)
ПроверитьДатуЗапретаИзмененияПередЗаписьюДокумента (БСП)
ПередЗаписьюВзаимодействияИзФормы (БСП)
АвтономнаяРаботаПроверитьВозможностьЗаписиОбщихДанныхДокумент (БСП)
ПриПолученииТабличныхДокументовОбъекта (БСП)