gifts2017

Подмена рабочего стола

Опубликовал Александр Лапшин (zfilin) в раздел Программирование - Работа с интерфейсом

Несколько слов о рабочем столе в 1С 8.2, о том, что нельзя открыть произвольную форму при переключении подсистемы, а так же простой способ "обмануть" это ограничение (с примером).

В 1С версии 8.2, в режиме управляемого приложения, есть такая замечательная штука, как "Рабочий стол". На мой взгляд это прекрасная идея - предоставить разработчику возможность расположить самые необходимые функции и важную информацию прямо под носом у пользователя и раз и навсегда избавиться от вопросов вроде "А как мне найти тут?.." И, думаю, что не ошибусь, если скажу что многие расстраивались от того, что нельзя сразу открыть произвольную форму при переходе на вкладку подсистемы. Возможно, я чего-то не знаю, но события "ПриПереключенииПодсистемы" в платформе нет. А гугл на такие вопросы отвечает совсем не обнадеживающей ссылкой на форум 1С, где Максим Радченко сурово отвечает - нет и не будет! Разработчики плачут, колются, но продолжают жрать кактусы.
Но, что нам форум 1С, если мы и сами с усами.

Когда мне понадобилось несколько рабочих столов по подсистемам, я решил так: добавлю на рабочий стол одну форму, сделаю у нее закладок по количеству подсистем и на каждой закладке нарисую все, что мне нужно. А отображение стандартных закладок подсистем можно будет и вовсе отключить.
Сначала все было в порядке. Но, с увеличением количества элементов появились проблемы. Во-первых оно начало прилично тормозить. Во-вторых в дереве элементов и в модуле формы стало сложно ориентироваться. Не связанные по сути элементы для разных подсистем валились в "одну кучу". И еще напрягало то, что нужно соблюдать уникальность имен в пределах формы. Вместо того, чтобы на разных вкладках сделать две диаграммы с именем "Диаграмма" у каждой, приходилось писать что-то вроде "ДиаграммаОстатки" и "ДиаграммаВзаиморасчеты". Когда у меня стали появляться монстры, вроде "ГруппаПанелейСозданияДокументовОстатковНижняя" (...ОрденоноснаяКрасногоЗнамениИмениБорисаНуралиева ;-) я решил - хватит. Нужно было разносить разные рабочие столы на разные формы.

Тогда я применил простое решение и сейчас поделюсь им с вами. Суть способа проста. Я сделал несколько общих форм, по количеству необходимых мне рабочих столов. При создании формы на сервере я добавляю в форму панель с кнопками, которых ровно столько, сколько этих самых общих форм, и при нажатии на соответствующую кнопку открываю нужную форму (которая при создании опять добавляет себе эту панель).
В итоге, чтобы добавить новый рабочий стол, мне нужно сделать несколько простых действий:
1. Создать общую форму с именем "РабочийСтолНужноеИмя" (где вместо "НужноеИмя" можно подставить все, что угодно).
2. Поставить у этой формы заголовок "НужноеИмя" и отключить автозаголовок. (Это важный шаг, я по заголовку определяю текущую форму. Не совсем удачное решение, но работает).
3. Добавить форме событие "ПриСозданииНаСервере" и прописать там такой код:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    РабочийСтол.ПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры

(не удивляйтесь, "РабочийСтол" это у меня так называется общий модуль)

4. И добавить в модуль формы процедуру:

&НаКлиенте
Процедура РабочийСтолПереключить(Команда)
   
РабочийСтол.РабочийСтолПереключить(ЭтаФорма,Команда);
КонецПроцедуры

5. Все. Ну, и панель действий формы я отключаю или перемещаю вниз, оно так симпатичнее выглядит.

Одну из этих форм вы добавляете в рабочую область рабочего стола, установив в настройках ширину "Одна колонка". И вуаля - все работает.

Можете скачать и посмотреть сами. В принципе, это базовый шаблон, который можно еще наворотить, например, добавить на кнопки картинок. А можно оставить так.

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

А я хочу пожелать вам хорошего дня и хорошего вам кода. Спасибо за внимание.

Оригинал статьи в блоге автора.

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
DesktopReplacement.zip
.zip 7,83Kb
27.02.13
297
.zip 7,83Kb 297 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей Ожерельев (Поручик) 13.03.11 19:08
По ссылке
>>> может быть существуют какие либо явные причины не реализовывать данный обработчик, которых я не вижу.

