Как скрыть колонку в 1С по умолчанию, но оставить в меню "Изменить форму"?

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

При разработке и доработке конфигураций на базе 1С:Предприятие (например, 1С:ERP Управление предприятием) часто возникает стандартная задача: скрыть определенную колонку табличной части (например, колонку Артикул в документе Заказ клиента) по умолчанию, но при этом дать пользователю возможность самостоятельно включить ее отображение через системное меню Все действия — Изменить форму.

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

Почему не подходит свойство "Видимость = Ложь"?

Первое, что часто приходит в голову разработчику — прописать программное скрытие элемента в обработчике формы (например, ПриСозданииНаСервере). Давайте посмотрим на пример такого кода:

Элементы.ТоварыАртикул.Видимость = Ложь;

Если мы установим свойство Видимость в значение Ложь (будь то программно или жестко в свойствах элемента в конфигураторе), мы столкнемся с неожиданной для пользователей проблемой. При такой настройке платформа полностью исключает этот элемент интерфейса. Колонка пропадет навсегда, и если пользователь зайдет в меню Изменить форму, он просто не найдет реквизит Артикул в дереве элементов. Включить его самостоятельно он уже не сможет. Выясним причину: свойство Видимость на уровне элемента имеет высший приоритет над пользовательскими настройками.

Решение 1: Настройка свойства "Пользовательская видимость"

Разберем самый правильный и штатный способ, который задуман самой платформой 1С. У каждого элемента управляемой формы есть специальное свойство — Пользовательская видимость. Именно оно отвечает за то, будет ли элемент виден "из коробки", и сможет ли пользователь им управлять.

  1. Откроем нужную форму в конфигураторе. В современных реалиях, чтобы не снимать типовую конфигурацию (ту же 1С:ERP) с поддержки, форму следует добавить в Расширение конфигурации.
  2. Найдем в дереве элементов формы нужную колонку, например, ТоварыАртикул.
  3. Откроем палитру свойств этого элемента и найдем раздел Пользовательская видимость.
  4. В этом свойстве есть таблица. В самой верхней строке (общее значение, не привязанное к конкретным ролям) снимаем флажок.
  5. Сохраняем расширение или конфигурацию.

Что мы получаем в итоге? У пользователей по умолчанию эта колонка отображаться не будет, что разгрузит интерфейс. Однако платформа "знает", что элемент доступен. Если пользователю понадобится Артикул, он зайдет в Изменить форму, найдет этот элемент в дереве, поставит напротив него галочку, нажмет "ОК" — и колонка появится в его интерфейсе.

Решение 2: Использование условного оформления формы (Программный обходной путь)

Что делать, если по архитектурным причинам мы хотим скрыть колонку программно (в зависимости от каких-то хитрых условий при открытии), но при этом оставить её в меню "Изменить форму"? Классическая Видимость = Ложь нам не подходит, но нам на помощь придет механизм Условное оформление.

Проанализируем ситуацию: мы можем добавить элемент условного оформления для нашей формы, который применит оформление Видимость = Ложь для нужного поля. Если не задавать никаких дополнительных условий в отборе (или задать условие, которое всегда равно Истина), платформа скроет колонку. При этом из списка доступных полей в настройках формы этот реквизит не пропадет!

Рассмотрим программный пример реализации такого скрытия:


// Создаем новый элемент условного оформления
ЭлементОформления = УсловноеОформление.Элементы.Добавить();

// Устанавливаем оформление: Видимость в Ложь
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

// Указываем, к какому полю применяется оформление
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТоварыАртикул");

// Условие можно не задавать, тогда скрытие сработает безусловно,
// но элемент останется в настройках "Изменить форму"

Решение 3: Глобальные Функциональные опции в 1С:ERP

В случае с конфигурацией 1С:ERP Управление предприятием, если речь идет конкретно про "Артикул", стоит помнить про глобальный рубильник. Видимость этого поля жестко завязана на функциональные опции.

Если в базе не используется артикул в принципе, его можно отключить для всей системы сразу. Посмотрим, где это находится: переходим в раздел НСИ и администрирование — Номенклатура — Дополнительная информация и находим настройку Артикулы. Если отключить эту опцию, платформа автоматически скроет колонку артикула во всех документах и справочниках конфигурации. В этом случае пользователь не сможет включить её даже через меню "Изменить форму". Это поведение нужно учитывать при настройке базы.

Особенности кэширования и сброса пользовательских настроек

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

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

Чтобы новые параметры вступили в силу, необходимо сбросить кэш формы конкретного пользователя:

  1. Попросите пользователя открыть проблемный документ.
  2. Зайти в меню Еще (в шапке документа или формы) или в Все действия — Изменить форму.
  3. В окне изменения формы нажать кнопку Еще и выбрать пункт Установить стандартные настройки.

После этого платформа удалит персональные настройки и подтянет актуальное состояние Пользовательской видимости, которое мы задали в конфигураторе.

Решение 4: Управление видимостью через ХранилищеСистемныхНастроек

Если пользователей очень много и мы не можем просить каждого "Установить стандартные настройки", разработчик может использовать программный подход массового управления настройками.

Данные о том, что включено или выключено в формах у каждого юзера, хранятся в специальном объекте ХранилищеСистемныхНастроек по ключу /НастройкиФормы. Можно написать разовую обработку, которая переберет пользователей и программно очистит или изменит настройки для формы документа "Заказ клиента". Это позволяет гибко скрыть или показать колонки, не затрагивая вообще метаданные конфигурации и расширений.

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

← На главную