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