Как раскрасить выбранные строки ТЧ

1. Gendelf 16.10.15 09:15 Сейчас в теме
Добрый день, 1с 8.2 УПП.
Есть необходимость закрашивать строку (точнее пару столбцов в строке) в желтый или зеленый цвет, по воле пользователя. Нет точной формулы, чтобы отловить это при выводе строки, юзер сам интуитивно решает какой кл. Цвет должен сохраниться, для этого создал в ТЧ два реквизита с типом булево. Добавил цветные кнопки на панели и думаю как быть дальше...
Подскажите как это можно реализовать?
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. ZergKRSK 128 16.10.15 09:24 Сейчас в теме
(1) Gendelf, делал закрашивалку строк, пользователь сам выбирает какую строку в какой цвет красить. Но при выходе раскраска не сохраняется, не было задачи сохранять. В вашем случае надо раскрашивать ячейки?
4. Gendelf 16.10.15 09:29 Сейчас в теме
(2) ZergKRSK, да, но ваш вариант очень похож, сохранить цвет думаю смогу задав нужному столбцу значение Истина. Скинь пожалуйста для примера.
3. Xershi 1001 16.10.15 09:24 Сейчас в теме
(1) Gendelf, пишешь процедуру при получении данных.
В таблицу добавляешь реквизит цвет. Надо юзеру он его меняет и твои столбцы нужного цвета. Колонка может быть по умолчанию скрыта.
10. Gendelf 16.10.15 09:49 Сейчас в теме
(3) Xershi, звучит просто) есть пример?
12. Xershi 1001 16.10.15 10:06 Сейчас в теме
(10) Gendelf,
Процедура ТабличноеПоле1ПриПолученииДанных(Элемент, ОформленияСтрок)
	
	Для Каждого ОформлениеСтрок Из ОформленияСтрок Цикл
		//ОформлениеСтрок.Ячейки.Колонка1.ЦветФона = ПолеВвода3;
		//ОформлениеСтрок.Ячейки.Колонка2.ЦветФона = ПолеВвода3;
	КонецЦикла;
	
КонецПроцедуры
13. ZergKRSK 128 16.10.15 10:08 Сейчас в теме
(12) Xershi, ага, на каждый цвет сделаем по полю ввода :D
14. Xershi 1001 16.10.15 10:14 Сейчас в теме
(13) ZergKRSK, ну так это пример.
5. Rokstedi 17 16.10.15 09:40 Сейчас в теме
Вот лови пример одного из решений, набросал по быстрому. Имя кнопки должно быть именем цвета
Прикрепленные файлы:
ВнешняяОбработка1.epf
a_a_burlakov; Gendelf; +2 Ответить
6. ZergKRSK 128 16.10.15 09:41 Сейчас в теме
Перем ТЗЦвета;

Процедура ПриОткрытии()
	ТЗЦвета = Новый ТаблицаЗначений;
	ТЗЦвета.Колонки.Добавить("НомерСтроки");
	ТЗЦвета.Колонки.Добавить("Цвет");
КонецПроцедуры // ПриОткрытии()

Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
	Строка = ТЗЦвета.Найти(ДанныеСтроки.НомерСтроки, "НомерСтроки");
	Если Строка = Неопределено Тогда
		Возврат
	Иначе
		Цвет = Строка["Цвет"];
		Если ТипЗнч(Цвет) = Тип("Цвет") Тогда
			ОформлениеСтроки.ЦветФона = Цвет;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры // ТоварыПриВыводеСтроки()

// процедура вызывается нажатием кнопки "Раскрасить строку"
Процедура ДействияФормыТоварыТоварыРаскрасить(Кнопка)
	ВыборЦвета = Новый ДиалогВыбораЦвета;
	Если Не ВыборЦвета.Выбрать() Тогда
		Возврат
	КонецЕсли;
	ТекущаяСтрока = ЭлементыФормы.Товары.ТекущаяСтрока.НомерСтроки;
	ТекущаяКолонка = ЭлементыФормы.Товары.ТекущаяКолонка.Имя;
	Строка = ТЗЦвета.Найти(ТекущаяСтрока, "НомерСтроки");
	Если Строка = Неопределено Тогда
		Строка = ТЗЦвета.Добавить();
		Строка.НомерСтроки = ТекущаяСтрока;
	КонецЕсли;
	Строка.Цвет = ВыборЦвета.Цвет;
	ЭлементыФормы.Товары.ОбновитьСтроки(ЭлементыФормы.Товары.ТекущаяСтрока);
