Здравствуйте, пишу внешнюю обработку. Есть кнопка "Заполнить таблицу", при нажатии которой собственно происходит заполнение табличной части обработки. В табличной части 3 колонки: случайноеЧисло, платформа, числовойКод. И вот нужно чтобы строка табличной части, в которой колонка ЧисловойКод имеет наименьшее значение подсвечивалась красным, а где наибольшее значение - зелёным. Сейчас есть вот такая часть кода, но она естественно неправильная. Выдаёт ошибку: интератор для значения не определён. Уже всё перепробовал, ну вот не понимаю как перебрать строки табличной части самой формы именно, так как только для формы же можно оформление задавать. Либо я так понимаю придётся условное оформление программно писать, да? Извиняюсь зараннее за очень глупые вопросы, ещё новичок, буду благодарен за любые подсказки.
Результат = ЗаполнитьТаблицуНаСервере(ДанныеВвода);
МинимальныйКод = Результат.МинимальныйКод;
МаксимальныйКод = Результат.МаксимальныйКод;
Для Каждого Строка Из Элементы.ТаблицаДанных Цикл
Если Строка.ЧисловойКод = МинимальныйКод Тогда
Строка.ЦветФона = WebЦвета.Красный;
КонецЕсли;
Если Строка.ЧисловойКод = МаксимальныйКод Тогда
Строка.ЦветФона = WebЦвета.Зеленый;
КонецЕсли;
КонецЦикла;
ПоказатьПо теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Добавьте на форму реквизиты МинимальныйКод и МаксимальныйКод. Условное оформление один раз сформируйте интерактивно или программно: Тогда приведенный вами код можно сократить до:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// МинимальныйКод
ЭлементУО = УсловноеОформление.Элементы.Добавить();
ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТабличнаяЧасть1.ЧисловойКод");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных("МинимальныйКод");
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТабличнаяЧасть1");
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Красный);
// МаксимальныйКод
ЭлементУО = УсловноеОформление.Элементы.Добавить();
ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТабличнаяЧасть1.ЧисловойКод");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных("МаксимальныйКод");
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТабличнаяЧасть1");
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Зеленый);
КонецПроцедуры
ПоказатьРезультат = ЗаполнитьТаблицуНаСервере(ДанныеВвода);
МинимальныйКод = Результат.МинимальныйКод;
МаксимальныйКод = Результат.МаксимальныйКод;
(4) Здравствуйте, спасибо за помощь, я видел уже этот код на форуме, да, но был уверен, что в моём случае можно всё решить намного проще, так и оказалось к счастью, я ниже ответил пользователю starik-2005 как именно я решил задачу, но я не уверен что это оптимально))
Для Каждого Строка ИЗ ИмяРеквизитаФормыСТаблицей Цикл
Так получается список строк.
Чтобы в УФ отобразить цвет, лучше юзать условное оформление. Для этого нужно добавить еще одну колонку, например, "цвет". Ну и писать туда что-то, что можно будет использовать в условном оформлении как условие.
(2) Спасибо огромное!!! Всё получилось. Я просто добавил реквизит в табличную часть "Цвет", так же добавил условие оформление на самой форме, что: если реквизит "Цвет" = "Красный" то меняем на соответсвущий цвет, так же и для Зелёного. А код написал такой, не уверен, опять таки, что так вообще правильно, но как есть, главное что работает)
МинимальныйКод = Результат.МинимальныйКод;
МаксимальныйКод = Результат.МаксимальныйКод;
Для Каждого Строка Из Объект.ТаблицаДанных Цикл
Если Строка.ЧисловойКод = МинимальныйКод Тогда
Строка.Цвет = "Красный";
КонецЕсли;
Если Строка.ЧисловойКод = МаксимальныйКод Тогда
Строка.Цвет = "Зелёный";
КонецЕсли;
КонецЦикла;
Показать
(5)
Но если результат - это результат запроса, условно, то можно было бы это все решить в самом запросе. Это было бы более оптимально. С другой стороны, всегда все решать запросами - тоже такое себе.
Вообще, я удивлен людям, которые так быстро схватывают. Далеко пойдете )))
не уверен, опять таки, что так вообще правильно
Нормально.
Но если результат - это результат запроса, условно, то можно было бы это все решить в самом запросе. Это было бы более оптимально. С другой стороны, всегда все решать запросами - тоже такое себе.
Вообще, я удивлен людям, которые так быстро схватывают. Далеко пойдете )))
(8) Хах, спасибо конечно, но это ошибочное мнение)) На самом деле я очень жёсткий затуп, просто благодаря chatGpt удаётся часть проблем решать. Чтобы вы понимали, я даже ваш ответ, который пометил как решённый, отправлял gpt, чтобы он подробнее написал что нужно сделать, а дальше я уже сам как-то разбирался (настраивал оформление, писал код), как-то так)
Код не мой, взял со стороннего ресурса, но работает, спасибо разработчику
Яндексите по "очищаем ранее назначенные элементы оформления" и будет статья с примерами
Яндексите по "очищаем ранее назначенные элементы оформления" и будет статья с примерами
//очищаем ранее назначенные элементы оформления
КолонкиИмена = Новый Массив();
КолонкиИменаНеУчаствуют = Новый Массив();
Для Каждого Колонка Из Объект.ВариантыОтчетаИсточник.Выгрузить(Новый Массив(),).Колонки Цикл
КолонкиИмена.Добавить(Колонка.Имя);
КонецЦикла;
Для каждого Колонка Из КолонкиИмена Цикл
//добавляем новый элемент условного оформления
ЭлементУО = УсловноеОформление.Элементы.Добавить();
//устанавливаем само оформление
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоЗеленый);
//добавляем условие
ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
//что сравниваем()
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантыОтчетаИсточник."+Колонка);
//как сравниваем
ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
//с чем сравниваем
//ЭлементУсловия.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ВариантыОтчетаИсточник.ЛучшаяЦена");
ЭлементУсловия.ПравоеЗначение = Прав(НекаяСтруктура.КлючОбъекта, 36);
//оформляемые поля
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ВариантыОтчетаИсточник"+Колонка);
КонецЦикла;
//
ЭлементУО = УсловноеОформление.Элементы.Добавить();
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоСерый);
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ВариантыОтчетаИсточникКлючНастроек")
Показать
(3) (4) Здравствуйте, спасибо за помощь, я видел уже этот код на форуме, да, но был уверен, что в моём случае можно всё решить намного проще, так и оказалось к счастью, я ниже ответил пользователю starik-2005 как именно я решил задачу, но я не уверен что это оптимально))
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот