Как программно добавить контактную информацию в 1С:Колледж и другие конфигурации на базе БСП?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке в современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), программисты часто сталкиваются с задачей программного заполнения контактной информации (адресов, телефонов, email). Одной из наиболее распространенных проблем является ситуация, когда код отрабатывает без ошибок, данные вроде бы записываются в базу, но на форме объекта (например, в карточке студента или контрагента) они не отображаются. В этой статье мы подробно разберем, почему так происходит, и как правильно реализовать запись контактной информации.

Разберем архитектуру: где на самом деле хранится информация?

Первая и самая важная деталь, которую нам необходимо проанализировать, — это структура метаданных. В конфигурации «1С:Колледж» (как и в УТ 11, ERP или БП 3.0) существует справочник ВидыКонтактнойИнформации. Однако важно понимать: этот справочник является лишь классификатором. Он хранит настройки: как называется поле, какой у него тип (адрес или телефон) и к какому объекту оно относится.

Сами же данные (строка адреса, город, индекс) никогда не записываются в этот справочник. Они хранятся в одном из следующих мест:

  1. Табличная часть «КонтактнаяИнформация» самого объекта (например, справочника Студенты или ФизическиеЛица).
  2. Регистр сведений «КонтактнаяИнформация».

Если вы пытаетесь записать данные, обращаясь только к справочнику видов КИ, вы совершаете логическую ошибку. Рассмотрим подробнее, как исправить код и заставить систему отобразить данные.

Анализ типичной ошибки при программной записи

Рассмотрим пример кода, который часто приводит к отсутствию визуального результата на форме:


Найденный = Выборка.Ссылка.ПолучитьОбъект();
ВидКИ = Справочники.ВидыКонтактнойИнформации.АдресПоПрописке;
ТипКИ = ВидКИ.Тип;
ОбъектXDTOКИ = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOПоПредставлению("г. Москва, ул. Ленина, д.1", ТипКИ);
ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(ОбъектXDTOКИ);
УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(Найденный, ЗначенияПолей, ВидКИ, ТипКИ);

Выясним причину проблемы: Метод УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию производит запись непосредственно в таблицу базы данных. Если в этот момент у пользователя открыта форма объекта (карточка студента), она ничего не знает о том, что в базе данных что-то изменилось. Форма продолжает отображать старые данные из своей локальной копии объекта.

Вариант 1: Правильная запись в базу данных (через объект)

Если нам нужно обновить данные «тихо» в фоновом режиме или в обработке, не связанной с открытой формой, мы должны убедиться, что объект после манипуляций с КИ зафиксирован. Проанализируем правильный подход с использованием стандартных методов БСП:


// Получаем объект для редактирования
ОбъектВладелец = СсылкаНаСтудента.ПолучитьОбъект();

// Определяем вид контактной информации (например, адрес проживания)
ВидКонтактнойИнформации = Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("Адрес проживания");

// Очищаем старую информацию этого вида, если необходимо
УправлениеКонтактнойИнформацией.УдалитьКонтактнуюИнформациюОбъекта(ОбъектВладелец, ВидКонтактнойИнформации);

// Формируем структуру данных (для адреса лучше использовать JSON или XML структуру БСП)
// В простейшем случае можно передать представление
УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформациюОбъекту(ОбъектВладелец, "г. Москва, ул. Ленина, д.1", ВидКонтактнойИнформации);

// КРИТИЧЕСКИ ВАЖНО: записываем сам объект-владелец
ОбъектВладелец.Записать();

Использование метода ДобавитьКонтактнуюИнформациюОбъекту является более предпочтительным, так как он автоматически обрабатывает структуру табличной части объекта. Для поиска готовых примеров работы с программным интерфейсом подсистем можно использовать справочник по методам БСП.

Вариант 2: Обновление информации на открытой форме

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

  1. На клиенте вызываем серверную процедуру, передавая туда Объект (реквизит формы).
  2. На сервере модифицируем табличную часть КИ этого объекта.
  3. После возврата на клиент вызываем стандартный механизм обновления КИ.

В современных конфигурациях для обновления отображения КИ после программных правок часто используется метод:

ОповеститьОбИзменении(Тип("СправочникСсылка.Студенты"));

Или вызов экспортной процедуры формы: Подключаемый_ОбновитьКонтактнуюИнформацию().

Важные нюансы работы с адресами (ФИАС/ГАР)

Посмотрим на пример из сообщения №3. Если вы просто записываете строку "143033, Московская обл...", система может не «понять», что это валидный адрес. В актуальных версиях БСП адрес хранится не просто строкой, а в формате JSON, где каждое поле (дом, улица, регион) имеет свой идентификатор из ФИАС.

Проанализируем ситуацию: если вы передаете просто текст, а форма ожидает структурированные данные, поле может остаться пустым. Для корректной конвертации текста в структуру используйте:

УправлениеКонтактнойИнформацией.КонтактнаяИнформацияИзПредставления(Представление, ВидКИ, Дата);

Резюме для реализации решения

Чтобы ваша контактная информация гарантированно записывалась и отображалась, придерживайтесь следующих правил:

Следуя этим рекомендациям, вы сможете корректно автоматизировать ввод данных в 1С:Колледж и обеспечить их корректное отображение для конечных пользователей.

← На главную