Продублирую сюда пост с нашего профессионального форума. Некоторые моменты, наверно, не очень понятны будут со стороны. В целом же речь о том, что во фреймворке Купца появился новый важный механизм скрытия в окнах лишних контролов, дополняющий параметрическую настройку программы. Сделано с целью упрощения работы с программой некоторой категории пользователей.
Интересная идея пришла на днях. Речь про скрытие лишней информации в окнах. Когда появляется потенциальный клиент, ему для ознакомления обычно делается настройка программы, приближенная к его потребностям, чтобы у него не возникало когнитивного диссонанса от избыточного функционала. Делается это достаточно быстро с помощью параметрических настроек. Но далеко не все, что хотелось бы скрыть, можно решить таким путем. Когда-то ребята, популяризировавшие Аксапту, писали о возможности скрывать контролы в окне как о продвинутом механизме, упрощающем внедрение. Тогда я подумал, технология у них другая, если буду давать просто скрывать, то возникнет конфликт с параметрическими настройками и системой распределения прав доступа. И только на днях сложилось. Кажется все просто, когда знаешь как, почему раньше в голову не пришло. Смысл в том, чтобы не просто дать возможность скрывать любые контролы, а создать окно возможностей. Это известная технология, которую можно применить и в данном случае. Фактически делаем контрол шаблон, в котором задаем список контролов окна, которые можно скрыть, и действия, которые для этого надо применить. Соблюдая некоторую аккуратность, избегаем конфликтов с параметрическими настройками программы и системой распределения прав доступа. Получаем дополнительный механизм, который по мере потребностей можно расширять в разных окнах приложения. Для реализации потребовалось в свой класс управления окном добавить структуру и несколько свойств и методов. Пара процедур для интеграции с базой данных и, собственно, контрол шаблон.
<Первый скриншот.>
Контрол шаблон это кнопка с привязанной к ней комбинацией клавиш для запуска. В Action шаблона задается список контролов, которые можем скрывать через настройку в программе.
Три варианта скрытия Окно, Меню, Запрос. Вариант Окно просто приводит к скрытию указанного контрола. Есть некоторые нюансы. В частности, если хотим скрывать entry поле, то достаточно указать только его, промпт программа сможет определить и скрыть автоматически. Вариант Меню позволяет скрывать пункты в popup меню, которые могут быть привязаны к кнопке типа Печать, Обработка или к контекстному меню списка. У меня обычно пункты меню ссылаются на захайденные кнопки, чтобы отключить, используется соглашение о переименовании кнопок в "...". Такое переименование и будет происходить, если указать вариант Меню. Вариант Запрос напрямую ничего не делает с контролами, но позволяет вызывать метод проверки установки в разных местах кода и скрывать сразу блоки контролов. Например, для ввода ссылки на какой-то элемент справочника у меня обычно используется специальный контрол шаблон, состоящий из 5 обычных контролов. В Action у него есть строка с условием скрытия, сразу позволяющая скрыть все входящие в его состав обычные контролы. Правило такое, что скрывать можно такие контролы только тогда, когда не выбрана ссылка. Таким образом, мы можем вывести в настройку основной его контрол и вариант Запрос, а в Action контрол шаблона выбора ссылки прописать проверки наличия ссылки и включения настройки.
В строке Обработка можно прописать какой-то код, который выполнится сразу после того, как скроем нужные контролы. Например, применяем настройку для параметров отчета и хотим скрыть какие-то из них. Чтобы они не влияли на построение отчетов, очищаем их значения, устраняя потенциальные вопросы по итогам отчета.
<Второй скриншот>
Академический пример скрытия реквизита "Формат обмена", который является entry полем. Отмечаем его в настройке и жмем Записать, сохраняя настройку в базе данных. Настройка сохраняется отдельно для каждой роли. Результат на скриншоте ниже. Контрол не будет показываться до тех пор, пока не изменится настройка.
<Третий скриншот>
В качестве дополнительного сервиса в окне настройки кнопка временного отключения применения настройки, по типу, как в дизайнере окон в среде с11 можно включать и отключать показ захайденных контролов. Отметить и снять отметку со всех, выгрузить настройку в файл и загрузить настройку из файла. В списке ролей пользователей можно выгрузить и загрузить настройки всех окон для роли.
При подобном подходе образуются пустые места в окне. Я думаю, это разумный компромисс. Окна одинаковые, пустое место обозначает наличие дополнительного функционала, настраивается быстро. Если подвешивать оконный дизайнер с возможностью изменения позиции контролов, то это может привести к конфликту с параметрическими настройками, сложнее настраивать и поддерживать. То есть уже несколько другая архитектура.