Как добавить недостающие реквизиты (например, поле Ссылка) в список Изменить форму в 1С

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

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

Разберем механизм работы окна Изменить форму

Для начала проанализируем, как платформа формирует список полей в окне настройки. Состав этого списка не является случайным; он напрямую зависит от того, какие данные «проброшены» из базы данных на уровень управляемой формы. Если платформа считает, что какое-то поле не используется в текущем контексте, она оптимизирует запрос и просто не подгружает эти данные, из-за чего они исчезают из списка настройки.

Чаще всего проблема встречается в динамических списках (справочники, документы, журналы). Выясним основные причины «исчезновения» полей и способы их решения.

Способ 1. Использование свойства Использовать всегда

Это наиболее распространенная причина. Если поле добавлено в запрос динамического списка, но не выведено в качестве элемента формы (колонки), система 1С в целях экономии ресурсов может исключить его из выборки. Чтобы этого избежать, выполним следующие шаги:

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

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

Способ 2. Настройка основной таблицы динамического списка

Проанализируем ситуацию с полем Ссылка. В динамических списках оно ведет себя по-особенному. Доступность ссылки и возможность «развернуть» ее (нажать на плюс и увидеть реквизиты объекта, такие как дата, номер, ответственный) зависит от свойства «Основная таблица».

Если в настройках динамического списка указана основная таблица (например, Справочник.Номенклатура), система автоматически понимает структуру объекта. Если же список построен на произвольном запросе и основная таблица не указана, поле Ссылка может отображаться просто как идентификатор, без возможности вытащить его дочерние реквизиты.

Посмотрим на пример текста запроса, который гарантирует наличие ссылки:


ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Ссылка,
    СправочникНоменклатура.Код КАК Код,
    СправочникНоменклатура.Наименование КАК Наименование
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура

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

Способ 3. Добавление невидимого элемента на форму

Если по каким-то причинам настройка Использовать всегда не помогает, воспользуемся «хитрым» приемом, который упоминали участники обсуждения. Мы можем принудительно добавить поле в состав элементов формы, но сделать его невидимым для глаз пользователя по умолчанию.

Выполним следующие действия в конфигураторе:

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

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

Способ 4. Проверка прав доступа и RLS

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

Способ 5. Влияние функциональных опций

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

Программное управление составом формы

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


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

КонецПроцедуры

Также обратим внимание на коллекцию ИзменяемыеНастройкамиКомпоновкиДанныхПоля. Если вы работаете с динамическим списком через программную схему компоновки, убедитесь, что нужное поле включено в выбранные поля компоновщика настроек.

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

← На главную