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