1с как добавить на рабочий стол форму

Обновлено: 07.07.2024

Особенности реализации режима рабочего стола

В 1С : Предприятие 8 реализован специальный режим работы формы - режим рабочего стола. При работе в режиме рабочего стола форма не имеет заголовка, не отображается в панели окон и в меню " Окна " , а также не закрывается при использовании специально выделенных комбинаций клавиш ( например, Shift+Esc) . Если форма имеет состояние окна Обычное , то она занимает всю рабочую область главного окна приложения, при этом кнопки управления не появляются в главном меню, а если имеет состояние окна Свободное , то форма занимает все пространство рабочего стола и перекрывает собой системные панели Windows .

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

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

Минимизированное - форма открывается в минимизированном виде, Максимизированное - форма открывается в максимизированном виде. Если форма имеет состояние окна Обычное , то форма занимает всю рабочую область главного окна приложения, а если имеет состояние окна Свободное , то занимает все пространство рабочего стола Windows .

Для установки данного свойства из встроенного языка введено специальное перечисление ВариантСпособаОтображенияОкна .

Для управления возможностью изменения способа отображения окна существует свойство ИзменятьСпособОтображенияОкна , доступное из палитры свойство и встроенного языка. Данное свойство может принимать следующие значения :

  • Разрешить - форме разрешено изменять способ отображения. В заголовке формы имеются кнопки управления способом отображения,
  • Запретить - форме запрещено изменять способ отображения,
  • Авто - зависит от состояния окна формы. Если форма имеет состояние окна Обычное , то форме разрешено изменять способ отображения и в заголовке присутствуют кнопки управления способом отображения формы. Если форма имеет состояние окна Свободное , то форме запрещено изменять способ отображения.

Для установки данного свойства из встроенного языка введено специальное перечисление ИзменениеСпособаОтображенияОкна .

Свойства СпособОтображенияОкна и ИзменятьСпособОтображенияОкна можно использовать, например, для модальных форм. По умолчанию, модальные формы открываются в обычном виде и не имеют кнопок управления способом отображения. Если требуется создать модальную форму, которая может быть максимизированной, то необходимо установить свойство ИзменятьСпособОтображенияОкна равным Разрешить . В этом случае модальная форма будет иметь кнопки управления способом отображения окна.

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

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

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

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

Описание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Electronic Software Distribution



Согласен, примерно так и делаем:
- "рисуем" стол и добавляем его в обработки
- добавляем на начальную страницу
- лишнее отключаем


я и не подумал даже. наоборот благодарен за конструктив (8) Ну, подсистема - понятие широкое. В БСП они тоже не инкапсулированы.
ЗЫ. Могу ошибаться, но вроде в ПриНачалеРаботыСистемы() уже поздно назначать - настройки в этот момент уже считаны из хранилища. Не? У меня в модуле сеанса назначается. (11) herfis, Вы правы (а я попутал что-то),
"УстановкаПараметровСеанса" в модуле сеанса исполняется на сервере раньше всего остального,
и настройки гарантированно будут применены сразу.
Надо только помнить, что вызывается процедура далеко не однократно, и отгородить свой код
чем-то легким типа:

А "ПриНачалеРаботыСистемы" я чаще всего подключаю оборудование, внешние обработки и.
что там можно ещё подключить к клиенту? . или открываю какие-нибудь формы "вне стола".

(8)а как сделать на главной такие вкладки ? что бы переключаться между ними (17) На скрине закладки сделаны на форме самописной обработки добавленной в конфигурацию. Затем эта форма добавлена на главную обработкой "Настройка начальной страницы (Рабочего стола)". (6) . кстати, в моей обработке автоподбор форм далёк от идеала
. предлагаю обсудить Скачал. Очень полезная обработка. Автору большое спасибо! Пойду разбираться дальше. Все хорошо, вот еще бы наладить передачу параметров в формы отчетов, хучь бы период, и команду Сформировать, чтобы отчет на начальной странице появлялся уже сформированным.

(7) ryutao, к сожалению платформа не поддерживает передачу параметров формам рабочей области.
Но это не так страшно, если формы умеют "при открытии" или "ПриСозданииНаСервере"
восстанавливать ранее введённые (подставлять настройки по умолчанию).
Причем настройки форм "внутри стола" часто независимы от таких же "снаружи".
Автоматическое формирование при открытии поддерживается многими типовыми,
но тяжелые отчеты замедляют запуск и потому чаще бесят чем радуют.

Храни тебя Господь. Ты столько мне времени сэкономил! Подскажите, пожалуйста, а как сделать чтобы только моя форма открылась без панели меню слева? Настроить видимость/расположение панелей можно штатными средствами платформы Можно ли вытащить на страницу несколько разных вариантов одного отчета как отдельные ссылки ? (19) Вытащить 2 копии одной формы отчета можно в разные колонки, работать с разными вариантами тоже, но. после перезапуска во всех будет выбран вариант последней.
По другому никак, ведь форма отчета одна. Для такой задачи надо несколько форм. и снять ограничение на выбор только основных форм в моей обработке (19) Предложенный мной вариант с разными формами скорее всего не сработает. Потому как в подсистеме "Варианты отчетов" из БСП все настройки привязаны к КлючуОбъекта (к Отчету) Вопрос. Можно ли подключить внешний отчет из справочника дополнительных отчетов и обработок? Обработка не работает. После перезапуска, рабочий стол остается пустым.

(25) Только что проверил на последнем релизе УТ. Запускал в Тонком, Толстом и Web клиентах на файловой и клиент серверной базе.

В какой конфигурации запускаете Вы?

До версии 2.3.4.33 включительно все работало нормально и в тонком и мобильном клиенте

После обновления до Розница, редакция 2.3 (2.3.7.22)
В тонком клиенте все нормально работает до момента запуска мобильного клиента.
При запуске с мобильного клиента сбрасываются настройки начальной страницы до "дефолтных новостей". Причем после запуска мобильного клиента в тонком клиенте также настройки сброшены.

(26) А поддерживает ли Мобильный Клиент настройку начальной страницы?

Вы не могли бы проверить совместимость МК и типового механизма настройки начальной страницы?

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

(29) В мобильном клиенте не нашел типовой механизм настройки начальной страницы. Повторюсь, до версии 2.3.4.33 включительно все работало нормально в мобильном, поэтому ранее механизм настройки начальной страницы не проверял - все настраивалось в тонком клиенте. К Вашей обработке вопросов нет, видимо что то изменили в типовом.

Спасибо за информацию. Когда была написана обработка в платформе не было Мобильного клиента. Естественно и не было тестов в этом режиме.

К сожалению у меня сейчас нет под рукой какой-либо типовой с опубликованным Мобильным Клиентом. быстро доработать не обещаю.

Читайте также: