Подписка на событие получения управляемой формы

28.08.19

Разработка - Механизмы платформы 1С

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

Теоретическая часть

Выдержка из описания новых возможностей платформы 8.2.14: "В модуле менеджера некоторых объектов реализовано событие "ОбработкаПолученияФормы", вызываемое на сервере при получении стандартной управляемой формы. С помощью данного события возможно переопределение открываемой формы. При явном указании открываемой формы событие не вызывается."

Подчеркнем еще раз, что обработчик этого события вызывается только для управляемых форм!

Выдержка из описания новых возможностей платформы 8.2.15: "Реализована возможность создавать подписки на события модулей менеджеров".

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

Но как было описано выше, здесь есть одно НО: "При явном указании открываемой формы событие не вызывается" - это значит, что если в каком-либо месте конфигурации открывается типовая форма методом ОткрытьФорму("Документ.АвансовыйОтчет.Форма.ФормаДокумента") вместо ОткрытьФорму("Документ.АвансовыйОтчет.ФормаОбъекта") наша подписка в этом случае не сработает и переопределение получения типовой формы на нашу не произойдет, поэтому прежде чем создавать подобную подписку лучше убедиться (с помощью глобального поиска по конфигурации) не производится ли где открытие интересующей вас типовой формы в явном виде. Думаю и надеюсь, что в типовых конфигурациях открытие стандартных форм прикладных объектов производится без явного их указания в соответствующих методах.

Практическая часть

И наконец рассмотрим работу этого механизма на небольшои примере.

Создадим подписку на событие получения управляемой формы документа "Авансовый отчет". У общего модуля, в котором будет располагаться процедура-обработчик события, должны быть взведены флаги "Сервер" и "Вызов сервера", т.к. получение управляемой формы (как упоминалось выше) происходит на стороне сервера. 

Создание подписки на получение формы документа

Типичный код процедуры-обработчика события получения управляемой формы может выглядеть следующим образом. Т.е. перед открытием типовой формы документа "Авансовый отчет" сработает наша подписка на событие, в которой мы переопределяем открытие типовой формы на нашу собственную "НетиповаяУправляемаяФормаДокумента", указав ее имя в качестве значения параметра процедуры "ВыбраннаяФорма".

Процедура ОбработкаПолученияФормы(Источник, ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) Экспорт

    Если
ТипЗнч(Источник) = Тип("ДокументМенеджер.АвансовыйОтчет") И ВидФормы = "ФормаОбъекта" Тогда
       
СтандартнаяОбработка = Ложь;
       
ВыбраннаяФорма = "НетиповаяУправляемаяФормаДокумента";
    КонецЕсли;

КонецПроцедуры

Резюме

Использование подписок на событие "ОбработкаПолученияФормы" менеджеров прикладных объектов может значительно облегчить процедуру обновления конфигурации. Особенно актуальным их использование может быть для тех прикладных объектов, формы которых практически никогда серьезно не меняются от релиза к релизу программы (как например, рассмотренный выше документ "Авансовый отчет").  

подписка событие управляемая форма перехват переопределение

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4528    dsdred    53    

72

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5294    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6409    dsdred    36    

112

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18473    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12088    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8822    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15986    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Dimasik2007 430 27.08.12 13:41 Сейчас в теме
Я обычно делаю по другому, в случае как управляемых, так и не управляемых форм. При серьезных модификациях формы, я ее копирую из типовой с префиксом (допустим _) и сменяю в конфигурации основную форму объекта.
Обновляетмся все довольно легко, система показывает, что измено свойство документа (напр. ОсновнаяФормаДокумента), и тут же легко проверить, вносились ли изменеия в типовую форму (мы же ее не изменяли). Если изменений нет, то форма не появиться в сравнении конфигурации, а значит и делать ничего не нужно. Только не забыть флажок снять)
ollega; Drivingblind; SirYozha; Bassgood; +4 Ответить
3. Bassgood 1425 27.08.12 14:00 Сейчас в теме
(1) Dimasik2007, да, можно и так делать, тоже вариант, основное отличие проделывать это через подписки - не снимать дополнительные галочки при сравнении конфигураций.
6. glek 119 29.08.12 10:54 Сейчас в теме
Если начали разрабатывать такое - значит в итоги долижут. Насчет (1): тоже делал так же. Один нюанс перечеркивает все плюсы: при существенных изменениях в форме от поставщика - все равно переносить ручками.
7. AlexO 135 29.08.12 11:05 Сейчас в теме
(1) Dimasik2007,
и каким образом будете вносить изменения от 1С в свою копию формы? это не выход.
Один нюанс перечеркивает все плюсы: при существенных изменениях в форме от поставщика - все равно переносить ручками.

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

