При сопровождении типовых и доработанных конфигураций 1С разработчики нередко сталкиваются с ситуацией, когда автонумерация документов ведет себя непредсказуемо. Например, существующие документы имели непрерывную нумерацию вида ГТ00-011024, ГТ00-011025, ГТ00-011026, но новый создаваемый документ внезапно получает номер ГТ00-П00001. Попытка сбросить кэш нумерации через вызов метода ОбновитьНумерациюОбъектов() в этом случае не помогает. Разберем по шагам, почему так происходит, как платформа формирует номера и где именно искать скрытую причину сбоя.
Для оптимизации скорости создания документов платформа 1С кэширует максимальные номера в оперативной памяти кластера серверов. Метод ОбновитьНумерациюОбъектов предназначен исключительно для сброса этого кэша и принудительного пересчета максимального номера по физическим таблицам базы данных. Его можно вызывать как глобально, так и для конкретного типа метаданных:
// Сброс кэша нумерации для конкретного вида документов
ОбновитьНумерациюОбъектов(Метаданные.Документы.СписаниеБезналичныхДенежныхСредств);
Однако важно помнить: метод не изменяет номера в существующих документах и не исправляет алгоритмы формирования префиксов. Если в номере меняется префиксная часть, платформа рассматривает это как старт совершенно новой числовой цепочки.
Платформа 1С делит номер на две части: строковую (префикс) и числовую. Для каждой уникальной комбинации префикса ведется своя независимая последовательность. Если префикс изменился хотя бы на один символ (например, вместо цифры 0 появилась буква П), платформа ищет максимальный номер именно с префиксом ГТ00-П. Если документов с таким префиксом в текущем периоде нумерации еще не было, новый номер всегда начнется с единицы: ГТ00-П00001.
Если в базе отсутствуют документы с новым префиксом, значит, модификация строки номера происходит непосредственно в момент создания объекта. Проанализируем ключевые места, где может подменяться префикс:
УстановитьНовыйНомер() или при интерактивном создании документа.ПриУстановкеНовогоНомера, где формируются префиксы организаций, узлов РИБ и видов документов.Рассмотрим пример кода в модуле объекта, который приводит к резкой смене формата номера:
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
// В зависимости от реквизита подменяется префиксная часть номера
Если ТипПлатежногоДокумента = Перечисления.ТипыПлатежныхДокументов.ПлатежноеПоручение Тогда
Префикс = "П";
Иначе
Префикс = "0";
КонецЕсли;
КонецПроцедуры
В приведенном фрагменте при установке типа платежного документа «Платежное поручение» префикс жестко заменяется на букву П. В результате стандартный префикс 0 отсекается, а платформа формирует номер ГТ00-П00001, начиная отсчет заново.
Чтобы восстановить корректную последовательность, выполним следующие действия:
ПриУстановкеНовогоНомера. Проверим, не переопределяется ли входящий параметр Префикс вручную. Если необходимо отслеживать тип документа без изменения общей нумерации, уберем переопределение префикса или согласуем правила нумерации.ПриУстановкеНовогоНомераДокумента и поставим точку останова в общем модуле префиксации БСП. Убедимся, какие префиксы добавляются для организации и информационной базы.000001.ОбновитьНумерациюОбъектов для применения изменений.Таким образом, сбой нумерации чаще всего связан не с зависанием кэша платформы, а с логикой формирования префиксов в коде конфигурации. Своевременный анализ обработчика ПриУстановкеНовогоНомера позволяет быстро вернуть нумерацию документов к правильной сквозной цепочке.