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

По теме из базы знаний
- Пример создания в КД 2.1 правил выгрузки данных регистра «Лицевые счета работников» из ЗУП 2.5 в справочник «Банковские счета» БП 3.0. Подробно, ясно и просто.
- Видеокурс-самоучитель "1С:Документооборот 2.1 и 3.0" для самостоятельного внедрения
- Загрузка чеков из ФНС в документы 1С:БП, УНФ, ERP, КА и УТ
- Автоматическое создание сотрудников и пользователей в 1С:Документооборот 3
- Интеграция 1C:Документооборот с open source платформой n8n
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
ОбъектПоиска = Справочники.Контрагенты.НайтиПоНаименованию("Документ.Контрагент"); - так ты ищешь контрагента с Наименованием Документ.Контрагент,как итог возвращается пустая ссылка. И я не совсем понимаю для чего ты что то ищешь если Документ.Контрагент и есть нужный тебе контрагент....
Попробуй так(пишу на коленке возможны опечатки):
Контрагент = Документ.Контрагент;
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ПройденЧекЛист_c5860d8f333340eeb7943b94fed62e02");
ДопЗначение = Контрагент.ДополнительныеРеквизиты.Найти(ДопСвойство );
Если ДопЗначение = Неопределено Тогда
//дополнительный реквизит у объекта не создан(галочка не стоит)
Иначе
//дополнительный реквизит = Истина
КонецЕсли;
Попробуй так(пишу на коленке возможны опечатки):
Контрагент = Документ.Контрагент;
ДопСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ПройденЧекЛист_c5860d8f333340eeb7943b94fed62e02");
ДопЗначение = Контрагент.ДополнительныеРеквизиты.Найти(ДопСвойство );
Если ДопЗначение = Неопределено Тогда
//дополнительный реквизит у объекта не создан(галочка не стоит)
Иначе
//дополнительный реквизит = Истина
КонецЕсли;
(2) спасибо за отклик. Дело в том, что даже вот такой простой код не срабатывает, не понимаю почему:
Задача = Событие.Источник;
Документ = ОбзорЗадачВызовСервера.ПолучитьОсновнойПредметДокумент(Задача.Предметы);
ДокументОб = Документ.ПолучитьОбъект();
ДокументОб.Заголовок = "Тест";
ДокументОб.Записать();
(3) День добрый. Подскажите, пожалуйста, нашли ли решение? Я в на просторах паутины нашел опубликованный код вашего примера (как будто законченный, на сайте питерской фирмы), но он также не работает, и именно не работают также вот эти ваши строки. Как можно с Вами связаться?, если можно то покажите, пожалуйста, работающее решение. Пятый день бьюсь над решением этой задачи и толку ноль...Заранее спасибо)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот