Дополнительный обработчик событий в Документооборот 3.0

1. pusal 13.01.23 00:54 Сейчас в теме
Коллеги, всем привет.

Возникла необходимость написания дополнительного обработчика для бизнес-события в конфигурации Документооборот 3.0. Подписать данный обработчик необходимо было на вид события "Задачи: выполнение".

Для чего: юридический отдел получает задачу "проверка по чек-листу" и проверяет контрагента в договоре.

Что он должен делать: по результатам выполнения задачи "Проверка по чек-листу" делать запись в дополнительные сведения по выбранному контрагенту - справочнику "Контрагенты" создано доп. сведение (булево) "Пройден чек-лист (да/нет)".

Код ниже. Я еще пока не программист - просто опытный пользователь 1С, поэтому код писал "по наитию", и возможно он содержит ошибки - буду признателен, если тыкните носом.

Результат - не работает. И отладчиком даже не пробежаться по коду, ибо пишется он прямо в приложении в пользовательском режиме.

В регистр сведений "Произошедшие бизнес-события" никакой записи не вносится. Чтобы окончательно убедиться, что обработчик не отрабатывает, добавил добавление в реквизит "Комментарий" слово "Тест" - событие "Изменение документа" все равно не создается.

Обработчик включен.
Подписка на события выполнена.
Регламентное задание "Обработка детекторов бизнес-событий" отрабатывает.
Что я делаю не так?
Может, я вообще не правильно понял принцип работы данного функционала?
Буду признателен за любые наводки на решение.


Задача = Событие.Источник;
Документ = ОбзорЗадачВызовСервера.ПолучитьОсновнойПредметДокумент(Задача.Предметы);

Если СтрЧислоВхождений(Задача.Наименование, "Проверка по чек-листу") > 0 Тогда

    	ОбъектПоиска = Справочники.Контрагенты.НайтиПоНаименованию("Документ.Контрагент"); 
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ПройденЧекЛист_c5860d8f333340eeb7943b94fed62e02");  
	
	Запрос = Новый Запрос; 
	Запрос.Текст =  
	"ВЫБРАТЬ 
	| ДополнительныеСведения.Объект КАК Объект, 
	| ДополнительныеСведения.Свойство КАК Свойство, 
	| ДополнительныеСведения.Значение КАК Значение 
	|ИЗ 
	| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения 
	|ГДЕ 
	| ДополнительныеСведения.Объект = &Объект 
	| И ДополнительныеСведения.Свойство = &Свойство"; 
	
	Запрос.УстановитьПараметр("Объект", ОбъектПоиска); 
	Запрос.УстановитьПараметр("Свойство", Свойство);  
	
	РезультатЗапроса = Запрос.Выполнить(); 
	
	Если РезультатЗапроса.Пустой() Тогда  
		
		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();  
		ВыборкаДетальныеЗаписи.Следующий(); 
		Значение = ВыборкаДетальныеЗаписи.Значение; 
		
		МенеджерЗаписи = РегистрыСведений.ДополнительныеСведения.СоздатьМенеджерЗаписи();  
		МенеджерЗаписи.Объект = ОбъектПоиска;  
		МенеджерЗаписи.Свойство = Свойство;  
		МенеджерЗаписи.Значение = Истина;  
		МенеджерЗаписи.Записать();    		
		
	КонецЕсли;
КонецЕсли;

// проверка, работает ли обработчик

ДокументОбъект = Документ.ПолучитьОбъект();
ДокументОбъект.Комментарий = "Тест";
ДокументОбъект.Записать();

Показать
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Westonline82 13.01.23 09:02 Сейчас в теме
ОбъектПоиска = Справочники.Контрагенты.НайтиПоНаименованию("Документ.Контрагент"); - так ты ищешь контрагента с Наименованием Документ.Контрагент,как итог возвращается пустая ссылка. И я не совсем понимаю для чего ты что то ищешь если Документ.Контрагент и есть нужный тебе контрагент....

Попробуй так(пишу на коленке возможны опечатки):

Контрагент = Документ.Контрагент;
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ПройденЧекЛист_c5860d8f333340eeb7943b94fed62e02");
ДопЗначение = Контрагент.ДополнительныеРеквизиты.Найти(ДопСвойство );
Если ДопЗначение = Неопределено Тогда
//дополнительный реквизит у объекта не создан(галочка не стоит)
Иначе
//дополнительный реквизит = Истина
КонецЕсли;
3. pusal 13.01.23 18:20 Сейчас в теме
(2) спасибо за отклик. Дело в том, что даже вот такой простой код не срабатывает, не понимаю почему:

Задача = Событие.Источник;
Документ = ОбзорЗадачВызовСервера.ПолучитьОсновнойПредметДокумент(Задача.Предметы);

ДокументОб = Документ.ПолучитьОбъект();
ДокументОб.Заголовок = "Тест";
ДокументОб.Записать();
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот