Обход табличной части формы

1. Anterian 12.02.25 17:29 Сейчас в теме
Здравствуйте, пишу внешнюю обработку. Есть кнопка "Заполнить таблицу", при нажатии которой собственно происходит заполнение табличной части обработки. В табличной части 3 колонки: случайноеЧисло, платформа, числовойКод. И вот нужно чтобы строка табличной части, в которой колонка ЧисловойКод имеет наименьшее значение подсвечивалась красным, а где наибольшее значение - зелёным. Сейчас есть вот такая часть кода, но она естественно неправильная. Выдаёт ошибку: интератор для значения не определён. Уже всё перепробовал, ну вот не понимаю как перебрать строки табличной части самой формы именно, так как только для формы же можно оформление задавать. Либо я так понимаю придётся условное оформление программно писать, да? Извиняюсь зараннее за очень глупые вопросы, ещё новичок, буду благодарен за любые подсказки.
  

        Результат = ЗаполнитьТаблицуНаСервере(ДанныеВвода);
	
        МинимальныйКод = Результат.МинимальныйКод;
        МаксимальныйКод  = Результат.МаксимальныйКод;
        
			
		Для Каждого Строка Из Элементы.ТаблицаДанных Цикл   
			
			Если Строка.ЧисловойКод = МинимальныйКод Тогда 
				
				Строка.ЦветФона = WebЦвета.Красный;	 
			КонецЕсли;         
			
			
			Если Строка.ЧисловойКод = МаксимальныйКод Тогда 
				
				Строка.ЦветФона = WebЦвета.Зеленый;	 
			КонецЕсли;    
			
			
		КонецЦикла;
Показать
По теме из базы знаний
Найденные решения
2. starik-2005 3165 12.02.25 17:33 Сейчас в теме
Для Каждого Строка ИЗ ИмяРеквизитаФормыСТаблицей Цикл

Так получается список строк.

Чтобы в УФ отобразить цвет, лучше юзать условное оформление. Для этого нужно добавить еще одну колонку, например, "цвет". Ну и писать туда что-то, что можно будет использовать в условном оформлении как условие.
Anterian; VyacheslavShilov; +2 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. SlavaKron 12.02.25 18:18 Сейчас в теме
(1) Добавьте на форму реквизиты МинимальныйКод и МаксимальныйКод. Условное оформление один раз сформируйте интерактивно или программно:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// МинимальныйКод 
	ЭлементУО = УсловноеОформление.Элементы.Добавить();
	
	ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТабличнаяЧасть1.ЧисловойКод");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных("МинимальныйКод");
	
	ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТабличнаяЧасть1");
	
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Красный);
	
	// МаксимальныйКод 
	ЭлементУО = УсловноеОформление.Элементы.Добавить();
	
	ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТабличнаяЧасть1.ЧисловойКод");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных("МаксимальныйКод");
	
	ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТабличнаяЧасть1");
	
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Зеленый);
	
КонецПроцедуры
Показать
Тогда приведенный вами код можно сократить до:
Результат = ЗаполнитьТаблицуНаСервере(ДанныеВвода);

МинимальныйКод = Результат.МинимальныйКод;
МаксимальныйКод  = Результат.МаксимальныйКод;
6. Anterian 12.02.25 18:31 Сейчас в теме
(4) Здравствуйте, спасибо за помощь, я видел уже этот код на форуме, да, но был уверен, что в моём случае можно всё решить намного проще, так и оказалось к счастью, я ниже ответил пользователю starik-2005 как именно я решил задачу, но я не уверен что это оптимально))
2. starik-2005 3165 12.02.25 17:33 Сейчас в теме
Для Каждого Строка ИЗ ИмяРеквизитаФормыСТаблицей Цикл

Так получается список строк.

