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