Разберем одну из самых неприятных ошибок, с которой сталкиваются пользователи и администраторы 1С:Зарплата и управление персоналом 3.1. Когда система внезапно начинает выдавать сообщение «Значение поля Номер не уникально», это сигнализирует о конфликте в работе автоматического нумератора. Давайте выясним, почему это происходит и как вернуть порядок в нумерацию документов.
В основе работы платформы 1С лежит жесткая логика. Когда вы создаете новый документ, система вызывает стандартную процедуру УстановитьНовыйНомер(). Этот механизм ожидает, что номер документа состоит из числовой части, которую можно инкрементировать (увеличить на единицу).
Если пользователи начинают вручную дописывать к номеру буквенные суффиксы, например 0001ЛС или 0002ЛС, нумератор «теряется». Буквы мешают системе распознать порядковый номер, и при попытке подобрать следующий свободный номер происходит сбой. Система либо не может вычислить следующее число, либо, пытаясь «догадаться», подставляет номер, который уже существует, вызывая ошибку нарушения уникальности.
Прежде чем приступать к исправлению формата номеров, проанализируем даты документов. Ошибка часто возникает, если вы создаете документ «задним числом». Рассмотрим пример:
Попробуйте создать документ текущей датой или проверить, нет ли в списке документов «будущих» записей, которые сбивают логику автонумерации.
Самая частая причина ошибки — добавление суффиксов (например, «ЛС» — Личный Состав) непосредственно в поле Номер. В современных редакциях 1С:ЗУП 3.1 для этих целей предусмотрено отдельное поле — «Номер для печати».
Если вы хотите, чтобы в печатных формах номер выглядел как 0001ЛС, действуйте следующим образом:
Номер документа оставляйте только чистые, строго цифровые значения с префиксами организации или ИБ (например, 0ХЗК-00001).Номер для печати указывайте то, что нужно вывести на бумагу: 0ХЗК-00001ЛС.Если вы решили привести базу в порядок, необходимо выполнить перенумерацию документов. Мы рекомендуем действовать осторожно, чтобы не нарушить последовательность проведения. Разберем алгоритм безопасной перенумерации:
Важно: Не проводите перенумерацию через массовое перепроведение, так как это может затронуть связанные расчетные документы и изменить результаты начислений за прошлые периоды.
Используйте программную запись без изменения даты и проведения. Для этого можно воспользоваться обработкой или небольшим скриптом в консоли кода:
// Пример логики для перенумерации (в консоли кода)
Выборка = Документы.Увольнение.Выбрать();
Пока Выборка.Следующий() Цикл
ОбъектДок = Выборка.ПолучитьОбъект();
// Очищаем от букв и приводим к формату
ОбъектДок.Номер = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(ОбъектДок.Номер);
ОбъектДок.Записать(РежимЗаписиДокумента.Запись);
КонецЦикла;
Помните: Объект.Записать(РежимЗаписиДокумента.Запись) сохраняет документ без выполнения алгоритмов проведения, что защитит вас от пересчета зарплатных начислений.
Если по каким-то причинам (требования руководства или сторонних органов) необходимо, чтобы поле Номер всегда содержало суффикс, единственным надежным вариантом является написание собственного расширения конфигурации.
Вам потребуется перехватить событие ПриУстановкеНовогоНомера или использовать подписки на события УстановитьПрефиксИБИОрганизацииНомеруДокумента. Внутри обработчика нужно будет:
Однако, прежде чем приступать к разработке, настоятельно рекомендуем попробовать перевести учет на использование штатного поля «Номер для печати». Это избавит вас от необходимости поддерживать сложный программный код при каждом обновлении конфигурации.
Разберем основные тезисы нашего анализа:
Значение поля Номер не уникально — это классический конфликт платформы с некорректным форматом номера.Номер для печати — это штатный инструмент 1С.РежимЗаписиДокумента.Запись, чтобы не задеть проведение документов.Следуя этим рекомендациям, вы сможете навести порядок в нумерации и избежать остановки работы пользователей из-за технических сбоев.