Как добавить реквизит из расширения на форму документа и почему он может не отображаться?

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

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

Проблема первая: Реквизит не виден в конструкторе формы расширения

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

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

  1. Откроем форму документа в расширении (редактор формы).
  2. Перейдем на закладку «Реквизиты» (правая верхняя часть редактора).
  3. Найдем основной реквизит формы — обычно это Объект (имеет тип ДокументОбъект.ИмяВашегоДокумента).
  4. Нажмем на него правой кнопкой мыши и выберем пункт «Добавить в расширение».

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

Проблема вторая: Реквизит добавлен на форму, но не виден в пользовательском режиме

Представим, что в конфигураторе всё выглядит идеально: поле размещено на форме, привязано к данным, но при запуске базы пользователь его не видит. Разберем основные причины и способы решения этой проблемы.

1. Сброс пользовательских настроек интерфейса

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

В пользовательском режиме (в самом документе) нажмем «Ещё» — «Установить стандартные настройки». Если это не помогло, проделаем более глубокую очистку:

  1. Перейдем в раздел «Администрирование» — «Настройки пользователей и прав».
  2. Выберем «Персональные настройки пользователей» — «Настройки форм».
  3. Найдем в списке нужный документ и удалим сохраненную настройку.

2. Настройка прав доступа в расширении

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

  1. В расширении создадим новую Роль.
  2. В настройках роли найдем наш документ и конкретный добавленный реквизит.
  3. Установим флажки «Просмотр» и «Редактирование».
  4. Добавим эту роль пользователю (через профиль групп доступа).

Совет: В свойствах самого расширения проверьте флаг Использовать основные роли для всех пользователей. Если он включен, новые права могут подхватиться автоматически, но явное указание прав в роли расширения — более надежный путь.

3. Назначение формы основной в расширении

Если в расширении вы создали новую форму или значительно изменили существующую, убедитесь, что система открывает именно её. Рассмотрим свойства документа в расширении:

В окне свойств документа (в расширении) найдите раздел «Формы». Проверьте, что в поле Основная форма объекта указана именно та форма, которую вы редактируете. Если там пусто, система может обращаться к форме из основной конфигурации, игнорируя ваши изменения.

4. Влияние функциональных опций и программного кода

В типовых конфигурациях, таких как УТ 11, КА или ERP, видимость полей часто управляется программно. Проанализируем ситуацию: если ваш реквизит логически связан с какой-то подсистемой, проверьте, не скрывается ли он кодом в процедуре ПриСозданииНаСервере.

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


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Гарантируем видимость элемента формы, даже если настройки его скрыли
    ЭлементПоле = Элементы.Найти("Расш1_МойНовыйРеквизит");
    Если ЭлементПоле <> Неопределено Тогда
        ЭлементПоле.Видимость = Истина;
        ЭлементПоле.Доступность = Истина;
    КонецЕсли;
КонецПроцедуры

5. Режим совместимости и кэширование

Иногда изменения «застревают» в серверном кэше. Если вы уверены, что всё сделали правильно, но реквизит не появляется, попробуйте следующие действия:

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

← На главную