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

13.03.11

Разработка - Работа с интерфейсом

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование SM По подписке [?] Купить один файл
DesktopReplacement.zip
.zip 7,83Kb
317
317
1 SM
Скачать Купить за 1 850 руб.

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    17678    24    6    

38

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    5467    smielka    37    

96

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    12514    789    elcoan    47    

110

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    10697    158    acces969    31    

120

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    4631    kalyaka    6    

32

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    9388    1    2    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Поручик 4684 13.03.11 19:08 Сейчас в теме
По ссылке
>>> может быть существуют какие либо явные причины не реализовывать данный обработчик, которых я не вижу.

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

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

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

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

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

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

(21) Конечно должны. Не думал, что публикация пригодится, но гляди ж ты. Спасибо. =)
24. w-divin 16.03.13 09:47 Сейчас в теме
(23) метода програмно включить/выключить нет, а нужен именно этот функционал - т.е. при заходе через браузер их не было вообще - только панель навигации (причем тоже сильно урезанная), через тонкий клиент 1-3 подсистемы, а через толстый все. Можно конечно вывернуться ролями ФО, но делать по 3 пользователя на каждого не есть гуд, особенно когда их больше 300 (((
29. luchyk007 23.10.13 11:57 Сейчас в теме
как раз столкнулся с необходимостью использовать рабочий стол, раздавать права доступа на каждый элемент долго, проще подменить рабочий стол целиком - спасибо.
30. zfilin 2348 23.10.13 18:12 Сейчас в теме
Оставьте свое сообщение