Рассмотрим ситуацию, с которой сталкиваются многие разработчики: при программном создании нового документа и вызове метода УстановитьНовыйНомер() система выдает ошибку о том, что номер не уникален. Это происходит даже в тех случаях, когда мы следуем стандартным рекомендациям. Давайте разберем, почему это случается и как правильно навести порядок в нумерации документов вашей информационной базы.
Первое, что необходимо понять — это принцип работы счетчика номеров в платформе 1С. Система хранит информацию о последнем присвоенном номере в специальных таблицах базы данных. Проблемы возникают в следующих случаях:
УстановитьНовыйНомер() всегда учитывает дату объекта. Если дата не установлена или установлена некорректно, система может конфликтовать с номерами из других периодов.Самым первым и простым шагом, который помогает в 90% случаев при «зависших» счетчиках, является метод ОбновитьНумерациюОбъектов(). Этот метод заставляет систему просканировать существующие номера документов и актуализировать данные в таблице нумерации.
Выполните данный код в консоли кода или в процедуре обработки один раз:
ОбновитьНумерациюОбъектов();
После выполнения этой команды платформа «увидит» реальный максимальный номер и при следующем вызове УстановитьНовыйНомер() начнет отсчет от правильного значения.
Рассмотрим важный аспект: если нумерация вашего документа зависит от периода, критически важно сначала задать дату объекта, а уже потом вызывать установку номера. Разберем правильный алгоритм действий в коде:
// Создаем объект документа
ДокументОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
// Сначала устанавливаем дату, так как от нее зависит период нумерации
ДокументОбъект.Дата = ТекущаяДата();
// Устанавливаем префикс организации, если это требуется логикой конфигурации
ДокументОбъект.Префикс = "АБ";
// Теперь вызываем метод установки номера
Если НЕ ЗначениеЗаполнено(ДокументОбъект.Номер) Тогда
ДокументОбъект.УстановитьНовыйНомер();
КонецЕсли;
// Записываем документ
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Часто в типовых конфигурациях, созданных на базе БСП (Библиотеки Стандартных Подсистем), работают подписки на событие ПриУстановкеНовогоНомера. Именно эти подписки отвечают за автоматическую подстановку префикса организации. Если ваша ошибка сохраняется даже после обновления нумерации, проанализируйте логику подписок:
Подводя итог, если вы столкнулись с тем, что номер постоянно наращивается и выдает ошибку, не пытайтесь «прокликивать» базу вручную. Это неэффективно и может привести к ошибкам в данных.
Для массовой коррекции номеров рекомендуется:
ОбновитьНумерациюОбъектов().Префикса перед записью документов в многоорганизационных базах.Соблюдение этого алгоритма позволит вам избежать конфликтов уникальности и обеспечит стабильную работу механизма нумерации в вашей учетной системе.