Как настроить единую нумерацию кадровых документов в 1С:ЗУП 3.1 и 1С:ERP?

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

Переход со старых версий программных продуктов (таких как «1С:Зарплата и Управление Персоналом 2.5») на современные конфигурации на платформе «1С:Предприятие 8.3» (например, 1С:ЗУП 3.1, 1С:ERP или 1С:Комплексная автоматизация) часто вызывает у пользователей вопросы, связанные с изменением привычных механизмов. Одним из таких камней преткновения является сквозная (единая) нумерация кадровых документов.

В старых версиях для этого достаточно было установить одну галочку в настройках параметров учета. В современных конфигурациях разработчики «1С» намеренно отказались от этого флага. Это связано с тем, что в законодательстве нет жестких требований вести единый реестр номеров для разнородных приказов (прием, перевод, увольнение, отпуска регистрируются отдельно). Кроме того, сквозная автоматическая нумерация часто приводила к сбоям счетчика, если документы создавались разными пользователями одновременно или удалялись «задним числом».

Тем не менее, если в вашей организации кадровая служба требует строгого соблюдения сквозного порядка номеров, эту задачу можно решить. Рассмотрим подробнее все возможные варианты — от простых встроенных механизмов до программной доработки системы.

Вариант 1. Использование встроенных типовых механизмов (без программирования)

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

  1. Использование поля «Печатать как» в кадровых приказах.
    В ключевых кадровых документах (таких как Прием на работу, Кадровый перевод, Увольнение) присутствует специальный реквизит «Печатать как». В это поле кадровик может вручную внести абсолютно любой номер (например, с буквенным индексом «45-к»). Именно это значение будет выводиться во все печатные формы (Т-1, Т-5 и др.) и попадет в регламентированную отчетность. При этом системный уникальный номер документа в базе данных останется нетронутым, что исключит программные сбои автонумерации.
  2. Поля «Первичный документ» в межрасчетных формах.
    В расчетных документах, таких как Отпуск или Командировка, поля «Печатать как» в шапке изначально нет. Однако внизу формы документа есть гиперссылка «Первичный документ». Кликнув по ней, пользователь может заполнить скрытые поля: наименование документа, его дату и номер. Введенный туда номер подставится в печатную форму приказа (например, Т-6 для отпусков).
  3. Лайфхак по настройке интерфейса.
    Чтобы кадровику не приходилось каждый раз открывать скрытую ссылку «Первичный документ», мы можем вывести поле «Номер» первичного документа прямо в шапку формы. Для этого выполним следующие шаги:
    - В документе нажмем кнопку «Ещё» в правом верхнем углу и выберем пункт «Изменить форму».
    - В дереве элементов формы найдем группу первичного документа.
    - Выделим поле «№» и с помощью синей стрелки «Вверх» перенесем его в основную шапку документа.
    - Нажмем «Применить» и «ОК». Теперь вводить сквозной номер станет гораздо удобнее.

Вариант 2. Использование готовых расширений конфигурации

Для крупных компаний ручной ввод номеров не подходит из-за высокого риска ошибок (человеческий фактор). Чтобы автоматизировать процесс без изменения основной конфигурации, целесообразно использовать механизм расширений. Так как подсистемы кадрового учета в 1С:ЗУП 3.1 и 1С:ERP абсолютно идентичны, расширения для управления нумерацией подходят для обеих систем.

Существуют готовые коммерческие и бесплатные расширения (например, популярные решения на специализированных порталах для программистов 1С), которые позволяют:

Важно: При подключении такого расширения в базе данных обязательно нужно снять флаг «Безопасный режим» в свойствах расширения. В противном случае расширение не сможет получить доступ к процедурам генерации номеров на сервере и перехватить стандартные механизмы платформы.

Вариант 3. Программная доработка через регистр сведений и подписку на события

Если вы хотите создать индивидуальное и надежное решение силами собственного программиста, наиболее корректным и безопасным методом будет использование связки из регистра сведений и подписки на событие. Этот подход исключает блокировки таблиц при одновременной работе пользователей.

Разберем алгоритм создания такой системы по шагам:

  1. Создадим в конфигурации (или в собственном расширении) новый регистр сведений, например, СквозныеНомераКадровыхДокументов.
    • Измерения: Организация (СправочникСсылка.Организации), ПериодГод (Число).
    • Ресурс: ПоследнийНомер (Число).
  2. Создадим общую подписку на событие ПриУстановкеНовогоНомера. В качестве источника выберем необходимые кадровые документы (ПриемНаРаботу, КадровыйПеревод, Увольнение).
  3. В модуле обработчика подписки напишем код, который будет обращаться к нашему регистру сведений, получать актуальное число, увеличивать его на единицу, записывать обратно в регистр и присваивать полученное значение документу.

Проанализируем примерный шаблон программного кода для обработчика подписки на событие:


Процедура ПриУстановкеНовогоНомераКадровогоДокумента(Источник, СтандартнаяОбработка, Префикс) Экспорт

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

КонецПроцедуры

Этот метод гарантирует, что каждый новый кадровый документ получит строго уникальный следующий по порядку номер в рамках года и организации, независимо от своего типа (будь то прием или увольнение).

Вариант 4. Настройка общего нумератора в Конфигураторе

Для полноты картины рассмотрим еще один технический способ, который часто применялся в старых версиях платформы. В дереве метаданных конфигурации существует специальный объект — «Нумераторы». Вы можете создать собственный нумератор и назначить его свойству Нумератор у каждого из требуемых документов в конфигураторе.

Однако у этого способа есть критические недостатки:

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

Резюме

Мы проанализировали различные методы решения задачи сквозной нумерации кадровых приказов. Выбор конкретного пути зависит от масштаба вашей компании и доступности ресурсов:

← На главную