КонецПроцедуры
Показать
7. klinval 294 16.10.15 09:42 Сейчас в теме
Если УФ, тогда через условное оформление придётся делать.
8. Gendelf 16.10.15 09:44 Сейчас в теме
9. ZergKRSK 128 16.10.15 09:49 Сейчас в теме
11. Gendelf 16.10.15 09:50 Сейчас в теме
(9) ZergKRSK, спасибо. Разбираюсь с кодом.
15. alexx2510 31 16.10.15 11:13 Сейчас в теме
что мешает в ТЧ завести два реквизита с типом ХранилищеЗначения и сохранять там выбранный для каждой из колонок цвет, а затем ПриВыводеСтроки() раскрашивать этими цветами колонки.

Другой вариант использовать функции ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр тогда тип реквизитов будет Строка (хотя 1С вроде не рекомендует использовать эти функции сейчас).
16. alexx2510 31 16.10.15 11:29 Сейчас в теме
кстати, если условие такое: "в желтый или зеленый цвет, по воле пользователя."
т.е. цветов всего два, причем заранее известных, то можно вообще сделать так:
создаем реквизиты "ЦветКолонки1", "ЦветКолонки2" с типом строка.
в модуле формы Создаем структуру "НаборЦветов" туда вставляем значения ("Желтый", Новый Цвет("описание желтого цвета")) и ("Зеленый", Новый Цвет("описание зеленого цвета"))
Далее организуем выбор из списка значений "Желтый" или "Зеленый" и записываем в наши строковые реквизиты ТЧ.
Теперь при выводе строки достаточно проверить, заполнен ли реквизит "ЦветКолонки1" и если да, то раскрасить колонку с помощью следующей конструкции
ОформлениеСтрок.Ячейки.Колонка1.ЦветФона = НаборЦветов[ЗначениеРеквизитаЦветКолонки1]
и тоже самое для колонки2
17. Gendelf 19.10.15 15:14 Сейчас в теме
(16) alexx2510, не понял к сожалению... можно пример?
18. Gendelf 19.10.15 15:22 Сейчас в теме
Застрял нам таком куске кода ПриВыведеСтроки(). Весь день сижу, всё никак.
В таком виде он работает, но если в табчасти я уберу "Видимость" у столбцов "Зеленый" и "Желтый" , то получаю ошибки. Но их нужно скрыть...

Если ДанныеСтроки.Желтый Тогда
		ОформлениеСтроки.Ячейки.Клиент.ЦветФона = WebЦвета.Желтый;
		ОформлениеСтроки.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.Желтый;
	ИначеЕсли ДанныеСтроки.Зеленый Тогда
		ОформлениеСтроки.Ячейки.Клиент.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
		ОформлениеСтроки.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
	КонецЕсли;
19. Xershi 1001 19.10.15 15:44 Сейчас в теме
(18) Gendelf, при получении данных пиши!
А потом отработку кода делай при видимости колонки.
20. Gendelf 19.10.15 16:06 Сейчас в теме
в стр.ДанныеСтроки попадают только видимые столбцы. Каким образом проверить можно, когда окрашивать в тот или другой цвет?

Для каждого стр из ОформленияСтрок Цикл
		Если стр.ДанныеСтроки.Желтый Тогда
			стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.Желтый;
			стр.Ячейки.Клиент.ЦветФона = WebЦвета.Желтый;
		Иначе
		КонецЕсли 
	КонецЦикла;
21. Xershi 1001 19.10.15 16:16 Сейчас в теме
(20) Gendelf, анализировать видимость колонки нужно до цикла. А в цикле проверять видима ли она.
22. Gendelf 19.10.15 16:18 Сейчас в теме
(21) Xershi, тут нечего анализировать, колонки с цветом должны быть скрыты от пользователя. В этом вся трудность.
23. Xershi 1001 19.10.15 16:19 Сейчас в теме
(20) Gendelf, туда попадают не видимые, а те которые есть в таблице. Если ты их прикрутил на форму без данных, то нужно смотреть ячейки. Это все реквизиты, которые есть на форме.
24. Gendelf 19.10.15 16:21 Сейчас в теме
(23) Xershi, Желтый и Зеленый реквизиты табличной части.
25. Xershi 1001 19.10.15 16:32 Сейчас в теме
(24) Gendelf, покажи скрин отладчика и скирн твой таблицы. А то что-то твои слова расходятся с тем что должно быть.
26. Gendelf 19.10.15 16:41 Сейчас в теме
(25) Xershi, во вложении. Там что видимость = истина, есть в ДанныеСтроки, а другой нет.
Прикрепленные файлы:
29. Xershi 1001 19.10.15 17:19 Сейчас в теме
(26) Gendelf, я так понял косяк получается, когда колонку время напоминания или клиент скрывают? Так вот до цикла проверяй их видимость. А в цикле пишешь условие если параметр истина то выполнить код.
ВидимостьКолонкиФайлы = ЭлементыФормы.Список.Колонки.Файлы.Видимость;
	
	Для Каждого ОформлениеСтрок Из ОформленияСтрок Цикл		
		
		Если ВидимостьКолонкиФайлы Тогда
			Если Не ОформлениеСтрок.ДанныеСтроки.ЭтоГруппа Тогда
				ОформлениеСтрок.Ячейки.Файлы.Текст = РаботаСфайлами.ПолучитьКоличествоФайлов(ОформлениеСтрок.ДанныеСтроки.Ссылка);
				ОформлениеСтрок.Ячейки.Файлы.ОтображатьТекст = Истина;
			КонецЕсли;	
		КонецЕсли;
