Дано:
БСП 3.1.11.461 и корректно интегрированная подсистема «УправлениеКонтактнойИнформацией».
Решения:
Решение №1.
Поиск «в лоб» приводит к варианту, когда необходимо провести корректное перезаполнение программно создаваемой на форме элемента алгоритмами БСП коллекции «КонтактнаяИнформацияОписаниеДополнительныхРеквизитов». Хорошее описание данного подхода можно посмотреть тут: https://infoblog.mywebguide.ru/articles/page_000133.html?ysclid=mogr43o4wc571334297
Решение работающее, но имеет 1 недостаток: если в массиве импортируемых контактных данных встречается два одинаковых значения вида контактной информации (СправочникСсылка.ВидыКонтактнойИнформации), в принимающий данные объект загрузится только последний набор из коллекции импортируемых. Добавление наборов дублирующихся видов контактной информации вместо замены имеющихся приведет к необходимости написания связанного кода по созданию связанных реквизитов и команд на форме элемента.
Решение №2.
Чтобы не писать уже готовый код БСП по созданию связанных реквизитов и команд, можно пойти путем удаления результатов обогащения формы элемента контактной информацией и вызова готовых процедур БСП. Для этого необходимо:
- Наполнить коллекцию объекта «КонтактнаяИнформация» импортируемыми сведениями:
Объект.КонтактнаяИнформация.Очистить();
Для каждого мКонтакт из МассивСтруктур цикл
НСТР = Объект.КонтактнаяИнформация.Добавить();
ЗаполнитьЗначенияСвойств(НСТР, мКонтакт);
КонецЦикла;
- Отсортировать полученный набор по Виду контактной информации:
Объект.КонтактнаяИнформация.Сортировать("Вид");
- Удалить все программно созданные БСП реквизиты:
ВсеРеквизиты = ЭтотОбъект.ПолучитьРеквизиты();
УдаляемыеРеквизиты = Новый Массив;
Для каждого мРеквизит из ВсеРеквизиты цикл
Если СтрНайти(мРеквизит.Имя, "КонтактнаяИнформация") = 0 тогда
Продолжить;
КонецЕсли;
УдаляемыеРеквизиты.Добавить(мРеквизит.Имя);
КонецЦикла;
ЭтотОбъект.ИзменитьРеквизиты(, УдаляемыеРеквизиты);
- Удалить все программно созданные БСП группы контактной информации:
ЭтотОбъект.Элементы.Удалить(ЭтотОбъект.Элементы["#НаименованиеВашейГруппыДляКИНаФормеЭлемента#"].ПодчиненныеЭлементы[0]);
- Удалить все программно созданные БСП команды управления контактной информацией:
УдаляемыеКоманды = Новый Массив;
Для каждого мКоманда из ЭтотОбъект.Команды цикл
Если СтрНайти(мКоманда.Имя, "КонтактнаяИнформация") = 0 тогда
Продолжить;
КонецЕсли;
УдаляемыеКоманды.Добавить(мКоманда);
КонецЦикла;
Для каждого мКоманда из УдаляемыеКоманды цикл
ЭтотОбъект.Команды.Удалить(мКоманда);
КонецЦикла;
- Вызвать процедуру БСП, которая заново наполнит форму элемента и отобразит контактную информацию на форме:
// СтандартныеПодсистемы.КонтактнаяИнформация
ДополнительныеПараметры = УправлениеКонтактнойИнформацией.ПараметрыКонтактнойИнформации();
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", ["#НаименованиеВашейГруппыДляКИНаФормеЭлемента#");
УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект, ДополнительныеПараметры);
Весь код в сборе:
&НаКлиенте
Процедура КонтактнаяИнформацияЗаполнениеНаКлиенте(МассивСтруктур)
Объект.КонтактнаяИнформация.Очистить();
Для каждого мКонтакт из МассивСтруктур цикл
НСТР = Объект.КонтактнаяИнформация.Добавить();
ЗаполнитьЗначенияСвойств(НСТР, мКонтакт);
КонецЦикла;
Объект.КонтактнаяИнформация.Сортировать("Вид");
КонтактнаяИнформацияЗаполнениеНаСервере();
КонецПроцедуры
&НаСервере
Процедура КонтактнаяИнформацияЗаполнениеНаСервере()
ВсеРеквизиты = ЭтотОбъект.ПолучитьРеквизиты();
УдаляемыеРеквизиты = Новый Массив;
Для каждого мРеквизит из ВсеРеквизиты цикл
Если СтрНайти(мРеквизит.Имя, "КонтактнаяИнформация") = 0 тогда
Продолжить;
КонецЕсли;
УдаляемыеРеквизиты.Добавить(мРеквизит.Имя);
КонецЦикла;
ЭтотОбъект.ИзменитьРеквизиты(, УдаляемыеРеквизиты);
ЭтотОбъект.Элементы.Удалить(ЭтотОбъект.Элементы["#НаименованиеВашейГруппыДляКИНаФормеЭлемента#"].ПодчиненныеЭлементы[0]);
УдаляемыеКоманды = Новый Массив;
Для каждого мКоманда из ЭтотОбъект.Команды цикл
Если СтрНайти(мКоманда.Имя, "КонтактнаяИнформация") = 0 тогда
Продолжить;
КонецЕсли;
УдаляемыеКоманды.Добавить(мКоманда);
КонецЦикла;
Для каждого мКоманда из УдаляемыеКоманды цикл
ЭтотОбъект.Команды.Удалить(мКоманда);
КонецЦикла;
// СтандартныеПодсистемы.КонтактнаяИнформация
ДополнительныеПараметры = УправлениеКонтактнойИнформацией.ПараметрыКонтактнойИнформации();
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "#НаименованиеВашейГруппыДляКИНаФормеЭлемента#");
УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект, ДополнительныеПараметры);
КонецПроцедуры
Вступайте в нашу телеграмм-группу Инфостарт