При внедрении и настройке программы 1С:Зарплата и Управление Персоналом (ЗУП 3.1 / ЗУП КОРП) на производственных предприятиях часто возникает требование разделить нумерацию сотрудников по производственным направлениям или цехам. Рассмотрим архитектурные особенности работы табельных номеров в системе, проанализируем возможные риски и разберем практические варианты реализации такой задачи.
Табельный номер сотрудника в 1С:ЗУП хранится в реквизите Код справочника Сотрудники. При формировании структуры номеров важно учитывать системные ограничения:
Сотрудники составляет 10 символов. Если использовать длинный префикс и разделители (например, ПР01-00001), для числовой части остается минимальное количество знаков. Превышение разрядности приведет к сбою автоматического инкремента номера.ПР1-00001, ПР2-00001), чтобы автонумерация по каждой серии не сбивалась.ПР1-00001 и ПР2-00001) успешно пройдут проверку уникальности и не вызовут системных ошибок.Проанализируем ситуации, с которыми столкнется кадровая служба при повседневной работе с нестандартными табельными номерами:
Сотрудники. Документ «Кадровый перевод» регистрирует смену подразделения, но не изменяет и не должен изменять табельный номер. Если кадровик вручную перепишет код в карточке сотрудника на новый префикс, номер изменится ретроспективно во всей истории: во всех прошлых расчетных листках, кадровых приказах и архивных отчетах отобразится новый номер.Сотрудники для того же физического лица.Рассмотрим два основных подхода к реализации требований бизнеса без нарушения целостности базы данных.
Вариант 1. Разделение системного кода и отображаемого номера (рекомендуемый)
В этом сценарии системный табельный номер в справочнике Сотрудники остается стандартным числовым со сквозной автонумерацией. Для подразделений создается дополнительный реквизит «Префикс табельного номера», а итоговый составной номер формируется динамически только для отчетов и печатных форм с помощью расширения конфигурации:
// Пример формирования отображаемого номера в печатной форме
ПрефиксПодразделения = ПодразделениеСотрудника.ДополнительныеРеквизиты.Найти(...);
ОтображаемыйТабельныйНомер = ПрефиксПодразделения + "-" + СокрЛП(Сотрудник.Код);
Такой подход гарантирует сохранность истории при переводах, исключает сбои типовой автонумерации и не требует ручного контроля лидирующих нулей кадровиками.
Вариант 2. Автоматическая генерация кода через расширение
Если префикс обязательно должен быть физической частью реквизита Код, переопределим логику нумерации через подписку на событие ПриУстановкеНовогоКода справочника Сотрудники в расширении конфигурации. В обработчике события программно определим префикс выбранного подразделения и вычислим максимальный занятый номер по заданной маске, избавив кадровиков от ручного ввода и ошибок дублирования.