v8.2 Управляемые формы: добавляем произвольное пользовательское меню в основное меню 1С без модификации конфигурации.




Часто ли Вы задумывались о возможности создания собственного подменю в основном меню 1С?
Часто ли Вам приходилось отказываться от "красивого" решения Вашей задачи без вышеупомянутой возможности?
Вашему вниманию предлагается технология, дающая возможность добавить подменю в главное меню 1С 8.2 УФ, полностью сформированное "обычным" способом.

Отступление.

Более 7 лет назад я эксперементировал над 1С 7.7 в части объединения нескольких форм в одну. Как оказалось достаточно было переназначить родителя «подложки» (окна, на котором расположены элементы) одной формы на гравное окно другой, чтобы обе формы заработали в одном окне без потери функционала и «вылетов» системы. Мысли о том, что что-то подобное можно сделать в 8.2 натолкнули меня на экперименты в этой области. 

Как это работает?

К статье прикреплена обработка, в которой есть 2 формы. Первая форма «Форма» — основная. Она вызывает форму, на которой располагается меню, и при помощи ВК, выполненной на технологии NativeAPI (спасибо большое Александру Соломатину за его труды и статью «ВК NativeAPI на Delphi и FreePascal», на базе которой и была написана компонента), переопределяет родителя для подменю в ФормаМеню на командную панель главного окна 1С, после этого скрывает (делает невидимым) окно обработки. Для поиска подменю я использовал опыт, опубликованный уважаемым Abadonna в статье «Иерархия окон в 1С 8.2», которая сэкономила кучу времени на решении поставленной задачки.

Для того чтобы сформировать собственное меню, достаточно в форме обработки «ФормаМеню» внести изменния в группу «Подменю». Обработка событий комманд, добавленных подменю, производится типовым способом, т.е. как в обычной форме. По сути, это и есть обычная форма с той лишь разницей, что ее подменю вынесено из формы.

Обработку можно встроить в конфигурацию. Для этого:

  1. Добавляем обработку в конфигурацию.
  2. В основной форме вместо «ФормаМеню = ПолучитьФорму(«ВнешняяОбработка.Меню.Форма.ФормаМеню»,,,,ВариантОткрытияОкна.ОтдельноеОкно);» пишем «ФормаМеню = ПолучитьФорму(«Обработка.Меню.Форма.ФормаМеню»,,,,ВариантОткрытияОкна.ОтдельноеОкно);»
  3. В модуле управляемого приложения в процедуру «ПриНачалеРаботыСистемы» добавляем «Форму(«Обработка.Меню.Форма»,,,,ВариантОткрытияОкна.ОтдельноеОкно);»

 

Существующие ограничения и неудобства

  1. Не совсем красиво отображается кнопка подменю  (частично накрывает вторую иконку и серый фон).
  2. На форме «ФормаМеню» нельзя менять ничего, кроме состава группы «Подменю». По сути, ничего другого и не нужно.  
  3. Окно формы видно в списке окон 1С и его можно закрыть.
  4. При инициализации меню возможно будет заметно открытие формы обработки.

   

