Почему 1С продолжает присваивать старый номер с буквой после перенумерации документов и как это исправить?

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

При ведении учета в конфигурации 1С:Бухгалтерия предприятия 3.0 нередко возникает неприятная ситуация: в базе появились документы с некорректными номерами или лишними буквами, например, 0000-В00001. Бухгалтер или администратор вручную либо с помощью групповой обработки приводит номера в порядок, заменяя их на стандартные 0000-000001. Однако при создании следующего документа система упорно подставляет старый префикс и выдает номер 0000-В000010. Разберем по шагам, почему платформа запоминает ошибочную нумерацию и какими способами можно сбросить этот счетчик.

Выясним причину поведения платформы

Для понимания корня проблемы проанализируем внутренние механизмы автонумерации платформы 1С:Предприятие 8.3. Механизм автонумерации оптимизирован для высокой производительности и параллельной работы пользователей, поэтому он функционирует по следующим правилам:

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

Способ 1. Программный сброс автонумерации через метод ОбновитьНумерациюОбъектов

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

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


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

// Либо полный сброс счетчиков для всех объектов метаданных конфигурации
ОбновитьНумерациюОбъектов();

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

Способ 2. Очистка служебных файлов файловой базы и перезапуск веб-сервера

В файловых базах данных (особенно опубликованных через веб-серверы IIS или Apache) кэш автонумератора часто удерживается служебными процессами и вспомогательными файлами. Разберем порядок действий, который гарантированно решает проблему в файловом режиме:

  1. Завершим все активные пользовательские сеансы и закроем конфигуратор.
  2. Если база данных опубликована на веб-сервере (например, Apache), полностью остановим службу веб-сервера.
  3. Откроем каталог информационной базы. В нем находятся основной файл 1Cv8.1CD и различные вспомогательные файлы (журнал регистрации, файлы блокировок, временные таблицы кэша).
  4. Удалим все служебные файлы и временные папки, оставив нетронутым только файл самой базы данных 1Cv8.1CD.
  5. Очистим локальный кэш пользователя на клиентском компьютере (каталоги %LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8).
  6. Запустим веб-сервер и выполним тестирование и исправление базы данных через режим Конфигуратора, выбрав пункт Переиндексация таблиц информационной базы.

Способ 3. Перезапуск рабочих процессов в клиент-серверном варианте

Если база данных работает в режиме клиент-сервер под управлением кластера серверов 1С, кэш счетчиков удерживается процессами rphost. Проанализируем действия администратора:

  1. Убедимся, что в базе отсутствуют документы с ошибочными номерами, включая помеченные на удаление.
  2. В утилите администрирования кластера серверов 1С временно заблокируем начало новых сеансов и работу регламентных заданий.
  3. Завершим текущие пользовательские сеансы информационной базы.
  4. Выполним перезапуск службы агента сервера 1С:Предприятия (ragent) либо перезапустим рабочие процессы кластера. В результате выгрузки процесса rphost из оперативной памяти кэшированные значения автонумерации полностью сбросятся.

Проверка скрытых документов и объектов метаданных

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

  1. Общие нумераторы. Проверим в конфигураторе свойство Нумератор у проблемного документа. Если документ привязан к общему объекту метаданных (например, единый нумератор для поступлений и реализаций), ошибочный номер с префиксом мог остаться в другом связанном типе документов. Исправлять нумерацию в таком случае необходимо сразу по всей группе документов.
  2. Поиск без учета RLS. Сформируем отчет или выполним запрос через консоль запросов от имени пользователя с полными административными правами без ограничения доступа на уровне записей. Это позволит убедиться, что в информационной базе физически нет забытых непроведенных или помеченных на удаление документов за текущий период, формирующих максимальное числовое значение.
← На главную