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

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

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

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

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

Другой вариант использовать функции ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр тогда тип реквизитов будет Строка (хотя 1С вроде не рекомендует использовать эти функции сейчас).
+
16. alexx2510 38 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 1484 19.10.15 15:44 Сейчас в теме
(18) Gendelf, при получении данных пиши!
А потом отработку кода делай при видимости колонки.
+
20. Gendelf 19.10.15 16:06 Сейчас в теме
в стр.ДанныеСтроки попадают только видимые столбцы. Каким образом проверить можно, когда окрашивать в тот или другой цвет?

Для каждого стр из ОформленияСтрок Цикл
		Если стр.ДанныеСтроки.Желтый Тогда
			стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.Желтый;
			стр.Ячейки.Клиент.ЦветФона = WebЦвета.Желтый;
		Иначе
		КонецЕсли 
	КонецЦикла;
+
21. Xershi 1484 19.10.15 16:16 Сейчас в теме
(20) Gendelf, анализировать видимость колонки нужно до цикла. А в цикле проверять видима ли она.
+
22. Gendelf 19.10.15 16:18 Сейчас в теме
(21) Xershi, тут нечего анализировать, колонки с цветом должны быть скрыты от пользователя. В этом вся трудность.
+
23. Xershi 1484 19.10.15 16:19 Сейчас в теме
(20) Gendelf, туда попадают не видимые, а те которые есть в таблице. Если ты их прикрутил на форму без данных, то нужно смотреть ячейки. Это все реквизиты, которые есть на форме.
+
24. Gendelf 19.10.15 16:21 Сейчас в теме
(23) Xershi, Желтый и Зеленый реквизиты табличной части.
+
25. Xershi 1484 19.10.15 16:32 Сейчас в теме
(24) Gendelf, покажи скрин отладчика и скирн твой таблицы. А то что-то твои слова расходятся с тем что должно быть.
+
26. Gendelf 19.10.15 16:41 Сейчас в теме
(25) Xershi, во вложении. Там что видимость = истина, есть в ДанныеСтроки, а другой нет.
Прикрепленные файлы:
+
29. Xershi 1484 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 1484 19.10.15 17:16 Сейчас в теме
(27) Gendelf, влияют. Просто ты их сделал в виде флажка, но сделал!
+
30. AlexeyPapanov 459 19.10.15 17:30 Сейчас в теме
я писал подобную вещь для раскраски журнала.
http://infostart.ru/public/386184/

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

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

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

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

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