УстановитьКонтактнуюИнформациюОбъекта (БСП)

Автор: 1С
ОбщийМодуль.УправлениеКонтактнойИнформацией
БСП

Установить контактную информацию объекта. Добавляет или изменяет контактную информацию у владельца контактной информации.

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

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

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

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

УстановитьКонтактнуюИнформациюОбъектов (БСП)

ВидыКонтактнойИнформацияОбъекта (БСП)

КонтактнаяИнформацияИзXML (БСП)

УстановитьКомментарийКонтактнойИнформации (БСП)

УстановитьСвойстваГруппыВидаКонтактнойИнформации (БСП)

УстановитьСвойстваВидаКонтактнойИнформации (БСП)

УстановитьДоступностьЭлементовКонтактнойИнформации (БСП)

КонтактнаяИнформацияОбъектов (БСП)

КонтактнаяИнформацияОбъекта (БСП)

Синтакс-помощник БСП с нейросетевым ассистентом