Как изменить цвет фона ячеек в таблице формы документа в зависимости от значения данных табличной части документа.

1. Salavat88 18.12.17 07:53 Сейчас в теме
Добрый день. 1С 8.3.10 Управляемая форма.

Есть 2 таблицы ДанныеОВремени:

Сотрудник 1 2 3

Иванов Я Я Я
Петров Я Я Я

И

Сотрудник 1 2 3

Иванов Б Б Я
Петров Я Я Я

Как в таблице ДанныеОВремени1 покрасить ячейки в 2 и 3 колонке у сотрудника Иванов, т.к. у этого сотрудника в таблице ДанныеОВремени2 другие значения(Я <> Б)?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Alexey_ 27 18.12.17 08:05 Сейчас в теме
3. Salavat88 18.12.17 08:07 Сейчас в теме
А как задать УО на ячейку?
4. pm74 204 18.12.17 08:20 Сейчас в теме
(3)на форму , точнее ее табличную часть , там можно указать какую именно ячейку раскрашивать
5. Salavat88 18.12.17 09:21 Сейчас в теме
Вот моя процедура проверки документов табель1, которую заполнили вручную, и табель2, которую заполнили автоматически

&НаСервере
Процедура КрасимОшибки(ТабТиповой, Д1, Д2)
	//ТабТиповой - таблица документа табель2, заполненная вызовом типовой функции кнопки Заполнить на форме
	
	ТабВремя = Объект.ДанныеОВремени;// эту таблицу заполнили вручную

	НомСотр = 0;
	Для Каждого СтрСотрудника Из ТабВремя Цикл
		Сотр = СтрСотрудника.Сотрудник;
		СтрокаПроверки = ТабТиповой.Найти(Сотр, "Сотрудник");
		Если СтрокаПроверки <> Неопределено Тогда
			Для дДень = Д1 По Д2 Цикл
				Элемент = УсловноеОформление.Элементы.Добавить();
				ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
		
//Вот тут не знаю как задать поле ячейки, где есть ошибка
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы["ДанныеОВремениВремя"+Ддень+"Представление"].Имя);
//Вот тут

//((Отбор работает. 

				ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

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



так красится вся колонка. На форме табличная часть ДанныеОВремени отображается как (Свойство = Элементы.ДанныеОВремени Значение = ТаблицаФормы Тип = ТаблицаФормы)
6. Boneman 302 18.12.17 09:42 Сейчас в теме
удалил, возможно в данной задаче мой коммент некорректен
7. Salavat88 18.12.17 10:10 Сейчас в теме
(6)Аха. Мне Условное оформление нужно задать для конкретной ячейки. Как я понимаю, через конфигуратор можно только для строк ТЧ
8. Boneman 302 18.12.17 10:35 Сейчас в теме
(7) нет, там то же самое, там можно выбрать поля оформления.
Просто, если тебе надо сопоставлять одну таблицу с другой, то просто условка так обрабатывать там не будет. Ей нужно конкретно, в строке какое-то значение, и такая то колонка оформляется так то. В общем как обычная настройка списков
9. Sanario 27 18.12.17 11:52 Сейчас в теме
О! Знакомая задача. Решена была. Помощь еще требуется или как?
10. Salavat88 18.12.17 11:56 Сейчас в теме
11. Sanario 27 18.12.17 12:16 Сейчас в теме
Счас поищу, куда прописал и пришлю пример рабочей процедуры
12. Sanario 27 18.12.17 12:23 Сейчас в теме
&НаКлиенте
Процедура ОбработчикПриИзмененииКолонкиКоличества(Элемент);
	Сверка  = Элементы.Товары.ТекущиеДанные.Количество;
	ТД      = Элементы.Товары.ТекущиеДанные;
	СверкаР = Сверка;
	Для Сч = 1 По ДобавленныеРеквизиты.Количество() Цикл
		ИмяРеквизита = СтрЗаменить(ДобавленныеРеквизиты[Сч-1].Значение,"Объект.Товары.","");
		СверкаР = СверкаР - ТД[ИмяРеквизита];
	КонецЦикла;	
	Элементы.Товары.ТекущиеДанные.КоличествоСверка = СверкаР;
	
	
	Если Элементы.Товары.ТекущиеДанные.КоличествоСверка<0 Тогда
		//Элементы.Товары.ТекущиеДанные.КоличествоСверка = 0;
		//ТД = 0;
		ЦветПоляТаблицы = Новый Цвет (255,0,0);
		Элементы.Товары.КоличествоСверка.ЦветФона = ЦветПоляТаблицы;
		Сообщить("Количество для сверки не может быть отрицательным!");
		Возврат;
	КонецЕсли;	
	
