Псевдо подписка на открытие форм в типовых конфигурациях 1С.

02.06.09

База данных - Инструменты администратора БД

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

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

Всем известно что при внесении изменений в типовые конфигурации выгоднее руководствоваться принципом "Добавлять - лучше чем изменять". При небольших изменениях, например пользовательского интерфейса для облегчения последующего обновления лучше делать изменения программно. Это очевидно. И при открытии формы вставлять код, делающий изменения на форме, в процедуру события "При открытии".

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

В форме документа и элемента справочника - "УстановитьДоступностьПоляВводаНомера"

В форме списка и выбора документов -  "УстановитьОтборПоОрганизации"

Добавив в эти процедуры всего одну строчку кода вызывающую нашу процедуры - получаем псевдо подписку на событие "При открытии" большинства форм документов и справочников конфигурации не внося в сами формы ни строчки кода. т.е не изменяя их.  В самой процедуре определяем какая форма открылась например получив основной реквизит формы ,или любым другим способом и выполняем с формой все что необходимо - добавляем столбцы ТЧ, кнопки, переопределяем  обработчики событий формы и элементов формы и т.д

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

Вот... :)

Добавлено 02.06.2009

Сегодня tsd при обсуждении механизма редактирования добавленных реквизитов объектов предложил еще один вариант организации "псевдо подписки на открытие формы" и нетолько.

За  что ему бааальььшооооеее спасибо :)

А именно.

В своих последних типовых конфигурациях на 8 платформе фирма 1С реализовала такую полезную весчь как "Советы". Как любые ленивые программисты  - программисты фирмы 1С реализовали кнопку "Советы" программно. Т.е перед открытием формы вызывается процедура общего модуля "РаботаСДиалогами" - "УстановитьПодменюСоветы". Параметром ей передается "КоманднаяПанель". У передаваемой командной панели есть свойство "ИсточникДействия" - типа "Форма". Собственно она то нам и нужна!!! :)

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

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

Вот... :)

 

См. также

Автоподбор ролей для профилей и групп доступа в любых типовых базах 1С УТ 11, КА 2, ERP2, Розница 2/3, УНФ 16/3, БП 3, ЗУП 3 и подобных (УФ, Платформа 8.3.14+)

Инструменты администратора БД Роли и права 8.3.14 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Документооборот 1С:Зарплата и кадры государственного учреждения 3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Роли… Вы тратите много времени и сил на подбор ролей среди около 2400 в ERP или 1500 в Рознице 2, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 15.12.2023, версия 1.1.

12000 руб.

06.12.2023    2971    13    1    

34

SALE! 20%

Infostart УДиФ: Управление данными и формами

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8000 руб.

10.11.2023    3521    11    1    

34

SALE! 30%

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

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

3600 2520 руб.

14.01.2013    177733    1073    0    

849

Ускоренное проведение документов (x4), устранение ошибок 60/62 счетов и зачет авансов (Бухгалтерия 3.0)

Закрытие периода Инструменты администратора БД Корректировка данных Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Расширение «Оперативное проведение» в 4 раза уменьшает время проведения документов и закрытия месяца. Является комплексным решением проблем 62 и 60 счетов. Оптимизирует проведение при включенной функциональной опции «Раздельный учет НДС». Используется в более 10 организациях уже 2 года. Совместимо с конфигурацией Бухгалтерия 3.0 (+КОРП).

14400 руб.

29.04.2020    27374    79    146    

59

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

Инструменты администратора БД Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием Платные (руб)

Конфигурация Комплексная автоматизация 1.1 (и УПП 1.3 тоже) хранит файлы и изображения в справочнике Хранилище дополнительной информации в реквизите Хранилище типа ХранилищеЗначений. Та же история с ВложениямиЭлектроннойПочты. Но при этом присоединенные файлы в Электронном документообороте хранит в томах на диске. Эта доработка позволяет использовать стандартный механизм хранения файлов, изображений и вложений электронных писем в томах на диске. При этом можно разделить тома хранения по объектам конфигурации.

