Структурирование доработок обработчиков событий объектов и форм

Публикация № 1617976 15.03.22

Разработка - Универсальные функции

Обработчики адаптация подписки переопределяемый

В статье описан подход структурирования доработок обработчиков объектов и форм.

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

Суть подхода в том, чтобы для каждого объекта или формы вынести все доработанные  обработчики в отдельные общие модули, для каждого объекта/формы свой модуль.
Имя модуля конструируется по определенному шаблону, так чтобы по имени объекта или формы можно было программно получить модуль. Это позволит не привязываться к конкретным именам и типам в коде и все обработчики вызывать единообразно.

Для форм предлагается шаблон - ПрефиксКонфигурации_ТипМетаданных_ИмяМетаданных_Форма_ИмяФормы,

Например, для формы "Справочник.Номенклатура.Форма.ФормаЭлемента", имя модуля получится "мк_Справочник_Номенклатура_Форма_ФормаЭлемента".

Для объектов шаблон имени модуля - ПрефиксКонфигурации_ТипМетаданных_ИмяМетаданных

И тогда для справочника "Номенклатура", имя модуля будет "мк_Справочник_Номенклатура".

Вызов самих обработчиков событий объектов будет выполнятся через соответствующий обработчик подписки на событие, напимер для справочников это общий модуль мк_СобытияСправочников. Вызов обработчиков событий форм будет вызываться через соответствующие методы общего модуля  мк_СобытияФорм, в этот модуль вызовы будут приходить из модуля МодификацияКонфигурацииПереопределяемый.

Схематично вызов для формы будет выглядеть так:

Ниже примеры кода для события справочника ПередЗаписью.

Общий обработчик объекта в модуле мк_СобытияСправочников

Процедура ПередЗаписью(Источник, Отказ) Экспорт

    Если Источник.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    // Определение общего модуля объекта.
    Модуль = ОбщийМодульОбъекта(Источник);

    // Параметры обработчиков.
    ПараметрыОбработчиков = ПараметрыОбработчиковОбъекта(Модуль);

    Если ПараметрыОбработчиков.ПередЗаписью Тогда
        Модуль.ПередЗаписью(Источник, Отказ);   
    КонецЕсли;  

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

Метод определение общего модуля:

Функция ОбщийМодульОбъекта(Источник)
	
	ТипИсточника = ТипЗнч(Источник);
	
	ИмяОбъекта = Метаданные.НайтиПоТипу(ТипИсточника).ПолноеИмя();
	Префикс = мк_ОбщегоНазначения.ПрефиксИмен();
	ИмяОбъекта = СтрЗаменить(ИмяОбъекта, ".", "_");
	ИмяМодуля = СтрШаблон("%1%2", Префикс, ИмяОбъекта);
	
	Модуль = ОбщийМодуль(ИмяМодуля);
	
	Возврат Модуль;

КонецФункции 

Метод определение параметров обработчиков объекта, который определит конкретные обработчики в модуле объекта:

Функция ПараметрыОбработчиковОбъекта(Модуль)

	ПараметрыОбработчиков = ПараметрыОбработчиковПоУмолчанию();
	
	Если Модуль = Неопределено Тогда
		Возврат ПараметрыОбработчиков;
	КонецЕсли;	
		
	Модуль.ОпределитьПараметрыОбработчиков(ПараметрыОбработчиков);
	
	Возврат ПараметрыОбработчиков; 

КонецФункции

// Инициализирует набор параметров, задающих флаги выполнения обработчиков.
//
// Возвращаемое значение:
//   Структура   - Обработчики, переопределенные для объекта.
//
Функция ПараметрыОбработчиковПоУмолчанию()
	
	ПараметрыОбработчиков = Новый Структура;
	
	ПараметрыОбработчиков.Вставить("ПередЗаписью", Ложь);
	ПараметрыОбработчиков.Вставить("ПриЗаписи", Ложь);
	
	ПараметрыОбработчиков.Вставить("ПередУдалением", Ложь);
	
	ПараметрыОбработчиков.Вставить("ОбработкаЗаполнения", Ложь);
	ПараметрыОбработчиков.Вставить("ОбработкаПроверкиЗаполнения", Ложь);
	
	ПараметрыОбработчиков.Вставить("ОбработкаПолученияПредставления", Ложь);
	ПараметрыОбработчиков.Вставить("ОбработкаПолученияФормы", Ложь);

	Возврат ПараметрыОбработчиков;

КонецФункции

 

Пример модуля модуля для справочника Номенклатура -  мк_Справочник_Номенклатура

// Инициализирует набор параметров, задающих флаги выполнения обработчиков.
//
// Параметры:
//  ПараметрыОбработчиков	 - Структура - Параметры обработчиков.
//
Процедура ОпределитьПараметрыОбработчиков(ПараметрыОбработчиков) Экспорт

	ПараметрыОбработчиков.Вставить("ПередЗаписью", Истина);

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