КонецПроцедуры	
Показать



Вообщем, тут просто проверка содержимого ячейки, поэтому ячейка становится красной, если ошибка
15. Salavat88 18.12.17 13:31 Сейчас в теме
(12) Так мне же нужно пробежаться по всем строкам и колонкам, сравнить значения в колонках и изменить цвет фона ячейки. Там нет ТекущихДанных
13. Sanario 27 18.12.17 12:43 Сейчас в теме
Может быть поможет
vitalchikkk; voa-voavoa-voa; +2 Ответить
14. Salavat88 18.12.17 13:17 Сейчас в теме
(13) Благодарю Вас. Сейчас попробую и отпишусь.
16. Sanario 27 18.12.17 14:20 Сейчас в теме
Ну, используйте это как функцию чисто для изменения цвета. Прогоните ее или по данным через запрос, или пробегайтесь по всем ячейкам ТЧ. Просто нюанс, что если проверять все ячейки - будет шибко долго. А если пройтись по результатам запроса - наверняка будет быстрее. Ну, например, запросом выбрать ячейки, где выполняется условие, и потом в цикле пройтись конкретно по ним и изменить цвет.
17. Salavat88 19.12.17 14:13 Сейчас в теме
(16)
в цикле пройтись конкретно по ним и изменить цвет
. Вот это главный вопрос. Примерчик можете кинуть, как изменить цвет фона хоть Первой ячейки Первой строки любой ТаблицыФормы
18. Sanario 27 20.12.17 16:19 Сейчас в теме
Так пример в куске кода, что я Вам выше выложил. Плюс еще у меня и колонки ТЧ документа там динамические...
20. user1230406 10.04.25 18:58 Сейчас в теме
(19) Условное Оформление не всегда подойдет. Т.к. иногда нужно опираться на реквизит Например номенклатуры.
т.е. если нужно чтобы строка была покрашена тогда когда Номенклатура.АссортиментнаяГруппа = ТакоеТоЗначение то это не прокатит, если только Ассортиментная группа не перечисление.
Т.е. нельзя "проваливаться" в реквизиты табличной части
21. user2107191 10.04.25 19:06 Сейчас в теме
(20)
Условное Оформление не всегда подойдет.
Ты просто не умеешь его готовить.
22. user1230406 10.04.25 20:07 Сейчас в теме
(21) ну покажи пример.
Есть таблица Заказа, товары.
В ней есть Номенклатура реквизит ссылочный на справочник
В табличной части товары Заказа нет реквизита АссортиментнаяГруппа номенклатуры

Требуется, окрасить строку в цвет если Ассортиментная группа Номенклатуры принадлежит тому или иному значению

Очень интересно как же это приготовить!
23. user2107191 10.04.25 20:11 Сейчас в теме
(22)
Очень интересно как же это приготовить!
Добавляешь нужную колонку в таблицу формы, подтягиваешь в неё нужное значение из Номенклатуры, и условным оформлением раскрашиваешь.
Школьный курс.

