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

Программист 1С v8.3 (Обычные формы) 1С:Комплексная автоматизация IT и автоматизация бизнеса
← На главную

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

Выясним причину сбоя нумератора

Платформа 1С отслеживает уникальность и последовательность номеров документов. Если для документа установлена периодичность нумерации (например, в пределах года), платформа при создании нового документа ищет максимальный номер в текущем периоде и увеличивает его на единицу.

Проблема возникает в следующем сценарии:

  1. Пользователь случайно меняет дату старого документа (например, с номером 5892 из прошлого года) на текущую дату.
  2. Платформа 1С запоминает, что в текущем периоде максимальный номер стал 5892.
  3. Даже если пользователь затем визуально исправил номер этого документа или вернул его в прошлый период, сервер приложений (или локальный модуль платформы) оставляет зафиксированное максимальное значение в своем внутреннем кэше нумераторов.
  4. В результате каждый следующий создаваемый документ получает номер 5893, несмотря на то, что в журнале документов такого номера визуально нет.

Обычные обработки по перенумерации существующих документов в этой ситуации не помогают, так как они меняют только видимые номера уже созданных записей, но не сбрасывают внутренний счетчик платформы 1С.

Способ 1. Использование платформенного метода ОбновитьНумерациюОбъектов()

Для решения проблемы «залипшего» номера в платформе 1С предусмотрен специальный встроенный метод ОбновитьНумерациюОбъектов(). Он заставляет систему заново проанализировать физически записанные в базе данные и обновить внутренние счетчики нумерации в соответствии с реальным максимальным номером.

Синтаксис метода выглядит следующим образом:

ОбновитьНумерациюОбъектов(ОбъектМетаданных);

В качестве параметра можно передавать конкретный объект метаданных или массив объектов. Если параметр не указан, нумерация обновится для всех объектов базы данных.

Разберем пример кода для вызова обновления нумерации конкретного документа (например, Заказ покупателя):


// Вызов сброса счетчика нумерации для конкретного документа
ОбновитьНумерациюОбъектов(Метаданные.Документы.ЗаказПокупателя);

Выполнить этот код можно несколькими способами:

  1. Через внешнюю обработку (создав кнопку с вызовом процедуры на сервере).
  2. Через внешнюю обработку «Табло» или «Консоль кода» в режиме конфигуратора/предприятия от имени администратора.

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

Способ 2. Использование типовой обработки в конфигурации

В конфигурациях на обычных формах (таких как «1С:Комплексная автоматизация 1.0» или «1С:Управление производственным предприятием 1.3») присутствует специальная служебная обработка, позволяющая сбросить счетчик без написания кода.

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

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

Дополнительные рекомендации при проблемах с нумерацией

Если после вызова процедуры обновления нумерации программа продолжает выдавать неправильный номер, проанализируем следующие факторы:

  1. Проверка прав доступа (RLS): Документ с максимальным номером может быть физически записан в базе, но не виден текущему пользователю из-за настроек ограничения прав на уровне записей. Выполните поиск документа от имени пользователя с полными правами.
  2. Формат и длина номера: Проверьте, чтобы у всех документов текущего года была одинаковая длина номера и одинаковое количество лидирующих нулей (например, 0000000001, а не 1). Если в номер попал пробел или латинская буква, платформа будет считать такой номер наибольшим при лексикографической сортировке.
  3. Кэш сервера приложений: В клиент-серверном режиме работы рабочий процесс rphost может удерживать выданные номера в оперативной памяти. Если перезапуск нумерации через код не сработал, может потребоваться перезапуск службы сервера 1С:Предприятия.
← На главную