При разработке новых объектов в расширениях для современных конфигураций, таких как 1С:Комплексная автоматизация (КА 2), 1С:ERP или 1С:Управление торговлей (УТ 11), программисты часто сталкиваются с тем, что стандартная нумерация нового документа выглядит как простой набор цифр (например, 00000000001). Однако бизнес-логика требует стандартного формата с префиксами организации и информационной базы, например, КА00-000001. Разберем подробно, как реализовать правильную нумерацию, используя механизмы платформы и Библиотеки стандартных подсистем (БСП).
Прежде чем приступать к кодингу, проанализируем, из чего состоит стандартный номер в 1С:КА. Обычно это строка длиной 11 символов, разделенная на несколько сегментов:
-.Для того чтобы ваш документ автоматически подхватывал эти настройки, недостаточно просто создать объект. Нужно "подружить" его с подсистемой Префиксация объектов.
Это наиболее правильный метод, так как он не требует написания сложного кода внутри самого документа и использует типовые механизмы конфигурации. В БСП за установку номера отвечают специальные подписки на события. Выясним, как добавить в них наш новый документ.
Рассмотрим по шагам добавление документа в подписки в контексте расширения:
УстановитьПрефиксИнформационнойБазыИОрганизации — вызывается перед генерацией номера.ПриУстановкеНовогоНомераОбъекта — отвечает за финальное формирование строки номера.ПрефиксацияОбъектовСобытия.Проанализируем пример того, как это работает "под капотом": когда платформа вызывает событие ПриУстановкеНовогоНомера, срабатывает обработчик БСП, который считывает настройки префиксов из констант и реквизитов организации, формирует строку и передает её обратно в документ.
Если по какой-то причине вы не хотите использовать общие подписки или вам нужен специфический "жесткий" префикс (например, только буквы КА без учета префикса организации), можно воспользоваться событием ПриУстановкеНовогоНомера непосредственно в модуле объекта (или в модуле расширения для этого объекта).
Посмотрим на пример кода, который позволяет установить префикс вручную:
Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
// Если нужно добавить специфический префикс документа
Префикс = "КА";
// Можно также вызвать типовой механизм программно, если нужно
// ПрефиксацияОбъектовКлиентСервер.УстановитьПрефикс(ЭтотОбъект, Префикс);
КонецПроцедуры
Важно помнить: если вы используете расширение, убедитесь, что процедура в расширении аннотирована как &После или &Вместо типовой (хотя у нового документа типовой может и не быть). Это позволит системе перехватить момент генерации номера.
Выясним причины, по которым нумерация может работать некорректно даже после настройки подписок. Проверьте следующие свойства вашего документа в дереве метаданных:
Строка. Числовая нумерация не поддерживает префиксы.КА00- просто не поместится, и система выдаст ошибку или обрежет номер.Автоматически.Для более гибкой настройки в БСП предусмотрен общий модуль ПрефиксацияОбъектовПереопределяемый. Разберем ситуацию: вам нужно, чтобы префикс зависел от какого-то реквизита документа, не являющегося организацией. В этом случае следует найти процедуру ПриУстановкеПрефикса в указанном модуле (через расширение) и добавить свою логику:
Процедура ПриУстановкеПрефикса(Объект, Префикс) Экспорт
Если ТипЗнч(Объект) = Тип("ДокументОбъект.ВашНовыйДокумент") Тогда
// Своя логика формирования префикса
Префикс = Префикс + "ОТД-";
КонецЕсли;
КонецПроцедуры
Такой подход считается максимально профессиональным, так как он сохраняет целостность архитектуры БСП и позволяет легко обновлять конфигурацию в будущем. Для быстрой навигации и работы с другими процедурами библиотеки пригодится справочник методов БСП с примерами использования.
Иногда после ручных правок номеров пользователями автоматическая нумерация "сбивается". Например, если кто-то вручную ввел номер 99999, система будет пытаться создать следующий номер как 100000, что может не соответствовать длине или маске. Для исправления таких ситуаций в 1С:Комплексная автоматизация рекомендуется:
Следуя этим правилам, вы обеспечите стабильную и предсказуемую работу системы нумерации для любых новых объектов в ваших расширениях.