суббота, 20 января 2018 г.

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

Подписки на события - это общие объекты конфигурации, которые позволяют запускать в общих модулях обработчики событий, возникающих в модулях объектов или модулях менеджеров прикладных объектов конфигурации. То есть, через механизм подписок можно запрограммировать некое действие, не трогая самого модуля объекта и не снимая его с поддержки.
Подписки на событие располагаются в ветке Общие дерева конфигурации. В свойствах подписки, указывается объект, на события которого подписывается, и собственно событие:
и указывается обработчик этого события из общего модуля:
Как источники событий для подписки, доступны модули объектов и модули менеджеров объектов. На события формы подписаться нельзя.
Алгоритм отрабатывания подписок на событие следующий:
  1. Исполняется процедура из обработчика в модуле объекта / модуле менеджера; если значение параметра Отказ становится истинным, то обработка прерывается
  2. Исполняется процедура обработчика событий из общего модуля; если значение параметра Отказ становится истинным, то обработка прерывается
***
Вопрос 06.39 экзамена 1С:Профессионал по платформе. При определении подписки на событие процедура - обработчик должна располагаться:
  1. в глобальном общем модуле
  2. в не глобальном общем модуле
  3. в модуле приложения
  4. в модуле объекта
Правильный ответ второй. Глобальные общие модули компилируются в момент старта системы; это не нужно в случае подписок. 

***
Вопрос 06.45 экзамена 1С:Профессионал по платформе. При определении подписки на событие количество таких подписок:
  1. Только одна
  2. Любое количество, процедуры обработчики должны обязательно располагаться в разных общих неглобальных модулях
  3. Любое количество, процедуры обработчики могут располагаться как в одном, так и в разных общих неглобальных модулях
Правильный ответ третий. Можно вообще один неглобальный модуль выделить под все подписки.

***
Вопрос 06.46 экзамена 1С:Профессионал по платформе. При определении на одно событие объекта 1С:Предприятие нескольких подписок на событие, порядок вызова обработчиков следующий:
  1. вызывается процедура подписки на событие, определенная последней, остальные не вызываются
  2. вызывается процедура подписки на событие, определенная первой, остальные не вызываются
  3. процедуры вызываются в соответствии с порядком создания подписок на событие
  4. процедуры вызываются в произвольном порядке
Правильный ответ четвертый - исполняются все подписки, причем порядок их создания точно неважен.

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

***
Вопрос 06.48 экзамена 1С:Профессионал по платформе. Подписка на событие может быть определена:
  1. только для одного объекта
  2. для разных объектов, но только одного вида (например, для нескольких справочников или для нескольких документов)
  3. для разных объектов
Правильный ответ третий, источники могут быть различными.

***
Вопрос 06.49 экзамена 1С:Профессионал по платформе. При определении подписки на событие для разных объектов перечень показываемых событий формируется по принципу:
  1. должно совпадать количество параметров события
  2. должно совпадать имя события
  3. должны выполняться оба вышеприведенных требования
Правильный ответ третий. Соответствие числа параметров события и обработчика проверяется в принципе; если же одним обработчиком обрабатываются сращу несколько событий, то и наименование должно совпадать.

***
Вопрос 06.50 экзамена 1С:Профессионал по платформе. Процедура, используемая подпиской на событие, должна располагаться в модуле с установленными (взведенными) флажками:
  1. Клиент
  2. Сервер
  3. Внешнее соединение
  4. обязательно Клиент и Сервер
  5. обязательно Клиент, Сервер и Внешнее соединение
  6. определяется разработчиком исходя из практической задачи
Правильный ответ пятый. Модуль должен быть доступен отовсюду.

16 комментариев:

  1. В 6.50 правильный ответ должен быть "Сервер", по крайней мере, только так это работает (8.3.8.1933).

    ОтветитьУдалить
    Ответы
    1. Подтверждаю. 1С:Предприятие 8.3 (8.3.12.1616). Обязателен только флаг Сервер, другие без разницы, хоть сняты, хоть установлены.

      Удалить
  2. Это неверно, что обязателен только флаг Сервер. Без галки "Внешнее соединение" COM-подключение к базе будет глючить "...Обработчик события не найден." Поэтому галка "Внешнее соединение" нужна.

    ОтветитьУдалить
    Ответы
    1. Скопировано из справки 1с 8.3.4.389:
      у общего модуля, в котором расположена процедура, должны быть заданы следующие свойства:
      флаг Глобальный - сброшен;
      флаг Сервер - установлен;
      остальные флажки Клиент (управляемое приложение), Клиент (обычное приложение), Внешнее соединение - не влияют на подписку (наличие нужного модуля в нужном соединении/клиенте системой не проверяется!);

      Удалить
    2. С точки зрения "чтобы система дала сохранить конфигурацию и обновить БД" - действительно, достаточно лишь "Сервер". Однако при работе с базой через внешнее соединение (например, обмен из другой базы по com-соединению) - будет ошибка, как указал Master. А еще есть толстый клиент, в котором подписки тоже выполняются.
      В общем, все три флага есть в статье https://its.1c.ru/db/v8std/content/469/hdoc "Правила создания общих модулей"

      Удалить
  3. опечатка в комментарии к 6.49
    "Правильный ответ третий. Соответствие числа параметров события и обработчика проверяется в принципе; если же одним обработчиком обрабатываются сращу несколько событий, то и наименование должно совпадать."

    ОтветитьУдалить
    Ответы
    1. правильный ответ второй! https://its.1c.ru/db/v8318doc#bookmark:dev:TI000000212

      Удалить
    2. Там нет ничего про правильность 2-го варианта...

      Удалить
    3. А вот в комменте непонятка - причём тут обработчик? Речь идёт о списке событий, доступных для разных объектов. Например, для спр-ка и док-та в этом списке будет событие ПриЗаписи. А для спр-ка и отчёта список вообще будет пустой..

      Удалить
    4. При определении подписки на событие для разных объектов перечень показываемых событий формируется по принципу:
      должно совпадать количество параметров события
      должно совпадать имя события
      должны выполняться оба вышеприведенных требования

      Ответ - 2.Проверено на 1с тренажере.

      Удалить
  4. 6.46
    Создал 5 подписок на событие при записи документа.
    Жал несколько раз.
    Всегда вызывались в порядке создания.
    Трудно поверить, что в произвольном порядке.
    Наверное на экзамене так.

    ОтветитьУдалить
  5. 06.49 правильный вариант номер 2 - должно совпадать имя события

    ОтветитьУдалить
    Ответы
    1. Этот комментарий был удален автором.

      Удалить
    2. Правильный 3. Именно этот пункт говорит о максимальном соответствии между одинаковыми событиями (попавшими в список) у разных объектов, выбранных в поле "Источник".

      Удалить
  6. Для отображения дополнительных данных в динамическом списке (например остатки взаиморасчетов в списке партнеров) необходимо использовать обработчик события:
    При создании на сервере
    При открытии
    При получении данных на сервере
    Вариант 1 и 3
    Вариант 1 или 3
    Вариант 1 или 2 или 3

    Ответ - 3. Проверено 1с тренажер

    ОтветитьУдалить
  7. Обработчик события, вызываемый системой (в случае его определения) для формирования представления объекта располагается в
    модуле приложения
    модуле менеджера
    модуле объекта
    модуле основной формы объекта
    на усмотрение разработчика

    Ответ - 2. Проверено 1с тренажер

    ОтветитьУдалить