Да пипец какой-то, сам не понимаю, какая религия запрещает. Если пользователи два года просят сделать маленькую фичу, стоит прислушаться к гласу народа.
2. Александр Лапшин (zfilin) 13.03.11 20:57
Разработка штука хитрая. Может, им там половину проекта надо перелопатить, чтобы такую фичу добавить.
Мало ли... Но хорошо было бы, хорошо.
3. script Мальчинко (script) 14.03.11 00:26
Отлично! Я как раз любитель делать много панелей на панелях и шоб с закладками :D
4. Яков Коган (Yashazz) 15.03.11 10:10
И что тут нового и оригинального? Ровно тот же ход можно было хоть на 7.7 делать, что, собсно, и делалось. Я было понадеялся, это фича именно с использованием специфики 8.2, ан нет. :(
5. (Nexux) 16.03.11 09:32
как бы так еще извратиться, чтобы дать юзверю возможность найстроки как в "нативном" рабочем столе, и распихать по ролям))
6. Александр Лапшин (zfilin) 16.03.11 12:14
Yashazz, Извините. =( Будет со спецификой 8.2 - обязательно напишу.

Nexux, Дык, а настройка формы? Включай/выключай! Ну, и с ролями можно придумать... Начиная от прав на открытие форм и анализа этого дела при добавлении кнопочек.
7. Андрей Акулов (DrAku1a) 19.03.11 05:10
Извратились бы лучше и интерфейс управляемого к виду обычного ("неуправляемого" :) ) приложения привели... Хотя это да... Это из ряда фантастики...
8. Sensey Master (MSensey) 22.03.11 08:53
Извиняюсь за такую критику с моей стороны.
9. Александр Лапшин (zfilin) 22.03.11 11:35
Не нравится - ставьте минус, пишите администрации infostart, что на главную попадает всякая фигня.

Знаете, порой мне тоже кажется странным, что высший рейтинг получают обработки вроде "очередная новая универсальная загрузка из эксель" или "ура! я изобрел проверку орфографии вордом", но стараясь сохранять объективность я говорю себе: раз люди это оценили, значит им это действительно нужно и нечего тут придираться. Стараюсь подавлять в себе вот эту мелочность и снобизм. Чего и вам желаю.
neo-ti; susorov; AlekseiH34; Арчибальд; +4 Ответить 1
10. Александр Лапшин (zfilin) 23.03.11 22:37
(9) Простите за несколько резкий тон, я не бываю на главной (такая уж привычка, читаю в основном через еженедельный обзор из почты) и не знал что такое "выбор экспертов". Не могу не согласиться, что есть много замечательных публикаций более достойных того, чтобы попасть на этот главный баннер. Но все же с тем, что идея совсем недостойна внимания никак не соглашусь, вы тоже, знаете ли переборщили, мне кажется.

Не держите зла и давайте просто хорошо работать, чтобы нашим публикациям не стыдно было находиться в выборе экспертов.
11. - - (Rebelx) 24.03.11 09:33
ничего не понял
приклей скриншоты
susorov; AlekseiH34; +2 Ответить
12. Vasiliy (dimisa) 15.12.11 12:42
Хороший способ - но не понятн огде это нужно примменять
было бы интересно примеры применения этой фитчи
если у кого опыт использования в торговых конфигурациях
13. AZel84 (AZel84) 20.12.11 15:02
Сейчас если у вас общая форма называется, например, ОстаткиТоваров, то кнопка будет называться "ОстаткиТоваров", а хотелось бы "Остатки товаров".
Если заменить процедуру в общем модуле на ниже приведённую, то заголовок кнопок будет браться из синонима общих форм.

