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

15.11.11

Разработка - Универсальные функции

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

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

 

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

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

 

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

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


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

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

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

 

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

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

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

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

 

 

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

 

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

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    5450    DeerCven    15    

57

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    46446    dimanich70    83    

164

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6865    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    57531    atdonya    31    

68

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8634    ke.92@mail.ru    17    

68

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    22824    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. marku 63 11.11.11 20:10 Сейчас в теме
Спасибо за пример с использованием оповещения
2. Torin 890 11.11.11 23:03 Сейчас в теме
3. artbear 1583 12.11.11 10:24 Сейчас в теме
ИМХО проще юзать подписку на событие "Запись документа", намного меньше кода, да и контроль проще.
Пока что минусую
5. mr zafod 23 13.11.11 09:30 Сейчас в теме
(3) artbear, +1
По теме, извините конечно за критику, но
1. Все действия должны выполнятся в одной транзакции (пометка удаления - это операция записи источника и подчиненных документов с установленным свойством ПометкаУдаления и не более - остальное делает платформа)
2. Использование обработок оповещения в модулях объектов да еще и в транзакции - я лично приравниваю к вызову Предупреждение() в обработке проведения

Как идея (технология) +, но как рабочий вариант - здесь однозначно подписка на событие
4. zaoproxy 37 12.11.11 16:52 Сейчас в теме
может и проще с подпиской на события, но сколько людей, столько и мнений. Этот способ тоже имеет право на жизнь. и не стоит из-за того что кто-то считает другой способ проще ставить ему минус.
alex_2206; +1 1 Ответить
6. pavel_pss 291 14.11.11 02:15 Сейчас в теме
artbear пишет:

ИМХО проще юзать подписку на событие "Запись документа", намного меньше кода, да и контроль проще.

Пока что минусую


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


Проверил, тоже работает.
7. sserazm 14.11.11 12:37 Сейчас в теме
вариант через подписку предпочтительнее.
см желтые книжки
8. a-novoselov 1160 16.11.11 11:14 Сейчас в теме
Подписка рулит
dante; fomix; +2 Ответить
9. chumadan 13.12.11 20:18 Сейчас в теме
Может кто может выложить обработку которая помечает все документы на удаление?
10. pavel_pss 291 13.12.11 21:50 Сейчас в теме
(9) chumadan,

вытащи из любой типовой конфигурации обработку "Групповая обработка справочников и документов"
11. AlekseiLeit 9 05.05.12 14:07 Сейчас в теме
да, приколько...пригодилось!
и как пример хороший, у себя что-то похожее замутил
12. Dvornik 20 13.06.12 11:13 Сейчас в теме
В коде только я застопорился?
1. "ПередЗаписью" Это сервер.
2. "ОтключитьОбработчикОповещения" Доступность: Тонкий клиент, веб-клиент, толстый клиент.
13. Dvornik 20 13.06.12 11:44 Сейчас в теме
И "оповестить" тоже не работает на сервере. Как вставлять этот код в процедуру "ПередЗаписью"?
Извините, думал это код управляемого приложения. Комментарии удалить не могу.
14. tango 548 13.06.12 12:12 Сейчас в теме
редкий случай - согласен с artbear :)

реализация не комильфо совсем, а идея - более чем сомнительна:
пометили и подчиненные, да? а с подчиненными подчиненных что делать - пусть остаются? или таки тоже - того? а если тоже того - то что будете делать, если влетите в кольцо подчиненных?
15. dj_serega 396 11.04.14 12:58 Сейчас в теме
К сожалению не работает на тонком клиенте... А так идея супер.
16. goodwill 20 26.09.19 15:20 Сейчас в теме
Оповестить работает только на клиенте, здесь вызывается я так понимаю в модуле объекта на сервере. Хотя судя по дате публикации речь шла о толстом клиенте.
17. goodwill 20 26.09.19 15:22 Сейчас в теме
Оповестить работает только на клиенте, здесь вызывается я так понимаю в модуле объекта на сервере. Хотя судя по дате публикации речь шла о толстом клиенте.

Увидел это уже обсуждали выше
18. pavel_pss 291 02.10.19 09:56 Сейчас в теме
(17) да, это было еще на толстом клиенте.
19. Nicholas 940 30.03.20 11:42 Сейчас в теме
А для тонкого клиента есть решение?
20. sergey512 35 23.07.21 12:10 Сейчас в теме
Очень странное решение. Чем не устраивает модуль объекта документа Процедура ПередЗаписью ?

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

	Если ПометкаУдаления  и Ссылка.ПометкаУдаления <> ПометкаУдаления Тогда
		//Установили пометку
	КонецЕсли;
КонецПроцедуры
lordguard; and_r; AnPet; st8899; Valerianich; user1961424; xelas12345; cherryblossom; bashirov.rs; happy-anvar; kompas-dm; _user1619761; vovaapril; +13 Ответить
Для отправки сообщения требуется регистрация/авторизация