Заполнить табличную часть на основании реквизита

1. arsen_botashev 14.02.19 11:18 Сейчас в теме
Здравствуйте, есть реквизит Подразделение на форме документа ОценкаЗначимостиРиска с типом Справочник.Услуги
Так вот, я выбираю подразделение и на основании этого подразделения надо заполнить реквизит Риск Табличной Части Оценка Документа ОценкаЗщначимостиРиска .

Структура справочника немного странная:
 
Наименование            Родитель
Группа1
      Группа1.1              Группа1  
         Элемент1           Группа1.1
      Группа1.2              Группа1 
         Элемент1           Группа1.2 
Группа2
       Группа2.1              Группа2
           Элемент1          Группа2.1
        Группа2.2             Группа2
           Элемент1          Группа2.2

Показать

Примерно так.


Я выбираю подразделение Группа2 допустим и реквизит табличной части должен заполняться элементом1 из этой группы.
Сделал так: но не работает

&НаСервере
Процедура ПодразделениеПриИзмененииНаСервере()

	Для Каждого Строка из Объект.Оценка Цикл
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Услуги.Наименование
		|ИЗ
		|	Справочник.Услуги КАК Услуги
		|ГДЕ
		|	Услуги.Родитель = &Подразделение";
	
	Запрос.УстановитьПараметр("Подразделение", Объект.Подразделение);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			НоваяСтрока = Объект.Оценка.Добавить();
			ЗаполнитьЗначенияСвойств(НоваяСтрока, ВыборкаДетальныеЗаписи);
		КонецЦикла;
	КонецЦикла;
		
КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
20. dhurricane 14.02.19 14:45 Сейчас в теме
(18)
&НаСервере
Процедура ПодразделениеПриИзмененииНаСервере()
	
	Объект.Оценка.Очистить();
	
	Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Услуги.Ссылка
        |ИЗ
        |    Справочник.Услуги КАК Услуги
        |ГДЕ
        |    Услуги.Ссылка В ИЕРАРХИИ(&Подразделение) И Услуги.ЭтоГруппа = Ложь";
    
    Запрос.УстановитьПараметр("Подразделение", Объект.Подразделение);
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
		НоваяСтрока = Объект.Оценка.Добавить();
		НоваяСтрока.Риск = Выборка.Ссылка;
	КонецЦикла;
    
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. dhurricane 14.02.19 11:33 Сейчас в теме
(1) Исходя из постановки задачи и примера могу предположить следующее:
1. в запросе Вы выбираете наименование, а надо ссылку;
2. элемент имеет уровень вложенности 3, параметр &Подразделение - группа уровня 1, а вы проверяете родителя уровня 2. Скорее надо как-то так:
...
ГДЕ
   Услуги.Родитель.Родитель = &Подразделение // если элементы всегда на 3-ем уровне, а подразделение - на первом
...
ГДЕ
   Услуги.Ссылка В ИЕРАРХИИ(&Подразделение) // если элементы и подразделение могут оказаться на любом уровне

3. нет в условии проверки "ЭтоГруппа = Ложь";
6. arsen_botashev 14.02.19 11:48 Сейчас в теме
(3)Элементы могут быть на любом уровне, написал
ГДЕ
   Услуги.Ссылка В ИЕРАРХИИ(&Подразделение)

А как быть с тем что я заполняю одну колонку(Риск) табличной части?
    Для Каждого Строка из Объект.Оценка Цикл  //Тут я заполняю всю ТЧ
А мне надо заполнять Объект.Оценка.Риск //Одну колонку ТЧ

При этом возникает ошибка что поле объекта не обнаружено
2. SedovSU@mail.ru 297 14.02.19 11:29 Сейчас в теме
Запрос нужен другой. Скажите в вашем справочнике вот эта иерархия - то есть группы и иэлементы или включена иерархия элементов?
4. arsen_botashev 14.02.19 11:38 Сейчас в теме
(2)а какой другой?
по моей логике я выбираю элементы у которых родитель = подразделение.

Вид иерархии: Иерархия групп и элементов


Может проблема в том что я заполняю все реквизиты табличной части?

Мне надо заполнить в табличной части реквизит(колонку) Риск.

Пишу Для Каждого Строка Из Объект.Оценка(НазваниеТабличнойЧасти).Риск(названиеРеквизита)

Пишет Что поле объекта Риск не обнаружено
5. SedovSU@mail.ru 297 14.02.19 11:44 Сейчас в теме
Вот я думаю вот так подойдет

ГДЕ
Услуги.Ссылка В ИЕРАРХИИ(&Подразделение) И Услуги.ЭтоГруппа = Ложь.

Ведь нужно вам взять все элементы в какой то группе
7. SedovSU@mail.ru 297 14.02.19 11:48 Сейчас в теме
Ошибка выдается в том что нету реквизита Риск.
Пришлите весь листинг вашей программы. Так нагладянее будет
8. arsen_botashev 14.02.19 11:51 Сейчас в теме
(7)
Ну реквизит ТЧ есть, Называется Риск, но я не знаю как к нему обратиться
?
Вот все что связано с данной темой вопроса
 

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


&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
	ПодразделениеПриИзмененииНаСервере();
