1с подписка на событие записи документа. Механизм основных форм. Действие Отмена проведения

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

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

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

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

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

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

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

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

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

На предыдущем занятии мы создали форму документа Приходная накладная и назначили эту форму основной. Что это значит? У всех прикладных объектов конфигурации существует некоторое количество основных форм. Они служат для отображения данных объекта в том или ином виде. Если разработчик не назначит в качестве основных форм объекта свои собственные, система будет генерировать необходимые формы объекта самостоятельно, в те моменты, когда к ним происходит обращение. Наличие такого механизма позволяет разработчику не тратить время на создание форм для тестирования своей разработки, а воспользо­ваться тем, что платформа создаст по умолчанию. Создание этих форм происходит динамически, в процессе работы системы. Форма создается в тот момент, когда к ней происходит обращение. Причем не важно, интерактивное это обращение или программное. Также примечательным фактом является то, что состав основных форм, определенных для объекта конфигурации, может не совпадать с перечнем тех форм, которые вообще можно создать для данного объекта, используя конструктор формы. Например, для большинства регистров в конфигураторе можно задать основную форму списка. Однако если открыть конструктор форм для регистра, вы увидите, что кроме формы списка предлага­ется создать и форму набора записей регистра, которая отсутствует в перечне основных форм.

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

При работе с событиями в платформе 1С:Предприятие 8 следует различать два типа событий: события, связанные с формой и ее элементами, и все остальные. Разница заключается в том, что обработчики событий, связанных с формой и ее элементами, - назначаемые, а обработчики всех остальных событий - фиксированные. Фиксированный обработчик события должен иметь имя, совпада­ющие с именем события. Только в этом случае он будет вызываться при возникновении соответствующего события. Назначаемый обработчик может иметь произвольное имя. Если имя процедуры совпадает с именем события формы или ее элемента, этого совсем недостаточно для вызова процедуры обработки события с таким именем. Требуется явное назначение процедуры обработчиком этого события в палитре свойств, в соответствующем событии. Назначение обработчика может выполняться интерактивно, при работе с формой в конфигураторе, или программно, используя методы формы и ее элементов - УстановитьДействие().

Модули

Виды модулей:

    Модуль управляемого приложения. Модуль управляемого прило­жения выполняется при старте системы 1С:Предприятие в режимах тонкого клиента и веб-клиента.

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

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

    Модули объектов. Модули объектов - это, например, модуль элемента справочника или модуль документа. Эти модули вызываются тогда, когда либо программно создается этот объект средствами встроенного языка, например, методами Соз-датьЭлемент() у менеджеров справочников или СоздатьДокумент() менеджеров документов, либо когда пользователь создает новый элемент справочника или документ интерактивно. Чтобы открыть модуль объекта, нужно в окне редактирования объекта конфигурации перейти на закладку Прочее и нажать кнопку Модуль объекта. Или, выделив нужный объект в дереве объектов конфигурации, вызвать из контекстного меню команду Открыть модуль объекта.

Рис.5.1. Открытие модуля объекта

    Модули форм. Каждая форма, определенная в конфигурации, имеет свой собственный модуль. Этот модуль исполняется при создании объекта УправляемаяФорма встроенного языка. Этот объект создается системой в режиме 1С предприятие в тот момент, когда мы программно (методами ПолучитьФорму() или ОткрытьФорму()). Чтобы открыть модуль формы, нужно открыть нужный объект конфигурации Форма объекта и в окне редактора форм перейти на закладку Модуль.

Листинг 5.1. Открытие модуля формы

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

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

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

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

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

    локальным контекстом самого модуля формы;

    реквизитами формы, которой;принадлежит; модуль;

    свойствами и методами объекта УправляемаяФорма встроенного языка;

    свойствами и методами расширения формы, определяемого типом того объекта, данные которого содержатся в основном реквизите формы;

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

    экспортируемыми переменными, процедурами и функциями модуля управляемого приложения;

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

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

Как это сделать?

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

Подписка на события 1С – это , он находится в ветке конфигурации Общие/Подписки на события 1С.

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

Добавим новую подписку на событие 1С, установим название.

В свойстве подписки на событие 1С Источник – нужно выбрать один или несколько документов, справочников – объектов, на которые мы ставим обработчик.

В свойстве подписки на событие 1С Событие – нужно выбрать один из вариантов стандартных событий, которые могут произойти с выбранными документами и справочниками.

Мы упрощаем говоря «документы и справочники» — на самом деле можно использовать многие объекты 1С. К сожалению, нельзя подписаться на события 1С формы – например, при открытии формы, о чем жалеют многие программисты.

Набор возможных событий зависит от объекта. Будьте внимательны, так как если выбрать несколько (множество) объектов – то в списке событий будут только те события, которые могут быть у каждого из выбранных объектов (то есть общие для всех выбранных объектов события).

После этого остается создать функцию обработчик. Для этого в конфигурации должен быть с установленной в свойствах галочкой Серверный. При нажатии кнопки «лупа» будет создана функция – обработчик.

Все! Мы только что подписались на событие 1С ПередЗаписью для всех документов. Теперь при записи любого документа будет выполняться наша функция, в которой прописана проверка.

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

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

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

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

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

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

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

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

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

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

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

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

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

Задача 1

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

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

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

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

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

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

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

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

Задача 2

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

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

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

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

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

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

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

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

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

Задача 3

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

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

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

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

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

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

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

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

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

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