Как проверить одинаковый ли у элементов родитель?

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

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

И вот Я выбрал Элемент1 из группы1.1 и элемент1 из группы2.1
У них разные родители. Как это проверить?
+
По теме из базы знаний
Найденные решения
5. dhurricane 19.02.19 12:57 Сейчас в теме
(4) Тоже самое видимо:
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Услуги.Родитель) = 1 КАК РодителиОдинаковые
|ИЗ
|   Справочник.Услуги КАК Услуги
|ГДЕ
|   Услуги.Ссылка В (&Элементы)";

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

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

Если Выборка.РодителиОдинаковые Тогда
   Сообщить("У всех одинаковые родители");
Иначе
   Сообщить("Некоторые или все родители разные");
КонецЕсли;
Показать
+
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. dhurricane 19.02.19 12:48 Сейчас в теме
(1) Еще так можно:
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Услуги.Родитель) = 1 КАК РодителиОдинаковые
|ИЗ
|   Справочник.Услуги КАК Услуги
|ГДЕ
|   Услуги.Ссылка В (&Элемент1, &Элемент2)";

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

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

Если Выборка.РодителиОдинаковые Тогда
   Сообщить("Родители одинаковые");
Иначе
   Сообщить("Родители разные");
КонецЕсли;
Показать
+
4. arsen_botashev 19.02.19 12:53 Сейчас в теме
(3)а Элементов может быть сколько угодно, как с этим быть?
В ТЧ несколько строк, соответвенно элементов столько же
+
5. dhurricane 19.02.19 12:57 Сейчас в теме
(4) Тоже самое видимо:
Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Услуги.Родитель) = 1 КАК РодителиОдинаковые
|ИЗ
|   Справочник.Услуги КАК Услуги
|ГДЕ
|   Услуги.Ссылка В (&Элементы)";

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

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

Если Выборка.РодителиОдинаковые Тогда
   Сообщить("У всех одинаковые родители");
Иначе
   Сообщить("Некоторые или все родители разные");
КонецЕсли;
Показать
+
6. arsen_botashev 19.02.19 13:01 Сейчас в теме
(5)и это событие надо повесить на "ПередЗаписью"?
Чтоб перед тем как нажать "Стартовать и Закрыть" проверялось одинаковые ли родители?
+
7. dhurricane 19.02.19 13:19 Сейчас в теме
(6) Можно использовать "ОбработкаПроверкиЗаполнения" в модуле объекта.
+
8. arsen_botashev 19.02.19 14:03 Сейчас в теме
(7)а как перебрать все строки тч и засунуть в массив?
+
9. dhurricane 19.02.19 14:04 Сейчас в теме
(8)
МассивЭлементов = ТЧ.ВыгрузитьКолонку("Риск");
+
10. arsen_botashev 19.02.19 14:11 Сейчас в теме
(9)
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРевизиты)
	МассивЭлементов = Причины.ВыгрузитьКолонку("Риск");
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Услуги.Родитель) = 1 КАК РодителиОдинаковые
	|ИЗ
	|   Справочник.Услуги КАК Услуги
	|ГДЕ
	|   Услуги.Ссылка В (&Элементы)";
	
	Запрос.УстановитьПараметр("Элементы", МассивЭлементов);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Выборка.Следующий();
	
	Если Выборка.РодителиОдинаковые Тогда
		Сообщить("У всех одинаковые родители");
	Иначе
		Сообщить("Некоторые или все родители разные");
	КонецЕсли;
Показать

Вот написал, теперь как то надо вызвать этот обработчик?
ПроверитьЗаполнение()?
А где вызыватЬ?
+
11. dhurricane 19.02.19 14:29 Сейчас в теме
(10) Он сам вызовется, когда пользователь стартанет бизнес-процесс.
+
12. arsen_botashev 19.02.19 14:51 Сейчас в теме
(11)Спасибо большое, сделал. А можно еще вопрос?

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

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

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