48 Comments

  1. MarSeN

    Странно, что нет никаких отзывов. Мне показалось что возможность добавить свои пункты меню в главное меню 1С как минимум должна была вызвать дискуссию хорошо это или плохо.

    Reply
  2. Abadonna

    (1)

    Странно, что нет никаких отзывов

    Ха! Привыкай. Вот если бы ВПФ, подздравлялка или отчет по дням рождения сотрудников — тогда бы плюсами да откликами засыпали :))))))))))))))

    Reply
  3. MarSeN

    (2) Abadonna

    )))))))

    Reply
  4. MarSeN

    (2) Abadonna

    Ты как в воду глядел ))

    http://infostart.ru/public/179730/ отчет по д.р. сотрудников для зуп. Интересно будет сколько статья наберет

    Reply
  5. Abadonna
    Интересно будет сколько статья наберет

    А уж почти тебя догнала. Скоро перегонит :)))

    Reply
  6. MarSeN

    (5) Abadonna

    Думаю за 50 перевалит )

    Reply
  7. An-Aleksey

    (1) действительно странно…

    Обычно заглядываю в комменты чтобы понять стоящая вещь или очередной фейлд.

    А тут по теме нулю. Неужели придется качать и тестить? )))

    Ставлю плюс авансом 😉

    Reply
  8. MarSeN

    (8) An-Aleksey

    Спасибо )

    Я вот не понял — почему эта статья только пару часов побыла внизу в новых статьях и не попала «на вверхний этаж». Я такой реализации еще невидел. Неужели никому не интересно?

    Reply
  9. An-Aleksey

    Если ты про общую рассылку, то там статьи располагаются в обратном хронологическом порядке от даты первой публикации.

    Т.е. чтобы попасть в топ, нужно было опубликовать вчера во второй половине дня 🙂

    Reply
  10. MarSeN

    (10) An-Aleksey

    Это дельный совет — спасибо.

    Я про первую страницу сайта

    Reply
  11. unknownN

    весьма интересно, спасибо

    Reply
  12. Volfy

    Классная вещь =) Оооочень полезная, сразу же воткнул туда кучку пунктов по настройке собственных доработок. Спасибо автору =)

    Reply
  13. 1c-intelligence

    Забавно. А какой практический смысл?

    Reply
  14. MarSeN

    (14) zaebunga

    в 13 Volfy слёту смысл нашел )

    1 как быстрый запуск каких либо форм или обработок.

    2 в обработке доступны все окна так что можно настноить обмен информацией м/у ними, как вариант буфер обмена. (замечу что это без модификации конфы)

    это на вскидку

    Reply
  15. 1c-intelligence

    (15) я имел в виду практический смысл для пользователей. Видите ли вы пути применения этой доработки как части системы? Для каких пользователей и задач?

    Reply
  16. MarSeN

    (16) zaebunga

    а чем буфер обмена не подходит? мне кажется что это как раз пользовательская фича.

    пример в приложении.

    тестил на УТ11 — работать будет на любой УФ конфе

    1. открываете 2 документа с таб частями товары

    2. меню — вн. буфер обмена

    3. в форме — встаете в списке на один документ — копировать. Потом на другой — вставить.

    это просто пример а не боевая обработка. делал тоб понять возможности и наметить пути развития

    Reply
  17. 1c-intelligence

    (17) как направление развития оно понятно. Но вопрос сразу возникает — как это поможет пользователю, в решении каких задач. Поэтому и спросил — может вы уже нашли ответ, или примеры использования есть. Не разработчиком, а пользователем именно.

    Reply
  18. MarSeN

    (18) zaebunga

    я вроде бы уже объяснил….

    мне кажется что вопрос какой-то некорректный. Это то же самое что спросить как «поможет» пользователю платформа 1С без конфы — да никак. Пока разработчик не придумает чего нибудь чтоб пользователю было «удобно».

    Я же не готовое решение публикую а механизм при помощи которого Вы можете добавить в интерфейс сбои (1С не дает возможности добавить в главное меню свои пункты) «бантики»

    Reply
  19. 1c-intelligence

    (19) Да нормальный вопрос, вы его в штыки просто восприняли.

    Вы сделали нормальную штуку, но было бы еще интереснее, если бы дали рекомендации по использованию. Сказали, чем и кому она поможет.

    Reply
  20. MarSeN

    (20) zaebunga

    Вам показалось. Я п15 описал направления. в п17 даже выложил пример. Думаю когда у Вас появится определенная проблема которую Вы не сможете решить штатным способом — Вы вспомните про данный подход.

    Если принять во внимание что данный механизм работает без изменения конфы, то это универсальное решение.

    PS: если я Вас обидел — то сори

    Reply
  21. 1c-intelligence

    (21) вы сами спрашивали выше «неужели никому не интересно?».

    А оно как получается. Вы выложили инструмент, но не рассказали что с его помощью делать. Отсюда и реакция — «прикольно, и чо?».

    Это не обвинение и не попытка уменьшить значимость инструмента. Но сами понимаете, быстрый доступ к чему-то из меню или копирование товаров между разнородными документами — задачи не очень ценные, и они-то как раз уменьшают ценность вашего инструмента в глазах читателей. Это как выложить дрель и сказать, что с ее помощью можно дверь подпирать.

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

    Reply
  22. MarSeN

    (22) zaebunga

    Я считаю что Вы правы «Сделать инструмент, но не придумать назначение и методику использования.» поставил + за это.

    но как я уже писал — это именно инструмент, а если сравнивать, то это не дрель а скорее мотор который потом надо вставить в дрель.

    Спасибо за отзыв. Он ценен для меня

    Reply
  23. serg_gres

    Интересно.

    За идею и подход — «+».

    Может быть где-нибудь (когда-нибудь) и пригодилось, но «Окно формы видно в списке окон 1С и его можно закрыть.» — заметно снижает ценность данной разработки.

    Reply
  24. MarSeN

    (24) serg_gres

    К сожалению на данный момент ничего с ним сделать не могу. Даже если у подложки переопределен родитель (не родное окно) то при закрытии родного окна закрываются все его элементы. буду думать что с этим сделать.

    если бы в обработке перед закрытием можно было понять что главное окно 1С закрывается, тогда можно было бы отказ возвращать если 1С — работает а форму кто-то пытается закрыть

    Reply
  25. Новиков

    Прикольная штука. Но бесполезная, да 🙂

    Reply
  26. MarSeN

    (26) Новиков

    Любое мнение для меня важно.

    Reply
  27. Филин

    Штука интересная, поставлю плюс.

    В свое время искал способ воткнуть вызов обработки в стандартное меню (в раздел «Справка»), чтобы пользователь всегда с минимальным количеством кликов мог до нее добраться. В управляемом интерфейсе задача оказалась нерешаемой )

    Но есть подозрение, что она нарушает лицензионное соглашение. Компания 1С крайне ревностно относится к работе с окном приложения и такие трюки, насколько я помню, запрещены ЛС.

    Reply
  28. MarSeN

    (28) Филин

    Да, это действительно трюк, но, надеюсь 1С не будет против… Конечно этот способ не «1С совместимо» но раз нам не дают всех возможностей для интерфейса — то мы их возьмем сами.

    По крайней мере 1С может обратить внимание на такие вещи и будет дорабатывать интерфейс в нужном направлении. )

    Reply
  29. OrsoBear

    Не по теме, но, раз уж в описании об этом сказали.. можно чуть подробнее по 7.7, как формы объединяли?

    Reply
  30. MarSeN

    (30) в форме приемнике создавал группу с определенным заголовком, потом в после открытия формы приемника открывал форму источник и подменял у подложки источника родителя на группу, найденную по заголовку . Форму источника убивал ч/з апи

    Reply
  31. Jogeedae

    (1)

    Добрый день, в своё время для обычного приложения выкладывал подобное самособирающееся меню http://infostart.ru/public/77388/ .

    Отзывов было не густо 🙂

    Есть мнение, что полезность инструмента смогут оценить только закоренелые педанты, те кто ведут ежедневники, фиксируя каждый чих. Это всё к сожалению, потому что потенциал, на мой взгляд, имеется.

    Reply
  32. MarSeN

    (32) Jogeedae

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

    то что я хотел заложить в свою «модель» это взаимодействие ч/з меню с контекстами активных окон

    (я в последнее время заморочился на минимизации изменений типовых конфигураций)

    Reply
  33. yuraos

    Плюс за попытку сделать УИ чуть «управляемей» и привлекательней.

    Как я понимаю, для управляемого интерфейса актуально

    написание аналога ВК FormEx.dll для его …

    … мягко говоря улутшения.



    PS:

    На скриншотике «мнею» исправить бы на «меню»

    🙂

    Reply
  34. kredko

    Ошибка в тексте «на гравное окно».

    Reply
  35. MarSeN

    (34) yuraos

    Спасибо за отклик и плюс.

    Да, при всей управляемости УФ есть определенные недочеты.

    Я на данном этапе развиваю компоненту и форма «меню» будет лишь как дополнение и точка входа для определенных действий над формами

    Если коротко, то на данном этапе разработки (этого нет в данной, выложенной в статье обработке) «меню» уже контролирует активное окно и можно к примеру произвести манипуляцию именно над активным окном.

    В течении недели или к началу новой планирую выложить триальную бетту для ознакомления с базовым функционалом.

    в нем будет:

    1. Пример реализации быстрого поиска в списках (на примере подбора номенклатуры) по первым символам как в 8.1 (или в окне сообщения 8.2 УФ)

    2. Пример копи/паста из одного документа (текущей позиции списка документов) в другой (на примере таб. части товары)

    3. Пример вставки печати в любую активную открытую печ. форму.

    хочу лишний раз обратить внимание на то что весь функционал работает без модификации конфигурации

    На данный момент пытаюсь определиться с политикой лицензирования и стоимостью. не хотелось бы чтоб продукт был дорогим.

    Так же планирую сделать апи чтоб было удобно добавлять свои новые блоки)

    Собственно это планы на ближайшее будущее.

    По скриншоту ) спасибо — это моя болезнь. но пока публикация на виду — не хочу редактировать ее так как она пропадет. Хотелось бы привлечь больше умов к открывающимся возможностям )

    Спасибо

    Reply
  36. MarSeN

    35. kredko

    ) спасибо, исправлю попозже. Причину описал в п36

    Reply
  37. aseverin

    (37) Есть своя конфигурация. Поставил заказчик перед фактом — переносим сервера. Пришлось срочно допиливать тонкий клиент… Использовал твою публикацию для переноса неуправляемого «Запуска отчетности» (отчеты в справочнике, переносить в подсистемы нерентабельно, много пересечений по доступам…). За разработку респект, пригодилась и начинает работать…. Это к вопросам зачем…

    PS По поводу глюков — иногда открывается отдельная управляемая форма (не подвязывается к задуманному месту) Причину не понял, сообщаю скорее для информации.

    Reply
  38. MarSeN

    (38) aseverin

    Спасибо за отзыв и боевое применение разработки.

    странно, что меню не всегда цепляется. А когда открывается отдельная форма, там меню есть со стрелкой? или она без меню открывается.

    И еще вопрос. Режим используете с закладками или отдельные окна?

    Reply
  39. aseverin

    (39) Если не на месте, то форма открывается в правом нижнем углу в «свернутом» виде. Если ее развернуть — меню со стрелкой есть и работает. У себя использую режим закладок, глюк ловил, у одного из пользователей вроде бы режим окон, но не на 100% уверен.

    Reply
  40. MarSeN

    (40) aseverin

    странное поведение, а при открытии обработки есть еще какие-нить открытые «окна»?

    у меня просто такой глюк не выскакивает, при том что я активно тестирую «продолжение» этой обработки (описал в п36)

    Reply
  41. aseverin

    (41) нет. Только рабочий стол с двумя отчетами и списком документов. Кстати, почти у всех такое поведение отработало при первом старте обновленной конфигурации с «меню». Определил для себя как глюк при регистрации компоненты, но мало ли…

    Reply
  42. MarSeN

    (42) aseverin

    Спасибо, буду думать

    Reply
  43. aseverin

    (43) Пришлось поработать дома, вот так выглядит первый запуск конфигурации с меню на свежем компе. Может я чего не так сделал…

    Забыл развернуть, но кнопка там точно есть ;). находил ее ранее 😉

    Reply
  44. MarSeN

    (44) aseverin

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

    Reply
  45. aseverin

    (45) привет. Дошли руки до проверки версии с задержкой. Вроде бы все работает без збоев 😉

    Reply
  46. MarSeN

    (46) aseverin,

    Спасибо огромное. Я обязательно к след. неделе учту эту ошибку и выложу обновление меню, и учту ее в разработке http://infostart.ru/public/182442/ «ExtEventsFrm: API для реализации быстрого (по первым символам) поиска в списках 1С 8.2 УФ и предоставления контроля над текущей формой (без модификации конфигурации)» так как основа у них одна.

    Reply
  47. aseverin

    Добрый день. Пользуюсь данной разработкой уже года 3, реализовал вызов отчетов… мы как то списывались на эту тему.

    Проблема в том, что при переходе на 8.3.9 компонента не подключается, не могли бы помочь…

    заранее благодарен, с ув. Северин Александр

    Reply
  48. simikill

    Доброго времени суток. Можете поделиться исходниками вашей dll для создания меню? Заранее благодарен.

    Reply

Leave a Comment

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