Как вывести и обеспечить сохранение реквизита, добавленного в расширении на форму группы справочника?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Работа с расширениями в среде «1С:Предприятие 8.3» — это стандарт де-факто для современной разработки. Однако при добавлении новых данных в существующие объекты конфигурации разработчики часто сталкиваются с неочевидным поведением платформы. Типичная ситуация: вы добавили реквизит, вывели его на форму, пользователь вводит данные, нажимает «Записать», но после закрытия и открытия формы поле оказывается пустым. Особенно часто это проявляется при работе с иерархическими справочниками. В этой статье мы подробно разберем, почему это происходит и как правильно настроить свойства метаданных в расширении.

Анализ проблемы: почему данные не сохраняются?

Рассмотрим ситуацию, с которой столкнулся автор темы. В расширение был добавлен новый реквизит для иерархического справочника. Поскольку у справочника изначально отсутствовала типовая форма группы, разработчик создал её самостоятельно внутри расширения и разместил там новый реквизит. На форме элемента (в карточке товара или контрагента) всё работает корректно, а в форме группы (папки) данные «исчезают».

Проанализируем причину. В системе 1С справочники могут иметь два типа записей в одной таблице базы данных: элементы и группы. Платформа должна точно знать, к какому типу записей относится конкретный реквизит. Если в свойствах реквизита указано, что он предназначен только для элементов, то при попытке записи группы система просто игнорирует это поле, так как с точки зрения архитектуры базы данных у «папки» этого свойства быть не должно.

Шаг 1. Проверка свойства «Использование» в метаданных

Это самый важный этап, который решает проблему в 99% случаев. Разберем по шагам, как проверить и изменить это свойство:

  1. Откроем ваше расширение в конфигураторе.
  2. Найдем нужный справочник и перейдем в список его реквизитов.
  3. Выберем добавленный вами реквизит и откроем палитру свойств (клавиша Alt+Enter).
  4. Найдем раздел «Основные» и в нем свойство «Использование» (Usage).
  5. Посмотрим на установленное значение. Если там указано Для элемента, то это и есть причина проблемы.
  6. Изменим значение на Для групп и элементов.

После этого изменения платформа перестроит структуру таблиц (при обновлении конфигурации базы данных), разрешив хранение данных в этом поле для записей, у которых установлен признак ЭтоГруппа = Истина.

Шаг 2. Настройка формы группы в расширении

Поскольку в рассматриваемом случае форма группы была создана «с нуля» в расширении, нам необходимо убедиться, что система понимает, какую именно форму нужно открывать. Проанализируем настройки самого справочника в расширении:

Убедимся, что созданная форма назначена основной формой группы. Если этого не сделать, 1С может попытаться сгенерировать форму автоматически или использовать стандартные механизмы, что иногда приводит к конфликтам отображения реквизитов, добавленных в расширение. В окне редактирования объекта «Справочник» на закладке «Формы» проверьте поле «Основная форма группы» — там должна быть указана ваша форма из расширения.

Технические нюансы хранения данных в расширениях

Разберем подробнее, как физически хранятся данные реквизитов, добавленных через расширения. Начиная с версии платформы 8.3.10, реквизиты расширений создают реальные колонки в SQL-таблицах основной базы данных. Это обеспечивает высокую производительность, сопоставимую с основной конфигурацией.

Важно помнить: если вы решите удалить расширение из информационной базы, все данные, накопленные в этих дополнительных реквизитах, будут удалены безвозвратно. Система удалит соответствующие колонки из таблиц БД. Поэтому перед любыми критическими изменениями в структуре расширений всегда делайте резервную копию базы данных.

Особенности программной работы с реквизитами группы

Иногда даже при правильных настройках метаданных данные могут не сохраняться из-за программных перехватов. Выясним, нет ли в модуле объекта или модуле формы процедур, которые очищают данные. Проверим стандартный программный код записи:


&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    // Убедимся, что данные объекта содержат наш реквизит
    Сообщить("Значение реквизита перед записью: " + ТекущийОбъект.ИмяВашегоРеквизита);
КонецПроцедуры

Если в этом обработчике значение пустое, значит, проблема в связи элемента формы с данными. Проверьте свойство «ПутьКДанным» у элемента управления на форме. Он должен выглядеть как Объект.ИмяВашегоРеквизита.

Рекомендации по отладке подобных случаев

Если вы столкнулись с тем, что данные не сохраняются, выполните следующие действия:

Резюме

Проблема «несохранения» данных в группах справочника при использовании расширений чаще всего кроется в базовых настройках метаданных. Платформа 1С требует явного указания области применения реквизита. Установив свойство «Использование» в значение Для групп и элементов, вы связываете поле ввода на форме с соответствующей колонкой в таблице базы данных для всех типов записей справочника. Это стандартный механизм, который гарантирует целостность данных в иерархических структурах.

← На главную