Вот весь код:
Процедура ПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ)
	
	ФормируемаяЗадача = ФормируемыеЗадачи[0];
	Если 1=0 Тогда 
		ФормируемаяЗадача = Задачи.УниверсальнаяЗадача.НайтиПоНаименованию(); 
	КонецЕсли;
	
	ФормируемаяЗадача.Дата = ТекущаяДата();
	// Согласование	
	Если ТочкаМаршрутаБизнесПроцесса = ТочкиМаршрута.Согласование Тогда
		
		ИсполнительЗадачи = ДиректорЦОАвтора;
		ФормируемаяЗадача.СрокВыполненияЗадачи = ФормируемаяЗадача.Дата + 86400;
		ФормируемаяЗадача.Описание = "Согласовать / отклонить Бизнес-Процесс 'Снижение Рисков' " + Номер + " за " + Формат(Дата, "ДФ='ММММ ггг ""г.""'");
		
		// Мероприятие	
	ИначеЕсли ТочкаМаршрутаБизнесПроцесса = ТочкиМаршрута.Мероприятие Тогда
		Для Каждого Элемент из Причины Цикл
			НоваяЗадача = Задачи.УниверсальнаяЗадача.СоздатьЗадачу();
			НоваяЗадача.БизнесПроцесс = ЭтотОбъект.Ссылка;
			НоваяЗадача.ТочкаМаршрута = БизнесПроцессы.СнижениеРисков.ТочкиМаршрута.Мероприятие;
			НоваяЗадача.Дата = ТекущаяДата();
			НоваяЗадача.Наименование = БизнесПроцессы.СнижениеРисков.ТочкиМаршрута.Мероприятие.НаименованиеЗадачи;
			НоваяЗадача.Исполнитель = Элемент.Ответственный;
			НоваяЗадача.СрокВыполненияЗадачи = Элемент.Срок;
			НоваяЗадача.Описание = "Выполнение мероприятий по снижению риска' " + Номер + " за " + Формат(Дата, "ДФ='ММММ ггг ""г.""'");
			НоваяЗадача.Записать();
		КонецЦикла;
		
		// ПроверкаОУК	
	ИначеЕсли ТочкаМаршрутаБизнесПроцесса = ТочкиМаршрута.ПроверкаОУК Тогда 
		ИсполнительЗадачи = Подразделение.Родитель.ОтветственныйОУК;
		ФормируемаяЗадача.СрокВыполненияЗадачи = ФормируемаяЗадача.Дата + 86400;
		ФормируемаяЗадача.Описание = "Проверить в ОУК 'Снижение рисков' " + Номер + " за " + Формат(Дата, "ДФ='ММММ ггг ""г.""'");
		
		// ДокументОценкаРиска		
	ИначеЕсли  ТочкаМаршрутаБизнесПроцесса = ТочкиМаршрута.ДокументОценкаРиска Тогда
		
		ИсполнительЗадачи = Автор;
		ФормируемаяЗадача.СрокВыполненияЗадачи = КонецКвартала(ТекущаяДата());
		ФормируемаяЗадача.Описание = "Создать документ 'Оценка значимости риска' по БП 'Снижение рисков' " + Номер + " за " + Формат(Дата, "ДФ='ММММ ггг ""г.""'") ;
		
	ИначеЕсли ТочкаМаршрутаБизнесПроцесса = ТочкиМаршрута.Отказ  Тогда
		ИсполнительЗадачи = Автор;
		ФормируемаяЗадача.Описание = "Вам отказали в согласовании БП 'Снижение Рисков' " + Номер + " за " + Формат(Дата, "ДФ='ММММ ггг ""г.""'") ;
		
	КонецЕсли;
	
	ФормируемаяЗадача.Исполнитель = ИсполнительЗадачи;
	
КонецПроцедуры
Показать
+
13. dhurricane 19.02.19 15:31 Сейчас в теме
(12) Не знаю, я плохо знаком с бизнес-процессами.
Рассмотрите событие "ПередСозданиемЗадач" точки маршрута. Согласно синтакс-помощнику флаг "СтандартнаяОбработка" как раз отключает формирование списка задач.
+
14. arsen_botashev 19.02.19 15:52 Сейчас в теме
(13) Да, перед созданием задач я отключаю автоматическое создание "СтандартнаяОбработка = Ложь",
Все создается как мне надо, но я не знаю как включить обратно автоматическое создание. потому задача создается автоматом для след точки бизнес процесса, хотя предыдущие задачи на предыдущей точке еще не выполнены
+
15. arsen_botashev 19.02.19 15:54 Сейчас в теме
(13)А нет, разобрался, теперь все работает вроде, спасибо за помощь, Вы не первый раз отвечаете на мои темы, и пока что лучше вас я никого не видел, спасибо!
+
2. Alexei_Siva 182 19.02.19 12:18 Сейчас в теме
Как-то так, наверное:

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

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