СТАТЬИ ПО 1С

Документооборот: дополнительные обработчики бизнес-событий

1С Документооборот обладает поистине неограниченным функционалом и гибкостью настройки под любые бизнес-процессы компании, вне зависимости от рода её деятельности.
Проще говоря, на данный момент 1С Документооборот является самым мощным и привлекательным продуктом для организации корпоративного документооборота.

Но иногда (часто) возникают ситуации, когда типового функционала не хватает, и требуется реализовать что-нибудь эдакое, что вообще не было предусмотрено разработчиками "из коробки", а вносить изменения в конфигурацию желания нет.

К примеру, мы недавно столкнулись с задачей, когда в процессе согласования первого документа по только что добавленному новому контрагенту, юридической службе необходимо убедиться, что данный контрагент является надёжным поставщиком, и с ним можно без рисков заключать договор, а когда в систему будет добавлен второй/третий/n-ный документ, данная задача в юридический отдел уже не поступала.

Данный механизм отсутствует в типовом решении, но мы можем реализовать его с помощью дополнительных обработчиков бизнес-событий.

Бизнес-событие в системе 1С Документооборот - это некоторое событие в жизни организации, которое должно быть зафиксировано изменением данных в информационной базе.
Такими событиями могут быть, например:

  1. записан новый договор,
  2. зарегистрирован новый исходящий документ,
  3. в систему был загружен новый файл,
  4. и т.д.

Для обработки событий вызываются различные обработчики этих бизнес-событий, которые по факту совершения события производят определенные действия.

Для начала убедимся, что в нашей системе включена возможность работы с бизнес-событиями:
После этого, в разделе Настроек и администрирование мы можем зайти и ознакомиться с уже определенными в системе видами бизнес-событий (справочник "виды событий"):
Как только происходит какое-либо из этих событий в системе, об этом заносится соответствующая запись в регистр сведений "Произошедшие бизнес-события":
Для уже имеющихся в системе видов событий система позволяет задать свой собственный обработчик, который будет вызываться каждый раз, как только в системе будет зарегистрировано соответствующее событие.

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

Чтобы не снимать конфигурацию с поддержки, создадим дополнительное сведение с типом “Булево” в справочнике “Контрагенты”, куда будем записывать состояние контрагента:
Для реализации программного кода нам потребуется имя данного дополнительного сведения, которое можно найти внутри данного сведения в разделе “Для разработчиков”:
После того, как данное сведение было создано, необходимо для уже имеющихся контрагентов в системе задать данное значение в значение “Истина”, а для новых контрагентов оно по умолчанию будет иметь значение “Ложь”. Самый простой способ сделать это – воспользоваться встроенной в систему обработкой “Групповое изменение реквизитов”: Через “Функции для технического специалиста” находим данную обработку и делаем настройки, как на скриншоте, после чего нажимаем “Изменить реквизиты”:
В настройках обработки выбранного вида документа (например, договора) сделаем первым этапом действие “Проверка по чек-листу”.
На данный этап обработки настроим условие, что данное действие будет выполняться, если у контрагента из документа установлено дополнительное значение “Чек-лист пройден” в значении “ложь”. Именно на данном этапе мы реализуем работу обработчика бизнес-события.

Код алгоритма проверки:

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

Код обработчика:

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

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

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

Мы оказываем широкий спектр IT-услуг в сфере 1С.

Если Вам необходима консультация, доработка, развертывание или внедрение программных продуктов на базе 1С: Предприятие, мы готовы взяться за вашу задачу в максимально короткие сроки и с высокой степенью фокуса - мы любим наших клиентов, как родных!
Вы можете связаться с нами и задать все интересующие вопросы через форму обратной связи или по телефону, указанном на главной странице сайта.
sale@res-t.ru