При разработке в среде 1С:Предприятие на базе обычных форм разработчики часто сталкиваются с ситуацией, когда поведение автонумерации в разных конфигурациях или разных справочниках отличается. В одной конфигурации при нажатии кнопки создания нового элемента поле Код сразу заполняется очередным значением, а в другой форме того же объекта поле остается пустым вплоть до момента записи. Разберем детально, с чем связано такое поведение и какими механизмами платформы оно регулируется.
Основная причина такого поведения кроется в настройках самой формы объекта. Помимо свойств метаданных самого справочника (где задаются тип кода, длина и автонумерация), у обычной формы элемента справочника есть собственное свойство Автонумерация. Проанализируем доступные значения этого свойства:
Если вы хотите, чтобы код подставлялся сразу при создании карточки, откройте свойства формы элемента и переключите Автонумерация в значение Авто.
Если свойство Автонумерация на форме включено, но код всё равно не отображается при создании нового элемента, выясним причину через проверку дополнительных настроек конфигурации:
В пределах подчинения или В пределах владельца, платформа не может вычислить следующий номер до тех пор, пока пользователь не укажет родителя (папку) или владельца элемента.ПриУстановкеНовогоКода, где разработчик мог программно очистить код или отключить стандартную обработку.Авто.Рассмотрим, почему генерация номера в момент открытия формы не всегда является оптимальным решением и почему от нее отказались в управляемом интерфейсе:
Автонумерация полностью отсутствует. Вся генерация кодов и номеров документов намеренно перенесена исключительно на этап физической записи объекта в транзакции.Если вам требуется принудительно получить и отобразить код до момента записи элемента, можно воспользоваться стандартными программными средствами платформы.
Для явного присвоения кода объекту используется метод УстановитьНовыйКод(). Посмотрим на пример вызова:
// Принудительное назначение нового кода с учетом префикса
ЭтотОбъект.УстановитьНовыйКод("ПРФ_");
Для сложной составной нумерации (например, при формировании кода с учетом реквизитов организации или подразделения) используется обработчик события ПриУстановкеНовогоКода в модуле объекта:
Процедура ПриУстановкеНовогоКода(СтандартнаяОбработка, Префикс)
// Переопределяем префикс нумерации
Префикс = "ОСН_";
КонецПроцедуры
Таким образом, различие в поведении при открытии карточки элемента чаще всего обусловлено свойством Автонумерация в палитре свойств конкретной формы. Однако при его включении всегда следует учитывать риски возникновения пропусков в нумерации.