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

от admin

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

Особенностью обработки событий среде 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С:Предприятие» в режимах тонкого клиента и веб-клиента.

Третий модуль: Работа с обработчиком событий

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

Рис. 7.1. – Создание события ПриИзменении

Система автоматически добавит на модуль формы текущего справочника
новую процедуру «НаименованиеПриИзменении». Вам необходимо удалить в
процедуре комментарии (как мы уже говорили выше они обозначаются символом //) и
54
написать в процедуру программный код заполнения реквизита
«ПолноеНаименование». Текст процедуры обработчика события у вас должен
получиться следующим:
&НаКлиенте
Процедура НаименованиеПриИзменении(Элемент)
Если Объект.ПолноеНаименование=”” Тогда
Объект.ПолноеНаименование=Объект.Наименование;
КонецЕсли;
КонецПроцедуры

Сохраните конфигурацию и проверьте исполнение вашего кода в пользовательском режиме. Обратите внимание, что система добавляет полное наименование
только при условии, что данное поле пустое. За это отвечает условие «Если Объект.ПолноеНаименование=”” Тогда».
Помимо того, что имеется возможность выполнять какие-то действия при
наступлении события, иногда можно управлять и соответствующими стандартными
действиями платформы, т.е. фактически указывать, произойдет ли данное событие
или нет.
Рассмотрим следующую ситуацию: необходимо, чтобы у услуг ставка НДС
была только 18%. В этом случае необходимо проверить при сохранении элемента,
является ли данный элемент справочника услугой. В том случае, когда элемент номенклатуры является услугой и ставка НДС не 18%, необходимо указать пользователю на недопустимость данной ситуации и не записывать элемент до тех пор, пока
пользователь либо не укажет нужную ставку НДС, либо не укажет, что это товар
(снимет галочку «Услуга»).
Для решения этой задачи откроем форму элемента справочника «Номенклатура» и воспользуемся обработчиком события «ПередЗаписьюНаСервере» для самой
формы – встаньте в корень формы, откройте палитру ее свойств, перейдите на закладку «События» и создайте обработчик события как показано на рис.7.2 и описано
ниже.

Рис. 7.2. – Создание события «ПередЗаписьюНаСервере»

Текст обработчика события:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект,
ПараметрыЗаписи)
Если ТекущийОбъект.Услуга И
(ТекущийОбъект.СтавкаНДС <>
Справочники.СтавкиНДС.НДС18) Тогда
Сообщить(«У услуги ставка НДС может быть только 18%»);
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
Сохраните сделанные изменения, откройте конфигурацию в пользовательском
режиме и проверьте работоспособность созданного события.

Name already in use

1c-interprise-8-3 / Ответы на вопросы.txt

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink

1 contributor

Users who have contributed to this file

  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

Читать:
Как установить библиотеку plotly в anaconda

Related Posts