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