Раскрасить строки табличной части документа по условию

1. olo_lo4 11.12.15 13:43 Сейчас в теме
Есть документ с табличной частью. Необходимо в этой табличной части раскрашивать в одинаковый цвет строки имеющие одинаковую дату (дата это колонка табчасти). Как это сделать? 1С 8.3 (управляемые формы).

В 8.1 в событияэх табличной части есть: "ПриПолученииДанных" (Вызывается при получении данных табличным полем), можно написать:


Для каждого СтрокаСписка Из ОформленияСтрок Цикл		
    Если СтрокаСписка.Проведен тогда
        СтрокаСписка.ЦветФона = Новый Цвет(155, 155, 155);		
    КонецЕсли;
КонецЦикла;


Проблема в том, что я имею дело с 8.3 УП. Там нет этого события.
scanner1980; adhocprog; +2 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Martinian 10 11.12.15 13:46 Сейчас в теме
(1) olo_lo4, можно посмотреть, как раскрашиваются документы "Реализация товаров и услуг" в конфигурации "Бухгалтерия предприятия 3.0", например. :-)
3. sommid 11.12.15 13:56 Сейчас в теме
(1) для управляемых форм есть свойство УсловноеОформление. Его можно заполнять вручную в конфигураторе, но в данном случае вам нужно его заполнять программно. Почитайте про его свойства, методы.
Вот небольшой пример:
Процедура УстановитьПодсветкуСертификации(ЭтаФорма, ПутьКПризнакуТребуетсяСертификация = "Объект.Товары.ТребуетсяСертификация", МассивИменКолонокДляПодсветки) Экспорт
	
	Элементы = ЭтаФорма.Элементы;
	УсловноеОформление = ЭтаФорма.УсловноеОформление;
	
	ЭлементОформления = УсловноеОформление.Элементы.Добавить();
	ЭлементОформления.Использование = Истина;
	ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
	
	ЭлементУсловия                = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементУсловия.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных(ПутьКПризнакуТребуетсяСертификация);
	ЭлементУсловия.ПравоеЗначение = Истина;
	ЭлементУсловия.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;   
	ЭлементУсловия.Использование  = Истина;
	
	Для каждого ТекЭлемент из МассивИменКолонокДляПодсветки Цикл
		ОформляемоеПоле      = ЭлементОформления.Поля.Элементы.Добавить();
		ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ТекЭлемент);
	КонецЦикла;
		
КонецПроцедуры
Показать

массив имен колонок формировался так:
МассивИменКолонокДляПодсветки = Новый Массив;
	МассивИменКолонокДляПодсветки.Добавить(Элементы.Товары.ПодчиненныеЭлементы.ТоварыШтрихкод.Имя);
	МассивИменКолонокДляПодсветки.Добавить(Элементы.Товары.ПодчиненныеЭлементы.ТоварыНоменклатура.Имя);


в расскраске использовал именно цвет текста, т.к. цвет фона перекрывается фоном выделения строки - т.е. не ясно каким же цветом показана выделенная строка
psa247; vers_era; antgol; user1619761; cwant; yaroslav.artem; Gaster; IlyaPonomarev; Misanets; pioneeer; jane_de_rio; user591389_aska_rabota; HameleonA; abrafaks; adhocprog; SmArtist; user901186; SidorenkoIlya; Алсушка80; kuzev; pizhenkov; Daynestro07; 338050247; efimovvasya; trendy; olo_lo4; axelerleo; +27 Ответить
4. olo_lo4 13.12.15 16:06 Сейчас в теме
(3) спасибо, все получилось
10. user1059170 15.04.20 20:09 Сейчас в теме
(3) и (5), спасибо большое. Очень помог ваш код.
11. user1059170 15.04.20 20:18 Сейчас в теме
(3) и (7), спасибо огромное. Очень помог ваш код.
17. wolder 133 11.04.22 10:35 Сейчас в теме
(3)
УсловноеОформление =


Все хорошо, но строка с:
УсловноеОформление =
будет выдавать ошибку, так как на форме зарезервировано имя "УсловноеОформление " переименуйте в "УсловноеОформление_моё"
24. psa247 18 14.11.23 17:31 Сейчас в теме
(3)
МассивИменКолонокДляПодсветки = Новый Массив;
МассивИменКолонокДляПодсветки.Добавить(Элементы.Товары.ПодчиненныеЭлементы.ТоварыШтрихкод.Имя);
МассивИменКолонокДляПодсветки.Добавить(Элементы.Товары.ПодчиненныеЭлементы.ТоварыНоменклатура.Имя);


Спасибо за пример, пригодился
25. aleksey2 88 20.03.24 12:21 Сейчас в теме
(3)
Элементы = ЭтаФорма.Элементы;

Поле объекта недоступно для записи (Элементы)
{}:Элементы = ЭтаФорма.Элементы;
+
Поле объекта недоступно для записи (УсловноеОформление)
26. djdiamond 10.09.24 09:02 Сейчас в теме
27. djdiamond 10.09.24 09:03 Сейчас в теме
(25)
//Элементы = ЭтаФорма.Элементы;
    //УсловноеОформление = ЭтаФорма.УсловноеОформление;


