Как исправить сбой нумерации приказов в 1С:ЗУП при продлении отпусков после Нового года

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

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

Если пользователь вручную установит в этом исправлении номер 1001/1 или попытается продолжить нумерацию прошлого года, 1С зафиксирует это значение как максимальное для текущего года. В результате все последующие «нормальные» приказы января получат номера 1002, 1003 и так далее, вместо того чтобы начаться с единицы — для корректного проведения таких изменений есть автоматизация массового перерасчета отпусков прошлых периодов. Разберем подробно, почему так происходит и какие существуют методы решения этой проблемы.

Анализируем причину: как работает механизм автонумерации 1С

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

Для начала проанализируем поведение платформы «1С:Предприятие». Механизм автонумерации работает по строгому алгоритму. Когда создается новый объект, система ищет в базе данных документ того же типа в пределах текущего периода (в данном случае — года). Если в 2024 году программа находит документ с номером «1001/1» или «0000-01001», она анализирует его текстовую строку.

Важный момент: 1С воспринимает номер как строку, но при инкременте (увеличении на 1) пытается выделить числовую часть. Если в начале года в базу попал документ с большим числом в номере, автонумерация «сбивается», принимая это число за эталон. Именно поэтому исправления «прошлогодних» отпусков в январе становятся критической точкой для кадрового учета — для решения этой задачи подойдёт настройка автоматической нумерации с префиксами в 1С:ЗУП.

Способ №1: Использование суффиксов и ручной контроль даты

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

  1. Создаем документ-исправление.
  2. В поле Номер вручную вписываем номер исходного приказа с добавлением дроби, например 1001/1.
  3. Устанавливаем дату документа (не дату события, а именно дату самого документа в шапке) той же, что и у исходного приказа, либо концом прошлого года (31 декабря).

Однако установка даты прошлым годом может быть нежелательна с точки зрения бухгалтерского учета и периодов перерасчета. Если дату менять нельзя, то использование дроби в номере все равно остается рабочим вариантом, но требует внимательности. Чтобы 1С не «подхватила» этот номер как основной для 2024 года, кадровику придется вручную поправить номер следующего созданного (уже нового) приказа на «1», после чего автонумерация должна вернуться в нормальное русло.

Способ №2: Использование поля «Печатать как» и дополнительных реквизитов

Выясним, как разработчики «1С» предлагают решать вопросы с нестандартной нумерацией в современных версиях ЗУП 3.1. Начиная с версии 3.1.13.188, в кадровых документах, влияющих на трудовую деятельность (СЗВ-ТД, ЕФС-1), появилось дополнительное поле для номера приказа.

Проанализируем этот механизм: рядом с основным системным номером 1С теперь есть поле, которое позволяет указать «произвольный» номер для печатных форм. Преимущества этого метода:

Если в вашем типе документа (например, в простом «Отпуске», не отражаемом в ТК) такого поля нет, это можно доработать с помощью расширения или использовать готовые внешние печатные формы для 1С:ЗУП 3.1.

Способ №3: Программное решение через расширение (для разработчиков)

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


&НаСервере
Процедура ПриУстановкеНовогоНомераПриСоздании(Источник, СтандартнаяОбработка, Префикс)
    // Проверяем, является ли документ исправлением
    Если Источник.Исправление Тогда
        // Добавляем специфический префикс, который выводит номер из общей очереди
        Префикс = "ИСП" + Префикс;
    КонецЕсли;
КонецПроцедуры

Такой подход позволит всем документам-исправлениям получать префикс ИСП. Для платформы номера ИСП001 и 000001 — это разные последовательности. Таким образом, «исправительные» документы будут жить в своей нумерации, не мешая основным приказам текущего года начинаться с единицы.

Как восстановить нумерацию, если она уже сломалась?

Посмотрим на ситуацию, когда ошибка уже совершена: в базу введен документ с номером 1002, и теперь все новые документы получают номера 1003, 1004 и так далее. Чтобы вернуть нумерацию к началу (к номеру 5, например), выполним следующие действия:

  1. Найдем в текущем году документ с самым большим «неправильным» номером (тот самый, который сбил очередь).
  2. Изменим его номер на что-то, не содержащее в начале длинную последовательность цифр (например, добавим букву в начало: З-1002).
  3. Создадим новый документ (черновик) и вручную присвоим ему правильный следующий номер (например, 5).
  4. Проведем документ. Следующий созданный документ должен автоматически получить номер 6.

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


ОбновитьНумерациюОбъектов(Метаданные.Документы.Отпуск);

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

Резюме и рекомендации

Разберем итоги нашего анализа. Проблема с нумерацией в ЗУП при продлении отпусков — это не ошибка программы, а особенность работы платформенного механизма. Чтобы избежать хаоса в кадровых приказах, рекомендуем:

1. Административно: закрепить в учетной политике, что документы-исправления нумеруются с суффиксом (через дробь).
2. Методологически: использовать встроенные возможности 1С по разделению системного номера и номера приказа для печати (реквизиты типа «Номер приказа» или «Печатать как»).
3. Технически: внедрить небольшое расширение, которое будет автоматически добавлять префикс к исправляющим документам, полностью исключая человеческий фактор.

Помните, что чистота нумерации в 1С зависит от соблюдения маски номера (количества лидирующих нулей). Никогда не удаляйте нули перед номером документа, так как это гарантированно приведет к сбою автонумерации в будущем.

← На главную