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