Показать
33. Gendelf 20.10.15 08:14 Сейчас в теме
(29) Xershi, касяк когда я убираю галку Видимость в конфигураторе, у столбцов Зеленый и Желтый. Их просто не нужно показывать пользователю.
27. Gendelf 19.10.15 16:52 Сейчас в теме
свойтсво Данные, на результат не влияют.
28. Xershi 1001 19.10.15 17:16 Сейчас в теме
(27) Gendelf, влияют. Просто ты их сделал в виде флажка, но сделал!
30. AlexeyPapanov 19.10.15 17:30 Сейчас в теме
я писал подобную вещь для раскраски журнала.
http://infostart.ru/public/386184/

в этой теме предлагался вариант через событие ПриВыводеСтроки. это более медленный вариант. правильнее делать через ПриПолученииДанных.
вам останется в самом реквизите хранить цвет. а при раскраске анализировать этот реквизит и в зависимости от его значения красить в тот или иной цвет.
31. ZergKRSK 128 19.10.15 19:09 Сейчас в теме
(30) El_Loco, вариант ПриВыводеСтроки предлагался для примера. Конкретно в моей задаче его за глаза. Раскрашивают строки ооооочень редко, к тому же раскраска нигде не сохраняется. Если бы нужно было хранить цвет делал бы через ПриПолученииДанных.
32. AlexeyPapanov 19.10.15 19:43 Сейчас в теме
(31) ZergKRSK, да понятно, к вам не имею претензий, просто сказал как делать идеологически верно ;)
а так можно и запросы в цикле выполнять, пользователь все равно этого не видит.
34. Gendelf 20.10.15 08:26 Сейчас в теме
по картинкам видно, что у колонки Желтый, видимость = ложь. И в коде мы не можем к нему обратиться и проверить какое значение Истина или Ложь, в списке только Зеленый.
35. Gendelf 20.10.15 09:05 Сейчас в теме
в общем всё работает, но нужно скрыть эти 2 столбца с цветом от пользователей.
36. ZergKRSK 128 20.10.15 09:30 Сейчас в теме
(35) Gendelf, ну если ПриВыводеСтроки (или ПриПолученииДанных, неважно) не получается обратиться к скрытой Колонке, тогда надо использовать промежуточную Таблицу значений, например. В общем развивать мой пример. При открытии загнать в эту ТЗ номер строки и цвет. И уже ПриВыводеСтроки / ПриПолученииДанных красить.
37. Xershi 1001 20.10.15 09:33 Сейчас в теме
(35) Gendelf, платформа у вас какая все должно работать!
Прикрепленные файлы:
39. Gendelf 20.10.15 09:40 Сейчас в теме
(37) Xershi, если в режиме Предприятия убираю видимость - работает
(38) ZergKRSK, при открытии не вышло. Поле объекта не обнаружено Желтый.
40. ZergKRSK 128 20.10.15 09:41 Сейчас в теме
(39) Gendelf, не вышло значит код кривой
41. Gendelf 20.10.15 09:46 Сейчас в теме
(40) ZergKRSK, таблица во вложении

Видимость убираю так:
ЭлементыФормы.ТабличноеПолеНапоминания.Колонки.Зеленый.Видимость = Ложь;
	ЭлементыФормы.ТабличноеПолеНапоминания.Колонки.Желтый.Видимость = Ложь;