// Процедура - обработчик подписки на событие "ПередЗаписью".
//	См. "СправочникОбъект.ПередЗаписью" в синтакс-помощнике.
//
// Параметры:
//  Источник  - СправочникОбъект - Источник события.
//  Отказ  - Булево - Флаг отмены.
//
Процедура ПередЗаписью(Источник, Отказ) Экспорт
	
	ЗаполнитьИдентификатовAD(Источник);

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

 

Какие преимущества дает такой подход:

- Простота подключения новых объектов и новых обработчиков.

- Код получается более лучше структурирован. Все доработки объекта/формы собраны в одном модуле, проще ориентироваться в коде.

- Уменьшение конфликтов при совместной разработке.

 

Требования

  • Платформа 8.3.10 и выше.
  • Библиотека стандартных подсистем 2.4 и выше

Установка

Установите расширение или скопируйте объекты себе в конфигурацию.

 

Представленный подход реализован в виде расширения, исходники https://github.com/Bazil1c/events-handlers-1c

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Cmapnep 16 16.03.22 09:46 Сейчас в теме
В методе ОбщийМодульОбъекта() используется поиск по метаданным
Для каждой открываемой формы это лишняя нагрузка
Метод лучше вынести в отдельный модуль с повторным использованием
2. Bazil 545 17.03.22 14:21 Сейчас в теме
(1) Да, пожалуй, так лучше.
Оставьте свое сообщение

См. также

Программные перечисления, ч.2: приемы кэширования при разработке

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

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

30.10.2017    31717    unichkin    18    

93

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении

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

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    60597    tormozit    53    

144

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере

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

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

10.09.2017    58111    tormozit    79    

151

Универсальные функции с примерами использования

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

26.02.2016    45843    unichkin    48    

308

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

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

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

23.05.2015    15748    moolex    6    

26

УстановитьСсылкуНового() как ход оптимизации!

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

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

22.10.2014    64807    logarifm    85    

150

[8.2] Глобальные переменные в контексте сервера (управляемое приложение)

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

Можно ли в 8.2 на сервере хранить ссылку на объект внешней компоненты? Можно! Рассмотрим на примере... Эта статья - отчет на вопрос в http://infostart.ru/forum/forum14/topic29689/

09.12.2009    39755    Душелов    34    

80

Проверка заполненности реквизитов через подписку на событие

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

Навеяло от...http://infostart.ru/public/203664/ но с другого бока. Пришли пингвины, заявили... (а база перекурочена предшественниками как черепаха богом) хотим чтоб если есть в документе такой то реквизит, чтоб он всегда был заполнен... или же никогда там не выбирались группы и перечислили наименования справочников при ссылке на которые не должно быть пустот. И что? Я рыжий сидеть дня два прсматривать каждый из почти двух сотен доков? Потому и уродились три подписки на события. Описание в тексте Выбор групп проверяется на событие ПередЗаписью а проверка реквизитов на событии ОбработкаПроверкиЗаполнения

16.10.2013    15218    ser6702    7    

9

Стандартные доработки. Запрет изменения документов “ЗаказовПокупателей”, по которым есть движения.

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

Стандартные доработки. Запрет изменения документов “ЗаказовПокупателей”, по которым есть движения. Эта статья описывает процесс доработки типовых 1С конфигураций, для добавления возможности запретить редактировать документы, на основании которых другими документами уже сделаны движения в регистрах накопления. Это позволяет предотвратить часть ошибок, возникающих из-за действий пользователя задним числом.

07.04.2011    28659    milkers    25    

28

Сканируем без сканера или MXL to JPG

Внешние источники данных Универсальные функции Печатные формы Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Хотите конвертировать документы в формат изображения менее чем за минуту, не имея сканера? Тогда эта статья для вас.

24.05.2012    35417    shakmaev    47    

142

Универсальные функции ЗУП 3.1 / ЗКГУ 3.1, которые помогут в разработке

Универсальные функции Зарплата Кадровый учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Бухгалтерский учет Бесплатно (free)

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

14.11.2018    230086    GeterX    175    

1005

Форма выбора (подбор) в управляемых формах

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

Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.

08.05.2020    178523    user5300    40    

288

Золотые костыли

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

Немного о программировании.

23.08.2018    12304    vasilev2015    39    

43

Чтение CSV (быстрое)

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Почему то из гугла до сих пор нет ссылки на код процедуры быстро читающей csv... Загрузка из файла CSV c помощью ADODB.Connection провайдера Microsoft.Jet.OLEDB.

31.03.2021    7659    kuzyara    7    

17

Выполнение длительных операций в фоновых заданиях

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

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

19.01.2023    2031    programmer_2019    6    

26

Функции для преобразования справочников и документов в соответствие и обратно

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

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

01.11.2021    1834    avalakh    5    

19

Система контроля ведения учета [БСП]

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

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    5470    quazare    8    

101

Конвейеры обработки сообщений

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Проект методики разработки решений для последовательной обработки сообщений или объектов данных по принципу построения конвейера.

27.06.2022    1682    zhichkin    13    

17

Выгрузка данных в Excel с добавлением формул (нюансы формирования формул)

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

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

30.05.2022    3459    Zlohobbit    5    

19

Хитрости СКД. Часть 3

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