есть прецеденты от 1С?
8. Dimasik2007 430 29.08.12 11:40 Сейчас в теме
(7) Глобально перепаханные документы (по крайней мере в моей торговой области - заказ покупателя, поступление товаров, заказы поставщику, ОПЗС и проч) в дальнейших обновлениях не нуждаются. По крайней мере за 2 года обновления УПП серьезных изменений не было, т.е. они более статичны.
А в других доках уже проще - типовая форма уже загружена в базу, можно сравнить и подкопипастить.
2. пользователь 27.08.12 13:46
Сообщение было скрыто модератором.
...
4. Поручик 4670 27.08.12 15:01 Сейчас в теме
Это одно НО сводит почти на нет ценность фичи. 1С, как всегда, к ложке мёда прилагает бочку дёгтя.
Lolmes; GATTUSO; DrAku1a; soulsteps; SirYozha; fishca; artbear; +7 Ответить
13. Bassgood 1425 29.08.12 12:45 Сейчас в теме
(4) Поручик, (6) glek, (11) AlexO, я так думаю, что это одно НО 1С сделала не случайно, они тем самым учли следующий момент: если возникнет необходимость открыть какую-либо форму объекта (возможно для каких-либо особых случаев или еще чего) - чтобы такая возможность у разработчика была несмотря на существование в конфигурации подобных подписок (иначе постоянно бы открывалась одна и та же форма, назначенная в подписке).
5. Поручик 4670 29.08.12 10:00 Сейчас в теме
Вот сейчас у меня в работе один проект по доработке УТ 11. Необходимо для несколько штатных документов добавить однотипные элементы формы и меню. Но использовать подписку я не хочу, так как нет уверенности, что вызов формы документов будет всегда осуществляться указанным способом.
20. Bassgood 1425 29.08.12 13:55 Сейчас в теме
(5) Поручик, можно попробовать воспользоваться добавлением в конфигурацию новых команд, в которых указать, чтобы они располагались где-нибудь на форме (в командном меню формы или в ее панели навигации), правда не всегда этим можно воспользоваться.
9. Dimasik2007 430 29.08.12 11:41 Сейчас в теме
Вот когда сделают размещение подписок на события в форме, возможность перегрузки имеющихся обработчиков и проч. - тогда будет сказка. Но по опыту, многие забьют на это дело и будут продолжать дальше крыжыть формы.
10. pumbaE 29.08.12 11:43 Сейчас в теме
(9) Dimasik2007, многие забивают на подписки о событиях, но это не мешает другим их использовать, а не пихать дополнительную процедуру в модуль проведения.
12. Dimasik2007 430 29.08.12 12:24 Сейчас в теме
(10) Тут уж в зависимости от задачи. Вот я, допустим, при расчете упр. цены в документе ОПЗС в процедуру ОбработкаПроведения вставил такой код

_Ценообразование.ЗафиксироватьЦены_ОПЗС(ЭтотОбъект, ТаблицаПоПродукции, СтруктураШапкиДокумента, Отказ);

Зачем мне тут подписка? Заново рассчитывать данные ТаблицаПоПродукции, СтруктураШапки и т.п?


(11) Не сделает - да и бог с ним. И так кормит) Да и порог вхождения минимальный.
15. pumbaE 29.08.12 13:04 Сейчас в теме
(12) Dimasik2007, конкретно этот пример неправильный для типовых и 8.2 в подписке обращаемся к ДополнительнымСвойствам:
 
Если Источник.ДополнительныеСвойства.Свойство("СтруктураШапкиДокумента")
	 И Источник.ДополнительныеСвойства.Свойство("СтруктураТабличныхЧастей") Тогда
    мСтруктураШапкиДокумента = Источник.ДополнительныеСвойства.СтруктураШапкиДокумента;

