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