проверка реквизита:
//окрашиваем в зеленый и желтый
	Для каждого стр из ОформленияСтрок Цикл
		Если стр.ДанныеСтроки.Желтый Тогда
			стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.Желтый;
			стр.Ячейки.Клиент.ЦветФона = WebЦвета.Желтый;
		ИначеЕсли стр.ДанныеСтроки.Зеленый Тогда
			стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
			стр.Ячейки.Клиент.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
		КонецЕсли 
	КонецЦикла;
Показать
Прикрепленные файлы:
42. ZergKRSK 128 20.10.15 09:47 Сейчас в теме
(41) Gendelf, а в отладчике посмотреть? Ошибка как звучит?
45. Xershi 1001 20.10.15 09:51 Сейчас в теме
(39) Gendelf, под словом видимость у тебя галка видимость? А не что-то другое?
Тогда у тебя косяк в другом месте! Ошибку покажи.
47. Gendelf 20.10.15 09:56 Сейчас в теме
(45) Xershi, да
текст ошибки уже писал, ну вот скрин.
Прикрепленные файлы:
48. Xershi 1001 20.10.15 10:10 Сейчас в теме
(47) Gendelf, а код какой у вас? У меня это поле доступно в любом случае. Платформа у вас какая?
Ты явно что-то добавил не так. Либо это баг платформы.
Прикрепленные файлы:
50. Gendelf 20.10.15 10:13 Сейчас в теме
55. Gendelf 20.10.15 10:18 Сейчас в теме
(48) Xershi, по картинке... странно. Почему у меня не так =(
56. ZergKRSK 128 20.10.15 10:19 Сейчас в теме
(55) Gendelf,
    Для каждого стр из ОформленияСтрок Цикл
        Если стр.ДанныеСтроки.ССЫЛКА.Желтый Тогда
            стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.Желтый;
            стр.Ячейки.Клиент.ЦветФона = WebЦвета.Желтый;
        ИначеЕсли стр.ДанныеСтроки.ССЫЛКА.Зеленый Тогда
            стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
            стр.Ячейки.Клиент.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
        КонецЕсли 
    КонецЦикла;
Показать
57. Gendelf 20.10.15 10:25 Сейчас в теме
(56) ZergKRSK, так и сделал) работает!
Xershi, ZergKRSK спасибо за терпение и помощь. Решение оказалось проще чем я думал.
58. ZergKRSK 128 20.10.15 10:28 Сейчас в теме
(57) Gendelf, ну в конце уже все чухнули что что-то не то с типом Табличного поля :D
Кстати, колонки в табполе Желтый и Зеленый можно вообще не создавать даже.
59. Gendelf 20.10.15 10:32 Сейчас в теме
(58) ZergKRSK, ну да... щас всё проверю, сделаю копию и попробую удалить))
49. 32ops 149 20.10.15 10:13 Сейчас в теме
(47) Такое ощущение, что у табличного поля на форме данные - СписокЗначений или еще что-то экзотичное. На ТаблицуЗначений поменять, если так
52. Gendelf 20.10.15 10:15 Сейчас в теме
(49) 32ops, тип табличного поля - ДокументСписок.РаботаСПотенциальнымКлиентом
51. ZergKRSK 128 20.10.15 10:14 Сейчас в теме
Чето тоже сомнения.
(47) Gendelf, ТабличноеПолеНапоминания - с какими данными связан? Табличная часть документа?
Колонки ТабПоля Желтый и Зеленый связаны с реквизитами табличной части ?
53. Gendelf 20.10.15 10:17 Сейчас в теме
(51) ZergKRSK, Зеленый и Желтый это реквизиты документа. Тип табличного поля - ДокументСписок.РаботаСПотенциальнымКлиентом.
54. ZergKRSK 128 20.10.15 10:18 Сейчас в теме
(53) Gendelf, тьфу ты. ДанныеСтроки.Ссылка.Желтый
38. ZergKRSK 128 20.10.15 09:35 Сейчас в теме
А да, я бы еще попробовал Видимость не убирать в Конфигураторе, а уже программно при открытии скрыть, например.
43. Gendelf 20.10.15 09:48 Сейчас в теме
{Форма.Форма.Форма(2092)}: Поле объекта не обнаружено (Желтый)
Если стр.ДанныеСтроки.Желтый Тогда

в отладке действительно нету цветов в стр.ДанныеСтроки, если при открытии их скрыть.
44. ZergKRSK 128 20.10.15 09:50 Сейчас в теме
(43) Gendelf, тогда делай как в (36)
46. Gendelf 20.10.15 09:52 Сейчас в теме
(44) ZergKRSK, на данный момент уже скрыты при открытии.
Оставьте свое сообщение
Вопросы с вознаграждением