kb-personal/src/content/docs/knowledge-base/Общие/Подключение объектов к БСП/Подключение к подсистемам/Подключение к подсистеме Контактная информация.md
2025-07-09 21:58:17 +05:00

20 KiB
Raw Blame History

title, slug
title slug
Подключение к подсистеме Контактная информация общие-подключение-объектов-к-бсп-подключение-к-подсистемам/подключение-к-подсистеме-контактная-информация

Подсистема БСП «Контактная информация» (ИТС)

1. Создать в объекте ТЧ "Контактная информация"

Копируем из любого объекта БСП, который подключен к этой подсистеме. Например, справочник "Пользователи"

2. Включить объект в определяемый тип "ВладелецКонтактнойИнформации"

3. В справочнике ВидыКонтактнойИнформации добавить предопределенные элементы

В конфигураторе обязательно необходимо добавить предопределенную группу. Предопределенные элементы можно будет добавить в обработчиках обновления.

Имя группы рекомендуется создавать по шаблону ВидОбъектаМетаданныхОбъектМетаданных, например СправочникКонтрагенты

4. Добавить/заполнить реквизиты новых видов контактной информации

Есть несколько вариантов создания предопределенных элементов справочника ВидыКонтактнойИнформации:

  • при начальном заполнении базы. Вариант, если база пустая и только внедряется
  • при обновлении базы.
  • без обновления

ВАРИАНТ 1. Обновление "ручками". Самый простой способ

Создаем внешнюю обработку с одной кнопкой, в серверный обработчик кнопки добавляем блок кода

    // Добавление нового предопределенного вида контактной информации Мессенджеры.
	ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Телефон);
	ПараметрыВида.Наименование = НСтр("ru = 'Телефон'");
	ПараметрыВида.Вид = "ТелефонКонтрагента";
	ПараметрыВида.Имя = "ТелефонКонтрагента";
	ПараметрыВида.Группа = УправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени("СправочникКонтрагенты");
	ПараметрыВида.Порядок = 5;
	ПараметрыВида.МожноИзменятьСпособРедактирования = Истина;
	ПараметрыВида.ОтображатьВсегда = Истина;
	ПараметрыВида.РазрешитьВводНесколькихЗначений = Истина;
	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида);

    // и т.д.

Выполняем. Мы великолепны.

ВАРИАНТ 2. При обновлении

Если добавление/обновление видов контактной информации допускается объединить с обновлением информационной базы, тогда нужно дополнить процедуру ПриДобавленииОбработчиковОбновления общего модуля ОбновлениеИнформационнойБазы<ИмяПодсистемы>.

// См. ОбновлениеИнформационнойБазыБСП.ПриДобавленииОбработчиковОбновления.
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт

    Обработчик = Обработчики.Добавить();
    // версия библиотеки, на которую переходим. Укажите "*" чтобы обработчик 
    // выполнялся всегда при запуске обновления
    Обработчик.Версия = "3.1.10.17"; 
    // описываем имя обработчика, который будет заполнять вид контактной информации
    Обработчик.Процедура = "ОбновлениеИнформационнойБазы<ИмяПодсистемы>.ДобавитьВидКонтактнойИнформацииКонтрагентаТелефон";
    Обработчик.ВыполнятьВГруппеОбязательных = Истина;
    Обработчик.РежимВыполнения = "Оперативно";

КонецПроцедуры

...

Процедура ДобавитьВидКонтактнойИнформацииКонтрагентаТелефон() Экспорт
	
	// Добавление нового предопределенного вида контактной информации Мессенджеры.
	ПараметрыВида = УправлениеКонтактнойИнформацией.ПараметрыВидаКонтактнойИнформации(Перечисления.ТипыКонтактнойИнформации.Телефон);
	ПараметрыВида.Наименование = НСтр("ru = 'Телефон'");
	ПараметрыВида.Вид = "ТелефонКонтрагента";
	ПараметрыВида.Имя = "ТелефонКонтрагента";
	ПараметрыВида.Группа = УправлениеКонтактнойИнформацией.ВидКонтактнойИнформацииПоИмени("СправочникКонтрагенты");
	ПараметрыВида.Порядок = 5;
	ПараметрыВида.МожноИзменятьСпособРедактирования = Истина;
	ПараметрыВида.ОтображатьВсегда = Истина;
	ПараметрыВида.РазрешитьВводНесколькихЗначений = Истина;
	УправлениеКонтактнойИнформацией.УстановитьСвойстваВидаКонтактнойИнформации(ПараметрыВида);

    // и т.д.
	
КонецПроцедуры

Теперь можно запустить конфигурацию с флагом /ЗапуститьОбновлениеИнформационнойБазы и все обновится

ВАРИАНТ 3. При начальном заполнении (не рекомендуется на заполненной базе)

Этот вариант подойдет только тогда, когда база данных только что была развернута из шаблона и при первом запуске выполняются обработчики начального заполнения. В этом варианте предопределенные элементы нужно создавать вручную в конфигураторе

