В процессе доработки конфигурации «Розница 2.3» у разработчиков часто возникает задача автоматизировать изменение префикса номера документа при смене магазина. На первый взгляд кажется, что создание Подписки на событие ПередЗаписью решит вопрос, однако на практике выясняется, что система игнорирует внесенные изменения. Давайте разберем, почему это происходит и как правильно подойти к этой задаче.
Основная причина кроется в архитектуре Библиотеки стандартных подсистем (БСП). Механизм префиксации в типовых решениях жестко привязан к моменту создания нового объекта. Когда вы пытаетесь изменить номер в ПередЗаписью для уже записанного документа, вы сталкиваетесь с тем, что:
УстановитьНовыйНомер() в типовых обработчиках уже отработал.Рассмотрим, какие шаги помогут нам выйти из этой ситуации, не нарушая логику работы типовой конфигурации.
Если задача требует программного изменения, помните, что простое присвоение значения полю Номер недостаточно. Вам необходимо корректно вызвать метод УстановитьНовыйНомер(), передав в него нужный префикс. Однако выполнение этого действия в ПередЗаписью часто оказывается неэффективным из-за того, что данные формы или объекта уже «зафиксированы» механизмом платформы.
Рекомендуем перенести логику перенумерации в модуль формы или использовать механизм Обработок изменения нумерации. Рассмотрим пример логики, которую можно применить для перенумерации:
// Пример логики для принудительной установки нового номера
Если МагазинИзменился Тогда
Источник.УстановитьНовыйНомер(ПрефиксМагазина + ПрефиксОрганизации);
Источник.Записать();
КонецЕсли;
Вместо того чтобы изобретать велосипед и внедрять сложные подписки на события, которые могут привести к ошибкам при обмене данными (например, в РИБ), воспользуйтесь стандартными инструментами. В сообществе разработчиков 1С считается «хорошим тоном» применять специализированные обработки для изменения номеров. Это позволяет избежать «грязной» записи в базу данных и контролировать уникальность номеров в разрезе периодов.
Прежде чем внедрять автоматическую смену префикса, задайте себе вопрос: насколько это оправдано с точки зрения бизнес-логики? Изменение префикса у уже существующего документа нарушает его историческую идентичность. Если магазин сменился, часто правильнее будет:
ПередЗаписью (метод Отказ = Истина).При работе с префиксацией всегда помните о следующих нюансах:
Подводя итог, можно сказать, что решение задачи лежит не в области «как заставить номер измениться любой ценой», а в области анализа бизнес-процесса. Если вам нужно массово менять префиксы, используйте специализированные внешние обработки, а если нужно контролировать поведение пользователей — настройте ограничения прав или проверки при записи.