Как в 1с создать событие в
Механизм подписок на событие предназначен для назначения обработчика события для одного или нескольких объектов конфигурации платформы «1С:Предприятие». В статье рассматриваются несколько примеров применения данного механизма. Изучив статью, вы узнаете:
Применимость
В статье рассматривается платформа «1С:Предприятие» редакции 8.3. Представленная информация актуальна для текущих релизов платформы.
Подписки на события
В статье рассматриваются несколько примеров применения одного из вспомогательных объектов платформы «1С:Предприятие 8» – подписок на события.
Подписки на события позволяют размещать в общих модулях внешние обработчики, которые будут исполняться после выполнения определенного обработчика события в модуле объекта или модуле менеджера.
При этом не потребуется вносить изменения в модуль объекта или модуль менеджера. Таким образом, возникает возможность программного расширения модулей без их модификации – это очень полезный прием при изменении типовых решений.
Подписки на события описываются в ветке Общие окна объектов конфигурации (Рис.1).
- Выполняется обработчик события ПередЗаписью() в модуле объекта документа.
- Если в ходе выполнения обработчика параметр Отказ принимает значение Истина или вызывается исключение, то обработка события прерывается.
- Если на втором шаге обработка события не прерывалась, то выполняются внешние обработчики (подписки на события), определенные для события ПередЗаписью().
- Если в ходе выполнения внешнего обработчика параметр Отказ принимает значение Истина или вызывается исключение, то выполнение внешнего обработчика прерывается.
С помощью подписок на события можно организовать выполнение различных проверок, выполняющихся при записи объектов в базу данных.
Задача 1
Выполнить проверку дублирования наименования при записи элемента справочника “Контрагенты” – без модификации модулей самого справочника.
Флаг Клиент (обычное приложение) доступен, если в параметрах конфигуратора установлен режим редактирования Управляемое приложение и обычное приложение.
В ветке Общие окна объектов конфигурации создать новую подписку на событие. В палитре свойств ввести имя подписки ПроверкаНаименованияСправочника. В поле выбора Источник отметить тип данных СправочникОбъект.Контрагенты. В поле выбора Событие выбрать событие ПередЗаписью(). После отработки этого события будет срабатывать процедура обработки подписки на событие (Рис. 2).
Листинг процедуры ПроверкаНаименованияСправочникаПередЗаписью()
На практике может встретиться задача выполнения движений по дополнительным регистрам при проведении документов в типовых конфигурациях. Создание дополнительных регистров позволяет избежать модификации существующих регистров и при этом получить возможность дополнительной обработки данных при проведении типовых документов.
Задача 2
Создать оборотный регистр накопления “Выбытия денежных средств” и обеспечить формирование движений по этому регистру при проведении документа “Расходный кассовый ордер”, используя механизм подписок на события.
Создать новый оборотный регистр с именем ВыбытияДенежныхСредств. Выбрать регистратор “Расходный кассовый ордер”. Добавить измерения регистра:
Касса, тип: СправочникСсылка.Кассы;
Статья, тип: СправочникСсылка.СтатьиДвиженияДенежныхСредств.
Создать ресурс регистра:
В документе “Расходный кассовый ордер” создать реквизит СтатьяДвижения с типом данных СправочникСсылка.СтатьиДвиженияДенежныхСредств.
Создать новую подписку на событие:
Имя – ДвиженияПоВыбытиюДенежныхСредств;
Источник – ДокументОбъект.РКО;
Событие – ОбработкаПроведения.
В общем модуле ОбработчикиПодписокНаСобытия создать обработчик ДвиженияПоВыбытиюДенежныхСредствОбработкаПроведения(). В обработчике осуществляется обход табличной части документа “Расходный кассовый ордер” и формируются движения в регистре накопления ВыбытияДенежныхСредств.
Листинг процедуры ДвиженияПоВыбытиюДенежныхСредствОбработкаПроведения()
В типовых конфигурациях может возникнуть необходимость доработки основной формы некоторого объекта, например документа. Эту задачу можно решить с помощью подписок на события. При этом создается копия основной формы документа. В новую форму вносятся необходимые изменения. С помощью механизма подписок на события обеспечивается открытие новой формы вместо основной формы. При этом основная форма, находящаяся на поддержке, остается без изменения.
Задача 3
Обеспечить подмену основной формы документа “Расходный кассовый ордер”.
Создать новую форму документа “Расходный кассовый ордер” с именем ФормаДокументаКлиентская. Внести в форму произвольные изменения, например, поменять порядок элементов управления. Для вызова этой формы необходимо использовать подписку на событие ОбработкаПолученияФормы() в модуле менеджера документа “Расходный кассовый ордер”.
Создать новую подписку на событие:
Имя – ОсновнаяФормаРКО;
Источник – ДокументМенеджер.РКО;
Событие – ОбработкаПолученияФормы.
В общем модуле ОбработчикиПодписокНаСобытия создать обработчик ОсновнаяФормаРКООбработкаПолученияФормы(). В обработчик в качестве параметра ВыбраннаяФорма передается имя открываемой формы.
Параметр СтандартнаяОбработка устанавливается в значении Ложь для отключения открытия основной формы.
Листинг процедуры ОсновнаяФормаРКООбработкаПолученияФормы()
Таким образом, подписки на события предоставляют возможность добавления нового функционала, не изменяя существующие модули объектов. К недостаткам подписок на события можно отнести:
- Увеличение сложности алгоритмов.
- Подписаться можно только на события объектов и менеджеров объектов.
Если необходимо модифицировать какое-либо событие формы, то механизм подписок на события не доступен. В этом случае, необходимо вносить изменения в саму форму или копировать форму и вносить изменения в новый объект.
Процедуры-обработчики событий
Особенностью обработки событий среде 1С:Предприятия 8 является то, что имя процедуры-обработчика в одних случаях должно совпадать с именем события, а в других случаях может от него отличаться. Данная статья написана, чтобы внести ясность в этом вопросе.
Обратите внимание, что термин "Предопределенная процедура", который использовался в версии 7.х, теперь заменен на "процедура-обработчик события" или просто "обработчик события".
Ниже показана палитра свойств для формы элемента справочника "Номенклатура" с несколькими назначенными обработчиками событий:
За информацией о приемах работы с этой частью палитры свойств обращайтесь к документации: книга "Конфигурирование и администрирование", "Глава 3. Объекты конфигурации => Свойства элементов управления => Категория свойств События" (стр. 1 - 204)
Обратите внимание на важный момент, имя процедуры-обработчика событий может не совпадать с именем события . Для элементов управления чаще всего так и бывает, например, процедура "ТипЦенПриИзменении" обрабатывает событие "ПриИзменении" поля ввода для реквизита "ТипЦен", как показано на следующем рисунке:
Как правило, процедура-обработчик имеет тот же набор параметров, что и событие. Если у нее нет соответствующих параметров, то обработка события может получиться неполной. Поэтому рекомендуется создавать процедуры-обработчики конструктором через палитру свойств, нажимая кнопку с лупой или выбирая процедуру из выпадающего списка.
Есть еще одна интересная возможность: одна и та же процедура может "обслуживать" несколько событий формы или элементов управления, в том числе от разных источников. Элемент управления, который инициировал событие, передается в качестве первого параметра в эту процедуру-обработчик (параметр "Элемент"), и при необходимости алгоритм может проанализировать, откуда пришло событие, и выполнить соответствующие действия.
Поясним это правило на конкретных примерах:
1. Процедуры-обработчики событий, расположенные в модуле приложения или модуле внешнего соединения, совпадают с именами событий:
- ПередНачаломРаботыСистемы
- ПриНачалеРаботыСистемы
- ПриЗавершенииРаботыСистемы
- ПередЗавершениемРаботыСистемы
- ОбработкаВнешнегоСобытия
2. Имена процедур-обработчиков событий, расположенных в модуле объекта, тоже строго соответствуют именам событий:
для модуля документа (события объекта типа "ДокументОбъект")
- ПередЗаписью
- ПриЗаписи
- ПриУдалении
- ПриКопировании
- ОбработкаЗаполнения (для обработки "ввода на основании")
- ОбработкаПроведения
- ОбработкаУдаленияПроведения
- ПриУстановкеНовогоНомера
Аналогичные обработчики событий могут располагаться в модуле справочника и модулях других прикладных объектов.
3. Есть также модуль набора записей для всех видов регистров, который подобен модулям прикладных объектов. Модуль набора записей может содержать следующие процедуры-обработчики событий (имена процедур должны совпадать с именами событий):
Ниже приведены несколько важных моментов, которые полезно помнить при работе с событиями:
Примечание 1. Событие ПередЗаписью прикладного объекта отличается от события ПередЗаписью формы, связанной с этим прикладным объектом. Обработчик события в модуле формы вызывается при интерактивной записи, а обработчик в модуле объекта при любом способе записи элемента в базу данных.
Примечание 2. Если в процедурах-обработчиках модуля объекта нужно обратиться к самому объекту (текущий элемент справочника, текущий документ и т.д.), то для этого можно использовать свойство ЭтотОбъект. Оно содержит объект типа "СправочникОбъект", "ДокументОбъект" и т.д.
Примечание 3. Считается грубой ошибкой в процедурах-обработчиках событий объектов вызывать такие интерактивные команды, как Вопрос и Предупреждение. Эти команды показывают на экране диалоговое окно и ждут реакции пользователя. Так как событие обрабатывается в рамках транзакции, то это вызовет значительную задержку в обработке события и часть данных (или вся таблица) будет заблокирована на время ожидания.
Запускаем нашу программу, переходим во вкладку CRM и выбираем пункт “события”. У нас открывается справочник событий, где мы можем создавать события, устанавливать напоминание и устанавливать события на основании какого-либо документа.
Давайте создадим событие «телефонный звонок». Выбираем нужный пункт. У нас открывается создание события. Тут мы можем добавить описание, тему и время события.
Чтобы создать тему события нажимаем на «выбрать» (обозначается тремя точками). Открывается окно с шаблонами тем. Мы можем создать тему или группу, куда можем поместить наши темы.
Нажимаем «создать». В первой строке выбираем группу, куда будет входить наше событие. Во второй строке пишем тему события. В третьей – описание события.
После заполнения полей нажимаем на кнопку «записать и закрыть». Мы видим, что у нас создалась тема события. Выделяем нашу тему и нажимаем на кнопку «выбрать».
Далее тема автоматически появляется в событии, а так же заполняются необходимые поля: тема события и описание.
С правой стороны выставляем состояние события, важность, время (начало и завершение), календарь, основание и контрагент.
Чтобы создать календарь, нажимаем сначала на стрелочку, а далее на кнопку «создать».
Открывается меню для создания календаря. Выбираем сотрудников, которым будет доступен календарь и пишем наименование календаря. Далее нажимаем «записать и закрыть».
В «основании» мы можем выбрать тип данных. Нажимаем на стрелочку и у нас открывается окно «выбор типа данных».
К примеру, мы выбираем пункт «задания на работу». Выделяем и нажимаем ОК. Далее открывается меню создания задания на работу.
Чтобы создать новый элемент, нажимаем на кнопку “создать”. У нас открывается задание на работу (создание).
В графе «исполнитель» выбираем сотрудника. Далее нажимаем на кнопку «провести и закрыть».
И вы видите, что в задании на работу появился сотрудник.
Затем выбираем нашего исполнителя. Нажимаем на кнопку «выбрать». В графе основание у нас теперь отображается наше задание на работу.
После заполнения всех полей нажимаем на кнопку «записать» или «записать и закрыть». Наше событие «телефонный звонок» создалось.
Хороший вопрос :) Например, в организации возникла потребность оповещать пользователей документооборота на которых была(и) назначена задача и которые не приняли ее в работу в течении 1 часа. Соответственно оповещать необходимо через почту, т.е. отправлять на почту уведомления.
Это один из случаев при котором необходимо добавить в систему 1С: Документооборот новое бизнес-событие и обработать его, результатом обработки станет отправка уведомления на почту пользователя.
Итак приступим!
В системе 1С: Документооборот для фиксирования произошедшего какого либо события (по задачи, с процессом или с документом) предусмотрен справочник "Виды бизнес-событий". В этом справочнике уже предопределены порядка 20-ти бизнес событий и если необходимы новые бизнес-события, то нужно добавлять их в него.
Например, добавим новое бизнес-событие "На вас назначена задача", которое будет создаваться, если пользователь не берет в работу задачу больше часа.
Теперь нужно добавить "Детектор бизнес-события". Детектор бизнес-события - это как раз тот инструмент, который отслеживает события в программе. Например, он может зарегистрировать новое бизнес-событие, если число активных пользователей превышает 50 или в определенном каталоге на диске появились новые файлы или если пользователь не берет в работу задачу более часа и т.п.
Добавим новый детектор бизнес-события.
В нем можно написать выражение на встроенном языке и если в выражении указать Результат = Истина, то система после выполнения автоматически создаст новое бизнес событие. Если же вы не хотите чтобы программа сама создала бизнес-событие, то можно указать Результат = Ложь и в коде (в выражении или в конфигурации) вызвать процедуру
Для того, чтобы система отслеживала новые события предусмотрено регламентное задание "Обработка детекторов бизнес-событий". Это задание исполняется один раз в минуту и выполняет все детекторы событий с флагом Включен.
Для обработки бизнес-события в программе предусмотрены "Дополнительные обработчики-бизнес событий". Далее просто приведу текст из справки 1С:
Обработчики бизнес-событий обрабатывают события, которые были созданы детекторами. Например, детектор зафиксировал, что число активных пользователей превышает 50 и создал событие, затем обработчик стартовал процесс Ознакомление для администратора.
Т.е. обработчик бизнес-события это своего рода исполнитель действий, которые надо выполнить после того как было зафиксировано бизнес-событие. В нашем примере с не принятыми во время в работу задачами обработчик бизнес-события будет отправлять уведомления на почту исполнителям.
Обработчик бизнес-события и бизнес-событие должны быть связанны между собой.
Вот таким образом в системе 1С: Документооборот добавляются новые бизнес-события!
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем 1С Предприятие что это? 12
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое Посмотреть все результаты поиска похожих
Еще в этой же категории
Как обновить динамический список или реквизит на форме клиента? 22
Если вы, открыв форму справочника или документа, выполнили некоторое действие, код который должен изменить состояние данных в динамических списках или значение реквизита. Данные изменены, но в открытой форме осталось все как было, можно конечно закр Динамический список ~ Как на управляемой форме разместить список регистра сведений с отбором? 18
Решение рассмотрено для элемента справочника (Контрагент и регистр КонтактнаяИнформация) 1. Создание реквизита: Добавляем новый реквизит формы (. не путать с реквизитом справочника . ) с типом " ДинамическийСписок" В поле " Основная табли Как установить параметр динамического списка? 16
Когда используете для вывода данных динамический список и произвольный запрос, то бывают ситуации когда надо указать параметр используемый в этом запросе. Ниже пример вывода данных регистра сведений в карточке клиента Для вывода используется исп Форма ~ Программное создание таблицы значений с условным оформлением 12
Как создать на форме таблицу и сделать для нее подсветку содержимого колонки в строке по условию? Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем ма Поле выбора ~ Заполнение списка значений в элементе поле выбора на форме 10
//Заполнение списка перебором данных // Элемент формы МетаданныеВыбор имеет тип - Произвольный, Использование - Режим выбора из Списка, кнопка списка Для Каждого Метаданное из Метаданные.РегламентныеЗадания Цикл ЭлементыФормы.МетаданныеВыбор.Спи Посмотреть все в категории Работа с Формой (Диалог) и её элементами
Читайте также: