Каталог решений - Программная настройка рабочего стола или Как на лету добавить скрыть, подменить формы.

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

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

В наличии

Долгожданная возможность программно управлять составом форм рабочего стола!
Публикация написана новичком для новичков, гуру 1С просьба  не судить строго.

Категория:

Описание

Введение

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

  Как правило, это были варианты с программным добавлением одной необходимой формы на рабочий стол подобным кодом:

Окна = ПолучитьОкна()[0];                      ;
ОткрытьФорму(«ОбщаяФорма.ФормаСпискаПринятые», , , , ПолучитьОкна()[0]);

Либо вариация на тему добавления единой формы на рабочий стол, для которой уже создавались вкладки, управляемые вручную.  Способ имеет недостаток в именовании элементов формы и скорости работы. Ознакомиться с решением можно вот здесь //sale.itcity.ru/public/82615/

   И тогда, Аз грешен, поправ древние заповеди 1С програмёров, открыл Запретную книгу, имя которой не произносят вслух. Однако Вам я всё же открою эту страшную тайну.  Руководство разработчика ч.1 её имя.  Берегитесь этой книги!  Ладно, посмеялись и будет. К делу.

Описание

  Задача решается при помощи объектов конфигурации Общая форма и Функциональные опции. Про них как раз подробно написано в Запретной книге.  Вкратце:  объекты класса Функциональная опция управляют ограничением доступа к данным. На входе эти объекты получают булево значение из константы, справочника или регистра сведений (можно многомерного), на выходе — мягко вырезают из интерфейса  и запросов всё, что пользователю видеть и трогать нельзя.  

  Устанавливать функциональные опции для отдельных форм, например документа, невозможно. Если сделать это для всего документа или справочника, полагаю, можно поиметь множественные траблы в алгоритмах с обращением к данным. Вот тут-то как раз и пригодятся общие формы. Для них и функциональные опции устанавливаются прекрасно и проблемы с доступом к документам, справочникам и т.п. будут исключены.

  Механизм следующий: на рабочую область рабочего стола помещаются все формы, которые когда-либо потребуется отображать. Формы — общие. Для каждой формы / группы форм создается и настраивается функциональная опция. На рабочем же столе требуется разместить управляющий элемент. Этот элемент обращается к функциональной опции (либо её хранилищу), и, выставляя значение булевой переменной запрещает к отображению требуемые формы. После чего интерфейс обновляется соответствующей командой.

 

Порядок действий при управлении ФО при помощи констант:

  1. Нам нужны аналоги требуемых для отображения форм документов, справочников и т.п.  Создаем их простым перетаскиванием в окошке Конфигурация. Тащим в список Общие формы. 
  2. Создаем константы, посредством которых будем управлять функциональными опциями. Тип — Булево.
  3. Создаем функциональные опции по количеству необходимых ролей, подсистем, чемоданов с деньгами (ненужное зачеркнуть).  Для каждой опции указываем свою константу в поле Хранение , а на закладке Состав — подлежащие для скрытия общие формы.
  4. Создаем обработку, с формы которой мы будем управлять функциональными опциями. На обработку добавляем управляющий элемент, у меня это — простая кнопка. Кто захочет — может сделать неотличимую копию стандартных закладок подсистем.

Скриншотов, надеюсь, не надо?

 

Дело осталось за малым. Пишем вот такой незатейливый код:

  В обработке…

 //Обработчик нажатия кнопки Переключить.
&НаКлиенте
Процедура Переключить(Команда)

УправлениеИнтерфейсомСервер.СменитьРоль();
ОбновитьИнтерфейс();

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

 

  И в общем модуле (его тоже нужно создать ; ) ). Модуль серверный, с установленным свойством Вызов сервера.

 //Сменим значение функциональной опции на противоположное
Процедура СменитьРоль() Экспорт

//Получаем значение функциональной опции. По сути — управляющей ею константы РольНачальника
ЗначениеФОпции = ПолучитьФункциональнуюОпцию(«РабочийСтолНачальника»);

Константы.РольНачальника.Установить(НЕ ЗначениеФОпции);


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

 

В обработчике события УстановкаПараметровСеанса, что в  Модуле сеанса, значения констант инициализируются по требуемому Вам алгоритму.


Порядок действий при управлении ФО при помощи регистра сведений:

  1. Нам нужны аналоги требуемых для отображения форм документов, справочников и т.п.  Создаем их простым перетаскиванием в окошке Конфигурация. Тащим в список Общие формы. 
  2. Создаем регистр сведений, посредством которого будем управлять функциональными опциями. Задаем для регистра измерение или набор измерений и ресурс с типом — Булево.
  3. Создаем требуемые функциональные опции.  Для каждой опции в поле Хранение указываем ресурс регистра сведений, а на закладке Состав — подлежащие для скрытия общие формы.
  4. По числу измерений регистра сведений создаем параметры функциональных опций (ветвь конфигурации Общие). В свойства объекта заполняем поле Использование — измерением ресурса сведений разумеется.  Один параметр — одно измерение — любое количество ФО управляется.
  5. Создаем обработку, с формы которой мы будем управлять функциональными опциями. На обработку добавляем управляющий элемент,  в моем случае — список элементов справочника. 

Код для управления всем этим хозяйством примерно следующий.  

Общий клиентский модуль:

Процедура УстановитьРольПользователя(РольПользователя) Экспорт

    //Получаем элемент справочника РолиПользователей, устанавливаем новое значение ФО
   
РольПользователя = УправлениеИнтерфейсомСервер.ПолучитьРоль(«Менеджер»);
   
УстановитьПараметрыФункциональныхОпцийИнтерфейса(Новый Структура(«РольПользователя», РольПользователя));

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

Общий серверный модуль (УправлениеИнтерфейсомСервер):  

Функция ПолучитьРоль(ИмяРоли) Экспорт

    Возврат Справочники.РолиПользователей.НайтиПоНаименованию(ИмяРоли);

КонецФункции

 

Прилагаемая демонстраионная база содержит механизмы управления формами рабочего стола как при помощи констант, так и посредством регистра сведений. Инициализация константы находится в модуле сеанса, инициализация через регистр сведений — в модуле управляемого приложения.

Вот, собственно, и всё.

 

Благодарю за внимание, надеюсь это сэкономит комунибудь время

has been added to your cart:
Оформление заказа