Как исправить ошибку автонумерации документов в 1С 8.3 и сбросить некорректный номер?

Системный администратор 1С v8.3 (Управляемые формы) 1С:ERP Управление предприятием IT и автоматизация бизнеса
← На главную

В процессе работы с конфигурациями на платформе 1С:Предприятие 8.3 (например, 1С:ERP Управление предприятием или 1С:Комплексная автоматизация) иногда возникают ситуации, когда при попытке создать новый документ система автоматически присваивает ему аномально высокий номер. Например, вместо следующего по порядку номера ГЕЦБ-001650 платформа генерирует ГЕЦБ-010292. При этом последующие документы вообще отказываются записываться из-за конфликта уникальности номеров.

Рассмотрим подробно причины возникновения этой проблемы и эффективные способы её устранения.

Почему происходит сбой автонумерации в 1С?

Проанализируем механику работы менеджера автонумерации в платформе 1С:Предприятие 8.3. Сервер приложений оптимизирует работу с базой данных и кэширует последние выданные номера в оперативной памяти рабочих процессов (rphost). Сбой в формировании sequence-номеров чаще всего происходит по следующим причинам:

  1. Рассинхронизация кэша сервера приложений и СУБД: При сбоях в работе сервера, аварийном завершении транзакций или восстановлении базы данных из резервной копии кэш рабочих процессов в ОЗУ перестает соответствовать реальным максимальным номерам в таблицах СУБД.
  2. Документы, скрытые ограничениями прав (RLS): В базе данных может физически существовать документ с большим номером, записанный ранее. Если текущий пользователь или администратор не видит его из-за настроек RLS (разграничение прав на уровне записей), стандартные отборы не покажут такой документ. Однако платформа на стороне сервера все равно учитывает его при расчете следующего значения.
  3. Использование общего нумератора: Если тип документа связан с общим объектом метаданных Нумератор, завышенный номер мог сформироваться в другом типе документов, использующем этот же нумератор (например, в перемещении товаров или акте выполненных работ).
  4. Сбой лексикографической (строковой) сортировки: Номер документа является строковым реквизитом. Если в базу попал хоть один номер с нарушенным форматом (без лидирующих нулей или с некорректным префиксом), платформа начинает считать его «максимальным» из-за особенностей строкового сравнения.

Способ 1. Очистка кэша сервера приложений 1С

Если проблема вызвана зависшим кэшем рабочих процессов rphost, стандартные методы исправления в конфигураторе или вызов процедур перенумерации в сеансе пользователя не дадут результата. В этом случае наиболее оперативным решением является перезапуск службы сервера 1С или очистка сеансового кэша.

Разберем по шагам действия системного администратора:

  1. Оповестим пользователей и завершим все активные сеансы работы с информационной базой.
  2. Выполним перезапуск службы 1С:Предприятия (Agent 1C:Enterprise server) через оснастку управления службами Windows или сервис systemctl в Linux.
  3. Если перезапуск всей службы недопустим, выполним перезапуск конкретных рабочих процессов rphost через консоль кластера серверов 1С или временно удалим и заново зарегистрируем информационную базу в кластере.

После перезапуска процесса rphost оперативна память очищается, и менеджер автонумерации при следующем обращении считывает корректный максимальный номер непосредственно из базы данных.

Способ 2. Программный сброс кэша менеджера нумерации

Платформа 1С предоставляет встроенный метод для сброса кэшированных номеров объектов метаданных — ОбновитьНумерациюОбъектов(). Рассмотрим особенности его применения.

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


// Вызов без параметров обновляет кэш нумераторов по всем объектам метаданных базы
ОбновитьНумерациюОбъектов();

Посмотрим на пример применения метода для конкретного типа документа:


// Обновление кэша нумерации только для документа РеализацияТоваровУслуг
ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваровУслуг);

Обратите внимание: метод ОбновитьНумерациюОбъектов() обновляет только данные в оперативной памяти сервера приложений. Он не изменяет физические записи в СУБД. Если в таблицах базы данных останется хотя бы один документ со сбойным номером (например, ГЕЦБ-010292), после вызова метода платформа снова прочитает этот номер как максимальный.

Способ 3. Поиск и исправление аномальных номеров в базе

Если после очистки кэша платформа продолжает выдавать ошибочный номер, значит, документ с таким номером физически присутствует в СУБД. Выясним, как его найти:

  1. Откроем консоль запросов от имени пользователя с полными правами и отключенным режимом разделения данных/RLS.
  2. Выполним поиск по всем документам текущего периода, используя текстовый поиск по номеру или условие по значению номера.
  3. Проверим все типы документов, если в конфигурации используется общий Нумератор.
  4. Проверим помеченные на удаление документы. Если среди них есть объект со сбойным номером, его необходимо либо окончательно удалить через удаление помеченных объектов, либо отредактировать в нем номер вручную.

Альтернативные варианты контроля нумерации

В конфигурациях с высокой интенсивностью ввода документов или сложной структурой префиксов стандартного платформенного механизма может быть недостаточно. В таких ситуациях программисты применяют собственные алгоритмы формирования номеров:

  1. Перехват в подписке на событие ПриУстановкеНовогоНомера: В этом случае платформенный генератор номеров отключается, а номер рассчитывается явным запросом к базе данных с поиском максимального числового значения по конкретной организации и префиксу.
  2. Использование регистра сведений для хранения счетчиков: Создается независимый регистр сведений, где для каждого префикса и организации хранится текущий порядковый номер. Выдача нового номера происходит с явным блокированием записи регистра в момент транзакции.
← На главную