Ремонт авто Уход за... Обзоры авто

1с обработчики событий формы. Механизм основных форм

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

  • Модуль объекта справочника:
    • ПриУстановкеНовогоКода
    • ПриКопировании
    • ОбработкаЗаполнения
    • ПередЗаписью
    • ПриЗаписи
    • ПередУдалением
    • ОбработкаПроверкиЗаполнения
  • Модуль объекта документа:
    • ОбработкаПроведения
    • ОбработкаЗаполнения
    • ПриУстановкеНовогоНомера
    • ПриКопировании
    • ПередЗаписью
    • ПриЗаписи
    • ПередУдалением
    • ОбработкаУдаленияПроведения
    • ОбработкаПроверкиЗаполнения
  • Модуль объекта отчета:
    • ОбработкаПроверкиЗаполнения
    • ПриКомпоновкеРезультата
    • УстановитьЗаголовкиПолей
  • Модуль объекта обработки:
    • ОбработкаПроверкиЗаполнения
  • Модуль объекта плана вида характеристик:
    • ПриУстановкеНовогоКода
    • ПриКопировании
    • ОбработкаЗаполнения
    • ПередЗаписью
    • ПриЗаписи
    • ПередУдалением
    • ОбработкаПроверкиЗаполнения
  • Модуль объекта плана счетов:
    • ПриКопировании
    • ОбработкаЗаполнения
    • ПередЗаписью
    • ПриЗаписи
    • ПередУдалением
    • ОбработкаПроверкиЗаполнения
  • Модуль объекта плана видов расчетов:
    • ПриКопировании
    • ОбработкаЗаполнения
    • ПередЗаписью
    • ПриЗаписи
    • ПередУдалением
    • ОбработкаПроверкиЗаполнения
  • Модуль объекта бизнес-процесса:
    • ПриУстановкеНовогоНомера
    • ПриКопировании
    • ОбработкаЗаполнения
    • ПередЗаписью
    • ПриЗаписи
    • ПередУдалением
    • ОбработкаПроверкиЗаполнения
  • Модуль объекта задачи:
    • ПриУстановкеНовогоНомера
    • ПриКопировании
    • ОбработкаЗаполнения
    • ПередЗаписью
    • ПриЗаписи
    • ПередУдалением
    • ОбработкаИнтерактивнойАктивации
    • ОбработкаПроверкиВыполнения
    • ПередВыполнением
    • ПередИнтерактивнымВыполнением
    • ПриВыполнении
    • ОбработкаПроверкиВыполнения

Вопрос 06.18 экзамена 1С:Профессионал по платформе. Где располагаются процедуры-обработчики событий прикладных объектов, например, ПриЗаписи, ПередУдалением?

  1. В модуле формы
  2. В модуле объекта
  3. В модуле приложения
  4. Таких событий у прикладных объектов нет

Разбор выше.

Вопрос 06.41 экзамена 1С:Профессионал по платформе. С помощью команды "ДобавитьОбработчик" можно назначить обработчик события на:

  1. COM объект
  2. экземпляр объекта 1С:Предприятие (назначать на события модуля объекта)
  3. экземпляр объекта "Форма"
  4. верны 1,2 ответы
  5. верны 1,2,3 ответы

Обратимся к синтакс-помощнику. В примерах разобраны экземпляры объектов, и COM объекты.

ДобавитьОбработчик (AddHandler)

Синтаксис:

ДобавитьОбработчик <Событие>, <ОбработчикСобытия>;

Параметры:

<Событие>

Событие, которому добавляется обработчик.

Событие задается в форме <Выражение>.<Имя_события>, где:


<Выражение> - произвольное выражение на встроенном языке, результатом которого должен быть объект, к событию которого добавляется обработчик;

<Имя_события> - идентификатор (имя) события.


<ОбработчикСобытия>

Процедура/функция-обработчик события.

Обработчиком события может являться метод объекта встроенного языка. Тогда <ОбработчикСобытия> задается как <Выражение>.<Имя_обработчика>, где:


<Выражение> - произвольное выражение на встроенном языке, результатом которого должен быть объект, метод которого служит обработчиком события;

<Имя_обработчика> - имя метода обработчика события.


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

Описание:

Добавляет обработчик события.

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

Пример:


Обработка = Обработки . КонтрольДокумента . Создать () ; Накладная = Документы . Накладная . СоздатьДокумент () ; ДобавитьОбработчик Накладная . ПриЗаписи , Обработка . ПриЗаписиДокумента ; msword = Новый COMОбъект ("Word.Application" ) ; ДобавитьОбработчик msword . DocumentChange , ПриИзмененииДокумента ;

Процедура ПриИзмененииДокумента () Сообщить ("Документ изменен" ) ; КонецПроцедуры


***

Вопрос 06.36 экзамена 1С:Профессионал по платформе. При определении обработчика события на COM объект количество параметров в процедуре - обработчике:

  1. равно количеству параметров соответствующего события объекта
  2. на один параметр больше, чем у соответствующего события объекта (первый параметр содержит сам COM объект)
  3. на один параметр больше, чем у соответствующего события объекта (последний параметр содержит сам COM объект)
  4. всегда один параметр (сам COM объект)

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

Вопрос 06.37 экзамена 1С:Профессионал по платформе. При определении подписки на событие количество параметров в процедуре - обработчике:

  1. у такой процедуры не будет параметров

Правильный ответ первый. Пример кода в обработчике события:

Процедура ПриИзмененииДокумента (Отказ )
КонецПроцедуры

Пример кода процедуры-обработчика:

Процедура ПриИзмененииДокумента (Источник, Отказ )

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


Вопрос 06.38 экзамена 1С:Профессионал по платформе. При определении обработчика события на экземпляр объекта 1С:Предприятие количество параметров в процедуре - обработчике:

  1. равно количеству параметров соответствующего обработчика события, располагаемого в модуле объекта
  2. на один параметр больше, чем у соответствующего обработчика события, располагаемого в модуле объекта (первый параметр содержит сам объект)
  3. на один параметр больше, чем у соответствующего обработчика события, располагаемого в модуле объекта (последний параметр содержит сам объект)
  4. у такой процедуры не будет параметров
  5. всегда один параметр (сам объект, для которого определялась подписка)

Правильный ответ второй, аналогично прошлому вопросу.

Вопрос 06.40 экзамена 1С:Профессионал по платформе. При назначении обработчика события на объект (экземпляр объекта 1С:Предприятие, COM объект) процедура, отвечающая за отработку данного события должна быть расположена:

  1. обязательно в глобальном общем модуле
  2. обязательно в не глобальном общем модуле
  3. обязательно в модуле приложения
  4. выбор модуля не важен, в "пределах видимости"

Правильный ответ четвертый, см. выдержку из синтакс-помощника.

При разработке или модификации прикладных решений на платформе 1С:Предприятие 8.x очень часто необходимо выполнять какое-либо стандартное действие для группы объектов конфигурации (например, справочников). Для того, чтобы не описывать в модуле каждого объекта проделываемые действия, разработчик может воспользоваться стандартным механизмом платформы - подпиской на событие.

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

Стандартное поведение

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

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

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

При записи элемента справочника, будь то новый элемент или существующий, вызываются три обработчика: "ОбработкаПроверкиЗаполнения" (на этом этапе обработчик может проверить корректность введенных данных и в случае, если есть ошибки, отказаться от записи), "ПередЗаписью" (пока объект не записан в базу можно корректировать значения реквизитов и проверить какие-либо дополнительные условия) и затем "ПриЗаписи" (запись в базу произведена, но транзакция не закрыта, разработчик может проверить данные после записи и при необходимости отменить транзакцию).

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

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

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

Недокументированная сторона

Теперь рассмотрим интересную ситуацию. Допустим, для нашего справочника "ПростойСправочник" определены три подписки на событие "ПередЗаписью":

Как Вы думаете, в какой последовательности будут вызываться обработчкики этих подписок? Не будем гадать. Приведу результат записи элемента, где обработчик каждой подписки выводит сообщение с именем вызываемой подписки (см. следующий скриншот).

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

Отступление

Вы спросите: "Для чего создавать несколько подписок для одного события объекта конфигурации?". Ответ прост. Если разработкой занимаются несколько человек, то вмешательство в созданные механизмы друг друга может привести к некорректной работе программы. В таких случаях самым логичным будет создавать отдельные подписки на события каждому разработчкику в соотетствии с поставленной задачей. Конечно, не исключено, что в дальнейшем они будут объединены в единую процедуру-обработчик.

Механизм подписок на событие предназначен для назначения обработчика события для одного или нескольких объектов конфигурации платформы «1С:Предприятие». В статье рассматриваются несколько примеров применения данного механизма. Изучив статью, вы узнаете:

  • Что такое подписка на событие и как его применять на практике?
  • Как выполнить проверку дублирования наименования при записи элемента справочника без модификации модулей самого справочника?
  • Как, при помощи подписки на событие, обеспечить формирование движений по регистру накопления при проведении документа?
  • Как обеспечить подмену основной формы документа?

Применимость

В статье рассматривается платформа «1С:Предприятие» редакции 8.3. Представленная информация актуальна для текущих релизов платформы.

Подписки на события

В статье рассматриваются несколько примеров применения одного из вспомогательных объектов платформы «1С:Предприятие 8» – подписок на события .

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

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

Подписки на события описываются в ветке Общие окна объектов конфигурации (Рис.1).

