Flowcon: Рабочий стол - это инструмент для построения адаптивных интерфейсов. В любой системе на платформе 1С:Предприятие версии 8.2 и выше.
Внедрение в конфигурацию
Рабочий стол будет работать с любой конфигурацией на платформе 8.2 и старше. Все объекты, необходимые для работы «Рабочего стола», находятся в подсистемах «флРабочийСтол», «флОбщиеОбъекты» и «флОтчетыИПоказатели». Вот перечень объектов:
- Общий модуль «флОтчеты»;
- Роль «флПользователь»;
- Интерфейс «флОбщий»;
- Общая картинка «флФлакон»;
- Справочник «флКоманды»;
- Справочник «флРабочиеСтолы»;
- Справочник «флСхемыКомпоновки»;
- Справочник «флЭлементыРабочегоСтола»;
- Перечисление «флГруппировкаГруппыУФ»;
- Перечисление «флВидыЭлементовРабочегоСтола»;
- Перечисление «флТипыПолейНабораСсылок»;
- Обработка «флРабочийСтол»;
- Регистр сведений «флНазначениеРабочихСтолов».
Для того, чтобы пользователи могли увидеть свои рабочие столы, нужно дать им роль «флПользователь». Настройка элементов и рабочих столов осуществляется под полными правами.
Для того, чтобы рабочий стол открывался автоматически при старте системы, нужно выполнить определенные действия в конфигурации:
- Для управляемых приложений – поместить обработку «флРабочийСтол» на начальную страницу;
- Для обычных приложений – написать в модуле обычного приложения конфигурации, в процедуре «ПриНачалеРаботыСистемы», строку: ОткрытьФорму("Обработка.флРабочийСтол.Форма.Форма");
Для обычных приложений, также, создан непереключаемый интерфейс «флОбщий», который содержит всего одну кнопку – «Рабочий стол», с вызовом по сочетанию клавиш Ctrl+D (по аналогии с рабочим столом Windows, который вызывается комбинацией Wnd+D).
Обработка «Рабочий стол»
Собственно, это и есть рабочий стол. При запуске он определяет, какие рабочие столы назначены текущему пользователю, читает их настройку и элементы, рисует все это на экране. Выглядит примерно так:
На форме есть группа типа «страницы», между которыми можно переключаться. На каждой странице – свой набор элементов. Можно нажимать на все элементы, что при этом произойдет – зависит от фантазии программиста, который настраивал рабочий стол. Как правило, произойдет открытие чего-либо – формы списка, объекта, расшифровка отчета, выбор команды для исполнения.
В верхней левой части формы находится поле поиска. Это для тех случаев, когда на рабочем столе выведено много элементов, и пользователю трудно или лень искать то, что ему нужно. Тогда он может воспользоваться поиском.
У рабочего стола два варианта ручного обновления:
- Кнопка «Обновить» на форме – обновляет содержимое элементов, т.е. переформирует отчеты, наборы ссылок, диаграммы и т.д., не пересоздавая элементы;
- Кнопка «Еще - Перезагрузить» - полностью обновляет рабочий стол, по поведению аналогична открытию и закрытию формы. Создана для того, чтобы можно было обновить рабочий стол в управляемой форме – начальную страницу ведь нельзя закрыть.
Есть еще автоматическое обновление, о нем будет рассказано дальше.
Справочник «Рабочие столы»
Справочник «Рабочие столы» содержит, собственно, настройки рабочих столов, т.е. их компоновку из элементов и групп. Про элементы поговорим позже.
Выглядит настройка рабочего стола вот так:
Компоновка рабочего стола представляет собой дерево. Не верхнем уровне иерархии – страницы, которые нарисуются на рабочем столе пользователя. Для страницы можно указать название (в поле «Элемент настройки»), признак «Выводить» и группировку – горизонтальная или вертикальная. В зависимости от группировки элементы будут в столбик, или в строчку – ровно как в настройке управляемых форм.
В иерархию страниц можно добавлять произвольное количество групп, которые будут превращаться в группы формы. Настраиваются аналогично страницам – заголовок, выводить, группировка. Можно вкладывать группы в группы, без ограничений. Добавление группы осуществляется по кнопке «Добавить группу». Перед этим надо встать на родительскую строку.
Когда группы созданы, можно выводить элементы. Тут все аналогично, только вместо заголовка надо выбрать элемент, из справочника «Элементы рабочих столов». Добавление элемента осуществляется по кнопке «Добавить элемент».
Копирование ветки осуществляется кнопкой «Скопировать». При этом копируется и текущая строка, и все вложенные в нее элементы и группы.
При удалении, если внутри текущей строки есть элементы или группы, будет задан соответствующий вопрос.
Работает перетаскивание групп и элементов – так можно переподчинять куски дерева.
Назначение рабочих столов
Пользователю можно назначить несколько рабочих столов одновременно. При этом произойдет объединение на уровне страниц. Например, если вы назначили два рабочих стола, в каждом – по две страницы, то в итоге пользователь увидит четыре страницы.
Это очень удобно, если всем, или нескольким пользователям надо видеть одну-две одинаковые страницы, но, при этом, еще и пару своих, уникальных.
Назначение рабочих столов осуществляется в регистре сведений «Назначение рабочих столов». Добавляете запись, указываете пользователя, рабочий стол и порядок, который определяет, какой рабочий стол выведется первым, какой – вторым и т.д. Можно указывать любые цифры в порядке, лишь бы они разные были. Один и тот же рабочий стол назначить одному пользователю дважды не даст.
Схемы компоновки
Это справочник, который используется при настройке большинства элементов рабочего стола. Он очень простой по своей структуре и функциональности.
Выглядит элемент справочника так:
Элементов управления всего два. «Редактировать схему компоновки» открывает конструктор схемы. «Выполнить схему» - выполняет схему с настройками по умолчанию, результат выводит в табличный документ, показывает его на экране.
Разумеется, для настройки схем компоновки необходимо запустить 1С в режиме толстого клиента, обычном или управляемом приложении. Пользователю, чтобы увидеть результаты выполнения схем на своем рабочем столе, толстый клиент не нужен, т.к. выполнение схем происходит на сервере.
Требования к схеме компоновки зависят от того, в каком элементе она будет использована.
Справочник «Команды»
Этот справочник используется в нескольких видах элементов рабочего стола, поэтому напишем про него отдельно.
Справочник очень простой. Выглядит так:
Назначение справочника – исполнение произвольного кода, который вы напишете в поле «Код команды». Код может быть как независимым – например, если он будет исполняться по нажатию кнопки на рабочем столе, так и контекстно-зависимым, если будет исполняться по нажатию на ссылку или вообще привяжется к дереву.
При написании произвольного кода важно иметь привязку к данным – например, открыть определенную обработку, или создать документ и подставить определенные значения в реквизиты. Чтобы не использовать любимые конструкции вроде «НайтиПоКоду», в команде есть параметры – табличная часть.
Вы просто добавляете любые параметры, которые нужны вам в коде, даете им имена и устанавливаете значение (число, строка, булево, дата, любая ссылка). А в коде обращаетесь к этим параметрам – они лежат в структуре «ПараметрыКоманды» (см. пример использования на скриншоте).
Когда команда контекстно-зависимая, то появляется еще структура «ВнешниеПараметры» или даже «Дерево» (см. подсказку внизу формы). Более подробно использование этих возможностей будет рассмотрено ниже.
Элементы рабочего стола
Это – главный справочник всей подсистемы. В нем настраиваются элементы – кирпичики, из которых компонуется рабочий стол конкретного пользователя.
Форма элемента рабочего стола выглядит примерно так:
Но, в зависимости от выбранного вида элемента, внешний вид формы будет меняться. Основные реквизиты, доступные для всех видов элемента:
- Вид элемента рабочего стола – определяет, что это будет – отчет, диаграмма и т.д.;
- Выводить заголовок – определяет, нужен ли заголовок элементу;
- Шрифт заголовка – можно изменить типовой, чтобы выделить элемент на рабочем столе;
- Подсказка – ну, тут все понятно;
- Картинка – выводится у заголовка, можно выбрать любую из стандартных или добавленных в конфигурацию. Из файлов выбирать нельзя, управляемые формы этого не любят;
- Растягивать по горизонтали, растягивать по вертикали – для точечной настройки размеров элемента. По умолчанию все элементы растягиваются и вверх, и вниз на доступное свободное пространство;
- Высота, ширина – аналогично. Если стоят нули, то размеры определяются автоматически.
Теперь рассмотрим настройку элементов рабочего стола в зависимости от вида.
Объект метаданных
Вид элемента «Объект метаданных» – это ссылка на форму списка документа, справочника, регистра сведений и т.д. Самый простой тип элемента.
Настройка выглядит так:
Главное, что надо выбрать – реквизит «Имя объекта». При выборе открывается такая форма:
Просто выбираете объект, который должен открываться с рабочего стола, и он будет открываться. В поле «Отображать как» можно переопределить заголовок (по умолчанию берется синоним объекта метаданных).
Отчет
Отчет – тоже очень простой в настройке объект, даже картинку можно не приводить. Единственное, что надо указать – схему компоновки.
На рабочем столе просто выведется табличный документ с отчетом. Единственное ограничение на разработку схемы компоновки – она должна содержать в себе все, что надо для формирования отчета, потому что пользователь ничего настраивать не сможет. Поэтому внимательно выполняйте настройку по умолчанию.
У отчетов есть еще один вариант использования – расшифровка динамических списков, об этом будет рассказано далее.
Выглядеть отчет на рабочем столе будет примерно так:
Диаграмма
Настройка полностью аналогична отчету, разница только в настройке схемы компоновки. Нужно сделать так, чтобы выводилась диаграмма, причем – одна.
Особенность в том, что диаграмма выводится не на рабочий стол, а на форму. Создается элемент формы диаграмма, в него копируются все серии, точки и настройки из диаграммы, которую построила схема компоновки.
Соответственно, если ваша схема вернет больше одной диаграммы, выведется только первая.
Требования к схеме компоновки – как в отчете. Настроек пользователь делать не сможет, поэтому схема компоновки должна без вопросов возвращать готовую диаграмму.
Выглядеть будет примерно так:
Перерисовка диаграммы из табличного документа на форму нужна для того, чтобы смотрелось прилично, и можно было управлять размером элементов – пользователь двигает границы, диаграммы меняют свой размер. Вот картинка, показывающая разницу между диаграммами в табличном документе и на форме:
Разумеется, если вам сильно хочется, можно нарисовать и страшную диаграмму, в табличном документе. Только для этого нужен элемент рабочего стола типа «Отчет» - он выведет все, что хотите.
Динамический список
Тут все очень просто. Основа любого динамического списка – запрос. Он бывает либо произвольным, либо – по основной таблице, типа «Документ.ПоступлениеТоваровУслуг».
Чтобы не заморачиваться с настройкой, у нас запрос всегда произвольный, но основная таблица определяется, автоматически.
Настройка элемента рабочего стола типа «Динамический список» выглядит так:
Вы выбираете схему компоновки, в которой написан запрос динамического списка, определяете поведение элемента формы (изменять состав и порядок строк, только просмотр), и все.
В элемент формы попадут все поля, которые есть в выбранных полях схемы компоновки. Рекомендуем использовать плоские динамические списки, без группировок.
Условное оформление, отборы, сортировка так же берутся из схемы компоновки.
Выглядеть в итоге будет примерно так:
Кнопка
Кнопка есть кнопка. Просто указываете команду (из справочника «флКоманды»), которую должна выполнять кнопка, и все. Можно переопределить заголовок, и управлять размерами кнопки.
Набор ссылок
Это самый непонятный большинству программистов вид элемента, и при этом – самый полезный, на наш взгляд.
Набор ссылок – это вывод результата запроса в виде гиперссылок. Обычно мы, программисты, показываем пользователю ссылки на документы, справочники и т.д. либо в виде списка (динамического, или обычного), либо в виде отчета.
Но бывают ситуации, когда надо вывести ограниченный набор ссылок. Например, только заказы поставщикам, по которым вышел срок поставки. Или договоры, которые текущий пользователь должен согласовать. Или счета на оплату, которые пользователь должен проверить, и т.д.
Заставлять пользователя формировать отчет ради того, чтобы увидеть несколько документов – слишком затратно. Особенно, если отчет надо еще и настраивать – фильтровать по ответственному, например. Разрабатывать отдельную форму, или закладку на форме, для вывода этих документов – тоже так себе идея. И отчет, и форма, и закладка – это объекты метаданных, которые надо будет сопровождать, учитывать при обновлениях и т.д. А если речь о типовых объектах? Хотя, обычно речь именно о них. Менять типовую форму – это ж кошмар, который наступит при очередном обновлении.
Вот для таких задачи и служит набор ссылок. Его девиз – «показывай данные», т.е. конкретные ссылки, а не навигацию к формам, где эти ссылки надо будет искать.
Выглядеть набор ссылок на рабочем столе будет примерно так:
На картинке выведены последние пять документов «Реализация товаров и услуг». Но, как вы можете заметить, отображаются не просто строковые представления ссылок – оставлены только номер и дата, но добавлена сумма.
Настройка набора ссылок очень простая. Нужно разработать схему компоновки, и указать ее в элементе рабочего стола.
Требования к схеме компоновки:
- Настройка должна быть плоской (одна группировка «Детальные записи», поля – в выбранных полях);
- Обязательно должно быть поле «Ссылка».
Собственно, этого достаточно для того, чтобы набор ссылок нарисовался. Если хочется переопределить представление ссылки, то надо добавить поле «Представление», и написать в нем то, что сочтете нужным.
Я обычно делаю вычисляемое поле в схеме компоновки – так легче вычислять представление, и в запрос лезть не надо. Например, представление на приведенной выше картинке вычисляется так:
"№ " + Номер + " от " + Формат(Дата, "ДФ=dd.MM.yyyy") + " г., " + Формат(СуммаДокумента, "ЧЦ=15; ЧДЦ=2") + " р."
Поля «Номер», «Дата» и «СуммаДокумента» возвращает запрос. Когда в результате запроса присутствует поле «Представление», его значение автоматически выводится в заголовке гиперссылки.
Управление цветом ссылки осуществляется чуть сложнее. Мы попозже добавим парсер условного оформления, он уже есть в другом решении, но пока – по-старинке.
Цвет задается через пользовательские поля. Нужно добавить пользовательское поле типа «Выбор», в нем задать условия выбора цвета в зависимости от данных, а в значение поля записать цвет в виде строки, из коллекции web-цветов. Например, «ЗеленыйЛес», «Красный» и т.д. (цвет в платформе, увы, не является полноценным объектом, и использовать его в качестве данных нельзя).
Пользовательское поле надо добавить в выбранные поля схемы компоновки. И, наконец, в элементе рабочего стола, на закладке «Пользовательские поля», нажать кнопку «Обновить пользовательские поля» - при этом в таб.части появится ваше поле – и сказать в колонке «Тип поля», что это – цвет.
Есть вариант попроще – достаточно добавить вычисляемое поле с именем «Цвет», в котором по тем же правилам должно быть строковое представление цвета, и вытащить его в выбранные поля. Такой способ проще, если условие выбора цвета – не сложное, и без привязки к ссылкам (например, надо просто выделить отрицательные суммы красным).
Потом добавим парсер УО, будет интереснее. Хотя, обычно цветами сильно не играются, используя три стандартных светофорных.
Команды набора ссылок
По умолчанию, при нажатии на ссылку, будет открываться объект. Но есть возможность навесить произвольное количество команд, которые можно выполнить после нажатия на ссылку.
Команды задаются в элементе рабочего стола, на закладке «Команды». Просто перечисляете элементы справочника «флКоманды», которые должны исполняться, и все. Если команд нет, то ссылка просто откроется. Если команда одна, то она молча выполнится. Если команд больше одной, то при нажатии на ссылку откроется форма выбора команды:
И вот тут вступают в действие «ВнешниеПараметры» команды. В эту структуру передаются все поля, относящиеся к ссылке, на которую нажал пользователь.
Например, на моей картинке с реализациями выведена только ссылка. Но результат запроса возвращает и сумму, и номер, и дату, и контрагента. Вот все эти поля и упаковываются в структуру, и передаются в команду, и их можно использовать в коде. Например, написать так:
Если ВнешниеПараметры.Контрагент = ПараметрыКоманды.ПлохойКонтрагент Тогда Сообщить(«Нечего вам этот документ смотреть!»); КонецЕсли;
Так же, отмечу, что в наборе ссылок можно ограничивать количество этих самых ссылок – достаточно указать число в элементе рабочего стола. Понятно, что можно просто в запросе написать ПЕРВЫЕ 5, но тогда ограничение закладывается в запрос, а при внешнем ограничении можно использовать один запрос для разных целей. Где-то вывести 5 ссылок, где-то – 500.
Ну и платформа иногда странно себя ведет при одновременном использовании конструкций «ПЕРВЫЕ», «УПОРЯДОЧИТЬ ПО» и «ПОМЕСТИТЬ». Просто не получается вывести пять последних документов, если предварительно нужны пара пакетов, которые готовят вспомогательные данные.
Дерево
Дерево работает очень просто: пишете схему компоновки, в которой есть группировка, указываете ее в элементе рабочего стола, и рисуется дерево, вроде этого:
Дерево можно воспринимать, как альтернативу дин.спискам, если очень хочется вывести иерархию. Сами знаете, как дин.списки к ней относятся.
С другой стороны, дерево – это уже настоящий элемент управления, с помощью которого можно строить алгоритмы обработки данных. Для этих целей к дереву можно подключать команды. В отличие от набора ссылок, команды реагируют не на открытие, а прям рисуются на командной панели дерева (см. рисунок выше).
В контекст команды передается элемент формы. Соответственно, вы можете получить и текущую строку, и все выделенные строки, и все содержащиеся в них данные. Вплоть до того, что управлять самим деревом – например, удалять из него строки.
Есть возможность вывести пометку – у строк дерева появится флажок. Полезно при написании алгоритмов, т.к. значения пометок будут доступны из команд.
Методической практики именно по деревьям пока немного, т.к. этот вид элемента появился последним, и не так давно. Возможно, функционал обогатится вашей практикой?
Связи элементов
Динамические списки можно связать с отчетами и диаграммами. В этом случае схема компоновки, лежащая в основе отчета или диаграммы, может быть параметризируемой.
Работает просто. Человек нажимает на любую строку динамического списка, и связанный отчет или диаграмма перерисовываются, с учетом этой строки. Например, так можно выводить краткий состав документа в виде отчета:
На картинке отчет справа показывает товары и услуги поступления, на котором стоит курсор в динамическом списке.
Настройка связей осуществляется в справочнике «Рабочие столы», на соответствующей закладке:
Источник связи – динамический список, приемник – отчет или диаграмма, имя параметра – то, что будет передано в схему компоновки. Разумеется, у дин.списка должна быть колонка с таким же именем. Обычно это «Ссылка».
Таким способом можно, например, строить интерактивные дашборды. Не вываливать кучу диаграмм на один экран, а сделать дин.список с показателями, и при нажатии перерисовывать диаграмму. Может получиться что-то вроде этого:
Обновление 26.12.2022 г.
Добавлена версия в виде расширения.
Достоинства
1. Очень гибко и адаптивно настраивается;
2. Рабочие столы и их элементы можно использовать повторно, экономя время программистов;
3. Пользователям намного меньше придется рыться в отчетах;
4. Вся нужная информация - всегда под рукой, или перед глазами;
5. Не нужно больше разрабатывать кучу отчетов;
6. Руководителю, наконец-то, станет интересно заходить в 1С.