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