Каталог решений - Отлов пометки на удаление документа из формы списка, через ПодключитьОбработчикОповещения

Отлов пометки на удаление документа из формы списка, через ПодключитьОбработчикОповещения

Отлов пометки на удаление документа из формы списка, через ПодключитьОбработчикОповещения

В наличии

Многие, наверное, сталкивались с тем, что пользователь в форме списка помечает или снимает "пометку на удаление", а вам нужно отловить, подтвердил он или отказался от ее установки. И в связи с этим вам нужно выполнить некоторые действия, в моем случае снять или поставить пометку на подчиненые документы. Рассказываю, как этого добился я, может, кому пригодится.

Категория:

Описание

Для реализации этого нужно проделать слдующее:

 

В любом из общих модулей вставляем процедуру:

Процедура глОбработкаОповещения(Событие, Параметр, Источник) Экспорт
    Если
Событие = «ПоставитьСнятьПометкуУдаления» Тогда
        Если
Источник <> Неопределено Тогда
           
ЕстьПодчиненныеДокументы = НайтиПодчиненныеДокументы(Источник.Ссылка, ,НЕ Параметр);
               
Сообщить(«Так же » + ?(НЕ Параметр, «сняты пометки удаления: «,«помечены на удаление: «));
                Для Каждого
ТекСтрока Из ЕстьПодчиненныеДокументы Цикл
                   
ДокументОбъект = ТекСтрока.Ключ.ПолучитьОбъект();
                   
ДокументОбъект.УстановитьПометкуУдаления(?(ТекСтрока.Ключ.ПометкаУдаления, Ложь, Истина));
                   
Сообщить(Строка(ДокументОбъект));
              КонецЦикла;
          КонецЕсли;
     КонецЕсли;
КонецПроцедуры

 

затем в форме списка документа создаем следующую процедуру:

Процедура ДокументСписокПередУстановкойПометкиУдаления(Элемент, Отказ)
    Если Не
Отказ Тогда
       
ТекущаяСсылка = ЭлементыФормы.ДокументСписок.ТекущиеДанные.Ссылка;

        // отлавливаем установку пометки удаления на док. по ОУ из формы списка документа
        // т.к. автоматически ставить пометку на удаление надо только для ОН, то соответственно ограничим вид документа.
        //
       
Если ТекущаяСсылка.ВидОперации = Перечисления.ВидыОперацииОбъектов.ОбъектыУчета Тогда
           
ПодключитьОбработчикОповещения(«глОбработкаОповещения»);
        КонецЕсли;

    КонецЕсли;
КонецПроцедуры

и в заключении, в модуле документа:

 

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

// отлавливаем установку пометки удаления на док. по ОУ из формы списка документа
//
// Как работает:
//
// В форме списка вызывается подключение «ПодключитьОбработчикОповещения(«глОбработкаОповещения»);»,
// далее после при любом действии с документом не важно откуда он выполняется, из формы списка или из самого док. или из обработки
// мы всегда попадем сюда.
// Далее мы проверяем что происходит с док. и говорим что конфигурацию надо оповестить, тоесть в Общем модуле «ПараметрыОбъектов»
// вызывается «процедура глОбработкаОповещения(Событие, Параметр, Источник) Экспорт» в которой мы и обрабатываем нужные действия.
// !!! — Внимание !!! — После выполнения, необходимо обязательно «ОтключитьОбработчикОповещения(«глОбработкаОповещения»);» — чтобы он не выполнялся опять.

Если ЭтотОбъект.ВидОперации = Перечисления.ВидыОперацииОбъектов.ОбъектыУчета Тогда
    Если
РежимЗаписи = РежимЗаписиДокумента.Запись Тогда
       
// если док. просто перезаписывается, то сюда попадем в любом случае. Но это оповещение не сработает. т.к. он не подключено в форме списка.
        // ЕСЛИ же оно сработало, значит кто-то накосячил, и после подключения «ПодключитьОбработчикОповещения(«глОбработкаОповещения»);» не отключил его.
       
Оповестить(«ПоставитьСнятьПометкуУдаления», ЭтотОбъект.ПометкаУдаления, ЭтотОбъект);
       
ОтключитьОбработчикОповещения(«глОбработкаОповещения»);
    КонецЕсли;
КонецЕсли;

КонецПроцедуры

 

 

Ну вот и все. Теперь если пользователь в форме списка на документе выбрал пункт контекстного меню «Установить пометку удаления» и на вопрос подтвеждения сказал «Да», то и у под чиненых док. тоже поставится пометка. Так же и с распроведением. Если на вопрос он сказал «Нет», то и подчиненые документы, обрабатываться не будут.

 

Вместо установки пометки вы можете сделать свое действие.

has been added to your cart:
Оформление заказа