При работе в программах 1С пользователи нередко сталкиваются с ситуацией, когда после ручного ввода нестандартного номера документа (например, номера входящей накладной поставщика или номера со специфическими буквами) встроенный механизм автонумерации начинает формировать все последующие номера по этому новому шаблону. Проанализируем, почему платформа ведет себя именно так и какими способами можно восстановить стандартную нумерацию или разделить потоки нумерации.
Чтобы понять причину сбоя, разберем логику платформенного формирования номеров. При создании нового документа платформа 1С выполняет следующие действия:
Если в базе существовали стандартные номера вида 00000000010, а пользователь вручную сохранил документ с номером Х75282016, то при строковом сравнении буква «Х» оказывается старше символа «0». Платформа считает этот номер наибольшим и для следующего документа автоматически предлагает номер Х75282017. При этом обратный автоматический возврат к номерам с лидирующими нулями не происходит.
Самым простым и штатным решением для разделения последовательностей без изменения конфигурации является использование префиксов. Рассмотрим этот механизм подробнее.
Платформа 1С отслеживает максимальный номер строго в разрезе префиксов. Если задать организации стандартный префикс (например, 00 или двухбуквенный код организации), то все стандартные документы будут получать номера вида 00-00000011. Документы с произвольными номерами без префикса не будут смешиваться с основной последовательностью организации.
Разберем по шагам, как настроить префикс в типовой конфигурации:
ОС или 00).Если требуется жестко управлять алгоритмом назначения номеров на уровне кода или запретить определенным документам влиять на общую очередь, обратимся к обработчикам событий объекта.
В модуле документа или в модуле подписки на событие доступна стандартная процедура ПриУстановкеНовогоНомера. Посмотрим на пример переопределения префикса или логики генерации номера:
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
// Задаем явный префикс для разделения потоков нумерации
Префикс = "00";
// Если требуется полностью сформировать номер собственным алгоритмом:
// СтандартнаяОбработка = Ложь;
// ЭтотОбъект.Номер = СформироватьУникальныйНомер();
КонецПроцедуры
Если мы используем типовую конфигурацию на базе Библиотеки стандартных подсистем (БСП), рекомендуется не изменять модуль самого объекта, а использовать подписку на событие ПриУстановкеНовогоНомераДокумента. Это позволит сохранить конфигурацию на полной поддержке.
Если ошибочный документ был введен случайно, проанализируем порядок действий для возврата к корректной цепочке номеров:
Х75282016) и изменим его номер вручную на правильный по порядку (например, 00000000011).Для принудительного обновления счетчиков нумерации выполним следующий код во внешней обработке или консоли кода:
// Сброс кэша автонумерации для конкретного вида документа
ОбновитьНумерациюОбъектов(Метаданные.Документы.РеализацияТоваровУслуг);
Чтобы избежать сбоев сквозной нумерации в будущем, придерживаемся следующих правил архитектуры учета:
НомерВходящегоДокумента и ДатаВходящегоДокумента. Системный реквизит Номер должен оставаться для внутренней автонумерации программы.