[Решено] 1С 8.3 Условное оформление таблицы программно

1. illiona 17.10.17 05:18 Сейчас в теме
Добрый день. Таблица формируется программно и выводится на форму
ЗначениеВРеквизитФормы(ТЗ,"ДанныеФайла");

Подскажите как выделить цветом строки по условию?
Элемент = УсловноеОформление.Элементы.Добавить();

    ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ТаблицаДанныхФайла");

    ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаДанныхФайла.Склад");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
    ОтборЭлемента.ПравоеЗначение = "количество";
    
   
    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый);
Показать

Красит все
Прикрепленные файлы:
user744718; RustIG; +2 Ответить
По теме из базы знаний
Найденные решения
51. illiona 18.10.17 07:52 Сейчас в теме
Все получилось. Все большое спасибо!
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. spezc 782 17.10.17 06:07 Сейчас в теме
Возможно в качестве поля нужно указывать не всю таблицу, а конкретное поле. Самое простое для понимания как создать оформление программно - создать его вручную на форме, а потом в отладчике посмотреть состав.
3. ImHunter 315 17.10.17 06:18 Сейчас в теме
Как развитие предложения (2), можно использовать обработку, которая по дизайну формы генерирует код. Где-то есть такая на ИС.
5. spezc 782 17.10.17 06:31 Сейчас в теме
(3) не слышал о такое, но тоже интересно
52. ks8585 3 17.08.19 22:01 Сейчас в теме
(2)не подскажете, как после создания вручную посмотреть в отладчике?
4. illiona 17.10.17 06:19 Сейчас в теме
что за обработка такая интересная?
7. illiona 17.10.17 06:46 Сейчас в теме
Создала таблицу на форме вручную, сделала вручную условное оформление, все получилось. Как посмотреть в отладчике код?
8. ImHunter 315 17.10.17 06:55 Сейчас в теме
(7) Где-нить в ПриСозданииНаСервере поставить точку останова. Но код, на самом деле, посмотреть не получится. Можно только увидеть элемент оформления и его св-ва.
9. ImHunter 315 17.10.17 07:08 Сейчас в теме
Можно и код допилить. Элемент - так полагаю, это дин список? Должно быть как-то так:
ЭлементУО = Элемент.УсловноеОформление.Добавить();
Элемент.УО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый);
ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементУсловия.ЛевоеЗначение = ПолеЭлемента.Поле;
ЭлементУсловия.ВидСравнения= ...;
ЭлементУсловия.ПравоеЗначение = ...;
10. illiona 17.10.17 07:26 Сейчас в теме
ЭлементУО = УсловноеОформление.Элементы.Добавить();
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый);
	ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементУсловия.ЛевоеЗначение = Элементы.Склад.Имя;
	ЭлементУсловия.ВидСравнения= ВидСравненияКомпоновкиДанных.НеРавно;
	ЭлементУсловия.ПравоеЗначение = "количество";

Да, динамический. Может неправильно обращаюсь к левому значению?
11. ImHunter 315 17.10.17 07:40 Сейчас в теме
(10) И левое значение, и правое - заданы неверно. ЛевоеЗначение - объект типа ПолеКомпоновкиДанных. В вашем случае вроде как = Новый ПолеКомпоновкиДанных("Склад"). А ПравоеЗначение - это, собственно, само значение, по которому должно условно оформляться.
12. illiona 17.10.17 07:57 Сейчас в теме
А оформляемые поля должны идти в конце? Новый ПолеКомпоновкиДанных("ТаблицаДанныхФайла.Склад") может так?
13. ImHunter 315 17.10.17 08:03 Сейчас в теме
(12) А, да:
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ИмяОформляемогоПоля")
14. illiona 17.10.17 08:07 Сейчас в теме
похоже у меня проблема в обращении к таблицы на форме

ЭлементУО = УсловноеОформление.Элементы.Добавить(); 
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый); 
ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаДанныхФайла.склад");; 
ЭлементУсловия.ВидСравнения= ВидСравненияКомпоновкиДанных.НеРавно; 
ЭлементУсловия.ПравоеЗначение = "количество"; 
ПолеЭлемента = ЭлементУО.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ТаблицаДанныхФайла");
47. ImHunter 315 17.10.17 13:50 Сейчас в теме
Код из поста (14) - на чем-то выдает ошибку?
15. ImHunter 315 17.10.17 08:27 Сейчас в теме
Замечания:
ЭлементУО = Список.УсловноеОформление.Элементы.Добавить(); // Список - имя вашего реквизита типа ТаблицаЗначений. Если без Список писать, то вы будете обращаться к условному оформлению самой формы
ЭлементУсловия.ПравоеЗначение = "количество"; // Почему "Количество"? Это строковое значение поля такое что ли?
16. illiona 17.10.17 09:34 Сейчас в теме
Да это значение в поле количество. Если по колонке Склад значение стоит количество то окрасить
На список ругается.
17. ImHunter 315 17.10.17 09:36 Сейчас в теме
(16) Так как ругается-то? Что пишет, на какую строку?
18. illiona 17.10.17 09:38 Сейчас в теме
Переменная не определена (Список). у меня же нет никаких вручную добавленных элементов, реквизитов. Таблица полностью программно, вот и не могу понять
19. ImHunter 315 17.10.17 09:51 Сейчас в теме
Судя по коду:
ЗначениеВРеквизитФормы(ТЗ,"ДанныеФайла"); 

