воскресенье, 13 марта 2011 г.

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

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

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

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

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

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

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

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

Публикация на infostart.ru...

1 комментарий:

Ragnar комментирует...

Не могу не поржать каждый, каждый раз, когда вижу язык 1с. Точно что орденоноснаяКрасногоЗнамени... :-D

Отправить комментарий