Чтобы в УФ отобразить цвет, лучше юзать условное оформление. Для этого нужно добавить еще одну колонку, например, "цвет". Ну и писать туда что-то, что можно будет использовать в условном оформлении как условие.
Anterian; VyacheslavShilov; +2 Ответить
5. Anterian 12.02.25 18:28 Сейчас в теме
(2) Спасибо огромное!!! Всё получилось. Я просто добавил реквизит в табличную часть "Цвет", так же добавил условие оформление на самой форме, что: если реквизит "Цвет" = "Красный" то меняем на соответсвущий цвет, так же и для Зелёного. А код написал такой, не уверен, опять таки, что так вообще правильно, но как есть, главное что работает)
 
       МинимальныйКод = Результат.МинимальныйКод;
        МаксимальныйКод  = Результат.МаксимальныйКод;	
		
		Для Каждого Строка Из Объект.ТаблицаДанных Цикл   
			
			Если Строка.ЧисловойКод = МинимальныйКод Тогда 
				
				Строка.Цвет = "Красный"; 
			КонецЕсли;         
			
			
			Если Строка.ЧисловойКод = МаксимальныйКод Тогда 
				
				Строка.Цвет = "Зелёный"; 
			КонецЕсли;    
			
			
		КонецЦикла;
Показать
8. starik-2005 3165 12.02.25 21:33 Сейчас в теме
(5)
не уверен, опять таки, что так вообще правильно
Нормально.

Но если результат - это результат запроса, условно, то можно было бы это все решить в самом запросе. Это было бы более оптимально. С другой стороны, всегда все решать запросами - тоже такое себе.

Вообще, я удивлен людям, которые так быстро схватывают. Далеко пойдете )))
9. Anterian 13.02.25 11:48 Сейчас в теме
(8) Хах, спасибо конечно, но это ошибочное мнение)) На самом деле я очень жёсткий затуп, просто благодаря chatGpt удаётся часть проблем решать. Чтобы вы понимали, я даже ваш ответ, который пометил как решённый, отправлял gpt, чтобы он подробнее написал что нужно сделать, а дальше я уже сам как-то разбирался (настраивал оформление, писал код), как-то так)
10. user2107191 13.02.25 12:00 Сейчас в теме
(9) В бан за неуважение к аксакалам.
11. Anterian 13.02.25 12:03 Сейчас в теме
(10) )) Пришлось ещё у gpt спросить кто такие аксакалы...
3. Tommy82 65 12.02.25 17:58 Сейчас в теме
Код не мой, взял со стороннего ресурса, но работает, спасибо разработчику
Яндексите по "очищаем ранее назначенные элементы оформления" и будет статья с примерами

	//очищаем ранее назначенные элементы оформления
	
	КолонкиИмена = Новый Массив();
	КолонкиИменаНеУчаствуют = Новый Массив();
	
	Для Каждого Колонка Из Объект.ВариантыОтчетаИсточник.Выгрузить(Новый Массив(),).Колонки Цикл
		КолонкиИмена.Добавить(Колонка.Имя);
	КонецЦикла;
	
	Для каждого Колонка Из КолонкиИмена Цикл
		
		//добавляем новый элемент условного оформления
		ЭлементУО = УсловноеОформление.Элементы.Добавить();
		//устанавливаем само оформление
		ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоЗеленый);
		//добавляем условие
		ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
		//что сравниваем()
		ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантыОтчетаИсточник."+Колонка);
		//как сравниваем
		ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
		//с чем сравниваем
		//ЭлементУсловия.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ВариантыОтчетаИсточник.ЛучшаяЦена");
		ЭлементУсловия.ПравоеЗначение = Прав(НекаяСтруктура.КлючОбъекта, 36);
		
		//оформляемые поля
		ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
		ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ВариантыОтчетаИсточник"+Колонка);
		
	КонецЦикла;
	
	//
	
	ЭлементУО = УсловноеОформление.Элементы.Добавить();				
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоСерый);
	ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ВариантыОтчетаИсточникКлючНастроек")
Показать
7. Anterian 12.02.25 18:32 Сейчас в теме
(3) (4) Здравствуйте, спасибо за помощь, я видел уже этот код на форуме, да, но был уверен, что в моём случае можно всё решить намного проще, так и оказалось к счастью, я ниже ответил пользователю starik-2005 как именно я решил задачу, но я не уверен что это оптимально))
Оставьте свое сообщение

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