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

02.06.09

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

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

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

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

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

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

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

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

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

Вот... :)

Добавлено 02.06.2009

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

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

А именно.

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

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

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

Вот... :)

 

См. также

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    14231    108    46    

108

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

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

15000 руб.

10.11.2023    11881    45    27    

67

Инструменты администратора БД Роли и права Системный администратор Программист Пользователь 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, пытаясь понять какими правами они обладают? Вы все время смотрите права в конфигураторе или отчетах чтоб создать нормальные профили доступа? Вы хотите наглядно видеть какие права дает профиль и редактировать все в простом виде? А может хотите просто указать подсистему и дать права на просмотр и добавление на объекты и не лезть в дебри прав и чтоб обработка сама подобрала нужные роли? Все это теперь стало возможно! Обновление от 18.09.2024, версия 1.2

18000 руб.

06.12.2023    10632    47    8    

78

SALE! %

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

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

4800 3840 руб.

14.01.2013    191142    1152    0    

920

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

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

14400 руб.

29.04.2020    33808    108    152    

75

Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

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

3600 руб.

06.02.2017    32613    145    18    

51

Архивирование (backup) Инструменты администратора БД Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Данная разработка позволит решить вопрос с резервным копированием Ваших баз в автоматическом режиме, расположенных на сервере 1С. Система умеет ставить блокировки на вход, блокировать фоновые задания, принудительно отключать сеансы пользователей. И все это система делает в автоматически при создании бэкапа (или через команду). Выгрузка происходит в родной формат 1С - .dt. Так же система умеет архивировать данные выгрузки с установкой пароля. Умеет менять расширение файла zip или dt на любое указанное вами, что позволит сохранить выгрузки от шифровальщика. Может удалять старые копии выгрузок, оставляя указанное количество резервных копий, начиная с самой поздней. Только для WINDOWS!

6000 руб.

06.11.2012    73731    629    45    

88

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

Многие сталкиваются с проблемой когда изображения, находящиеся в базе разные по объему и размерам. Менеджеры могут добавить файлы в очень высоком разрешении, объемом свыше 20 Мегабайт. База данных становится слишком большой, выгрузка на сайт идёт медленно и требуется много место на хостинге. Как сжать картинки и уменьшить размер базы 1С? Это можно сделать с помощью данной обработки. Существует возможность выбрать различные варианты для того чтобы уменьшить картинки: в разы, в процентах от первоначального объема, а также сделать картинки одинаковой ширины. В результате размер базы 1С значительно сократится (в зависимости от количества и размера картинок), а изображения станут небольшого объема, равными по ширине, почти без потери качества. Работает на управляемых формах для УТ 11, КА, ERP.

3000 руб.

21.07.2022    10160    10    4    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Душелов 4021 19.12.08 09:11 Сейчас в теме
Давно этим пользуюсь и создаю программно элементы формы у типовых документов.
2. larisab 160 20.12.08 21:24 Сейчас в теме
Ну это касается 8, в ней всетаки легче обновлять, тут форму открыть и посмотреть можно и ту и другую.
А в семерке совсем туго обновлять, когда на форме бантиков добавлено.
Я при измении типовой, стараюсь форму не трогать без лишей необходимости.
Был случай, когда обновляла конфу, перенастроенную разными программистами и в течении лет 5 ни разу не обновляли толком, причем бухам говорили, что никто в городе такое не сможет сделать. Убила 25 часов, поставила.
На след.день звонят, оплачивать не будем, программа не работает. Оказывается пропал "бантик", а они без него жить не могут... Восстановить - 1 минута, но чуть не потеряла оплату недельной работы. С тех по не люблю программистов, которые меняют что-то на форме, не отражая это никак в коде или объектно.
20. tango 546 12.01.12 10:43 Сейчас в теме
(2) Лариса, имхо, предшественников не стоит пинать, ты ведь не знаешь, в каких условиях они были, а судя по твоим же словам (о звонке по бантику) - в не сладких. Полагаю, праведный (но тщательно скрываемый) гнев твой обращен должен быть как раз на "заказчика". Ну, и цена (именно цена за час) твоей работы в этом случае должна была быть такой, чтобы все эти приколы компенсировать. Если это было не так - обращай гнев свой на себя.
pavlo; brunen9; +2 Ответить
3. larisab 160 20.12.08 21:32 Сейчас в теме
(0) +1 Ставлю плюс, а его не видно, ставлю второй раз, грит, вы уже голосовли
4. tormozit 7250 20.12.08 23:01 Сейчас в теме
6. wildhog 470 22.12.08 09:54 Сейчас в теме
(4) Видел, читал, много думал. Очень полезная информация. Как говориться - в избранное.
Но, Вы предлагаете добавлять свои процедуры в обработчики событий ВСЕХ форм. А я предлагаю этого не делать, а воспользоваться инструментами которые предлагает сама типовая конфигурация. В некоторых случаях (я думаю часто, очень часто) вносимые изменения не особо существенны, но однотипны и множественны.
Привожу пример. Бухгалтерия жутко привыкла работать с артикулами номенклатуры. И хочет во всех документах, ТЧасти которых, содержат номенклатуру видеть ее артикул. Если использовать мой метод, для динамического добавления колонки артикула необходимо изменить всего одну процедуру в типовой. Конечно, процедуру вывода артикула всеже придеться добавлять в ручную, и тут Ваш метод - 100% решение.
Второй пример еще удачнее. Вывод в УТ в ТЧ документов доп.свойств той же номенклатуры. В УТ 10.3 это вообще делается в 2 строки. В процедуре УстановитьДоступностьПоляВводаНомера добавляем вывод колонки в ТЧ. А в "ПоказатьКодАртикул" выводим непосредственно значение. Выгода как говориться налицо, точнее на конфу :)
В общем хотел донести мысль о том, что типовые конфигурации очень часто предоставляют возможности "мягкого" изменения конфигурации, и эти возможно стоит использовать. Естественно по месту, по ситуации и с пониманием того, что делаешь.
(5) Виноват, исправлюсь :) Не разобрался с добавление гиперссылки...
7. wildhog 470 22.12.08 10:00 Сейчас в теме
(6) Неправильно выразился. Вместо "обработчики событий" читать "модули"...
5. tormozit 7250 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 470 04.06.09 09:47 Сейчас в теме
(9, 10) Гемор говорите, проблема? :) Учитывая что за Вас уже все сделали в плане определения основного реквизита формы, и соответственно - что за форма открылась. Абсолютно никаких проблем. тем более ссылку как это сделать привел. А красивее и проще у меня не получилось... Есть идеи - поделитесь. Хотя бы направлением в какую сторону копать, эксковатор стоит под парами :)
Имхо , лучше один раз сделать процедуру - потом в 10 обновлениях горя не знать, чем постоянно помнить где- что добавил изменил.
12. igor_gk 49 04.06.09 15:01 Сейчас в теме
Вчера вот сидел думал, и вот чего придумал :)
(Сразу предупреждаю - мне нужно просто "поймать" форму)

