Как настроить автоматическую нумерацию с префиксами для нового документа в расширении 1С:Комплексная автоматизация?

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

При разработке новых объектов в расширениях для современных конфигураций, таких как 1С:Комплексная автоматизация (КА 2), 1С:ERP или 1С:Управление торговлей (УТ 11), программисты часто сталкиваются с тем, что стандартная нумерация нового документа выглядит как простой набор цифр (например, 00000000001). Однако бизнес-логика требует стандартного формата с префиксами организации и информационной базы, например, КА00-000001. Разберем подробно, как реализовать правильную нумерацию, используя механизмы платформы и Библиотеки стандартных подсистем (БСП).

Анализ структуры номера в типовых решениях

Прежде чем приступать к кодингу, проанализируем, из чего состоит стандартный номер в 1С:КА. Обычно это строка длиной 11 символов, разделенная на несколько сегментов:

  1. Префикс организации: 2 символа (задается в карточке организации).
  2. Префикс информационной базы: 2 символа (настраивается в параметрах синхронизации).
  3. Разделитель: дефис -.
  4. Цифровая часть: собственно порядковый номер с ведущими нулями.

Для того чтобы ваш документ автоматически подхватывал эти настройки, недостаточно просто создать объект. Нужно "подружить" его с подсистемой Префиксация объектов.

Способ 1: Использование подписок на события БСП (Рекомендуемый)

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

Рассмотрим по шагам добавление документа в подписки в контексте расширения:

  1. Откроем ваше расширение и найдем в ветке Общие -> Подписки на события нужные объекты.
  2. Нам понадобятся две основные подписки:
    • УстановитьПрефиксИнформационнойБазыИОрганизации — вызывается перед генерацией номера.
    • ПриУстановкеНовогоНомераОбъекта — отвечает за финальное формирование строки номера.
  3. В свойстве Источник этих подписок необходимо отметить ваш новый документ. Если вы создаете подписки непосредственно в расширении, выберите в качестве источника ваш добавленный документ, а в качестве обработчика укажите стандартные процедуры из общего модуля ПрефиксацияОбъектовСобытия.

Проанализируем пример того, как это работает "под капотом": когда платформа вызывает событие ПриУстановкеНовогоНомера, срабатывает обработчик БСП, который считывает настройки префиксов из констант и реквизитов организации, формирует строку и передает её обратно в документ.

Способ 2: Программная установка префикса в модуле объекта

Если по какой-то причине вы не хотите использовать общие подписки или вам нужен специфический "жесткий" префикс (например, только буквы КА без учета префикса организации), можно воспользоваться событием ПриУстановкеНовогоНомера непосредственно в модуле объекта (или в модуле расширения для этого объекта).

Посмотрим на пример кода, который позволяет установить префикс вручную:


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

Важно помнить: если вы используете расширение, убедитесь, что процедура в расширении аннотирована как &После или &Вместо типовой (хотя у нового документа типовой может и не быть). Это позволит системе перехватить момент генерации номера.

Важные настройки метаданных

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

Использование переопределяемого модуля БСП

Для более гибкой настройки в БСП предусмотрен общий модуль ПрефиксацияОбъектовПереопределяемый. Разберем ситуацию: вам нужно, чтобы префикс зависел от какого-то реквизита документа, не являющегося организацией. В этом случае следует найти процедуру ПриУстановкеПрефикса в указанном модуле (через расширение) и добавить свою логику:


Процедура ПриУстановкеПрефикса(Объект, Префикс) Экспорт
    
    Если ТипЗнч(Объект) = Тип("ДокументОбъект.ВашНовыйДокумент") Тогда
        // Своя логика формирования префикса
        Префикс = Префикс + "ОТД-";
    КонецЕсли;
    
КонецПроцедуры

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

Проблема "испорченной" нумерации

Иногда после ручных правок номеров пользователями автоматическая нумерация "сбивается". Например, если кто-то вручную ввел номер 99999, система будет пытаться создать следующий номер как 100000, что может не соответствовать длине или маске. Для исправления таких ситуаций в 1С:Комплексная автоматизация рекомендуется:

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

Следуя этим правилам, вы обеспечите стабильную и предсказуемую работу системы нумерации для любых новых объектов в ваших расширениях.

← На главную