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

15.11.11

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

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

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

 

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

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

 

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

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


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

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

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

 

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

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

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

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

 

 

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

 

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

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

18.03.2024    2677    0    John_d    8    

55

GUID в 1С 8.3 - как с ними быть

Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

12.02.2024    4613    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

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

30.11.2023    3963    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

28.08.2023    8841    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2077    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16150    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

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

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

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

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


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


Проверил, тоже работает.
7. sserazm 14.11.11 12:37 Сейчас в теме
вариант через подписку предпочтительнее.
см желтые книжки
8. a-novoselov 1155 16.11.11 11:14 Сейчас в теме
Подписка рулит
dante; fomix; +2 Ответить
9. chumadan 13.12.11 20:18 Сейчас в теме
Может кто может выложить обработку которая помечает все документы на удаление?
10. pavel_pss 289 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 506 13.06.12 12:12 Сейчас в теме
редкий случай - согласен с artbear :)

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

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

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

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