ПриЗаписиВзаимодействияИзФормы (БСП)

Автор: 1С
ОбщийМодуль.Взаимодействия
БСП

При записи взаимодействия из формы. Обработчик события при записи, возникающих в формах документов взаимодействий.

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ПередЗаписьюВзаимодействияИзФормы (БСП)

ВзаимодействиеПредметПослеЗаписи (БСП)

ПриЗаписиПредметаИзФормы (БСП)

ИнициализироватьФормуСпискаВзаимодействий (БСП)

ПриЗаписиДокумента (БСП)

ОтработатьОповещение (БСП)

УстановитьРеквизитыФормыВзаимодействияПоДаннымРегистра (БСП)

ПроверитьЗаполнениеКонтактов (БСП)

ПолныйПутьКФормеПередЗаписьюПередЗаписью (БСП)

Обновлятор-1С: групповое (пакетное) обновление и обслуживание всех баз за один раз