КонецПроцедуры
Показать
10. dhurricane 14.02.19 12:02 Сейчас в теме
(8) Еще раз поясните, пожалуйста. При выборе Подразделения необходимо получить все подчиненные элементы справочника Услуги и перезаполнить ими колонку "Риск" табличной части "Оцена"? Сколько выбрано услуг, столько строк и должно быть в Оценке?
13. arsen_botashev 14.02.19 14:24 Сейчас в теме
(10)При выборе подразделения, допустим подразделение "Тест", необходимо получить все ее элементы, и заполнить колонку "Риск" ТЧ "Оценка"
16. dhurricane 14.02.19 14:41 Сейчас в теме
(13) А какого типа колонка "Риск"?
18. arsen_botashev 14.02.19 14:42 Сейчас в теме
(16)Тип: СправочникСсылка.Услуги
20. dhurricane 14.02.19 14:45 Сейчас в теме
(18)
&НаСервере
Процедура ПодразделениеПриИзмененииНаСервере()
	
	Объект.Оценка.Очистить();
	
	Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Услуги.Ссылка
        |ИЗ
        |    Справочник.Услуги КАК Услуги
        |ГДЕ
        |    Услуги.Ссылка В ИЕРАРХИИ(&Подразделение) И Услуги.ЭтоГруппа = Ложь";
    
    Запрос.УстановитьПараметр("Подразделение", Объект.Подразделение);
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
		НоваяСтрока = Объект.Оценка.Добавить();
		НоваяСтрока.Риск = Выборка.Ссылка;
	КонецЦикла;
    
КонецПроцедуры
Показать
9. SedovSU@mail.ru 297 14.02.19 12:01 Сейчас в теме
Вот так попробуйте

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

        КонецЦикла;
    КонецЦикла;
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    
КонецПроцедуры
Показать
11. arsen_botashev 14.02.19 14:22 Сейчас в теме
(9)
НоваяСтрока = Объект.Оценка.Добавить();
НоваяСтрока.Риск = ВыборкаДетальныхЗаписей.Риск;


пишет переменная не определена "НоваяСтрока.Риск = ВыборкаДетальныхЗаписей.Риск;"
12. SedovSU@mail.ru 297 14.02.19 14:23 Сейчас в теме
(11) следовательно у вас в табличной части Оценка нет реквизита Риск. Поэтому и не заполняется у вас. Вы скажите что из запроса и в каком реквизите должно заполниться
14. arsen_botashev 14.02.19 14:32 Сейчас в теме
(12)Да есть у меня этот реквизит, есть.

Из запроса надо взять элемент у которого родитель = Подразделение, и заполнить этими элементами реквизит Риск.


Я исправил НоваяСтрока.Риск = ВыборкаДетальныхЗаписей.Риск;
На Это НоваяСтрока.Риск = ВыборкаДетальныЕЗаписИ.Риск;
Ошибок нет, но данные все равно не заполняются
15. SedovSU@mail.ru 297 14.02.19 14:38 Сейчас в теме
А тип значения у поля Риск - равен справочнику из которого запрос строится. То есть у него тип Справочник.Услуги?
17. arsen_botashev 14.02.19 14:41 Сейчас в теме
(15)Да, Тип: СправочникСсылка.Услуги
19. dhurricane 14.02.19 14:42 Сейчас в теме
(17) Тогда Вы не исправили самое первое замечание, указанно в первом сообщении: нужно выбирать в запросе не наименование, а ссылку
SedovSU@mail.ru; +1 Ответить
21. SedovSU@mail.ru 297 14.02.19 14:46 Сейчас в теме
(19) вот прям в точку. Нужно в запросе текст Услуги.Наименование написать Услуги.Ссылка КАК Риск
24. arsen_botashev 14.02.19 15:23 Сейчас в теме
(19)исправил, не работает(
25. dhurricane 14.02.19 15:24 Сейчас в теме
(24) Посмотрите пример в (20)
22. SedovSU@mail.ru 297 14.02.19 14:47 Сейчас в теме
(17) Нужно в запросе текст Услуги.Наименование написать Услуги.Ссылка КАК Риск


Запрос.Текст = 
        "ВЫБРАТЬ
        |    Услуги.Ссылка КАК Риск
        |ИЗ
        |    Справочник.Услуги КАК Услуги
        |ГДЕ
        |    Услуги.Ссылка В ИЕРАРХИИ(&Подразделение) И Услуги.ЭтоГруппа = Ложь";
23. arsen_botashev 14.02.19 15:23 Сейчас в теме
(22)

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


Вот, все как Вы сказали, все равно не работает.
26. SedovSU@mail.ru 297 14.02.19 15:26 Сейчас в теме
(23) да как так то. У вас в результате строки добавляются а сам реквизит Риск пустой чтоли????????????????????
27. dhurricane 14.02.19 15:27 Сейчас в теме
(26) Посмотрите внимательнее на пример автора. У него запрос и заполнение ТЧ внутри цикла обхода этой ТЧ. :-) Думаю, в этом проблема.
30. arsen_botashev 14.02.19 17:39 Сейчас в теме
(27) Да, заработало, Спасибо большое, что так провозились со мной))
28. arsen_botashev 14.02.19 15:28 Сейчас в теме
(26)Даже строки не добавляются.
Может проблема в этом ? Для Каждого Строка из Объект.Оценка Цикл
29. SedovSU@mail.ru 297 14.02.19 15:29 Сейчас в теме
(28) блин точно, ну конечно же у вас самая первая строка в коде Для Каждого Строка из Объект.Оценка Цикл - убирете ее и все заработает. А так у вас даже код не срабатывает
31. arsen_botashev 14.02.19 17:39 Сейчас в теме
(29)Вам тоже спасибо большое, что помогли))
Оставьте свое сообщение

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