4200 руб.

10.11.2015    61313    88    59    

73

"Менеджер потоков 2.1": УПП: "Восстановление партий"

Инструменты администратора БД Платформа 1С v8.3 1С:Управление производственным предприятием Россия Бухгалтерский учет Управленческий учет Платные (руб)

Как оптимизировать то, что, считалось, не поддается оптимизации? Как повысить доступность базы данных? Как проводить самую «времяемкую» операцию не по паре раз в неделю, а по несколько раз в день*? Ответ есть!

20000 руб.

12.09.2019    11745    5    9    

7

Брандмауэр для сервера 1С Предприятие 8 - внешнее управление сеансами

Инструменты администратора БД Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

3600 руб.

06.02.2017    31107    31    18    

47

Хранилище файлов на SQL

Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Управленческий учет Платные (руб)

Привязка файлов / сканов к объектам 1С с сохранением их на SQL-сервере

12000 руб.

09.10.2019    10981    5    8    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Душелов 4013 19.12.08 09:11 Сейчас в теме
Давно этим пользуюсь и создаю программно элементы формы у типовых документов.
2. larisab 160 20.12.08 21:24 Сейчас в теме
Ну это касается 8, в ней всетаки легче обновлять, тут форму открыть и посмотреть можно и ту и другую.
А в семерке совсем туго обновлять, когда на форме бантиков добавлено.
Я при измении типовой, стараюсь форму не трогать без лишей необходимости.
Был случай, когда обновляла конфу, перенастроенную разными программистами и в течении лет 5 ни разу не обновляли толком, причем бухам говорили, что никто в городе такое не сможет сделать. Убила 25 часов, поставила.
На след.день звонят, оплачивать не будем, программа не работает. Оказывается пропал "бантик", а они без него жить не могут... Восстановить - 1 минута, но чуть не потеряла оплату недельной работы. С тех по не люблю программистов, которые меняют что-то на форме, не отражая это никак в коде или объектно.
20. tango 506 12.01.12 10:43 Сейчас в теме
(2) Лариса, имхо, предшественников не стоит пинать, ты ведь не знаешь, в каких условиях они были, а судя по твоим же словам (о звонке по бантику) - в не сладких. Полагаю, праведный (но тщательно скрываемый) гнев твой обращен должен быть как раз на "заказчика". Ну, и цена (именно цена за час) твоей работы в этом случае должна была быть такой, чтобы все эти приколы компенсировать. Если это было не так - обращай гнев свой на себя.
pavlo; brunen9; +2 Ответить
3. larisab 160 20.12.08 21:32 Сейчас в теме
(0) +1 Ставлю плюс, а его не видно, ставлю второй раз, грит, вы уже голосовли
4. tormozit 7136 20.12.08 23:01 Сейчас в теме
6. wildhog 469 22.12.08 09:54 Сейчас в теме
(4) Видел, читал, много думал. Очень полезная информация. Как говориться - в избранное.
Но, Вы предлагаете добавлять свои процедуры в обработчики событий ВСЕХ форм. А я предлагаю этого не делать, а воспользоваться инструментами которые предлагает сама типовая конфигурация. В некоторых случаях (я думаю часто, очень часто) вносимые изменения не особо существенны, но однотипны и множественны.
Привожу пример. Бухгалтерия жутко привыкла работать с артикулами номенклатуры. И хочет во всех документах, ТЧасти которых, содержат номенклатуру видеть ее артикул. Если использовать мой метод, для динамического добавления колонки артикула необходимо изменить всего одну процедуру в типовой. Конечно, процедуру вывода артикула всеже придеться добавлять в ручную, и тут Ваш метод - 100% решение.
Второй пример еще удачнее. Вывод в УТ в ТЧ документов доп.свойств той же номенклатуры. В УТ 10.3 это вообще делается в 2 строки. В процедуре УстановитьДоступностьПоляВводаНомера добавляем вывод колонки в ТЧ. А в "ПоказатьКодАртикул" выводим непосредственно значение. Выгода как говориться налицо, точнее на конфу :)
В общем хотел донести мысль о том, что типовые конфигурации очень часто предоставляют возможности "мягкого" изменения конфигурации, и эти возможно стоит использовать. Естественно по месту, по ситуации и с пониманием того, что делаешь.
(5) Виноват, исправлюсь :) Не разобрался с добавление гиперссылки...
7. wildhog 469 22.12.08 10:00 Сейчас в теме
(6) Неправильно выразился. Вместо "обработчики событий" читать "модули"...
5. tormozit 7136 20.12.08 23:03 Сейчас в теме
Кстати ссылка на статью http://infostart.ru/blogs/748/ у тебя не работает.
8. пользователь 28.12.08 15:20
Сообщение было скрыто модератором.
...
9. igor_gk 49 03.06.09 12:30 Сейчас в теме
Вот это какой-то гемор: "... В самой процедуре определяем какая форма открылась например получив основной реквизит формы ,или любым другим способом..."
А как-то красивее и проще можно?
10. inse0f 03.06.09 22:16 Сейчас в теме
(9) увы
я тоже с этим столкнулся

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