В ОбщийМодуль.УправлениеКонтактнойИнформациейПереопределяемый в процедуре ПриНачальномЗаполненииЭлементов для заполнения необходимых реквизитов созданных предопределенных элементов нужно прописать что-то вроде:

// Смотри также ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов
//
// Параметры:
//  КодыЯзыков - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.КодыЯзыков
//  Элементы   - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.Элементы
//  ТабличныеЧасти - см. ОбновлениеИнформационнойБазыПереопределяемый.ПриНачальномЗаполненииЭлементов.ТабличныеЧасти
//
Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы, ТабличныеЧасти) Экспорт
	
    // Не забываем, что у нас уже есть предопределенная группа
    // СправочникКонтрагенты и элемент ТелефонКонтрагента,
    // которые созданы ручками в конфигураторе. Тут только обновление реквизитов

	Элемент = Элементы.Добавить();
	Элемент.ИмяПредопределенногоВида = "ТелеофонКонтрагента";
	Элемент.Родитель = "СправочникКонтрагенты";
	Элемент.ИмяГруппы = "СправочникКонтрагенты";
	Элемент.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
	Элемент.РазрешитьВводНесколькихЗначений = Истина;
	Элемент.ОтображатьВсегда                = Истина;
	Элемент.Используется                    = Истина;
	
**КонецПроцедуры**

4. Настройка форм

Форма элемента

Для отображения группы элементов контактной информации на форме нужно создать группу. Например - ГруппаКонтактнаяИнформация.

В модуле формы добавляем:

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    
    // СтандартныеПодсистемы.КонтактнаяИнформация
    УправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
    // Конец СтандартныеПодсистемы.КонтактнаяИнформация   
    
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // СтандартныеПодсистемы.КонтактнаяИнформация
    ДополнительныеПараметры = УправлениеКонтактнойИнформацией.ПараметрыКонтактнойИнформации();
    ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаКонтактнаяИнформация");
    УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект, ДополнительныеПараметры);
    // Конец СтандартныеПодсистемы.КонтактнаяИнформация
	
КонецПроцедуры

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
    
    // СтандартныеПодсистемы.КонтактнаяИнформация
    УправлениеКонтактнойИнформацией.ОбработкаПроверкиЗаполненияНаСервере(ЭтотОбъект, Объект, Отказ);
    // Конец СтандартныеПодсистемы.КонтактнаяИнформация         
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    // СтандартныеПодсистемы.КонтактнаяИнформация
    УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
    // Конец СтандартныеПодсистемы.КонтактнаяИнформация
	
КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
    
    // СтандартныеПодсистемы.КонтактнаяИнформация
    УправлениеКонтактнойИнформацией.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект);
    // Конец СтандартныеПодсистемы.КонтактнаяИнформация
    
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// СтандартныеПодсистемы.КонтактнаяИнформация
&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент)
    УправлениеКонтактнойИнформациейКлиент.НачатьИзменение(ЭтотОбъект, Элемент);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    УправлениеКонтактнойИнформациейКлиент.НачатьВыбор(ЭтотОбъект, Элемент, , СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка)
    УправлениеКонтактнойИнформациейКлиент.НачатьВыбор(ЭтотОбъект, Элемент, , СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка)
    УправлениеКонтактнойИнформациейКлиент.НачатьОчистку(ЭтотОбъект, Элемент.Имя);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда)
    УправлениеКонтактнойИнформациейКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда.Имя);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
    УправлениеКонтактнойИнформациейКлиент.АвтоПодборАдреса(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    УправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КонтактнаяИнформацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
    УправлениеКонтактнойИнформациейКлиент.НачатьОбработкуНавигационнойСсылки(ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПродолжитьОбновлениеКонтактнойИнформации(Результат, ДополнительныеПараметры) Экспорт
    ОбновитьКонтактнуюИнформацию(Результат);
КонецПроцедуры

&НаСервере
Процедура ОбновитьКонтактнуюИнформацию(Результат)
    УправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат);
КонецПроцедуры
// Конец СтандартныеПодсистемы.КонтактнаяИнформация

#КонецОбласти

Не забываем привязать события формы к обработчикам

Форма списка

Для того, чтобы можно было вывести в форму списка элементы контактной информации нужно настроить в конфигураторе характеристики

Создаем форму списка, выводим ссылку и устанавливаем ПользовательскаяВидимость = Ложь

Характеристики

Что мы настраиваем: В части Виды характеристик

  1. Виды характеристик - тот элемент, где хранятся характеристики объекта. В нашем случае Характеристика - это вид контактной информации
  2. Поле ключа - ссылка
  3. Поле отбора - Родитель, т.к. мы все виды контактной информации этого элемента находятся в одной группе
  4. Значение отбора - выбираем предопределенную группу, куда мы поместили все виды контактной информации этого объекта
  5. Поле пути к данным - ссылка

В части Значения характеристик

  1. Значения характеристик - табличная часть КонтактнаяИнформация нашего объекта
  2. Поле объекта - ссылка
  3. Поле вида - ВидДляСписка
  4. Поле значения - представление

Теперь через меню Ещё > Изменить форму можно в форму списка добавить контакты через поле Ссылка Итог