Здравствуйте, на форме бп есть тч в нем реквизит Риск с типом СправочникСсылка.Услуги(Иерархический справочник)
"Риск"
Риск1
Риск2
Риск3

Так вот, как проверить одинаковый ли у этих: Риск1, Риск2, Риск3 Родитель? И выдать ошибку если он не одинаковый
и куда вешать Событие?
Для наглядности структура справочника:
Группа1
   Группа1.1
    Элемент1
    Элемент2
    Элемент3
Группа2
   Группа2.1
    Элемент1
    Элемент2
    Элемент3

И вот Я выбрал Элемент1 из группы1.1 и элемент1 из группы2.1
У них разные родители. Как это проверить?
---
Тоже самое видимо:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Услуги.Родитель) = 1 КАК РодителиОдинаковые
    |ИЗ
    | Справочник.Услуги КАК Услуги
    |ГДЕ
    | Услуги.Ссылка В (&Элементы)";

    Запрос.УстановитьПараметр("Элементы", МассивЭлементов);

    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();

    Если Выборка.РодителиОдинаковые Тогда
    Сообщить("У всех одинаковые родители");
    Иначе
    Сообщить("Некоторые или все родители разные");
    КонецЕсли;
```
---
Еще так можно:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Услуги.Родитель) = 1 КАК РодителиОдинаковые
    |ИЗ
    | Справочник.Услуги КАК Услуги
    |ГДЕ
    | Услуги.Ссылка В (&Элемент1, &Элемент2)";

    Запрос.УстановитьПараметр("Элемент1", Элемент1);
    Запрос.УстановитьПараметр("Элемент2", Элемент2);

    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();

    Если Выборка.РодителиОдинаковые Тогда
    Сообщить("Родители одинаковые");
    Иначе
    Сообщить("Родители разные");
    КонецЕсли;
```
---
а Элементов может быть сколько угодно, как с этим быть?
В ТЧ несколько строк, соответвенно элементов столько же
---
Тоже самое видимо:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Услуги.Родитель) = 1 КАК РодителиОдинаковые
    |ИЗ
    | Справочник.Услуги КАК Услуги
    |ГДЕ
    | Услуги.Ссылка В (&Элементы)";

    Запрос.УстановитьПараметр("Элементы", МассивЭлементов);

    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();

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

    Запрос.УстановитьПараметр("Элементы", МассивЭлементов);

    Выборка = Запрос.Выполнить().Выбрать();
    Выборка.Следующий();

    Если Выборка.РодителиОдинаковые Тогда
    Сообщить("У всех одинаковые родители");
    Иначе
    Сообщить("Некоторые или все родители разные");
    КонецЕсли;
```

Вот написал, теперь как то надо вызвать этот обработчик?
ПроверитьЗаполнение()?
А где вызыватЬ?
---
Он сам вызовется, когда пользователь стартанет бизнес-процесс.
---
Спасибо большое, сделал. А можно еще вопрос?

у меня в бизнес процессе задачи создаются автоматически для каждой точки маршрута, но мне надо на определенной точке маршрута выключить это автоматическое создание задач и создать самому несколько задач, а дальше продолжить автоматическое создание, как \то сделать? Подскажите пожалуйста.

Когда точка маршрута

```1c
    // Мероприятие
    ИначеЕсли ТочкаМаршрутаБизнесПроцесса = ТочкиМаршрута.Мероприятие Тогда
```

Мне надо отключить автоматическое создание задач, я создаю сам задачи, и после их выполнения, продолжить дальше автоматически создавать задачи.

Вот весь код:

```1c
    Процедура ПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)

    ФормируемаяЗадача = ФормируемыеЗадачи[0];
    Если 1=0 Тогда
    ФормируемаяЗадача = Задачи.УниверсальнаяЗадача.НайтиПоНаименованию();
    КонецЕсли;

    ФормируемаяЗадача.Дата = ТекущаяДата();
    // Согласование
    Если ТочкаМаршрутаБизнесПроцесса = ТочкиМаршрута.Согласование Тогда

    ИсполнительЗадачи = ДиректорЦОАвтора;
    ФормируемаяЗадача.СрокВыполненияЗадачи = ФормируемаяЗадача.Дата + 86400;
    ФормируемаяЗадача.Описание = "Согласовать / отклонить Бизнес-Процесс 'Снижение Рисков' " + Номер + " за " + Формат(Дата, "ДФ='ММММ ггг "г."'");

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

    // ПроверкаОУК
    ИначеЕсли ТочкаМаршрутаБизнесПроцесса = ТочкиМаршрута.ПроверкаОУК Тогда
    ИсполнительЗадачи = Подразделение.Родитель.ОтветственныйОУК;
    ФормируемаяЗадача.СрокВыполненияЗадачи = ФормируемаяЗадача.Дата + 86400;
    ФормируемаяЗадача.Описание = "Проверить в ОУК 'Снижение рисков' " + Номер + " за " + Формат(Дата, "ДФ='ММММ ггг "г."'");

    // ДокументОценкаРиска
    ИначеЕсли ТочкаМаршрутаБизнесПроцесса = ТочкиМаршрута.ДокументОценкаРиска Тогда

    ИсполнительЗадачи = Автор;
    ФормируемаяЗадача.СрокВыполненияЗадачи = КонецКвартала(ТекущаяДата());
    ФормируемаяЗадача.Описание = "Создать документ 'Оценка значимости риска' по БП 'Снижение рисков' " + Номер + " за " + Формат(Дата, "ДФ='ММММ ггг "г."'") ;

    ИначеЕсли ТочкаМаршрутаБизнесПроцесса = ТочкиМаршрута.Отказ Тогда
    ИсполнительЗадачи = Автор;
    ФормируемаяЗадача.Описание = "Вам отказали в согласовании БП 'Снижение Рисков' " + Номер + " за " + Формат(Дата, "ДФ='ММММ ггг "г."'") ;

    КонецЕсли;

    ФормируемаяЗадача.Исполнитель = ИсполнительЗадачи;

    КонецПроцедуры
```
---
Не знаю, я плохо знаком с бизнес-процессами.
Рассмотрите событие "ПередСозданиемЗадач" точки маршрута. Согласно синтакс-помощнику флаг "СтандартнаяОбработка" как раз отключает формирование списка задач.
---
Да, перед созданием задач я отключаю автоматическое создание "СтандартнаяОбработка = Ложь",
Все создается как мне надо, но я не знаю как включить обратно автоматическое создание. потому задача создается автоматом для след точки бизнес процесса, хотя предыдущие задачи на предыдущей точке еще не выполнены
---
А нет, разобрался, теперь все работает вроде, спасибо за помощь, Вы не первый раз отвечаете на мои темы, и пока что лучше вас я никого не видел, спасибо!
---
Как-то так, наверное:

```1c
    Если Элемент1.родитель = Элемент2.Родитель Тогда
    Сообщить("Родители одинаковые")
    Иначе
    Сообщить("Родители разные")
    КонецЕсли;
```