если раньше меня не сделают) подарю всем пряники к осени :)
11. wildhog 469 04.06.09 09:47 Сейчас в теме
(9, 10) Гемор говорите, проблема? :) Учитывая что за Вас уже все сделали в плане определения основного реквизита формы, и соответственно - что за форма открылась. Абсолютно никаких проблем. тем более ссылку как это сделать привел. А красивее и проще у меня не получилось... Есть идеи - поделитесь. Хотя бы направлением в какую сторону копать, эксковатор стоит под парами :)
Имхо , лучше один раз сделать процедуру - потом в 10 обновлениях горя не знать, чем постоянно помнить где- что добавил изменил.
12. igor_gk 49 04.06.09 15:01 Сейчас в теме
Вчера вот сидел думал, и вот чего придумал :)
(Сразу предупреждаю - мне нужно просто "поймать" форму)

// Вызывается при открытии форм элементов справочников и документов
// из ОбщиеМодули.РаботаСДиалогами.УстановитьДоступностьПоляВводаНомера(...)
Процедура Игорь_ПриОткрытииФормыЭлементаДокумента(ФормаОбъекта) Экспорт
Попытка
ФормаОбъекта_Имя=ФормаОбъекта.Метаданные().ПолноеИмя();
ПозицияТочки=Найти(ФормаОбъекта_Имя,".");
ВидОбъекта=Лев(ФормаОбъекта_Имя,ПозицияТочки-1);
НазваниеОбъекта=Сред(ФормаОбъекта_Имя,ПозицияТочки+1);
Элемент=?(ВидОбъекта="Справочник","элемента ","");
Сообщить ("Открыта форма "+Элемент+ВидОбъекта+"а """+НазваниеОбъекта+""".");
// ФормаОбъекта.Закрыть(); // А ведь эта строчка может работать...
Исключение
КонецПопытки;
КонецПроцедуры
14. wildhog 469 04.06.09 17:19 Сейчас в теме
(12) Млин, честно (извини за фомильярность) странный ты человек :)
Удалять гланды через ж... это по твоему нормально. а СКОПИРОВАТЬ четыре функции в свой общий модуль - слишком сложно.
Приведу тебе пример как я реализовал определение открытой формы. (использую функции из http://infostart.ru/blogs/748/)

ИмяОсновногоРеквизита = ЛксПолучитьИмяОсновногоРеквизитаФормы(Форма);
ОсновнойРеквизит = Форма[ИмяОсновногоРеквизита];
Если ТипЗнч(ОсновнойРеквизит) = Тип("ДокументОбъект.СчетНаОплату")
Сообщить("Открылась форма "+ОсновнойРеквизит);
КонецЕсли;

Тебе не кажется что несколько проще получилось?
15. igor_gk 49 04.06.09 17:41 Сейчас в теме
(14) "...Тебе не кажется что несколько проще получилось?"
Скажу больше - с функциями надежнее и правильнее, не нужно трястись, что 1С-ники прибьют свою "УстановитьДоступностьПоляВводаНомера", пользовать можно в любом месте, ну и вообще...
Но я ж делал только то что мне надо ;) и пользовал токо встроенные 1С-ные механизмы - что бы определить форму (для _моих_ задач) нужно всего 4-5 строчек, все. И никаких доп. ф-ций. Т.е. абсолютно ;)
13. igor_gk 49 04.06.09 15:12 Сейчас в теме
Забыл сказать - это в УПП.
16. chang 20.08.09 10:30 Сейчас в теме
а я что-то не понимаю, а почему просто не сделать подписку на событие ПередОткрытием, где определить тип источника и отказавшись от стандартной обработки открытия, получить форму документа этого источника и самостоятельно открыть?
17. artbear 1448 20.08.09 10:47 Сейчас в теме
(16) Где в 8.1 (мы же говорим о типовых конфах) видел подписку на события формы объектов??
Подписка возможна только на события объектов !
18. it_huntsman 10 16.11.10 09:28 Сейчас в теме
Спасибо, очень помогло когда потребовалось установить всем запрет на редактирование элемента формы "Ответственный".
19. lootinn 12.01.12 10:28 Сейчас в теме
Спасибо, метод удобный и написано доступней, чем в других подобных публикациях.
21. Bassgood 1425 09.02.12 18:33 Сейчас в теме
Ошибочное утверждение (подчеркнуто жирным):
"Таким образом мы, как не менее ленивые, чем программисты фирмы 1С можем использовать данный механизм не только для "псевдо подписки" на открытие формы, но и в некоторых случаях разместить обработчики событий элементов формы вне модуля формы."
Процедуры-обработчики событий элементов формы могут располагаться только в модуле самой формы, которой они принадлежат, т.е. процедуру по-любому придется описывать в модуле формы (если в ней есть необходимость).
22. wildhog 469 10.02.12 11:52 Сейчас в теме
(21) Zigfridish,
Имелось ввиду, что некоторые обработчики событий присутствуют практически во всех формах, и по сути вызывают функции общих модулей. Поэтому перехватив выполнение кода в общем модуле можно "изменить" действия выполняемые обработчиком события, или вообще выполнять что-то иное - тем самым фактически разместив обработчики событий элементов формы вне модуля формы )
23. Bassgood 1425 12.02.12 18:13 Сейчас в теме
(22)
Правильно, но все таки та фраза, которую я выделил в прошлом коменте, немного сбивает с толку, что имеется в виду исполнение алгоритма имеющегося обработчика события в общем модуле, а не в самой процедуре-обработчике формы =)
24. sweety-twetty 08.02.13 11:16 Сейчас в теме
Пользуюсь для создания элементов формы с помощью программного кода,но в данный момент возник вопрос: а можно ли в данной процедуре определить отказ от открытия формы?
25. wildhog 469 08.02.13 11:24 Сейчас в теме
(24)
Можно закрыть форму и все.
26. sweety-twetty 08.02.13 11:26 Сейчас в теме
(25) просто хочу при выполнении некоторых условий, чтобы доступа к форме не было для некоторых сотрудников.

Вы хотите сказать передать назад отказ=истина или что-то в этом роде?у меня передается в общий модуль Форма и Метаданные - или Фома.Закрыть()?
27. wildhog 469 08.02.13 11:32 Сейчас в теме
(26) Именно форма.закрыть();
Оставьте свое сообщение