Условное оформление в управляемых формах

1. Natalito 12.11.15 12:01 Сейчас в теме
Всем привет! Написала внешнюю обработку. На форме таблица значений. Пытаюсь окрасить ячейку в зависимости от значения даты. Но не работает

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)	
	ЭтаФорма.УсловноеОформление.Элементы.Очистить();
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СчетСтрока");
	ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
	ЭлементОтбора.ПравоеЗначение = ТекущаяДата(); 
	НачалоДня(ТекущаяДата())+4*60*60*24;
	ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
	ЭлементОтбора.ПравоеЗначение =  НачалоДня(ТекущаяДата())+1*60*60*24;
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Оранжевый);	
КонецПроцедуры
Показать
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. 32ops 191 12.11.15 12:11 Сейчас в теме
(1) Может в макете в настройках условное оформление настроить вместо при открытии?
В коде помоему ЭлементУсловногоОформления.Использование=Истина; не хватает
+
8. Natalito 12.11.15 12:15 Сейчас в теме
(6) 32ops, как именно в макете настроить?
+
15. 32ops 191 12.11.15 12:44 Сейчас в теме
(8) Это о том, что правое значение нужно вычислять? В принципе по дате решается заведением параметра, но я понял, не подходит.
+
16. Natalito 12.11.15 12:47 Сейчас в теме
(15) 32ops, да, правое значение нужно вычислить...
+
9. Natalito 12.11.15 12:15 Сейчас в теме
(6) 32ops, в код добавила эту строку - но все равно не работает.
+
2. Natalito 12.11.15 12:02 Сейчас в теме
Что не так? Не понимаю... В программировании в управляемом приложении вообще слаба...
+
3. Natalito 12.11.15 12:03 Сейчас в теме
А ещё у меня есть другое условное оформление, которое я настроила на самой форме. Но там стандартные условия можно подставить. А для этого оформления не поставить...
+
5. dj_serega 391 12.11.15 12:10 Сейчас в теме
(3) Natalito,
А ещё у меня есть другое условное оформление, которое я настроила на самой форме.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)    
    ЭтаФорма.УсловноеОформление.Элементы.Очистить();

Вот этой строкой настроенное оформление с конфигуратора будет удалено.
+
7. Natalito 12.11.15 12:14 Сейчас в теме
(5) dj_serega, да, я его уже вернула. эту строку убрала.
+
4. spezc 782 12.11.15 12:08 Сейчас в теме
вот пример работающего оформления, можете взять как пример:

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()
	
	Шрифт = Новый Шрифт(WindowsШрифты.ШрифтДиалоговИМеню, , , Истина, Истина);
	
	УстановитьУсловноеОформлениеПоПараметрам("ДатаЗапрета", WebЦвета.Серый, Шрифт);
	УстановитьУсловноеОформлениеПоПараметрам("Ошибка", WebЦвета.Красный, Шрифт);
	УстановитьУсловноеОформлениеОтработанногоВремени();
	
КонецПроцедуры
Показать
rolin555; +1
10. spezc 782 12.11.15 12:23 Сейчас в теме
я же написал пример, можно было сравнить...
у вас не включено Использование, элемента оформления, ни для поля, ни для отбора.
+
12. Natalito 12.11.15 12:30 Сейчас в теме
(10) spezc, а к каким событиям цеплять описанное вами условное оформление?
+
11. biimmap 1862 12.11.15 12:25 Сейчас в теме
Вам лучше использовать Динамический список. когда его будете создавать, там не пройдёте мимо нужных настроек.
13. spezc 782 12.11.15 12:35 Сейчас в теме
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)    
    ЭтаФорма.УсловноеОформление.Элементы.Очистить();
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ЭлементУсловногоОформления.Использование = Истина; // вот это
    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СчетСтрока");
    ОформляемоеПоле.Использование = Истина; // вот это 
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
    ЭлементОтбора.ПравоеЗначение = ТекущаяДата(); 
    ЭлементОтбора.Использование = Истина; // вот это
    НачалоДня(ТекущаяДата())+4*60*60*24;
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ЭлементОтбора.ПравоеЗначение =  НачалоДня(ТекущаяДата())+1*60*60*24;
    ЭлементОтбора.Использование = Истина; // вот это
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Оранжевый);    
КонецПроцедуры
Показать
+
14. Natalito 12.11.15 12:44 Сейчас в теме
(13) spezc, один в один написала и не работает все равно!(((
+
17. spezc 782 12.11.15 13:04 Сейчас в теме
у вас не выполняется условия отбора
+
36. biimmap 1862 12.11.15 14:41 Сейчас в теме
(17) spezc, и чего ты мне минусы лепишь? я написал работающий вариант который максимально эффективно работает и используется в ЗУП 3.0 на управляемых формах. а судя по объёму переписки Вы ерунду городите. Таблицы на управляемых формах крайне нестабильно работают в плане оформления.

Вы пытаетесь решить задачу, которая изначально неверным способом решена.
+
37. spezc 782 12.11.15 15:00 Сейчас в теме
(36) не зная задачи, ты предлагаешь динамический список. оформление таблицы работает стабильно.
+
38. biimmap 1862 12.11.15 15:19 Сейчас в теме
(37) spezc, ты опять не прочитал мой пост. я ж написал что задача неправильная! и таблица стабильно не работает. Ответы Натальи это чётко демонстрируют. А как только пойдёте правильным путём, сразу всё получится. Динамический список решает гораздо больше задач, чем таблица.
+
39. spezc 782 12.11.15 15:22 Сейчас в теме
(38) через динамический список можно редактировать данные?
dajen; x_maxim_x; +2
18. spezc 782 12.11.15 13:05 Сейчас в теме
как у вас ДатаСдачи может быть одновременно меньше текущей даты и больше начала следующего дня
+
19. Natalito 12.11.15 13:12 Сейчас в теме
(18) spezc, там немного неправильно скопировала. на самом деле условия для даты такие
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
 ЭлементОтбора.ПравоеЗначение = НачалоДня(ТекущаяДата())+4*60*60*24; 


и

  ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
 ЭлементОтбора.ПравоеЗначение =  НачалоДня(ТекущаяДата())+1*60*60*24;
+
20. Natalito 12.11.15 13:13 Сейчас в теме
(18) spezc, с такими условиями не работает
+
21. Natalito 12.11.15 13:13 Сейчас в теме
(18) spezc, спасибо, что пытаетесь помочь)))
+
22. spezc 782 12.11.15 13:14 Сейчас в теме
Наталья, покажите код не кусками, а тот, который у вас сейчас в обработке, и который точно не работает.
+
23. BackinSoda 12.11.15 13:27 Сейчас в теме
У вас скорее всего
 ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СчетСтрока");

