Разберем нестандартную, но встречающуюся на практике задачу: необходимо автоматически формировать адреса электронной почты для сотрудников организации и проверять их на уникальность. Проблема заключается в том, что в базе клиента могут существовать элементы справочника Сотрудники, к которым не привязано ФизическиеЛица. Проанализируем эту ситуацию, выясним причины её возникновения и рассмотрим способы правильной проверки контактной информации (КИ) на дубликаты.
Для начала проанализируем, почему возникает ситуация «есть сотрудник, но нет физлица». В современных актуальных решениях 1С (таких как ЗУП 3.1, ERP, Комплексная автоматизация), которые построены на базе Библиотеки стандартных подсистем (БСП), справочник Сотрудники неразрывно связан со справочником ФизическиеЛица.
Создать сотрудника без физлица штатным функционалом системы просто невозможно. Если вы заводите новую кадровую запись, система либо предлагает привязать ее к уже существующему физическому лицу, либо автоматически создает новое. Таким образом, отсутствие физлица — это серьезная логическая ошибка в базе данных.
Выясним причину появления таких "битых" данных. Чаще всего они возникают из-за:
Правильным подходом в такой ситуации будет не создание "костылей" для обхода битых данных, а их нормализация — создание недостающих физических лиц и связывание их с существующими сотрудниками.
Рассмотрим подробнее логику разработчиков 1С. Сущность Сотрудник в системе обозначает конкретный трудовой договор (или договор гражданско-правового характера). Один и тот же человек может работать в одной компании на нескольких должностях по внутреннему совместительству.
В этом случае в базе заводится одно ФизическиеЛица и несколько элементов Сотрудники. Хранение адреса электронной почты и телефонов непосредственно в карточке физлица избавляет систему от дублирования. Если почта меняется, кадровику достаточно внести изменения в одном месте, и контактные данные обновятся для всех должностей данного совместителя.
Посмотрим на особенности хранения данных в зависимости от платформы и конфигурации:
В старых системах (на примере ЗиК 7.7):
В конфигурации "Зарплата и Кадры 7.7" контактная информация хранится только в справочниках Организации, Пользователи и ФизЛица. Если бизнес-логика требует привязать почту именно к сотруднику (чтобы обойти отсутствие физлица), используется механизм дополнительных реквизитов. Для этого заводится новый реквизит, и данные записываются в подчиненный справочник ЗначенияСвойствОбъектов. Именно к этому справочнику нужно делать запрос при поиске дубликатов.
В современных конфигурациях (на базе БСП):
В актуальных версиях 1С (8.3) контактная информация больше не хранится в едином регистре сведений. Разработчики перенесли её в табличные части самих справочников (например, табличная часть КонтактнаяИнформация внутри справочника ФизическиеЛица). Это сделано для оптимизации прав доступа на уровне записей (RLS): теперь права на чтение контактных данных строго подчинены правам на чтение объекта-владельца.
Разберем по шагам, как правильно реализовать алгоритм проверки адреса электронной почты на уникальность при сохранении карточки сотрудника.
Шаг 1. Нормализация введенного email
Перед поиском в базе необходимо очистить введенную пользователем строку от лишних пробелов и проверить ее валидность. В современных конфигурациях не нужно писать регулярные выражения вручную. Используем готовый метод БСП:
// Пример вызова функции БСП для проверки email
СтрокаEmail = ОбщегоНазначенияКлиентСервер.АдресаЭлектроннойПочтыИзСтроки(ВведенныйТекст);
Если ПустаяСтрока(СтрокаEmail) Тогда
ВызватьИсключение "Введен некорректный адрес электронной почты!";
КонецЕсли;
Шаг 2. Поиск по дополнительным реквизитам Сотрудника
Если в вашей конфигурации рабочая почта хранится в дополнительных реквизитах справочника Сотрудники, необходимо написать запрос к табличной части ДополнительныеРеквизиты (или справочнику ЗначенияСвойствОбъектов для старых баз). В запросе проверяем, существует ли уже такое значение почты.
Шаг 3. Поиск по табличной части КонтактнаяИнформация Физлица
Вторая часть проверки — запрос к справочнику ФизическиеЛица. Делаем отбор по виду контактной информации "Электронная почта" и сравниваем строковое представление email.
Шаг 4. Анализ найденных дубликатов и обработка совместителей
Это самый важный этап. Если система нашла совпадение, не спешите выдавать ошибку. Проанализируем найденную запись:
Используя данный комплексный подход, вы сможете корректно обрабатывать контактную информацию сотрудников, избегая создания ложных дублей и учитывая архитектурные особенности платформы 1С.