// Вызывается при открытии форм элементов справочников и документов
// из ОбщиеМодули.РаботаСДиалогами.УстановитьДоступностьПоляВводаНомера(...)
Процедура Игорь_ПриОткрытииФормыЭлементаДокумента(ФормаОбъекта) Экспорт
Попытка
ФормаОбъекта_Имя=ФормаОбъекта.Метаданные().ПолноеИмя();
ПозицияТочки=Найти(ФормаОбъекта_Имя,".");
ВидОбъекта=Лев(ФормаОбъекта_Имя,ПозицияТочки-1);
НазваниеОбъекта=Сред(ФормаОбъекта_Имя,ПозицияТочки+1);
Элемент=?(ВидОбъекта="Справочник","элемента ","");
Сообщить ("Открыта форма "+Элемент+ВидОбъекта+"а """+НазваниеОбъекта+""".");
// ФормаОбъекта.Закрыть(); // А ведь эта строчка может работать...
Исключение
КонецПопытки;
КонецПроцедуры
14. wildhog 470 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 1565 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 1227 09.02.12 18:33 Сейчас в теме
Ошибочное утверждение (подчеркнуто жирным):
"Таким образом мы, как не менее ленивые, чем программисты фирмы 1С можем использовать данный механизм не только для "псевдо подписки" на открытие формы, но и в некоторых случаях разместить обработчики событий элементов формы вне модуля формы."
Процедуры-обработчики событий элементов формы могут располагаться только в модуле самой формы, которой они принадлежат, т.е. процедуру по-любому придется описывать в модуле формы (если в ней есть необходимость).
22. wildhog 470 10.02.12 11:52 Сейчас в теме
(21) Zigfridish,
Имелось ввиду, что некоторые обработчики событий присутствуют практически во всех формах, и по сути вызывают функции общих модулей. Поэтому перехватив выполнение кода в общем модуле можно "изменить" действия выполняемые обработчиком события, или вообще выполнять что-то иное - тем самым фактически разместив обработчики событий элементов формы вне модуля формы )
23. Bassgood 1227 12.02.12 18:13 Сейчас в теме
(22)
Правильно, но все таки та фраза, которую я выделил в прошлом коменте, немного сбивает с толку, что имеется в виду исполнение алгоритма имеющегося обработчика события в общем модуле, а не в самой процедуре-обработчике формы =)
24. sweety-twetty 08.02.13 11:16 Сейчас в теме
Пользуюсь для создания элементов формы с помощью программного кода,но в данный момент возник вопрос: а можно ли в данной процедуре определить отказ от открытия формы?
25. wildhog 470 08.02.13 11:24 Сейчас в теме
(24)
Можно закрыть форму и все.
26. sweety-twetty 08.02.13 11:26 Сейчас в теме
(25) просто хочу при выполнении некоторых условий, чтобы доступа к форме не было для некоторых сотрудников.

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