// Сколько я закрасил, сколько перекрасил...
24. user1230406 10.04.25 20:16 Сейчас в теме
(23) Я так понял ты предлагаешь добавить реквизит в табличную часть (в метаданные)
когда у тебя уже высоконагруженная система с кучей реквизитов и километрами кода это конечно выход, НО, тогда придется пройтись и заполнить все "старые" документы, инициировать заполнение этой колонки во всех процедурах где работаешь с табличной частью.
Слишком просто
25. user2107191 10.04.25 20:17 Сейчас в теме
(24)
Я так понял ты предлагаешь добавить реквизит в табличную часть (в метаданные)
Нет.
колонку в таблицу формы
Читай: реквизит колонки в табличный реквизит формы.
26. user1230406 10.04.25 20:19 Сейчас в теме
27. user1230406 10.04.25 20:23 Сейчас в теме
(25) Ну а в Левом значении что указывать?

Оформление = УсловноеОформление.Элементы.Добавить();
	Оформление.Использование = Истина;
	
	Поле1 = Оформление.Поля.Элементы.Добавить();
			
	Поле1.Поле = Новый ПолеКомпоновкиДанных("Товары");
	
	Отбор = Оформление.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура.АссортиментнаяГруппа");
	Отбор.ПравоеЗначение = Справочники.АссортиментныеГруппы.НайтиПоКоду("0000350");	
	Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	Отбор.Использование = Истина;
	Оформление.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Аквамарин);
Показать
28. user2107191 10.04.25 20:26 Сейчас в теме
(27)
Ну а в Левом значении что указывать?
Как что? Имя твоей новой колонки (реквизита формы), которую ты создал.
Ты же создал?
Объект.Товары.ТвояНоваяКолонка.
29. user1230406 10.04.25 20:28 Сейчас в теме
31. user2107191 10.04.25 20:30 Сейчас в теме
(29) Я ж говорю - не умеешь.
30. user1230406 10.04.25 20:29 Сейчас в теме
(28) может ты имеешь в виду Реквизит в табличную часть?
Или просто колонку в таблицу на форме?
32. user2107191 10.04.25 20:31 Сейчас в теме
(30) Новый Реквизит формы.
Какие из этих букв тебе непонятны?
33. user1230406 10.04.25 20:32 Сейчас в теме
(32) добавил. получилось, но тут сразу ставится новая задача, заполнить этот реквизит
34. user2107191 10.04.25 20:34 Сейчас в теме
(33) А ты думал как? Кастрюлю на плиту поставил, и дальше борщ сам сварится?
Пока ты выполнил только первый пункт. Приступай ко второму.
Добавляешь нужную колонку в таблицу формы, подтягиваешь в неё нужное значение из Номенклатуры, и условным оформлением раскрашиваешь.
35. user1230406 10.04.25 20:37 Сейчас в теме
(34) проблема в том, что табличная часть может заполняться где угодно, в модуле например, ну во всяком случае уже не реструктуризация, спасибо
36. user2107191 10.04.25 20:41 Сейчас в теме
(35) И что? В чем проблема сделать один обработчик НоменклатураПриИзменении() и одну процедуру "ДополнитьНовуюКолонку()", которую вызывать в "ПриСозданииНаСервере()" и в тех же местах, откуда происходит обновление таблицы (команды, кнопки и все такое)
37. user1230406 10.04.25 20:44 Сейчас в теме
(36) форма перегружена всякой фигней, возможно меняться может где-то за пределами и не попасть на ПриИзменении()
Но во всяком случае уже хорошо, спасибо
38. user2107191 10.04.25 20:46 Сейчас в теме
(37)
меняться может где-то за пределами
Но триггеры всегда находятся в модуле формы.Тебе нужны только они.
39. user1230406 10.04.25 20:47 Сейчас в теме
(38) не типовая, полностью самописная, тут может быть всё что угодно
40. user2107191 10.04.25 21:06 Сейчас в теме
(39)
полностью самописная, тут может быть всё что угодно
Ну извини, ты сам выбираешь из какой капусты тебе борщ варить и как её шинковать.
41. user1230406 10.04.25 21:17 Сейчас в теме
(40) не хотелось работать просто. Ших и готово, ну классно ведь было бы
Оставьте свое сообщение

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