Как программно заполнить адрес электронной почты физического лица в 1С:ЗУП 3.1

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

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

Почему данные не отображаются в интерфейсе при ручном заполнении

Рассмотрим ситуацию: вы программно находите объект ФизическиеЛица, добавляете строку в табличную часть КонтактнаяИнформация, заполняете реквизиты Представление и АдресЭП, записываете объект, но в карточке сотрудника поле остается пустым. При этом запрос к базе данных показывает, что запись существует. Проанализируем причины такого поведения:

  1. Неверный вид контактной информации: Для каждого справочника в системе определен свой набор видов контактной информации. Если для физического лица использовать вид, предназначенный для справочника «Пользователи», система просто не «узнает» эту запись при отрисовке формы.
  2. Сложная структура хранения: Поля ЗначенияПолей и Представление в современных конфигурациях должны содержать данные в специальном формате (XML или JSON). Если записать туда просто строку с адресом, механизмы платформы не смогут корректно распарсить данные.
  3. Кэширование и связанные регистры: Контактная информация может дублироваться в скрытых регистрах сведений для повышения скорости поиска и формирования отчетов.

Способ 1: Использование программного интерфейса БСП (Рекомендуемый)

Самый правильный и надежный метод — использование функций общего модуля УправлениеКонтактнойИнформацией. Это гарантирует, что данные будут записаны в нужном формате, пройдут все проверки и сразу станут доступны в интерфейсе. Разберем этот процесс по шагам.

Сначала нам необходимо подготовить структуру данных и вызвать процедуру записи. Рассмотрим пример кода:


// 1. Находим ссылку на физическое лицо
НайденныйСотрудник = Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иванович");

Если НЕ НайденныйСотрудник.Пустая() Тогда
    
    // 2. Создаем временную таблицу для контактной информации
    // Функция НоваяКонтактнаяИнформация создает структуру, готовую для заполнения
    КИ = УправлениеКонтактнойИнформацией.НоваяКонтактнаяИнформация(Ложь);
    
    // 3. Добавляем новую строку в таблицу КИ
    НоваяСтрока = КИ.Добавить();
    
    // Важно правильно указать предопределенный вид КИ для физлиц
    НоваяСтрока.Вид = Справочники.ВидыКонтактнойИнформации.EMailФизическиеЛица;
    НоваяСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;        
    НоваяСтрока.Представление = "example@mail.ru";
    НоваяСтрока.АдресЭП = "example@mail.ru";
    
    // 4. Вызываем стандартную процедуру записи БСП
    // Параметр "Замещать = Истина" удалит старые адреса этого вида и запишет новый
    УправлениеКонтактнойИнформацией.УстановитьКонтактнуюИнформациюОбъекта(НайденныйСотрудник, КИ, Истина);
    
    Сообщить("Контактная информация успешно обновлена!");
КонецЕсли;

В данном примере мы используем метод УстановитьКонтактнуюИнформациюОбъекта, который берет на себя всю «черную работу»: формирование XML/JSON строки, проверку прав доступа и запись в соответствующие таблицы базы данных.

Способ 2: Особенности ручного заполнения и формат XML

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


<КонтактнаяИнформация xmlns="http://www.v8.1c.ru/ssl/contactinfo" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Представление="mail.test@domain.ru">
    <Состав xsi:type="ЭлектроннаяПочта" Значение="mail.test@domain.ru"/>
</КонтактнаяИнформация>

Как мы видим, это не просто строка, а структурированные данные. Чтобы не формировать такие строки вручную («на костылях»), в БСП предусмотрена функция КонтактнаяИнформацияВФорматеВнутреннегоПредставления. Рассмотрим, как это применить:


// Пример формирования структуры для программного получения XML/JSON строки
ДанныеАдреса = Новый Структура;
ДанныеАдреса.Вставить("АдресЭП", "test@mail.ru");
ДанныеАдреса.Вставить("Представление", "test@mail.ru");

// Получаем строку во внутреннем формате системы
СтрокаДляХранения = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВФорматеВнутреннегоПредставления(ДанныеАдреса, , Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);

Важные нюансы при работе с контактной информацией

Проанализируем несколько критических моментов, которые помогут избежать ошибок в будущем:

  1. Выбор Вида КИ (ВидыКонтактнойИнформации): Это самая частая ошибка. Для физических лиц (сотрудников) используйте Справочники.ВидыКонтактнойИнформации.EMailФизическиеЛица. Если вы используете EmailПользователя, адрес появится в карточке «Пользователя» (в справочнике Служебные пользователи), но не в карточке «Физического лица».
  2. Валидация данных: Перед записью адреса полезно проверить его на корректность. В БСП для этого существует функция УправлениеКонтактнойИнформациейКлиентСервер.АдресЭлектроннойПочтыСоответствуетШаблону(). Она проверяет наличие символа «@», доменного имени и отсутствие запрещенных символов.
  3. История изменений: Если в вашей конфигурации включена настройка «Хранить историю изменений контактной информации», то простая запись в табличную часть может нарушить логику отображения. Использование метода УстановитьКонтактнуюИнформациюОбъекта автоматически учитывает дату начала действия адреса (реквизит ДействуетС).
  4. Тип объекта: Обратите внимание, что первым параметром в процедуру установки КИ можно передавать как ссылку на объект, так и сам объект (в режиме редактирования). Если передается ссылка, БСП сама создаст объект, запишет данные и вызовет метод Записать().

Резюме

Для корректного программного заполнения электронной почты в 1С:ЗУП 3.1 мы рекомендуем придерживаться следующего алгоритма:

Соблюдение этих правил обеспечит корректную работу интерфейса программы, целостность данных и отсутствие проблем при последующих обновлениях конфигурации.

← На главную