Что такое обработчик события и как его создать в 1с
Перейти к содержимому

Что такое обработчик события и как его создать в 1с

  • автор:

Создание обработчиков событий

В зависимости от способа вызова существует два типа обработчиков событий: с назначаемыми именами и с фиксированными именами.

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

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

В этот момент 1C:EDT связывает событие элемента с некоторым именем и это же имя дает процедуре, которая будет обрабатывать данное событие. Шаблон такой процедуры она вставляет в модуль, и вы можете писать тело этой процедуры.

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

Чтобы создать обработчик события с помощью контекстной подсказки, установите курсор в ту строку модуля, в которую может быть добавлено объявление процедуры. Нажмите Ctrl+Пробел , чтобы вызвать контекстную подсказку, а затем еще раз Ctrl+Пробел , чтобы переключить ее на список доступных процедур и шаблонов.

Двойным кликом выберите нужную процедуру. Шаблон обработчика будет добавлен в модуль.

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

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

Процедуры-обработчики событий

Особенностью обработки событий среде 1С:Предприятия 8 является то, что имя процедуры-обработчика в одних случаях должно совпадать с именем события, а в других случаях может от него отличаться. Данная статья написана, чтобы внести ясность в этом вопросе.

Обратите внимание, что термин «Предопределенная процедура», который использовался в версии 7.х, теперь заменен на «процедура-обработчик события» или просто «обработчик события».

ПРАВИЛО №1. Если процедура-обработчик события относится к форме или элементу управления, то ее обязательно нужно указывать в палитре свойств для формы или элемента управления.

Ниже показана палитра свойств для формы элемента справочника «Номенклатура» с несколькими назначенными обработчиками событий:

За информацией о приемах работы с этой частью палитры свойств обращайтесь к документации: книга «Конфигурирование и администрирование», «Глава 3. Объекты конфигурации => Свойства элементов управления => Категория свойств События» (стр. 1 — 204)

Обратите внимание на важный момент, имя процедуры-обработчика событий может не совпадать с именем события . Для элементов управления чаще всего так и бывает, например, процедура «ТипЦенПриИзменении» обрабатывает событие «ПриИзменении» поля ввода для реквизита «ТипЦен», как показано на следующем рисунке:

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

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

ПРАВИЛО №2. Процедуры-обработчики событий, расположенные в модуле приложения, модуле внешнего соединения, модуле прикладного объекта должны называться точно так, как называются соответствующие события.

Поясним это правило на конкретных примерах:

1. Процедуры-обработчики событий, расположенные в модуле приложения или модуле внешнего соединения, совпадают с именами событий:

  • ПередНачаломРаботыСистемы
  • ПриНачалеРаботыСистемы
  • ПриЗавершенииРаботыСистемы
  • ПередЗавершениемРаботыСистемы
  • ОбработкаВнешнегоСобытия

2. Имена процедур-обработчиков событий, расположенных в модуле объекта, тоже строго соответствуют именам событий:

для модуля документа (события объекта типа «ДокументОбъект»)

  • ПередЗаписью
  • ПриЗаписи
  • ПриУдалении
  • ПриКопировании
  • ОбработкаЗаполнения (для обработки «ввода на основании»)
  • ОбработкаПроведения
  • ОбработкаУдаленияПроведения
  • ПриУстановкеНовогоНомера

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

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

  • ПередЗаписью
  • ПриЗаписи

Ниже приведены несколько важных моментов, которые полезно помнить при работе с событиями:

Примечание 1. Событие ПередЗаписью прикладного объекта отличается от события ПередЗаписью формы, связанной с этим прикладным объектом. Обработчик события в модуле формы вызывается при интерактивной записи, а обработчик в модуле объекта при любом способе записи элемента в базу данных.

Примечание 2. Если в процедурах-обработчиках модуля объекта нужно обратиться к самому объекту (текущий элемент справочника, текущий документ и т.д.), то для этого можно использовать свойство ЭтотОбъект. Оно содержит объект типа «СправочникОбъект», «ДокументОбъект» и т.д.

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

Информационные системы / Курсовая_6_семестр / Учебники / Радченко М.Г. 1С- Предприятие 8.3. Практическое пособие разработчика. Примеры и типовые приемы (2013) (1)

В разделе Оказание услуг выполним команду создания документа Оказание услуги из подменю Создать и заполним его следующим образом (рис. 4.28).

Рис. 4.28. Создание документа «Оказание услуги № 1»

Обратитевнимание,чтосклад Основной подставляетсяпоумолчанию, а для полей Мастер и Клиент выполняется проверка заполнения. А также при вводе цены и количества в табличную часть документа Оказание услуги сумма пересчитывается по нашему алгоритму.

152 1С:Предприятие 8.3. Практическое пособие разработчика

; ; Для чего предназначен объект конфигурации «Документ»? ; ; Какими характерными особенностями обладает документ?

; ; Для чего предназначены реквизиты и табличные части документа?

; ; Какие существуют основные формы документа? ; ; Что такое проведение документа?

; ; Как создать объект конфигурации «Документ» и описать его основную структуру?

; ; Как создать новый документ и заполнить его данными? ; ; Как создать собственную форму документа?

; ; Что такое конструктор форм? ; ; Что такое редактор форм? ; ; Что такое элементы формы?

; ; Что такое события, и с чем они связаны?

; ; Что такое обработчик события, и как его создать? ; ; Что такое модуль, и для чего он нужен?

; ; Зачем нужны общие модули?

; ; Что такое типообразующие объекты?

