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

> [Подсистема БСП «Контактная информация» (ИТС)](https://its.1c.ru/db/pubcloud1c#content:80:hdoc:p513)

# Полезное
[Фрагменты кода](/bsp_kontaktnaya_informaciya/fragmenty.json)
[Консоль кода](/common/konsol-koda-is.epf)

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

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

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

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

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

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

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


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

    // и т.д.
```
Выполняем. Мы великолепны.


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

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

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

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

...

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

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

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


### ВАРИАНТ 3. При начальном заполнении (не рекомендуется на заполненной базе)
Этот вариант подойдет только тогда, когда база данных только что была развернута из шаблона и при __первом__ запуске выполняются обработчики __начального заполнения__. В этом варианте предопределенные элементы __нужно создавать вручную в конфигураторе__

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

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

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

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

__В модуле формы добавляем:__
```bsl
#Область ОбработчикиСобытийФормы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

#КонецОбласти
```
__Не забываем привязать события формы к обработчикам__

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

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

![Характеристики](/bsp_kontaktnaya_informaciya/harakteristiki.png)

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

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

Теперь через меню `Ещё > Изменить форму` можно в форму списка добавить контакты через поле `Ссылка`
![Итог](/bsp_kontaktnaya_informaciya/result.png)

## Дополнительно
[Добавление произвольных реквизитов с контактной информацией.pdf](/bsp_kontaktnaya_informaciya/dobavlenie-proizvol-nyh-rekvizitov-s-kontaktnoj-informaciej.pdf)

[Хранение истории изменений контактной информации.pdf](/bsp_kontaktnaya_informaciya/hranenie-istorii-izmenenij-kontaktnoj-informacii.pdf)

[Создание статических элементов управления контактной информации.pdf](/bsp_kontaktnaya_informaciya/sozdanie-staticeskih-elementov-upravlenia.pdf)

