При разработке в современных конфигурациях на базе 1С:Предприятие 8.3, таких как «Зарплата и управление персоналом 3.1», программисты часто сталкиваются с задачей автоматизации ввода данных. Одной из неочевидных задач является заполнение контактной информации, в частности — адресов электронной почты. В этой статье мы подробно разберем, почему обычное добавление строки в табличную часть объекта не всегда работает и как правильно использовать программный интерфейс БСП (Библиотеки стандартных подсистем) для решения этой задачи.
Рассмотрим ситуацию: вы программно находите объект ФизическиеЛица, добавляете строку в табличную часть КонтактнаяИнформация, заполняете реквизиты Представление и АдресЭП, записываете объект, но в карточке сотрудника поле остается пустым. При этом запрос к базе данных показывает, что запись существует. Проанализируем причины такого поведения:
ЗначенияПолей и Представление в современных конфигурациях должны содержать данные в специальном формате (XML или JSON). Если записать туда просто строку с адресом, механизмы платформы не смогут корректно распарсить данные.Самый правильный и надежный метод — использование функций общего модуля УправлениеКонтактнойИнформацией. Это гарантирует, что данные будут записаны в нужном формате, пройдут все проверки и сразу станут доступны в интерфейсе. Разберем этот процесс по шагам.
Сначала нам необходимо подготовить структуру данных и вызвать процедуру записи. Рассмотрим пример кода:
// 1. Находим ссылку на физическое лицо
НайденныйСотрудник = Справочники.ФизическиеЛица.НайтиПоНаименованию("Иванов Иван Иванович");
Если НЕ НайденныйСотрудник.Пустая() Тогда
// 2. Создаем временную таблицу для контактной информации
// Функция НоваяКонтактнаяИнформация создает структуру, готовую для заполнения
КИ = УправлениеКонтактнойИнформацией.НоваяКонтактнаяИнформация(Ложь);
// 3. Добавляем новую строку в таблицу КИ
НоваяСтрока = КИ.Добавить();
// Важно правильно указать предопределенный вид КИ для физлиц
НоваяСтрока.Вид = Справочники.ВидыКонтактнойИнформации.EMailФизическиеЛица;
НоваяСтрока.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты;
НоваяСтрока.Представление = "example@mail.ru";
НоваяСтрока.АдресЭП = "example@mail.ru";
// 4. Вызываем стандартную процедуру записи БСП
// Параметр "Замещать = Истина" удалит старые адреса этого вида и запишет новый
УправлениеКонтактнойИнформацией.УстановитьКонтактнуюИнформациюОбъекта(НайденныйСотрудник, КИ, Истина);
Сообщить("Контактная информация успешно обновлена!");
КонецЕсли;
В данном примере мы используем метод УстановитьКонтактнуюИнформациюОбъекта, который берет на себя всю «черную работу»: формирование XML/JSON строки, проверку прав доступа и запись в соответствующие таблицы базы данных.
Если по каким-то причинам вы решили заполнять табличную часть вручную (что не рекомендуется), необходимо понимать структуру реквизита ЗначенияПолей. Проанализируем, как должна выглядеть строка данных для адреса электронной почты в формате 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");
// Получаем строку во внутреннем формате системы
СтрокаДляХранения = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВФорматеВнутреннегоПредставления(ДанныеАдреса, , Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
Проанализируем несколько критических моментов, которые помогут избежать ошибок в будущем:
Справочники.ВидыКонтактнойИнформации.EMailФизическиеЛица. Если вы используете EmailПользователя, адрес появится в карточке «Пользователя» (в справочнике Служебные пользователи), но не в карточке «Физического лица».УправлениеКонтактнойИнформациейКлиентСервер.АдресЭлектроннойПочтыСоответствуетШаблону(). Она проверяет наличие символа «@», доменного имени и отсутствие запрещенных символов.УстановитьКонтактнуюИнформациюОбъекта автоматически учитывает дату начала действия адреса (реквизит ДействуетС).Записать().Для корректного программного заполнения электронной почты в 1С:ЗУП 3.1 мы рекомендуем придерживаться следующего алгоритма:
УправлениеКонтактнойИнформацией).ЗначенияПолей вручную текстовой строкой — используйте стандартные функции преобразования в XML/JSON.Соблюдение этих правил обеспечит корректную работу интерфейса программы, целостность данных и отсутствие проблем при последующих обновлениях конфигурации.