1с не срабатывает подписка на событие
Ошибка происходит в толстом клиенте управляемое приложение, на типовой конфигурации, созданной под обычное приложение.
При создании объекта (элемента справочника или документа) проверяется существование всех обработок подписок.
В данном случае ошибка возникает в такой строчке кода:
Полный текст ошибки:
При подписке ПроверитьУстранениеПроблемыОбъекта на событие ПередЗаписью произошла ошибка. Обработчик события не найден.
Поиск причины и исправление
Глобальный поиск дает события или саму процедуру:
Далее тестируете создание еще раз, в моем случае цепочкой вызывались еще ряд модулей, которые пришлось также модифицировать.
Как сделать глобальный поиск по тексту?
Корень проблемы
Многие зададут вопрос: а зачем запускать создавать объект под приложением не адаптированном под управляемое приложение?.
Ответ в том, что многие пишут обработки в режиме управляемого приложения (удобно им или берут готовые под переделку), если в свойствах конфигурации разрешить их использование, они будут работать, но только в составе конфигурации, а не как внешняя обработка.
Реклама духов принесла мне больше известности, чем любой фильм, в котором я снималась.
— Денев Катрин
При работе с информационной базой 1С нередко возникает необходимость привязать новый алгоритм к событию, связанному с изменением объекта. В 7 версии программы для запуска обработчика приходилось переписывать исходный код программы, что приводило к проблемам при обновлении конфигурации.
- Настройку подписок;
- Создание;
- Особенности функционирования.
Создание новой подписки
Находится эти элементы в ветке дерева «Общие» (Рис.1).
Для добавления нового обработчика необходимо:
- Активировав левой кнопкой мыши строку «Подписки на события», нажать Insert, либо, кликнув там же правой кнопкой, добавить новый объект;
- В появившемся окне (Рис.2) необходимо задать Имя, которое бы максимально точно отражало назначение обработки; ис.2
- На этом этапе необходимо выбрать источник, то есть то место, возникновение действия в котором будет служить толчком к началу обработки (следует учитывать, что если установить в этом поле составной тип данных, то в поле «Событие» будут отображаться только события, общие для всех объектов);
- В зависимости от выбора источника будет составлен выпадающий список поля «Событие» (понятно, что для элемента справочника не может быть процедуры ПриПроведении, а для менеджера перечислений обработчика ПриЗаписи);
- Последним полем для заполнения является поле «Обработчик», где необходимо указать процедуру или функцию в общем модуле, которая будет содержать код, описывающий заданный алгоритм (при этом общий модуль (Рис.3) должен иметь признак «Серверный» ).
Во избежание проблем с обновлением, для собственных разработок лучше всего завести собственный общий модуль, который будет содержать только Ваши процедуры и функции.
Особенности функционирования подписок
На примере процедуры ПриЗаписи() для любого документа можно увидеть порядок вызова обработчиков.
В случае, когда существует несколько объектов-подписок, одинаковых для одного источника и одного события, отследить порядок выполнения очень сложно. И, если в ходе выполнения, хотя бы одного обработчика, будет вызвана исключительная ситуация, часть процедур останется не выполненной.
Таким образом, последовательность обработок можно задать следующей схемой:
- Обрабатываются события модуля объекта;
- Обрабатываются подписки, связанные непосредственно с текущим типом данных;
- Отрабатывается код, привязанный к общему типу.
Очень важно запомнить, что ни в коем случае в процедуры, исполняемые при записи, при проведении нельзя вставлять код, меняющий данные объекта-источника, это может привести к ненужному зацикливанию. Лучше подобный код использовать в процедурах ПередЗаписью.
Обработчик события открытия формы
Возрастающая популярность управляемых форм, используемых в 8 версии программы, а так же проблемы связанные с обновлением этих объектов с сохранением собственных изменений, привели к тому, что, начиная с платформы 8.2.15, в программе появилось событие ОбработкаПолученияФормы. Именно сюда можно вставлять код, изменяющий и заменяющий типовые формы.
Некоторые особенности данного обработчика:
- Событие не сработает в случае, если в конфигурации открываемая типовая форма прописана строго;
- Событие может быть реализовано только для управляемых форм;
- Общий модуль, содержащий этот обработчик должен не только иметь признак «Сервер», но и содержать установленный флажок в поле «Вызов сервера».
Читайте также: