Подписки в 1С

 

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

Сделал подписки при отмене проведения, при записи помеченного на удаление документа! Выводятся предупреждения на экран, и повторно информация в окно сообщений! 241023

 

Пишут:

https://v8.1c.ru/platforma/podpiska-na-sobytie/

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

 

Из файла помощи: Выбор обработчика события

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

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

процедура должна быть расположена в общем модуле;

процедура должна быть объявлена с ключевым словом Экспорт;

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

флаг Глобальный - сброшен;

флаг Сервер - установлен;

остальные флажки Клиент, Клиент (обычное приложение), Внешнее соединение - не влияют на подписку (наличие нужного модуля в нужном соединении/клиенте системой не проверяется!);

количество параметров процедуры должно быть на единицу больше, чем количество параметров, которое имеет обработчик выбранного события (т.к. дополнительно к параметрам, передаваемым в обработчик события, передается еще и объект-источник данного события).

 

 


Вот инфа про глобальные модули https://www.koderline.ru/expert/programming/article-globalnyy-modul-/

Инфа скудная! Смысл, что глобальный модуль доступен и клиенту, и серверу?

 

 

РСА:

У меня в Далионе был собственный глобальный модуль. Для подписок сделал второй модуль (глобальный=нет, сервер=да).

 

В стандартной конфе есть обработка для отмены проведения!

// Подписка на событие по удалений проведения партиобразующих документов.
Процедура ПодпискаНаОбработкуУдаленияПроведенияДокументов(ДокументОбъект, Отказ) Экспорт

 

В итоге сделал две подписки и соответствующие обработки

 - при отмене проведения;

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

 

Если отменить проведение, выводится одно сообщение и предупреждение.

Если пометить на удаление проведенный документ, то выводится два сообщения:

Пометили на удаление документ
Приходная накладная О0000000556 от 24.10.2023 3:13:17. Если пометка на удаление поставлена случайно, исправьте

Отменяем проведение дока
Приходная накладная О0000000556 от 24.10.2023 3:13:17. Если отмена проведения сделана случайно, проведите документ снова

 

 

Разбираться

Если повторно записывать документ, который ранее уже был помечен на удаление, то система не видит, что он ранее уже был помечен на удаление и выводит снова предупреждение!

Вроде в обработке идет ссылка на документ-объект, а не на форму дока. Так что как проверить, была ли до записи пометка на удаление или нет?


Разбираться

Сейчас в подписках сделаны ссылки на документ-объект! А есть ссылки на ДокументМенеджер. Какая разница?



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

 

В обработчиках подписок учитывать, что они могут вызываться "на сервере" (даже в обычных формах)

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

"Ошибка инициализации модуля: ОбщийМодуль.МодульРСА_Подписки.Модуль

по причине:

{ОбщийМодуль.МодульРСА_Подписки.Модуль(7,2)}: Процедура или функция с указанным именем не определена (Предупреждение)

 

Вот объяснялка https://forum.mista.ru/topic.php?id=844100, "polosov" пишет:

(3) На сервере нет Предупреждения

 

Используй:

#Если Клиент Тогда

Предупреждение(.....)

#КонецЕсли



"Регламент стартует в контексте сервера. То, что якобы в ОФ нет разделения на сервер-клиент - заблуждение. Там оно просто не совсем явное."