Если в конфигурации создана подписка на событие некоторого объекта, например событие ПередЗаписью() объекта документа, то при возникновении этого события платформа выполняет следующую последовательность действий.

  1. Выполняется обработчик события ПередЗаписью() в модуле объекта документа.
  2. Если в ходе выполнения обработчика параметр Отказ принимает значение Истина или вызывается исключение, то обработка события прерывается.
  3. Если на втором шаге обработка события не прерывалась, то выполняются внешние обработчики (подписки на события), определенные для события ПередЗаписью() .
  4. Если в ходе выполнения внешнего обработчика параметр Отказ принимает значение Истина или вызывается исключение, то выполнение внешнего обработчика прерывается.

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

Задача 1

Выполнить проверку дублирования наименования при записи элемента справочника “Контрагенты” – без модификации модулей самого справочника.

Для решения задачи нужно создать общий модуль ОбработчикиПодписокНаСобытия . В палитре свойств модуля установить флаг Сервер и Клиент (обычное приложение) . Второй флаг нужен для того, чтобы подписка на событие работала в обычном приложении.

Флаг Клиент (обычное приложение) доступен, если в параметрах конфигуратора установлен режим редактирования Управляемое приложение и обычное приложение .

В ветке Общие окна объектов конфигурации создать новую подписку на событие. В палитре свойств ввести имя подписки ПроверкаНаименованияСправочника . В поле выбора Источник отметить тип данных СправочникОбъект.Контрагенты . В поле выбора Событие выбрать событие ПередЗаписью() . После отработки этого события будет срабатывать процедура обработки подписки на событие (Рис. 2).

В поле выбора Обработчик указывается общий модуль, в котором располагается обработчик подписки на событие. Нажать в этом поле кнопку Открыть, выбрать модуль ОбработчикиПодписокНаСобытия и нажать ОК . Система автоматически создаст в общем модуле процедуру с параметрами Источник и Отказ . В параметре Источник передается объект, для которого создана подписка на события – СправочникОбъект . . В параметре Отказ передается признак отказа от записи элемента.

В процедуре ПроверкаНаименованияСправочникаПередЗаписью() выполняется запрос к справочнику Контрагенты . В качестве параметра запроса передается наименование записываемого элемента справочника Контрагенты . Если элемент с таким названием уже есть в базе данных, то параметр Отказ устанавливается в значение Истина (запись элемента отменяется) и выводится соответствующее диагностическое сообщение.

Листинг процедуры ПроверкаНаименованияСправочникаПередЗаписью()

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

Задача 2

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

Создать новый оборотный регистр с именем ВыбытияДенежныхСредств . Выбрать регистратор “Расходный кассовый ордер”. Добавить измерения регистра:

Создать ресурс регистра:

Сумма , тип Число , Длина – 15, Точность – 2.

В документе “Расходный кассовый ордер” создать реквизит СтатьяДвижения с типом данных СправочникСсылка.СтатьиДвиженияДенежныхСредств .

Имя – ДвиженияПоВыбытиюДенежныхСредств ;
Источник – ДокументОбъект.РКО ;
Событие – ОбработкаПроведения .

В общем модуле ОбработчикиПодписокНаСобытия создать обработчик . В обработчике осуществляется обход табличной части документа “Расходный кассовый ордер” и формируются движения в регистре накопления ВыбытияДенежныхСредств .

Листинг процедуры ДвиженияПоВыбытиюДенежныхСредствОбработкаПроведения()

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

Задача 3

Обеспечить подмену основной формы документа “Расходный кассовый ордер”.

Создать новую форму документа “Расходный кассовый ордер” с именем ФормаДокументаКлиентская . Внести в форму произвольные изменения, например, поменять порядок элементов управления. Для вызова этой формы необходимо использовать подписку на событие ОбработкаПолученияФормы() в модуле менеджера документа “Расходный кассовый ордер”.

Создать новую подписку на событие:

Имя – ОсновнаяФормаРКО;
Источник – ДокументМенеджер.РКО;
Событие – ОбработкаПолученияФормы.

В общем модуле ОбработчикиПодписокНаСобытия создать обработчик . В обработчик в качестве параметра ВыбраннаяФорма передается имя открываемой формы.
Параметр СтандартнаяОбработка устанавливается в значении Ложь для отключения открытия основной формы.

Листинг процедуры ОсновнаяФормаРКООбработкаПолученияФормы()

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

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

  • Увеличение сложности алгоритмов.
  • Подписаться можно только на события объектов и менеджеров объектов.

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

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

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

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

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

Более подробную информацию вы можете получить у наших специалистов перейдя вот по этой

1С обработка создать документ

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

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

На нашем сайте для Вас доступна любая обработка.Если что то не нашли — и мы создадим обработку 1С:Предприятие для нужд вашего бизнеса.