Столкнулся с тем, что мне приходится писать гору отчетов. Во многих приходится использовать повторяющиеся приемы. Решил написать шпаргалку, которая, надеюсь пригодится не только мне. В этой статье: Объединение ячеек в отчете только на определенном уровне иерархии, Постобработка итогов в табличном документе, Скрытие колонок в зависимости от количества месяцев в периоде.

28.05.2022    6657    milkers    11    

87

Базовые принципы работы с регламентными заданиями подсистем БСП

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

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

22.05.2022    9255    quazare    24    

55

Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП

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

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

25.04.2022    10135    quazare    11    

130

Вывод табличных документов с разной ориентацией страниц в один pdf файл

Универсальные функции Платформа 1С v8.3 Россия Бесплатно (free)

Привожу код для вывода нескольких табличных документов c разной ориентацией страниц в один файл pdf.

06.04.2022    2694    sdjoker    5    

28

Полезные встроенные функции для работы с печатными формами и не только на УТ 11.4 и БП 3.0 (сравнение)

Универсальные функции Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бесплатно (free)

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

10.07.2020    15044    quazare    7    

86

Полезный код для программистов 1С (часть 3). Подготовка печатных форм + подсистема Управление печатью (БСП)

БСП (Библиотека стандартных подсистем) Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

07.03.2022    9815    vandalsvq    0    

56

Убираем параметры из отбора СКД

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

Заметка о некоторых технических нюансах параметров данных и отборов СКД.

17.02.2022    5388    Yashazz    29    

31

Конвертируем печатную форму pdf в картинку (jpg, gif, png и прочие) на сервере

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

Была поставлена интересная задача конвертировать печатную форму в файл картинку. По условию задачи клиенту на почту нужно присылать только файл картинку (jpg, gif).

22.12.2021    6341    John_d    25    

46

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

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

Простая и удобная среда разработки 1С:Предприятия позволяет практически любому человеку начать работать под капотом 1С - в конфигураторе. Время идет, новички становятся программистами, специалистами, а об удобных приемах работы узнают годами, по ходу своего карьерного пути. А здорово было бы, если бы все знали удобные приемы в начале своего пути? Эти несколько приемов будут полезны новичкам, так как они затрагивают ту область работы, с которой приходится сталкиваться в начале карьеры.

12.11.2021    13534    acces969    95    

142

Простейший способ учета изменений управляемых форм объектов 1С

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

Описание методологии, позволяющей контролировать список изменений форм + вспомогательные функции программного изменения форм. Пригодятся при внесении изменений в расширениях, если есть необходимость видеть и контролировать все сделанные с формой изменения.

02.11.2021    2043    avalakh    13    

20

Программно свернуть/развернуть узел динамического списка (с основной таблицей). Жирная точка над всеми "i".

Работа с интерфейсом Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Какой пользователь не мечтал поменьше тыркать кнопкой? Особенно в малюсенькие +/- в "древесных" динамических списках. Если вас тоже озадачили, чтобы, при выборе узла дерева сами развернулись все его вложенные элементы , а при выборе другого узла - так же автоматом свернулась ранее развернутая ветка (причем эти узлы могут находится в разных "отношениях" друг с другом)... То вам - сюда.

08.10.2021    3837    e-9    13    

21

Из Word в табличный документ

Универсальные функции Платформа 1С v8.3 Платформа 1C v8.2 Бесплатно (free)

Быстро и просто: текст, списки, таблицы. Готовый код

18.08.2021    4720    Yashazz    6    

63

Префиксация объектов - полезный типовой функционал БСП

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

В данной публикации предлагаю рассмотреть основные типовые возможности библиотеки стандартных подсистем (БСП), касаемые префиксации объектов конфигураций.

21.06.2021    10848    quazare    4    

61

Своя функция &Вместо &ИзменениеИКонтроль

Универсальные функции Платформа 1С v8.3 Россия Бесплатно (free)

Как добавить контроль в расширения, если не доверяешь аннотации &ИзменениеИКонтроль.

06.06.2021    16494    AntonProgma    171    

18

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

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

Долго искал решение: как при выводе строк заполнить значениями колонки, которые созданы программно, чтобы, не было тормозов при стандартном поиске. И с минимальными изменениями (легко контролируемыми, при обновлении).

07.04.2021    3602    Vlad_CK    9    

25

Лайфхаки для разработчиков 1С. Часть 1

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

Собрали 20 лайфхаков, которые используют наши программисты при работе с 1С. Формы, контрагенты, СКД, процедуры, глюки платформы и многое другое. В этой статье публикуем первую часть.

30.09.2020    9651    Neti    47    

68

Сохранение настроенного запроса набора данных СКД

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

Как сохранить запрос набора данных СКД в том виде, каким он будет выполнен системой для открытия в консоли запросов с диска ИТС.

09.11.2020    2424    Serge R    0    

21

Создание документа Установка цен номенклатуры без записи документа

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

Рабочий механизм создания документа Установка цен номенклатуры в КА 2 и УТ 11, без сохранения документа и с рабочим отображением заполненных данных.

11.03.2021    3635    Vladimir_D    10    

16