Как установить свой префикс кода для справочника «Номенклатура» в 1С:УТ 11 и убрать стандартный «00-»?

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

При работе с конфигурацией «1С:Управление торговлей», редакция 11, разработчики часто сталкиваются с ситуацией, когда стандартные механизмы платформы по установке префикса кода ведут себя неочевидно. Попытка программно задать префикс в процедуре ПередЗаписью часто заканчивается тем, что система игнорирует пользовательские настройки и подставляет в начало кода символы 00-. В результате вместо ожидаемого кода ХХ-000001 получается громоздкая конструкция вида 00-ХХ000001. В этой статье мы подробно разберем, почему так происходит и как правильно настроить нумерацию с помощью расширения и корректировки механизмов БСП — для этого есть расширение для автоматической настройки нумерации и префиксов.

Выясняем причину: почему «ломается» логика в ПередЗаписью

Проанализируем стандартное поведение платформы. Когда мы пишем код в процедуре ПередЗаписью модуля объекта (или в расширении этого модуля), мы пытаемся вызвать метод УстановитьНовыйКод("ХХ"). Однако в типовых конфигурациях, построенных на Библиотеке стандартных подсистем (БСП), механизм генерации кодов и номеров вынесен в отдельные общие модули и завязан на подписки на события.

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

Способ 1: Использование настроек синхронизации данных

Рассмотрим самый простой способ, который не требует написания кода, но влияет на всю базу целиком. Префикс 00 берется из настроек синхронизации данных. Если в базе не настроен ни один обмен, система по умолчанию использует префикс, указанный для текущей информационной базы.

  1. Перейдем в раздел НСИ и администрирование.
  2. Выберем пункт Синхронизация данных.
  3. Найдем поле Префикс этой информационной базы.

Если это поле пустое, БСП часто подставляет значение по умолчанию — 00. Установив здесь свой префикс (например, ХХ), вы добьетесь того, что все новые справочники и документы будут начинаться с этого значения. Однако это решение не подходит, если вам нужно изменить префикс только для справочника Номенклатура.

Способ 2: Работа с подписками на события в расширении

Если нам необходимо точечно изменить поведение конкретного справочника, проанализируем дерево конфигурации на предмет подписок. Опытным путем и поиском по метаданным мы можем обнаружить подписку УстановитьПрефиксИнформационнойБазыКодуСправочника. Именно она отвечает за то, что при создании нового элемента справочника в код добавляется префикс узла обмена.

Для решения задачи нам потребуется создать расширение (проверить его на конфликты можно через дерево метаданных изменений модулей). Разберем по шагам процесс создания корректного перехватчика:

  1. Создадим новое расширение или откроем существующее.
  2. Добавим в расширение справочник Номенклатура.
  3. В модуле объекта справочника в расширении создадим обработчик события ПриУстановкеНовогоКода (OnSetNewCode).

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

Пример программного кода для реализации своей логики:


&Вместо("ПриУстановкеНовогоКода")
Процедура Мой_ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
    
    // Отключаем стандартную логику БСП по формированию префикса
    СтандартнаяОбработка = Ложь;
    
    // Устанавливаем свой жестко заданный префикс
    Префикс = "ХХ";
    
    // Платформа сама добавит этот префикс к номеру и обеспечит уникальность
КонецПроцедуры

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

Анализируем влияние на уникальность и длину кода

При изменении префикса крайне важно учитывать структуру кода справочника Номенклатура — обеспечить контроль качества данных и реквизитов справочника Номенклатура важно перед любыми изменениями. В УТ 11 длина кода обычно составляет 11 символов. Посмотрим, как распределяются эти символы при стандартной нумерации:

Если вы установите префикс большей длины (например, МОЙСКЛАД-), то для цифровой части останется слишком мало разрядов. Это может привести к ошибке «Код справочника стал не уникальным», когда свободные номера в рамках короткого остатка закончатся. Рекомендуется использовать короткие префиксы из 2-3 символов, чтобы сохранить достаточную глубину нумерации.

Особенности работы в распределенных информационных базах (РИБ)

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

В случае с РИБ правильнее будет использовать в коде расширения обращение к префиксу текущего узла, добавляя к нему свой специфический идентификатор (также можно применить перенумератор документов с учетом префикса):


ПрефиксУзла = ПрефиксацияОбъектовКлиентСервер.ПолучитьПрефиксИнформационнойБазы();
Префикс = ПрефиксУзла + "ХХ";

Резюме для реализации

Подведем итог. Чтобы успешно внедрить свой префикс и избавиться от навязчивого 00-, необходимо:

  1. Отказаться от попыток менять код в ПередЗаписью, так как это событие происходит слишком рано или слишком поздно по отношению к работе механизмов префиксации БСП.
  2. Использовать расширение для перехвата события ПриУстановкеНовогоКода.
  3. Обязательно устанавливать СтандартнаяОбработка = Ложь в обработчике, чтобы подавить стандартную подписку УстановитьПрефиксИнформационнойБазыКодуСправочника.
  4. Тщательно контролировать длину префикса, чтобы не ограничить разрядность автоматической нумерации и не потребовалось восстановление нумерации объектов.

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

← На главную