не СчетСтрока будет а СчетаСчетСтрока (нужно точное имя)
+
24. spezc 782 12.11.15 13:29 Сейчас в теме
(23) вполне возможно, только не путь к данным, а имя элемента формы (а именно колонки таблицы)
+
26. BackinSoda 12.11.15 13:37 Сейчас в теме
(24) spezc, да, исправил, когда увидел что про данные написал )
вчера просматривал похожий код, странно, но оформляемое поле не выдает никакой ошибки, даже если написать туда любой текст.
+
25. spezc 782 12.11.15 13:29 Сейчас в теме
ждем кода Натальи
+
27. Natalito 12.11.15 13:41 Сейчас в теме
(25) spezc,
Вот код
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)	
	УсловноеОформление.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ЭлементУсловногоОформления.Использование = Истина; 
    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Счета.СчетСтрока");
    ОформляемоеПоле.Использование = Истина;
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Меньше;
    ЭлементОтбора.ПравоеЗначение = НачалоДня(ТекущаяДата())+4*60*60*24; 
    ЭлементОтбора.Использование = Истина;
	ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.БыстрыйДоступ;
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
    ЭлементОтбора.ПравоеЗначение =  НачалоДня(ТекущаяДата())+1*60*60*24;
    ЭлементОтбора.Использование = Истина;
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Оранжевый);   
КонецПроцедуры
Показать
Прикрепленные файлы:
+
28. BackinSoda 12.11.15 13:46 Сейчас в теме
точку попробуйте убрать
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("СчетаСчетСтрока");
+
29. Natalito 12.11.15 13:50 Сейчас в теме
(28) BackinSoda, попробовала. не помогло((((
+
30. Natalito 12.11.15 13:57 Сейчас в теме
Ребята! У меня получилось!!! Вторую часть условия оформила в переменную ЭлементОтбора1!!! 2 часа!!! 2 часа я потратила на такую глупость!!!!!!!!!!!!!!
+
32. BackinSoda 12.11.15 13:59 Сейчас в теме
(30) Natalito, ну или так :)
+
33. Natalito 12.11.15 14:01 Сейчас в теме
(32) BackinSoda, а как ещё в офорляемых полях сделать несколько ячеек?
+
35. spezc 782 12.11.15 14:04 Сейчас в теме
31. BackinSoda 12.11.15 13:58 Сейчас в теме
Запустил ваш код, с одним отбором работает, два - нет. Видимо надо попробовать сделать через тип "ГруппаЭлементовОтбораКомпоновкиДанных"
+
34. spezc 782 12.11.15 14:04 Сейчас в теме
Новый ПолеКомпоновкиДанных("Счета.СчетСтрока"); заменить на Новый ПолеКомпоновкиДанных("СчетСтрока");
Новый ПолеКомпоновкиДанных("Объект.Счета.ДатаСдачи"); заменить на Новый ПолеКомпоновкиДанных("Счета.ДатаСдачи");
+
Внимание! Тема сдана в архив

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