Должно быть так нельзя присваивать чего либо зарезервированным)
5. fedor40 706 16.08.18 11:10 Сейчас в теме
Вот более верный вариант. Делал в УТ 11.4.5 на 8.3.11. В моделе формы документа Процедура УстановитьУсловноеОформление()


Процедура РаскраситьСтрокуТоварыЗеленым() 
    
	
	МассивИменКолонокДляПодсветки = Новый Массив;
	Для каждого Стр из Элементы.Товары.ПодчиненныеЭлементы Цикл
    	МассивИменКолонокДляПодсветки.Добавить(Стр.Имя);
	КонецЦикла;
	
	
    ЭлементОформления = УсловноеОформление.Элементы.Добавить();
    ЭлементОформления.Использование = Истина;
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона",  Новый Цвет(204, 255, 204));
    
    ЭлементУсловия                = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементУсловия.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.ВариантОбеспечения");
    ЭлементУсловия.ПравоеЗначение = Перечисления.ВариантыОбеспечения.Отгрузить;
    ЭлементУсловия.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;   
    ЭлементУсловия.Использование  = Истина;
    
    Для каждого ТекЭлемент из МассивИменКолонокДляПодсветки Цикл
        ОформляемоеПоле      = ЭлементОформления.Поля.Элементы.Добавить();
        ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ТекЭлемент);
    КонецЦикла;
        
КонецПроцедуры
Показать
abadonna83; de0nis; user1619761; Yan_Malyakov; madway; Gaster; YA_38095378; BAMPER; any__uta; Tworozhok; pioneeer; dmv78; HameleonA; InJey; adhocprog; sss999; Алексей Воробьев; amatoravg; Kostt; +19 Ответить
14. any__uta 28.07.21 07:31 Сейчас в теме
(5)
Процедура РаскраситьСтрокуТоварыЗеленым()


МассивИменКолонокДляПодсветки = Новый Массив;
Для каждого Стр из Элементы.Товары.ПодчиненныеЭлементы Цикл
МассивИменКолонокДляПодсветки.Добавить(Стр.Имя);
КонецЦикла;


ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Использование = Истина;
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(204, 255, 204));

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

Для каждого ТекЭлемент из МассивИменКолонокДляПодсветки Цикл
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ТекЭлемент);
КонецЦикла;

КонецПроцедуры
Показать

(5) Спасибо))
21. Марго 23.08.22 10:48 Сейчас в теме
(14) А какое событие использовать?
Раньше делали ПриВыводеСтроки() или ПриПолученииДанных(), а в УФ?
19. Gaster 17.08.22 17:28 Сейчас в теме
20. Gaster 17.08.22 17:35 Сейчас в теме
(19) УсловноеОформление.Элементы.Очистить();
Спасибо!
6. ipoloskov 164 19.02.19 11:26 Сейчас в теме
А как полужирным выделить? Явно шрифт указывать?
7. vipetrov2 25.06.19 07:50 Сейчас в теме
(6) Можно в свойствах формы нажать кнопку Условное оформление и настроить и цвет и шрифт по фильтру. Без написания кода.
https://its.1c.ru/db/metod8dev#content:3551:hdoc
user1998468; NicolasCage; user620512; a16a05m11; doronin70; 1c-kt; madway; Misanets; namazi74; 1c_ssnik; wolk; user1310927; D_e_X_T_e_R; Gendelf; Margo29; Boyborodin; kras_dar; +17 Ответить
8. genagoh 04.02.20 17:30 Сейчас в теме
Спасибо (7).
Это вариант - наиболее прост, удобен и универсален.
Кроме того, он использует механизмы платформы
9. dsp123 24.02.20 20:57 Сейчас в теме
(8) Прост и удобен - да. Но ни разу не универсален. Сплошь и рядом если в форме программно устанавливается условное оформление, то ПриСозданииНаСервере мы имеем УсловноеОформление.Элементы.Очистить(); и весь наш простой и удобный вариант идет по бороде.
1c_ssnik; +1 Ответить
15. namazi74 5 28.01.22 15:58 Сейчас в теме
(9)
Прост и удобен - да. Но ни разу не универсален. Сплошь и рядом если в форме программно устанавливается условное оформление, то ПриСозданииНаСервере мы имеем УсловноеОформление.Элементы.Очистить(); и весь наш простой и удобный вариант идет по бороде.