Теоретическое

Ориентировочная продолжительность занятия – 2 часа.

Механизм основных форм.

Контекст модуля формы.

Форма как программный объект.

Процедуры – обработчики событий в модуле формы.

Как понять то, что написано в модуле формы.

Как понять работу кода на встроенном языке . .

Анализ кода с помощью синтакс-помощника.

Анализ кода с помощью отладчика.

Объекты, объекты, объекты… . .

Сервер и клиенты.

Компиляция общих модулей . .

Исполнение кода на клиенте и на сервере.

154 1С:Предприятие 8.3. Практическое пособие разработчика

Чтобы не усложнять восприятие и без того объемного предыдущего занятия «Документы», все теоретические моменты были вынесены в это отдельное занятие. На нем будут подробно рассмотрены вопросы, которые мы опускали или бегло проходили ранее.

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

Однако если прямо сейчас вы не в состоянии усвоить этот раздел, можно его пропустить и вернуться к нему позднее. На выполнение сквозного примера разработки учебной конфигурации, рассмотренного в данной книге, это никак не повлияет. Итак…

Механизм основных форм

На предыдущем занятии (стр. 137) мы создали форму документа Приходная накладная и назначили эту форму основной. Что это значит?

У всех прикладных объектов конфигурации существует некоторое количество основных форм. Они служат для отображения данных объекта в том или ином виде.

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

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

Создание этих форм происходит динамически, в процессе работы системы. Форма создается в тот момент, когда к ней происходит обращение. Причем не важно, интерактивное это обращение или программное.

Так, форма списка для справочника Клиенты будет создана как при интерактивном выборе в меню Все функции  Справочники  Клиенты ,

так и при программном вызове глобального метода ПолучитьФорму() (листинг 5.1).

Листинг 5.1. Программный вызов метода «ПолучитьФорму()»

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

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

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

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

На предыдущем занятии (стр. 141) мы создавали обработчики событий ПриИзменении у некоторых элементов формы. Что это такое?

При работе с событиями на платформе «1С:Предприятие» следует различать два типа событий: события, связанные с формой и ее элементами, и все остальные.

Разница заключается в том, что обработчики событий, связанных с формой и ее элементами, – назначаемые, а обработчики всех остальных событий – фиксированные.

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

156 1С:Предприятие 8.3. Практическое пособие разработчика

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

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

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

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

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

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

Текст программы, содержащийся в модулях, будет использоваться платформой в заранее известные моменты работы системы «1С:Предприятие» – события , о которых мы рассказывали ранее.

В «1С:Предприятии» существуют следующие виды модулей.

Модуль управляемого приложения . Модуль управляемого прило-

жения выполняется при старте и окончании работы системы «1С:Предприятие» в режимах тонкого клиента и веб-клиента.

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

Заливкой выделены события, выполняющиеся в транзакции записи.

Последовательность событий при проведении документа из формы документа (провести и закрыть)

Заливкой выделены события, выполняющиеся в транзакции записи.

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

Заливкой выделены события, выполняющиеся в транзакции записи.

Обработчики событий

Расширение управляемой формы для документа. Возникает на клиенте перед выполнением записи объекта из формы. Процедура-обработчик данного события вызывается перед вызовом процедуры-обработчика события ПередЗаписью .

  • Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , запись выполнена не будет и будет вызвано исключение. Значение по умолчанию: Ложь .
  • ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения». Параметр РежимПроведения может отсутствовать, если режим проведения в документе не определен.

Примечание: В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере .

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

  • Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , запись выполнена не будет и будет вызвано исключение. Значение по умолчанию: Ложь .
  • ТекущийОбъект , тип ДокументОбъект.ИмяДокумента . Записываемый объект.
  • ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».

Возникает перед выполнением записи объекта. Процедура-обработчик вызывается после начала транзакции записи, но до начала записи документа.

  • Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись выполнена не будет и будет вызвано исключение. Значение по умолчанию: Ложь .
  • РежимЗаписи , тип РежимЗаписиДокумента . В параметр передается текущий режим записи документа. Позволяет определить в теле процедуры режим записи. Изменение значения параметра позволяет изменить режим записи.
  • РежимПроведения , тип РежимПроведенияДокумента . В данный параметр передается текущий режим проведения. Изменение значения параметра позволяет изменить режим проведения.

Возникает при записи объекта. Процедура-обработчик вызывается после записи объекта в базу данных, но до окончания транзакции записи.

  • Отказ , тип Булево . Признак отказа от записи документа. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись документа выполнена не будет. Значение по умолчанию: Ложь .

Расширение управляемой формы для документа. Возникает на сервере при записи объекта из формы. Процедура-обработчик вызывается после записи объекта (после события ПриЗаписи объекта) в базу данных, но до окончания транзакции записи.

  • Отказ , тип Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись произведена не будет. Значение по умолчанию: Ложь .
  • ТекущийОбъект , тип ДокументОбъект.ИмяДокумента . Записываемый документ.
  • ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».

Расширение управляемой формы для документа. Вызывается после записи объекта на сервере и после завершения транзакции.

  • ТекущийОбъект , тип ДокументОбъект.ИмяДокумента . Записываемый объект.
  • ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».

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

  • ПараметрыЗаписи , тип Структура . Структура, содержащая параметры записи. Для формы документа существует два предопределенных параметра — РежимЗаписи и РежимПроведения . Они добавляются автоматически при вызове команд «Провести», «Провести и закрыть», «Отмена проведения».

Примечание: В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере .

Добавить комментарий

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