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

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

Сбой автонумерации документов — распространенная проблема при ведении учета в 1С. Ситуация обычно выглядит следующим образом: документы формировались со стандартными номерами вида К0000000077, К0000000078, но в определенный момент платформа начинает автоматически присваивать номера совсем другого формата, например К0000000А67, К0000000А68. При этом поиск исходного документа, с которого начался сбой, часто не дает результатов стандартными средствами журнала.

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

Почему сбивается автонумерация в 1С

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

Когда в номере К0000000077 вместо одного из нулей случайно вводится буква (например, русская или английская «А»), платформа воспринимает строку К0000000А как новый префикс документа, а идущие следом цифры — как отдельный числовой счетчик. С этого момента система ищет максимальный номер только среди документов с новым префиксом и продолжает нумеровать их дальше: К0000000А67, К0000000А68 и так далее.

Почему же первоначальный документ с ошибочным номером часто не удается найти в журнале? Проанализируем возможные причины:

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

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

Самый быстрый способ вернуть нумерацию в рабочее русло без остановки работы пользователей — найти все ошибочные документы, исправить их номера вручную или обработкой, после чего программно сбросить кэш нумератора.

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


ВЫБРАТЬ
    Ссылка,
    Номер,
    Дата,
    ПометкаУдаления
ИЗ
    Документ.РеализацияТоваровУслуг
ГДЕ
    Номер ПОДОБНО "%А%"
    ИЛИ Номер ПОДОБНО "%A%"

После того как все ошибочные номера в базе исправлены на правильные (например, К0000000079, К0000000080), простого переименования может оказаться недостаточно. Менеджер нумерации платформы кэширует максимальные значения в оперативной памяти рабочих процессов кластера серверов. Чтобы заставить систему пересчитать счетчик заново по фактическим данным, выполним программный вызов метода ОбновитьНумерациюОбъектов() во внешней обработке:

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

Важное ограничение: метод ОбновитьНумерациюОбъектов() сработает только в том случае, если в информационной базе не осталось ни одного проведенного или помеченного на удаление документа со сбитым префиксом внутри текущего периода нумерации.

Способ 2. Групповая перенумерация документов

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

  1. В конфигурациях на обычных формах (таких как «Бухгалтерия предприятия 2.0») используем универсальную обработку «Групповая обработка справочников и документов» или внешнюю обработку «УниверсальныеПодборИОбработкаОбъектов».
  2. Отбираем проблемные документы за нужный период, исключая документы с корректными номерами.
  3. В списке доступных действий выбираем функцию перенумерации, задаем правильный начальный номер с сохранением префикса организации и запускаем процесс обработки.

Если требуется принудительно назначить номер программно из кода обработки, используем метод объекта документа УстановитьНовыйНомер() с явным указанием требуемого префикса:


ДокументОбъект = ВыбраннаяСсылка.ПолучитьОбъект();
ДокументОбъект.УстановитьНовыйНомер("К");
ДокументОбъект.Записать();

Способ 3. Сброс кэша менеджера нумерации на сервере

В клиент-серверном варианте работы платформа 1С резервирует диапазоны номеров в памяти процессов кластера. Если пользователь открыл форму нового документа, система зарезервировала номер, но документ не был сохранен, номер может «пропасть», а счетчик сместиться. Если после ручного исправления номеров платформа упорно продолжает подставлять ошибочный префикс, выполним перезапуск сессий пользователей либо перезапуск службы агента сервера 1С:Предприятия (ragent). Это полностью очистит оперативную память рабочих процессов и заставит менеджер автонумерации пересчитать диапазоны заново.

Способ 4. Выгрузка и загрузка информационной базы

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

  1. При загрузке файла .dt таблицы базы данных в СУБД полностью создаются заново.
  2. Все внутренние системные индексы и таблицы итогов перестраиваются с нуля.
  3. Кэш менеджера автонумерации кластера серверов 1С принудительно очищается и инициализируется заново, ориентируясь исключительно на фактически хранящиеся данные.

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

← На главную