у вас это не Список, а ДанныеФайла. Замените Список на ДанныеФайла.
20. ImHunter 315 17.10.17 10:04 Сейчас в теме
А вы точно полностью программно формируете таблицу? Может вы просто ее заполняете программно, а дизайн (колонки) уже в форме накликан?
21. illiona 17.10.17 10:09 Сейчас в теме
нет точно форма пустая полностью
22. illiona 17.10.17 10:10 Сейчас в теме
ЭлементУО = ЭтаФорма.УсловноеОформление.Элементы.Добавить(); но так всю форму красит
23. illiona 17.10.17 10:11 Сейчас в теме
//Добавим Таблицу на форму
    ТаблицаДанныхФайла             = Элементы.Добавить("ТаблицаДанныхФайла", Тип("ТаблицаФормы"));
    ТаблицаДанныхФайла.ПутьКДанным = "ДанныеФайла";
    ТаблицаДанныхФайла.Отображение = ОтображениеТаблицы.Список;
	
   //Добавим колонки
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаДанныхФайла);
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
	НовыйЭлемент.ПутьКДанным = "ДанныеФайла." + Колонка.Имя;
	КонецЦикла;  
//Потом строки...
.....
Пока Выборка1.Следующий() Цикл
		Строка = ТЗ.Добавить();
		Строка.Склад = Выборка1.Наименование;
		Строка = ТЗ.Добавить();
		Строка.Склад = "количество";
		Строка = ТЗ.Добавить();
		Строка.Склад = "цена";
	КонецЦикла;
	
	ЗначениеВРеквизитФормы(ТЗ,"ДанныеФайла");
Показать
24. illiona 17.10.17 10:13 Сейчас в теме
ЭлементУО = ДанныеФайла.УсловноеОформление ....
Переменная не определена (ДанныеФайла)
25. ImHunter 315 17.10.17 10:52 Сейчас в теме
Хех. Тогда с самого начала.
У вас данные ТЗ загружаются в реквизит формы типа ТаблицаЗначений?
26. illiona 17.10.17 11:01 Сейчас в теме
да ДанныеФайла - это таблица на форме. Тз это временная таблица
27. ImHunter 315 17.10.17 11:04 Сейчас в теме
Колонки для этой ТЗ на форме - накликаны в дизайнере?
28. illiona 17.10.17 11:05 Сейчас в теме
Так выглядет в отладчике ЭтаФорма.ДанныеФайла
Прикрепленные файлы:
29. ImHunter 315 17.10.17 11:07 Сейчас в теме
Судя по картинке - колонки уже накликаны. Зачем тогда программно раскрашивать? В дизайне через условное оформление формы сделать - да и все.
30. illiona 17.10.17 11:08 Сейчас в теме
ТЗ1 = Запрос.Выполнить().Выгрузить();
ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("Склад");
	Для Каждого СтрМассива Из ТЗ1 Цикл
		НаименованиеКолонки = СтрЗаменить(СтрМассива.Наименование," ","");
	        ТЗ.Колонки.Добавить(НаименованиеКолонки);
	КонецЦикла;
31. ImHunter 315 17.10.17 11:17 Сейчас в теме
Еще раз повторяю вопрос. Колонки на форме - сразу в дизайнере накликаны?
32. illiona 17.10.17 11:18 Сейчас в теме
33. ImHunter 315 17.10.17 11:26 Сейчас в теме
Разбираем далее. Пробуем выполнить:
УсловноеОформлениеТЗ = ЭтаФорма.ДанныеФайла.УсловноеОформление;

