В практике работы отделов кадров часто возникает задача разделения нумерации документов по их типам. Например, для приказов о приеме, переводе и увольнении требуется суффикс -ЛС (личный состав), для отпусков — -О, для командировок — -К. Это необходимо для удобства бумажного архивирования и быстрого поиска документов на полках. Однако типовая конфигурация 1С:Зарплата и управление персоналом 3.1 (ЗУП) ориентирована на сквозную нумерацию в пределах организации. Разберем, какие варианты решения существуют (например, внешняя обработка Установка номера в кадровых документах), и как реализовать гибкую нумерацию самостоятельно.
Сначала проанализируем, что предлагает нам типовое решение. В 1С:ЗУП 3.1 штатный механизм нумерации работает по жестким правилам платформы. Основные характеристики типовой нумерации:
Важно: Прямой настройки в пользовательском режиме, позволяющей привязать суффикс к виду документа, в ЗУП 3.1 нет. Попытка вручную дописать суффикс в номере документа в 90% случаев приводит к сбою автоматической нумерации (платформа не может корректно инкрементировать строку с суффиксом в конце). Если сбой уже произошел и порядок нарушен, вам поможет перенумератор документов с учетом префикса.
Рассмотрим вариант интеграции. Если на предприятии используется 1С:Документооборот, это снимает проблему полностью. В этой конфигурации механизмы нумерации являются максимально гибкими. Мы можем настроить:
Этот путь идеален для крупных предприятий (уровня КОРП), где важен строгий контроль жизненного цикла документа. Однако для небольших компаний это может быть избыточным решением.
Разберем наиболее эффективный технический способ — создание собственного механизма нумерации с помощью расширения конфигурации. Это позволит оставить основную конфигурацию на поддержке и реализовать "хотелки" отдела кадров. Логика схожа с тем, как реализуется своя нумерация табельного номера в ЗУП 3.1, но применительно к документам.
Нам необходимо где-то хранить правила: какому документу какой суффикс присваивать. Для этого в расширении создадим новый Справочник (например, _НастройкиНумерацииДокументов) или используем Регистр сведений.
В структуре настройки предусмотрим следующие поля:
Строка или ПеречислениеСсылка.ТипыОбъектов).Строка).Строка).Перечисление — Год, Месяц и т.д.).Для управления номером нам понадобится перехватить событие установки нового номера. В 1С для этого используется событие ПриУстановкеНовогоНомера. Создадим в расширении Подписку на событие, где в качестве источника укажем необходимые нам кадровые документы (ПриемНаРаботу, Увольнение, Отпуск и др.).
Рассмотрим пример кода, который будет формировать номер. Логика заключается в том, чтобы найти последний созданный документ этого типа с нашим суффиксом, извлечь из него числовую часть, увеличить ее и собрать новый номер обратно.
// Процедура - обработчик события установки нового номера
Процедура _ПриУстановкеНовогоНомера(Источник, СтандартнаяОбработка, Префикс) Экспорт
// Отключаем стандартную генерацию номера, если нашли настройку
Настройка = НайтиНастройкуНумерации(Источник.Метаданные().Имя);
Если Настройка = Неопределено Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
// Получаем текущий префикс организации (например, "ОБ")
ПрефиксОрганизации = Префикс;
Суффикс = Настройка.Суффикс; // Например, "-ЛС"
// Выполняем запрос к таблице документа для поиска последнего номера
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Т.Номер КАК Номер
|ИЗ
| Документ." + Источник.Метаданные().Имя + " КАК Т
|ГДЕ
| Т.Дата МЕЖДУ &НачалоГода И &КонецГода
| И Т.Номер ПОДОБНО &ШаблонНомера
|УПОРЯДОЧИТЬ ПО
| Т.Номер УБЫВ";
Запрос.УстановитьПараметр("НачалоГода", НачалоГода(Источник.Дата));
Запрос.УстановитьПараметр("КонецГода", КонецГода(Источник.Дата));
// Ищем номера, которые заканчиваются на наш суффикс
Запрос.УстановитьПараметр("ШаблонНомера", "%" + Суффикс);
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
НовыйПорядковыйНомер = 1;
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();
// Очищаем номер от префиксов и суффиксов, чтобы получить число
ЧисловаяЧасть = ИзвлечьЧислоИзНомера(Выборка.Номер, ПрефиксОрганизации, Суффикс);
НовыйПорядковыйНомер = ЧисловаяЧасть + 1;
КонецЕсли;
// Сборка финальной строки номера (длина в ЗУП обычно 11 символов)
// Пример: ОБ00001-ЛС
Источник.Номер = ПрефиксОрганизации + Формат(НовыйПорядковыйНомер, "ЧГ=0; ЧВН=") + Суффикс;
КонецПроцедуры
Разберем важные нюансы, которые необходимо учитывать при реализации такой схемы:
-ЛС) и префикс организации 2 символа, то на само число остается всего 6 знаков. Этого достаточно для 999 999 документов в год, что покрывает потребности почти любого предприятия.1-ЛС, 2-ЛС... 10-ЛС), то при сортировке номер 10-ЛС окажется перед 2-ЛС. Всегда используйте Формат(Номер, "ЧВН=") для дополнения нулями.С технической точки зрения в системе 1С префиксы (добавление символов в начало номера) реализованы более органично, чем суффиксы. Платформа умеет "отрезать" префикс и инкрементировать оставшуюся числовую часть автоматически. Если отдел кадров готов пойти на компромисс, использование префиксов вида ЛС-00001 вместо 00001-ЛС значительно упростит код и снизит риск ошибок при автогенерации номеров. Однако, если суффиксы — это жесткое требование, используйте метод с полным переопределением номера в подписке, как показано выше.
Таким образом, мы выяснили, что штатного механизма "из коробки" в ЗУП 3.1 для суффиксов не существует, но задача успешно решается с помощью небольшого расширения, которое централизует правила нумерации и автоматизирует работу кадровика, избавляя его от ручного ввода номеров.