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

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

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

Принцип работы механизма автонумерации в платформе 1С

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

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

Если в базе существовали стандартные номера вида 00000000010, а пользователь вручную сохранил документ с номером Х75282016, то при строковом сравнении буква «Х» оказывается старше символа «0». Платформа считает этот номер наибольшим и для следующего документа автоматически предлагает номер Х75282017. При этом обратный автоматический возврат к номерам с лидирующими нулями не происходит.

Способ 1. Изоляция нумерации с помощью префиксов организации

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

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

Разберем по шагам, как настроить префикс в типовой конфигурации:

  1. Перейдем в карточку организации (раздел Главное — Организации).
  2. Укажем уникальный код в поле Префикс (например, ОС или 00).
  3. Сохраним изменения. При создании новых документов платформа автоматически подставит префикс и начнет независимый подсчет номеров.

Способ 2. Программное управление через событие ПриУстановкеНовогоНомера

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

В модуле документа или в модуле подписки на событие доступна стандартная процедура ПриУстановкеНовогоНомера. Посмотрим на пример переопределения префикса или логики генерации номера:


Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
    
    // Задаем явный префикс для разделения потоков нумерации
    Префикс = "00";
    
    // Если требуется полностью сформировать номер собственным алгоритмом:
    // СтандартнаяОбработка = Ложь;
    // ЭтотОбъект.Номер = СформироватьУникальныйНомер();
    
КонецПроцедуры

Если мы используем типовую конфигурацию на базе Библиотеки стандартных подсистем (БСП), рекомендуется не изменять модуль самого объекта, а использовать подписку на событие ПриУстановкеНовогоНомераДокумента. Это позволит сохранить конфигурацию на полной поддержке.

Способ 3. Восстановление нумерации и сброс платформенного кэша

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

  1. Найдем документ с некорректным номером (например, Х75282016) и изменим его номер вручную на правильный по порядку (например, 00000000011).
  2. Проверим, нет ли других документов, успевших записаться с ошибочным шаблоном, и исправим их номера.
  3. Если после ручного исправления платформа продолжает предлагать ошибочные номера, сбросим кэш нумерации с помощью встроенного метода глобального контекста.

Для принудительного обновления счетчиков нумерации выполним следующий код во внешней обработке или консоли кода:


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

Рекомендации по учету сторонних номеров

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

  1. Не изменяйте системный номер документа для сторонних данных. Если требуется хранить входящий номер акта или накладной от поставщика, используйте специально предназначенные реквизиты — НомерВходящегоДокумента и ДатаВходящегоДокумента. Системный реквизит Номер должен оставаться для внутренней автонумерации программы.
  2. Следите за длиной номера. Заполнение строки номера без лидирующих нулей на полную разрядность (например, ввод 11 знаков подряд) приведет к исчерпанию разрядной сетки, после чего платформа не сможет инкрементировать номер автоматически.
← На главную