так может просто убрать очищение
12. Derushev 11 20.05.21 10:53 Сейчас в теме
	УО = ЭтаФорма.УсловноеОформление; 
	УО.Элементы.Очистить(); 
	ЭлементУО = УО.Элементы.Добавить(); 
	
	Оформляемоеполе = ЭлементУО.Поля.Элементы.Добавить(); // Поля таблицы для которых будет действовать оформление 
	Оформляемоеполе.Поле = Новый ПолеКомпоновкиДанных("НаименованиеПолное"); 
	Оформляемоеполе = ЭлементУО.Поля.Элементы.Добавить(); 
	Оформляемоеполе.Поле = Новый ПолеКомпоновкиДанных("ИнвентарныйНомер"); 
	Оформляемоеполе = ЭлементУО.Поля.Элементы.Добавить(); 
	Оформляемоеполе.Поле = Новый ПолеКомпоновкиДанных("ШтрихКод"); 
	Оформляемоеполе = ЭлементУО.Поля.Элементы.Добавить(); 
	Оформляемоеполе.Поле = Новый ПолеКомпоновкиДанных("МестоХранения"); 
	
	Оформляемоеполе.Использование = ИСТИНА; 
	
	ЭлементУсловия                              = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементУсловия.ЛевоеЗначение   = Новый ПолеКомпоновкиДанных("Объект.Список.Ссылка");
	ЭлементУсловия.ПравоеЗначение = СписокОтбора;
	ЭлементУсловия.ВидСравнения    = ВидСравненияКомпоновкиДанных.ВСписке;   
	ЭлементУсловия.Использование   = Истина;
	
	ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФОна",WebЦвета.СветлоЗеленый); 
Показать


Доброго дня всем! Подскажите, почему этот код не работает? Я не могу передать Список Значений в правое значение отбора?
СписокОтбора - реквизит формы, его получаю заранее.
13. user625107_barabambler1s 25.05.21 15:14 Сейчас в теме
(12) Попробуй сначала задать вид сравнения, а потом уже правое значение
18. sommid 12.04.22 20:14 Сейчас в теме
(17) спасибо, но у меня все работает )
это процедура общего модуля и форма передается в качестве параметра.
Если у вас в форме самого объекта, то можно просто закомментить первые 2 строки.
22. Vladimir_D 122 04.11.22 04:50 Сейчас в теме
Есть аналог оформления как в ОП 8.1.
Событие при получении данных на сервере, аналог ПриЧтенииДанных
У меня была задача расскрачить форму приемки от грузки в КА. Обычное условное оформление у меня сделать не получалось. Возможно, я что-то упустил, но настроить условным оформлением мне не удалось. Но удалось ПриПолученииДанныхНаСервере
&НаСервереБезКонтекста
Процедура АБОрдераВРаботеПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	КлючиСтрок = Строки.ПолучитьКлючи();
	Для каждого Ключ Из КлючиСтрок Цикл 
		КоличествоУпаковок = 0; 
		КоличествоУпаковокРаспоряжения = 0;
		Если Строки[Ключ].Данные.Тип = Тип("ДокументСсылка.РасходныйОрдерНаТовары") Тогда
			КоличествоУпаковок = Строки[Ключ].Данные.Ссылка.ОтгружаемыеТовары.Итог("КоличествоУпаковок");
			КоличествоУпаковокРаспоряжения = Строки[Ключ].Данные.Ссылка.ТоварыПоРаспоряжениям.Итог("Количество");
		ИначеЕсли Строки[Ключ].Данные.Тип = Тип("ДокументСсылка.ПриходныйОрдерНаТовары") Тогда
			КоличествоУпаковок =Строки[Ключ].Данные.Ссылка.Товары.Итог("КоличествоУпаковок");
			Если ТипЗнч(Строки[Ключ].Данные.Ссылка.Распоряжение) = Тип("СправочникСсылка.СоглашенияСКлиентами") Тогда
				Продолжить;
			КонецЕсли;
			Если не Строки[Ключ].Данные.Ссылка.Распоряжение.Пустая() Тогда
				Если Строки[Ключ].Данные.Ссылка.Распоряжение.Метаданные().ТабличныеЧасти.Найти("товары") <> Неопределено Тогда
					КоличествоУпаковокРаспоряжения = Строки[Ключ].Данные.Ссылка.Распоряжение.Товары.Итог("КоличествоУпаковок");
				ИначеЕсли Строки[Ключ].Данные.Ссылка.Распоряжение.Метаданные().ТабличныеЧасти.Найти("ВозвращаемыеТовары") <> Неопределено Тогда
					КоличествоУпаковокРаспоряжения = Строки[Ключ].Данные.Ссылка.Распоряжение.ВозвращаемыеТовары.Итог("КоличествоУпаковок");
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		
		НовыйЦвет = Новый Цвет();
		Если КоличествоУпаковок < КоличествоУпаковокРаспоряжения Тогда
			НовыйЦвет = WebЦвета.СветлоРозовый;
		ИначеЕсли КоличествоУпаковок > КоличествоУпаковокРаспоряжения Тогда 
			НовыйЦвет = WebЦвета.СветлоЗеленый;
		КонецЕсли;
		Для каждого КлючОформления Из Строки[Ключ].Оформление Цикл
			КлючОформления.Значение.Элементы[0].Значение = НовыйЦвет; 
		КонецЦикла;
	КонецЦикла;
КонецПроцедуры
Показать

Получилгось как на скриншоте
Прикрепленные файлы:
23. Vladimir_D 122 04.11.22 04:52 Сейчас в теме
Upd.
КлючОформления.Значение.Элементы[0].Значение - это фон. Отладчиком можно глянуть массив Элементов оформления, там и работать с ними
Оставьте свое сообщение

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