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

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

В практике работы отделов кадров часто возникает задача разделения нумерации документов по их типам. Например, для приказов о приеме, переводе и увольнении требуется суффикс -ЛС (личный состав), для отпусков — -О, для командировок — -К. Это необходимо для удобства бумажного архивирования и быстрого поиска документов на полках. Однако типовая конфигурация 1С:Зарплата и управление персоналом 3.1 (ЗУП) ориентирована на сквозную нумерацию в пределах организации. Разберем, какие варианты решения существуют (например, внешняя обработка Установка номера в кадровых документах), и как реализовать гибкую нумерацию самостоятельно.

Анализ штатных возможностей программы

Сначала проанализируем, что предлагает нам типовое решение. В 1С:ЗУП 3.1 штатный механизм нумерации работает по жестким правилам платформы. Основные характеристики типовой нумерации:

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

Важно: Прямой настройки в пользовательском режиме, позволяющей привязать суффикс к виду документа, в ЗУП 3.1 нет. Попытка вручную дописать суффикс в номере документа в 90% случаев приводит к сбою автоматической нумерации (платформа не может корректно инкрементировать строку с суффиксом в конце). Если сбой уже произошел и порядок нарушен, вам поможет перенумератор документов с учетом префикса.

Вариант 1: Использование 1С:Документооборот

Рассмотрим вариант интеграции. Если на предприятии используется 1С:Документооборот, это снимает проблему полностью. В этой конфигурации механизмы нумерации являются максимально гибкими. Мы можем настроить:

Этот путь идеален для крупных предприятий (уровня КОРП), где важен строгий контроль жизненного цикла документа. Однако для небольших компаний это может быть избыточным решением.

Вариант 2: Программная реализация через расширение

Разберем наиболее эффективный технический способ — создание собственного механизма нумерации с помощью расширения конфигурации. Это позволит оставить основную конфигурацию на поддержке и реализовать "хотелки" отдела кадров. Логика схожа с тем, как реализуется своя нумерация табельного номера в ЗУП 3.1, но применительно к документам.

Шаг 1: Создание структуры для хранения настроек

Нам необходимо где-то хранить правила: какому документу какой суффикс присваивать. Для этого в расширении создадим новый Справочник (например, _НастройкиНумерацииДокументов) или используем Регистр сведений.

В структуре настройки предусмотрим следующие поля:

Шаг 2: Использование подписки на событие

Для управления номером нам понадобится перехватить событие установки нового номера. В 1С для этого используется событие ПриУстановкеНовогоНомера. Создадим в расширении Подписку на событие, где в качестве источника укажем необходимые нам кадровые документы (ПриемНаРаботу, Увольнение, Отпуск и др.).

Шаг 3: Написание кода обработчика

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


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

    // Отключаем стандартную генерацию номера, если нашли настройку
    Настройка = НайтиНастройкуНумерации(Источник.Метаданные().Имя);
    Если Настройка = Неопределено Тогда
        Возврат;
    КонецЕсли;

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

    Результат = Запрос.Выполнить();
    Если Результат.Пустой() Тогда
        НовыйПорядковыйНомер = 1;
    Иначе
        Выборка = Результат.Выбрать();
        Выборка.Следующий();
        // Очищаем номер от префиксов и суффиксов, чтобы получить число
        ЧисловаяЧасть = ИзвлечьЧислоИзНомера(Выборка.Номер, ПрефиксОрганизации, Суффикс);
        НовыйПорядковыйНомер = ЧисловаяЧасть + 1;
    КонецЕсли;

    // Сборка финальной строки номера (длина в ЗУП обычно 11 символов)
    // Пример: ОБ00001-ЛС
    Источник.Номер = ПрефиксОрганизации + Формат(НовыйПорядковыйНомер, "ЧГ=0; ЧВН=") + Суффикс;

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

Особенности реализации и подводные камни

Разберем важные нюансы, которые необходимо учитывать при реализации такой схемы:

  1. Длина номера: Стандартная длина номера в ЗУП 3.1 — 11 символов. Если ваш суффикс занимает 3 символа (например, -ЛС) и префикс организации 2 символа, то на само число остается всего 6 знаков. Этого достаточно для 999 999 документов в год, что покрывает потребности почти любого предприятия.
  2. Алфавитный порядок: Помните, что платформа 1С сортирует строковые номера по алфавиту. Если вы не используете лидирующие нули (например, делаете номер 1-ЛС, 2-ЛС... 10-ЛС), то при сортировке номер 10-ЛС окажется перед 2-ЛС. Всегда используйте Формат(Номер, "ЧВН=") для дополнения нулями.
  3. Контроль уникальности: При использовании собственных суффиксов стандартный механизм контроля уникальности платформы может работать непредсказуемо. Рекомендуется перепроверять уникальность перед записью документа. А если вы столкнулись с проблемами кэша нумератора, вам пригодится исправление ошибки «Значение поля Номер не уникально».
  4. Документы-исправления: В ЗУП часто создаются документы-исправления. Проанализируйте, должны ли они входить в общую нумерацию или иметь свой специфический индекс.

Рекомендация по использованию префиксов вместо суффиксов

С технической точки зрения в системе 1С префиксы (добавление символов в начало номера) реализованы более органично, чем суффиксы. Платформа умеет "отрезать" префикс и инкрементировать оставшуюся числовую часть автоматически. Если отдел кадров готов пойти на компромисс, использование префиксов вида ЛС-00001 вместо 00001-ЛС значительно упростит код и снизит риск ошибок при автогенерации номеров. Однако, если суффиксы — это жесткое требование, используйте метод с полным переопределением номера в подписке, как показано выше.

Таким образом, мы выяснили, что штатного механизма "из коробки" в ЗУП 3.1 для суффиксов не существует, но задача успешно решается с помощью небольшого расширения, которое централизует правила нумерации и автоматизирует работу кадровика, избавляя его от ручного ввода номеров.

← На главную