24. Dimasik2007 430 29.08.12 16:54 Сейчас в теме
(15) Да, к сожалению пример не правильный, в ОПЗС не заполняются ДополнительныеСвойства.
В том же документе ТребованиеНакладная они заполняются и их можно цеплять извне.
Там даже пишут "в лоб":
//Сделаем переменные доступными из подписок на события
ДополнительныеСвойства.Вставить("СтруктураШапкиДокумента", СтруктураШапкиДокумента);
ДополнительныеСвойства.Вставить("СтруктураТабличныхЧастей", Новый Структура("ТаблицаПоТоварам", ТаблицаПоТоварам));
17. AlexO 135 29.08.12 13:14 Сейчас в теме
(10) pumbaE,
а не пихать дополнительную процедуру в модуль проведения.

так даже и модуля проведения как такового нет. Так, скромная процедура на обработку события...
11. AlexO 135 29.08.12 11:47 Сейчас в теме
(9) Dimasik2007,
Вот когда сделают размещение подписок на события в форме, возможность перегрузки имеющихся обработчиков и проч.

1С никогда такого не сделает. Потому как изначально ей этого не сделано при написании платформы (откуда и проблема "одно НО").
А уж обращение и перегрузка стандартных событий форм/объектов - забудьте. Это 1С.
А не среда программирования.
14. tormozit 7136 29.08.12 13:03 Сейчас в теме
Название публикации не соответствует ее содержанию. Здесь описана подписка на событие менеджера объекта метаданных, а не формы.
16. Bassgood 1425 29.08.12 13:07 Сейчас в теме
(14) tormozit, событие относится к менеджерам объектов, но ведь само событие вызывается при получении формы прикладного объекта (то что подписка относится непосредственно к форме в заголовке ничего не сказано).
18. tormozit 7136 29.08.12 13:14 Сейчас в теме
(16) В общем рекомендую убрать двусмысленность из названия. Например "Подписка на событие "Обработка получения формы" менеджера объекта".
19. AlexO 135 29.08.12 13:15 Сейчас в теме
(18) tormozit,
так весь кайф студентам обломаешь :))
21. Bassgood 1425 29.08.12 14:01 Сейчас в теме
(19) AlexO, вы совершенно угадали, иначе студенты на схватят кайфа, ведь статья публиковалась конечно же не для просвещения такого знатока возможностей платформы как вы.
22. AlexO 135 29.08.12 14:37 Сейчас в теме
(21)
ну согласитесь же, что разбирать "Подписку на получение УФ" намного интереснее, чем какую-то там малохольную "Подписку на событие "Обработка получения формы" менеджера объекта" ;)
23. Bassgood 1425 29.08.12 15:26 Сейчас в теме
(22) AlexO, так оно и есть, особенно не интересна для многих будет тема с заголовком "Подписка на событие "Обработка получения формы" менеджера прикладного объекта, используемой для переопределения управляемой формы на сервере" =)
Мне кажется заголовок полно и кратно отражает содержание публикации (без лишних уточнений, в статье описано именно получение формы через подписку, а не то, какому модулю принадлежит это событие).
25. Поручик 4670 29.08.12 23:11 Сейчас в теме
Есть ещё одна причина, по которой эта фича в большинстве случаев останется невостребованной. Многие заказчики используют прежние версии платформы 8.2, в которой она отсутствует, и менять платформу желанием не горят.
26. Bassgood 1425 30.08.12 14:23 Сейчас в теме
(25) Поручик, со временем перейдут, всему свое время =)
27. Raminus 30.08.12 14:30 Сейчас в теме
Потестил, пока что не могу найти для себя применение такой возможности, но вещь бесспорно интересная думаю будут развивать.

(25) Поручик, бесспорно перейдут, нужна будет поддержка бух 3.х перейдут никуда не денутся :)
28. пользователь 09.02.19 19:00
Сообщение было скрыто модератором.
...
29. Lolmes 07.09.23 12:09 Сейчас в теме
Шел 2023 год, а нормальных подписок на события формы до сих пор нет. Мне вот например не нужно определять какую то форму, а нужно редактировать параметры выбора сразу в куче форм - неужели, нет способа, кроме как залезть в каждую форму?
30. Bassgood 1425 07.09.23 12:21 Сейчас в теме
(29) Если речь идет про типовую конфигурацию - то в модулях форм прикладных объектов в событии "ПриСозданииНаСервере" вызывается процедура переопределяемого общего модуля (его название сейчас не вспомню) - вот в нем то и можно переопределить в нужных формах практически все что угодно
31. Lolmes 07.09.23 14:20 Сейчас в теме
(30) Надо проверять, если в каждом доке такая процедура + есть не типовые документы. В общем не удобно и вендору должно быть стыдно, так как запрос есть, а воз и ныне там.
Оставьте свое сообщение