&НаСервере
Процедура ПриСозданииНаСервере(Форма) Экспорт
ПанельРабочиеСтолы = Форма.Элементы.Вставить("_ПанельРабочиеСтолы",Тип("ГруппаФормы"),,Форма.ПодчиненныеЭлементы[0]);
ПанельРабочиеСтолы.Вид = ВидГруппыФормы.КоманднаяПанель;
Для каждого ОбщаяФорма Из Метаданные.ОбщиеФормы Цикл
Если Лев(ОбщаяФорма.Имя,11) = "РабочийСтол" Тогда
ИмяРабочегоСтола = Сред(ОбщаяФорма.Имя,12);
ЗаголовокРабочегоСтола = СокрЛП(ОбщаяФорма.Синоним);
КомандаКнопки = Форма.Команды.Добавить("РабочийСтолПереключить"+ИмяРабочегоСтола);
КомандаКнопки.Действие = "РабочийСтолПереключить";
НоваяКнопка = Форма.Элементы.Добавить("_"+ИмяРабочегоСтола, Тип("КнопкаФормы"), ПанельРабочиеСтолы);
НоваяКнопка.ИмяКоманды = "РабочийСтолПереключить"+ИмяРабочегоСтола;
НоваяКнопка.Заголовок = ЗаголовокРабочегоСтола;
НоваяКнопка.Пометка = ?(Форма.Заголовок = ИмяРабочегоСтола,Истина,Ложь);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
14. Александр Лапшин (zfilin) 20.12.11 15:13
Да, я ее для себя и так дорабатывал и картинки подсистем на кнопки вставлял, и вообще.
Вообщем, это так - набросок, а докрутить можно как угодно.
15. Виктория Коршанова (Chif13) 14.03.12 13:28
а нельзя было создать обработку, включенную в рабочий стол, которая имеет закладки и прочую там фитчу, настроить ее по ролям и все такое?
16. Александр Лапшин (zfilin) 14.03.12 13:50
Можно. А в статье описано почему именно это не самый удачный способ. Вы ее читали?
17. Vasiliy (dimisa) 27.03.12 15:37
не понравилось
уж лучше переписать под эти нужды боковое окно сообщений
что бы там гипперссылки были на объекты метаданных
18. Александр Лапшин (zfilin) 27.03.12 16:35
Да, решение не идеальное. И ссылки конечно лучше, но тут немного о другом речь.
О том как сделать несколько рабочих столов на каждом из которых есть графики, списки, диаграммы и пр.
Увы, ссылки это несколько другая задача. =(
19. Ghost_W0lf (NittenRenegade) 07.11.12 08:23
Тюрьмы, как известно, в головах. Платформа меняется - способы работы остаются. Зачем совершать переход Сурового через Траблы, если есть такие замечательные вещи, как Общие формы и Функциональные опции?
Почитайте Руководство разработчика по этим разделам и всё поймете, там не сложно.
20. Александр Лапшин (zfilin) 07.11.12 10:28
(19) Спасибо за ценную рекомендацию.
21. Ghost_W0lf (NittenRenegade) 07.11.12 10:34
zfilin, мы, 1С-ники, должны помогать друг другу!

Наклепал статейку
статейка на infostart.ru
22. Дмитрий Елисеев (w-divin) 11.03.13 21:22
Реализация предполагает отключение отображения подсистем? а как реализовать чтобы в зависимости от режима запуска (веб-клиент, тонкий/толстыый клиент) использовались либо стандартные посдсистемы, либо данная реализация?
23. Александр Лапшин (zfilin) 12.03.13 02:04
(22) Ну, способ оставляет желать лучшего. Когда-то я его применял, в некоторых проектах.
Теперь я бы посоветовал не использовать его, использовать стандартные подсистемы.
А так, насколько я знаю, нет метода включить и выключить программно отображение подсистем.

(21) Конечно должны. Не думал, что публикация пригодится, но гляди ж ты. Спасибо. =)
24. Дмитрий Елисеев (w-divin) 16.03.13 09:47
(23) метода програмно включить/выключить нет, а нужен именно этот функционал - т.е. при заходе через браузер их не было вообще - только панель навигации (причем тоже сильно урезанная), через тонкий клиент 1-3 подсистемы, а через толстый все. Можно конечно вывернуться ролями ФО, но делать по 3 пользователя на каждого не есть гуд, особенно когда их больше 300 (((
25. Юрий Осипов (yuraos) 15.07.13 07:05
(19) Ghost_W0lf,
новые платформы - это новые тюрьмы
и камеры в них все де...(пардон) хуже и хуже.
--
сколько раз не брался за управляемое приложение
столько же раз в этом убеждался.
26. Юрий Осипов (yuraos) 15.07.13 07:09
(25)
те минимальные элементы ООП,
которые присутствуют в обычном приложении
(и к стати некоторые из них появились именно в платформе 8.2)
в управляемом практически - практически бесполезны,
поскольку их нельзя использовать на клиенте.
27. Юрий Осипов (yuraos) 15.07.13 07:16
(26)
ну интерфейсные возможности управляемого интерфейса
просто сравнивать нечего с обычным...
в нем много чего нельзя:
- нельзя запретить максимизацию управляемой формы, открытой модально.
- нельзя изменить картинку в заголовке управляемой формы.
- нельзя запретить изменение размера управляемой формы.
- у надписей неразмещенных в табличных полях, почему-то нельзя задавать фон,
отличный от фона управляемой формы.
- у надписи (не в табличном поле) можно задать контекстное меню, оно системой выводится
но почему-то обработчик выбранной в меню команды не срабатывает
***
28. Юрий Осипов (yuraos) 15.07.13 07:18
(27)
***
я думаю список можно продолжить.
29. Юлия Пухова (luchyk007) 23.10.13 11:57
как раз столкнулся с необходимостью использовать рабочий стол, раздавать права доступа на каждый элемент долго, проще подменить рабочий стол целиком - спасибо.
30. Александр Лапшин (zfilin) 23.10.13 18:12
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа