Как программно заполнить контактную информацию в справочнике Контрагенты в 1С:УТ 11?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке обработок загрузки данных или интеграций в современных конфигурациях 1С, таких как «Управление торговлей 11», «ERP» или «Комплексная автоматизация», программисты часто сталкиваются с проблемой: данные в табличную часть КонтактнаяИнформация вроде бы записаны, но при открытии карточки контрагента поля остаются пустыми. Более того, при интерактивном сохранении карточки программно добавленные данные могут бесследно исчезнуть. Разберем детально, почему так происходит и как правильно реализовать заполнение контактной информации (КИ).

Почему данные «не видны» в форме?

В конфигурациях на базе Библиотеки стандартных подсистем (БСП) механизм работы с контактной информацией значительно сложнее, чем обычное добавление строк в таблицу. Форма объекта (карточка контрагента) при открытии считывает данные не напрямую из всех колонок табличной части, а анализирует специальный реквизит ЗначенияПолей. Если этот реквизит пуст или содержит некорректную структуру (XML или JSON), стандартные механизмы формы не смогут отобразить адрес или телефон, даже если колонки Представление или АдресЭП заполнены верно.

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

Способ 1: Прямое заполнение табличной части (классический подход)

Рассмотрим пример кода, который позволяет добавить Email контрагенту путем прямого обращения к табличной части. Этот способ требует внимательности при заполнении всех служебных полей.


// Получаем объект контрагента для редактирования
ОбъектКонтрагент = Справочники.Контрагенты.НайтиПоКоду("00001").ПолучитьОбъект();

// Определяем нужный вид контактной информации
// Для УТ 11 это обычно предопределенный элемент EmailКонтрагента
ВидКИ = Справочники.ВидыКонтактнойИнформации.EmailКонтрагента;

// Добавляем новую строку в табличную часть
НоваяСтрокаКИ = ОбъектКонтрагент.КонтактнаяИнформация.Добавить();
НоваяСтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
НоваяСтрокаКИ.Вид = ВидКИ;
НоваяСтрокаКИ.Представление = "test@example.com";
НоваяСтрокаКИ.АдресЭП = "test@example.com";

// Важнейший этап: формирование XML-структуры для реквизита ЗначенияПолей.
// Используем служебную функцию БСП для формирования корректного XML по представлению.
НоваяСтрокаКИ.ЗначенияПолей = УправлениеКонтактнойИнформациейСлужебныйВызовСервера.КонтактнаяИнформацияXMLПоПредставлению(
    НоваяСтрокаКИ.Представление, 
    НоваяСтрокаКИ.Вид
);

// Для корректного отображения в списках заполняем ВидДляСписка
НоваяСтрокаКИ.ВидДляСписка = ВидКИ;

// Записываем объект
ОбъектКонтрагент.Записать();

Проанализируем этот код. Мы не просто добавляем строку, но и вызываем функцию КонтактнаяИнформацияXMLПоПредставлению. Именно она упаковывает строковое представление в структурированный XML, который «понимает» форма контрагента. Без этого шага форма решит, что данных нет.

Способ 2: Использование программного интерфейса (API) БСП

Разберем более современный и надежный метод. В составе БСП есть общий модуль УправлениеКонтактнойИнформацией, который содержит готовые процедуры для записи данных. Использование API позволяет избежать ошибок при обновлении конфигурации, так как формат хранения данных (например, переход с XML на JSON в новых версиях платформы) будет обработан самой подсистемой автоматически.

Посмотрим на пример использования универсальной функции:


// Подготовим данные для записи
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("АдресЭП", "info@company.ru");
СтруктураДанных.Вставить("Представление", "info@company.ru");

ВидКИ = Справочники.ВидыКонтактнойИнформации.EmailКонтрагента;

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

ОбъектКонтрагент.Записать();

Этот метод предпочтительнее, так как он берет на себя всю «черную работу» по формированию служебных строк и проверке видов КИ.

Разбор критически важных реквизитов

Выясним, за что отвечают ключевые колонки табличной части, чтобы понимать логику работы системы:

  1. Тип: Ссылка на перечисление (Адрес, Телефон, Email и т.д.). Определяет базовое поведение поля.
  2. Вид: Ссылка на справочник ВидыКонтактнойИнформации. Именно здесь настраивается, является ли email «Личным» или «Рабочим», и для какого справочника он предназначен.
  3. ЗначенияПолей: Техническое поле, содержащее структурированные данные. В старых версиях БСП это XML, в новых — JSON. Если вы видите пустую карточку при заполненной ТЧ — проблема на 99% в этом поле.
  4. ВидДляСписка: Используется для оптимизации. Если этот реквизит не заполнен, адрес может не отображаться в общем списке (колонках) справочника «Контрагенты».

Особенности работы с партнерами и контрагентами

В конфигурации «Управление торговлей 11» существует функциональная опция «Независимо вести партнеров и контрагентов». Проанализируем ситуацию: если в настройках программы включено использование партнеров, то основная контактная информация часто хранится и отображается в справочнике Партнеры, а в справочнике Контрагенты она может дублироваться или отсутствовать вовсе.

Если вы программно заполнили КИ у Контрагента, но в интерфейсе открываете карточку через справочник Партнеры (или наоборот), вы не увидите изменений. Всегда проверяйте, к какому именно объекту привязана контактная информация в вашем конкретном случае. Часто требуется дублировать запись КИ и для партнера, и для связанного с ним контрагента.

Типичные ошибки при заполнении

Рассмотрим основные причины неудач:

Заключение

Правильное заполнение контактной информации в 1С требует понимания архитектуры БСП. Основной секрет успеха заключается в использовании штатных функций модуля УправлениеКонтактнойИнформацией и обязательном заполнении поля ЗначенияПолей. При соблюдении этих правил ваши данные будут корректно отображаться в интерфейсе и сохраняться при работе пользователей.

← На главную