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