Этот код должен выполняться на сервере.
34. illiona 17.10.17 11:38 Сейчас в теме
Поле объекта недоступно для записи (УсловноеОформление)
на сервере это понятно
35. ImHunter 315 17.10.17 11:50 Сейчас в теме
Откуда запись-то появилась?? Вы мою строку выполнили в точности?
36. illiona 17.10.17 12:01 Сейчас в теме
Поле объекта не обнаружено
37. illiona 17.10.17 12:04 Сейчас в теме
К условному формлению доступ только ЭтаФорма.УсловноеОформление
38. illiona 17.10.17 12:07 Сейчас в теме
Толи как-то коряво таблицу на форму выгрузила, ничего не пойму
39. illiona 17.10.17 12:12 Сейчас в теме
не могу именно к таблице обратиться, только к форме
40. ImHunter 315 17.10.17 12:53 Сейчас в теме
Да, верно. Сам уже глючу. Для ТЗ нужно через условное оформление формы работать.
41. illiona 17.10.17 13:08 Сейчас в теме
42. ImHunter 315 17.10.17 13:14 Сейчас в теме
Да, для ТЗ. У вас реквизит на форме ведь имеет тип ТаблицаЗначений.
43. illiona 17.10.17 13:24 Сейчас в теме
нет, без реквизита - все пусто на форме
44. ImHunter 315 17.10.17 13:29 Сейчас в теме
Еще чуть-чуть - и телепатом стану уже;) Выложите чтоль полный код - как программируете интерфейс, как загружаете данные.
45. illiona 17.10.17 13:31 Сейчас в теме
))))
&НаСервере
Процедура Команда1НаСервере()
	Группа = Справочники.Склады.НайтиПоНаименованию("КЛ",Истина);
	Запрос = Новый Запрос(
					"ВЫБРАТЬ
					|	Номенклатура.Наименование КАК Наименование
					|ИЗ
					|	Справочник.Номенклатура КАК Номенклатура
					|ГДЕ
					|	Номенклатура.КЛ = &КЛ");
				 Запрос.УстановитьПараметр("КЛ", Истина);
	РезультатЗапроса = Запрос.Выполнить();
	ТЗ1 = Запрос.Выполнить().Выгрузить();
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("Склад");
	
	Для Каждого СтрМассива Из ТЗ1 Цикл
			НаименованиеКолонки = СтрЗаменить(СтрМассива.Наименование," ","");
	        ТЗ.Колонки.Добавить(НаименованиеКолонки);
	КонецЦикла;
  
    //Опишем массив реквизитов
  	МассивРеквизитов = Новый Массив;
    МассивТипаВыбора = Новый Массив;
	МассивТипаВыбора.Добавить(Тип("ТаблицаЗначений"));
    ОписаниеТипаВыбора = Новый ОписаниеТипов(МассивТипаВыбора);
  
    //Добавим в массив реквизитов таблицу значений
    МассивРеквизитов.Добавить(Новый РеквизитФормы("ТаблицаДанныхФайла", ОписаниеТипаВыбора));
  
    //Добавим в массив реквизитов колонки таблицы
	ОписаниеЧисла = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10, 2));
	Для Каждого Колонка Из ТЗ.Колонки Цикл
		Если Колонка.Имя = СокрЛП("Склад") Тогда
			МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, Колонка.ТипЗначения, "ТаблицаДанныхФайла"));
		Иначе	
        	МассивРеквизитов.Добавить(Новый РеквизитФормы(Колонка.Имя, ОписаниеЧисла, "ТаблицаДанныхФайла"));
		КонецЕсли;
	КонецЦикла;
	
    //Удаляем если существует таблица	
	ЭлементТаблица = Элементы.Найти("ТаблицаДанныхФайла");
	Если ЭлементТаблица <> Неопределено Тогда
        Элементы.Удалить(ЭлементТаблица);
	Иначе
		ИзменитьРеквизиты(МассивРеквизитов);
    КонецЕсли; 
	
	//Добавим Таблицу на форму
    ТаблицаДанныхФайла             = Элементы.Добавить("ТаблицаДанныхФайла", Тип("ТаблицаФормы"));
    ТаблицаДанныхФайла.ПутьКДанным = "ТаблицаДанныхФайла";
    ТаблицаДанныхФайла.Отображение = ОтображениеТаблицы.Список;
	
   //Добавим колонки
    Для Каждого Колонка Из ТЗ.Колонки Цикл
        НовыйЭлемент = Элементы.Добавить(Колонка.Имя, Тип("ПолеФормы"), ТаблицаДанныхФайла);
        НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
		НовыйЭлемент.ПутьКДанным = "ТаблицаДанныхФайла." + Колонка.Имя;
	КонецЦикла;  
	
	Запрос1 = Новый Запрос(
	"ВЫБРАТЬ
	|	Склады.Наименование КАК Наименование
	|ИЗ
	|	Справочник.Склады КАК Склады
	|ГДЕ
	|	Склады.Родитель=&Группа");
	Запрос1.УстановитьПараметр("Группа", Группа);
	РезультатЗапроса1 = Запрос1.Выполнить();
	Выборка1 = РезультатЗапроса1.Выбрать();
	//МассивКолонок = Запрос1.Выполнить().Выгрузить(); 
	//Добавляем строки
	Пока Выборка1.Следующий() Цикл
		Строка = ТЗ.Добавить();
		Строка.Склад = Выборка1.Наименование;
		Строка = ТЗ.Добавить();
		Строка.Склад = "количество";
		Строка = ТЗ.Добавить();
		Строка.Склад = "цена";
	КонецЦикла;
	
	ЗначениеВРеквизитФормы(ТЗ,"ТаблицаДанныхФайла");
	
КонецПроцедуры


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Команда1НаСервере();
КонецПроцедуры
Показать
46. illiona 17.10.17 13:33 Сейчас в теме
Полностью и колонки, и строки сформированы программно. на форме вообще ничего нет только кнопка оформить строку
&НаСервере
Процедура ОформлениеСтрокиНаСервере()
		
КонецПроцедуры

&НаКлиенте
Процедура ОформлениеСтроки(Команда)
	ОформлениеСтрокиНаСервере();
КонецПроцедуры
Показать
48. vadim1011985 99 17.10.17 14:15 Сейчас в теме
Может у все у полей и отбора свойство "использование" стоит в ложь ? УсловноеОформление
49. @Fancy 17.10.17 17:38 Сейчас в теме
Возможно, неправильно заполняются оформляемые поля.
Делала жирный шрифт по условию в динамически создаваемой таблице формы,
заполняемой из таблицы значений. Через условное оформление формы.
"ТаблицаМаршрутов" - таблица формы, "Макс" - поле, по которому задаем условие.
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаМаршрутов.Макс"); 
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; 
ЭлементОтбора.ПравоеЗначение = 1; 
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,,Истина));
//задаем оформляемые колонки (все)
Для каждого элПоля Из Элементы.ТаблицаМаршрутов.ПодчиненныеЭлементы Цикл
	ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить(); 
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(элПоля.Имя);
КонецЦикла;
Показать
Socradt; maxim_1c; LavinVladik; mudrak; +4 Ответить
50. illiona 18.10.17 05:18 Сейчас в теме
Мария Говор, а у вас таблица как реквизит есть или все программно?
51. illiona 18.10.17 07:52 Сейчас в теме
Все получилось. Все большое спасибо!
53. ks8585 3 17.08.19 22:15 Сейчас в теме
(51) Как в итоге то получилось.У меня есть форма документа. На ней ТЧ - Товары. Форму добавил в расширение. В модуле формы в расширении в процедуре при открытии пытаюсь программно сделать условное оформление. Всю голову уже сломал(((
54. svetanik 5 03.02.20 03:58 Сейчас в теме
(51) Поделитесь результатом, пожалуйста! Пытаюсь сделать условное оформление строк созданного программно дерева... Не работает у меня. С таблицей простой получается, а с деревом никак. Может, хитрость какая?
56. ignor 236 23.04.21 10:40 Сейчас в теме
(54) Возможно Вам надо обратиться не к условному оформлению формы, а к условном оформлению самого реквизита
55. Saioko 10.03.20 14:43 Сейчас в теме
(51) Поделитесь, пожалуйста! Такая же проблема и не могу найти чего не хватает. Не получается ни программно, ни через настройку списка.
59. killitch 30 16.10.23 19:27 Сейчас в теме
(51) Обратите внимание: в условии пишется путь к данным (через точку), поля оформления задаются как названия элементов формы:

ЭлементОформления = УсловноеОформление.Элементы.Добавить();
				
Условие = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТоварыСМинусами." + Колонка.Имя); 
Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
Условие.ПравоеЗначение = 0;
				
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();    
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыСМинусами" + Колонка.Имя);
				
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
Показать
57. Gzark 27.07.21 11:04 Сейчас в теме
58. 9maksim 10.10.23 14:38 Сейчас в теме
Работает так. В условии в качестве источника сравниваемых значений элемента отбора передаем полный путь к данным, а в качестве источника для свойства "Поле" поля оформления передаем имя оформляемого элемента:

		
ЭлементОформления = Форма.УсловноеОформление.Элементы.Добавить();	
		Условие = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));  
		Условие.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Разница"); 
		Условие.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
		Условие.ПравоеЗначение = 0;
	
		ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();	
        ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыРазница"); 	
		ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);   
Показать
Оставьте свое сообщение

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