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

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

При сопровождении типовых и доработанных конфигураций 1С разработчики нередко сталкиваются с ситуацией, когда автонумерация документов ведет себя непредсказуемо. Например, существующие документы имели непрерывную нумерацию вида ГТ00-011024, ГТ00-011025, ГТ00-011026, но новый создаваемый документ внезапно получает номер ГТ00-П00001. Попытка сбросить кэш нумерации через вызов метода ОбновитьНумерациюОбъектов() в этом случае не помогает. Разберем по шагам, почему так происходит, как платформа формирует номера и где именно искать скрытую причину сбоя.

Как работает автонумерация платформы и метод ОбновитьНумерациюОбъектов

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


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

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

Платформа 1С делит номер на две части: строковую (префикс) и числовую. Для каждой уникальной комбинации префикса ведется своя независимая последовательность. Если префикс изменился хотя бы на один символ (например, вместо цифры 0 появилась буква П), платформа ищет максимальный номер именно с префиксом ГТ00-П. Если документов с таким префиксом в текущем периоде нумерации еще не было, новый номер всегда начнется с единицы: ГТ00-П00001.

Поиск источника изменения префикса

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

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

Рассмотрим пример кода в модуле объекта, который приводит к резкой смене формата номера:


Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
    
    // В зависимости от реквизита подменяется префиксная часть номера
    Если ТипПлатежногоДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеПоручение Тогда
        Префикс = "П";
    Иначе
        Префикс = "0";
    КонецЕсли;
    
КонецПроцедуры

В приведенном фрагменте при установке типа платежного документа «Платежное поручение» префикс жестко заменяется на букву П. В результате стандартный префикс 0 отсекается, а платформа формирует номер ГТ00-П00001, начиная отсчет заново.

Пошаговый алгоритм локализации и исправления проблемы

Чтобы восстановить корректную последовательность, выполним следующие действия:

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

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

← На главную