При переходе на автоматизированную рассылку расчетных листков в программе 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с тем, что контактные данные сотрудников заполнены не в то поле, которое указано в стандартных инструкциях. Например, вместо предопределенного поля Email адрес электронной почты может храниться в поле Email физ.лица или любом другом пользовательском виде контактной информации. Разберем подробно, как решить эту задачу без ручного копирования данных и поймем внутреннюю логику хранения информации в системе.
Для начала проанализируем, где именно в системе хранятся адреса электронной почты. В современных конфигурациях на базе Библиотеки стандартных подсистем (БСП), к которым относится и ЗУП 3.1, контактная информация физических лиц хранится не в простых реквизитах справочника, а в его табличной части КонтактнаяИнформация. Однако поиск через консоль запросов может вызвать затруднения, если не учитывать особенности метаданных.
Важно помнить, что в ЗУП 3.1 есть два похожих справочника: Сотрудники и Физические лица. Основной объем персональных данных, включая адреса и телефоны, закреплен за справочником Физические лица. В карточке сотрудника эти данные лишь отображаются для удобства пользователя. Если мы попытаемся найти Email в консоли запросов непосредственно у объекта Справочник.Сотрудники, мы его там не обнаружим. Нам необходимо обращаться к табличной части КонтактнаяИнформация справочника Физические лица.
Рассмотрим, почему при вводе данных в интерфейсе они могут "не находиться" через консоль запросов в табличной части. Это происходит по одной из двух причин:
КонтактнаяИнформация для оптимизации).Виду контактной информации, а данные записаны под другим идентификатором.Многие пользователи полагают, что для работы рассылки нужно обязательно заполнить строго определенное поле. Однако механизм Рассылки отчетов в 1С крайне гибок. Проанализируем ситуацию: если у вас уже заполнен вид контактной информации Email физ.лица, вам не нужно переносить эти данные в поле Email.
Выполним следующие шаги для настройки корректной отправки:
Email физ.лица).Таким образом, программа будет брать адреса именно из той колонки табличной части, которую вы указали, игнорируя пустые стандартные поля.
Если же вы все-таки решили привести базу к единому стандарту и скопировать адреса из одного вида КИ в другой, мы можем воспользоваться стандартной обработкой Групповое изменение реквизитов. Но здесь есть нюанс: контактная информация является коллекцией, а не простым значением.
Разберем алгоритм действий:
Групповое изменение реквизитов (раздел Администрирование — Обслуживание — Корректировка данных).Физические лица.Контактная информация.Важное предостережение: использование групповой обработки для изменения табличных частей — операция рискованная. Проанализируйте возможность использования программного скрипта, если база большая, так как при записи контактной информации через интерфейс БСП выполняются дополнительные проверки и нормализация адресов.
Если требуется выполнить перенос данных программно, мы должны использовать методы программного интерфейса БСП. Простое добавление строк в табличную часть может привести к тому, что данные не будут корректно отображаться в формах или не попадут в индексы поиска. Выясним, как сделать это правильно.
Для записи контактной информации рекомендуется использовать метод УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию. Рассмотрим пример кода, который переносит данные из одного вида в другой:
// Пример переноса Email для физического лица
ВидСтарый = Справочники.ВидыКонтактнойИнформация.НайтиПоНаименованию("Email физ.лица");
ВидНовый = Справочники.ВидыКонтактнойИнформация.EmailФизическиеЛица; // Предопределенный
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ФизическиеЛицаКонтактнаяИнформация.Ссылка КАК ФизЛицо,
| ФизическиеЛицаКонтактнаяИнформация.Представление КАК Адрес
|ИЗ
| Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизическиеЛицаКонтактнаяИнформация
|ГДЕ
| ФизическиеЛицаКонтактнаяИнформация.Вид = &ВидСтарый";
Запрос.УстановитьПараметр("ВидСтарый", ВидСтарый);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Записываем данные в новый вид КИ
УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(Выборка.ФизЛицо, Выборка.Адрес, ВидНовый, Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
КонецЦикла;
Использование этого метода гарантирует, что система корректно заполнит все связанные поля, такие как АдресЭП и Представление, а также обновит данные в регистре, если он используется в вашей версии конфигурации.
После того как мы разобрались с полями Email, проанализируем еще несколько критических моментов, без которых рассылка не заработает:
Таким образом, мы выяснили, что проблема отсутствия данных в конкретном поле "Email" решается либо перенастройкой самого механизма рассылки на существующий вид контактной информации, либо корректным программным переносом данных с использованием механизмов БСП.