Добрый день, 1с 8.2 УПП.
Есть необходимость закрашивать строку (точнее пару столбцов в строке) в желтый или зеленый цвет, по воле пользователя. Нет точной формулы, чтобы отловить это при выводе строки, юзер сам интуитивно решает какой кл. Цвет должен сохраниться, для этого создал в ТЧ два реквизита с типом булево. Добавил цветные кнопки на панели и думаю как быть дальше...
Подскажите как это можно реализовать?
(1) Gendelf, делал закрашивалку строк, пользователь сам выбирает какую строку в какой цвет красить. Но при выходе раскраска не сохраняется, не было задачи сохранять. В вашем случае надо раскрашивать ячейки?
(1) Gendelf, пишешь процедуру при получении данных.
В таблицу добавляешь реквизит цвет. Надо юзеру он его меняет и твои столбцы нужного цвета. Колонка может быть по умолчанию скрыта.
Процедура ТабличноеПоле1ПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтрок Из ОформленияСтрок Цикл
//ОформлениеСтрок.Ячейки.Колонка1.ЦветФона = ПолеВвода3;
//ОформлениеСтрок.Ячейки.Колонка2.ЦветФона = ПолеВвода3;
КонецЦикла;
КонецПроцедуры
что мешает в ТЧ завести два реквизита с типом ХранилищеЗначения и сохранять там выбранный для каждой из колонок цвет, а затем ПриВыводеСтроки() раскрашивать этими цветами колонки.
Другой вариант использовать функции ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр тогда тип реквизитов будет Строка (хотя 1С вроде не рекомендует использовать эти функции сейчас).
кстати, если условие такое: "в желтый или зеленый цвет, по воле пользователя."
т.е. цветов всего два, причем заранее известных, то можно вообще сделать так:
создаем реквизиты "ЦветКолонки1", "ЦветКолонки2" с типом строка.
в модуле формы Создаем структуру "НаборЦветов" туда вставляем значения ("Желтый", Новый Цвет("описание желтого цвета")) и ("Зеленый", Новый Цвет("описание зеленого цвета"))
Далее организуем выбор из списка значений "Желтый" или "Зеленый" и записываем в наши строковые реквизиты ТЧ.
Теперь при выводе строки достаточно проверить, заполнен ли реквизит "ЦветКолонки1" и если да, то раскрасить колонку с помощью следующей конструкции
ОформлениеСтрок.Ячейки.Колонка1.ЦветФона = НаборЦветов[ЗначениеРеквизитаЦветКолонки1]
и тоже самое для колонки2
Застрял нам таком куске кода ПриВыведеСтроки(). Весь день сижу, всё никак.
В таком виде он работает, но если в табчасти я уберу "Видимость" у столбцов "Зеленый" и "Желтый" , то получаю ошибки. Но их нужно скрыть...
Если ДанныеСтроки.Желтый Тогда
ОформлениеСтроки.Ячейки.Клиент.ЦветФона = WebЦвета.Желтый;
ОформлениеСтроки.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.Желтый;
ИначеЕсли ДанныеСтроки.Зеленый Тогда
ОформлениеСтроки.Ячейки.Клиент.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
ОформлениеСтроки.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
КонецЕсли;
в стр.ДанныеСтроки попадают только видимые столбцы. Каким образом проверить можно, когда окрашивать в тот или другой цвет?
Для каждого стр из ОформленияСтрок Цикл
Если стр.ДанныеСтроки.Желтый Тогда
стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.Желтый;
стр.Ячейки.Клиент.ЦветФона = WebЦвета.Желтый;
Иначе
КонецЕсли
КонецЦикла;
(20) Gendelf, туда попадают не видимые, а те которые есть в таблице. Если ты их прикрутил на форму без данных, то нужно смотреть ячейки. Это все реквизиты, которые есть на форме.
(26) Gendelf, я так понял косяк получается, когда колонку время напоминания или клиент скрывают? Так вот до цикла проверяй их видимость. А в цикле пишешь условие если параметр истина то выполнить код.
ВидимостьКолонкиФайлы = ЭлементыФормы.Список.Колонки.Файлы.Видимость;
Для Каждого ОформлениеСтрок Из ОформленияСтрок Цикл
Если ВидимостьКолонкиФайлы Тогда
Если Не ОформлениеСтрок.ДанныеСтроки.ЭтоГруппа Тогда
ОформлениеСтрок.Ячейки.Файлы.Текст = РаботаСфайлами.ПолучитьКоличествоФайлов(ОформлениеСтрок.ДанныеСтроки.Ссылка);
ОформлениеСтрок.Ячейки.Файлы.ОтображатьТекст = Истина;
КонецЕсли;
КонецЕсли;
в этой теме предлагался вариант через событие ПриВыводеСтроки. это более медленный вариант. правильнее делать через ПриПолученииДанных.
вам останется в самом реквизите хранить цвет. а при раскраске анализировать этот реквизит и в зависимости от его значения красить в тот или иной цвет.
(30) El_Loco, вариант ПриВыводеСтроки предлагался для примера. Конкретно в моей задаче его за глаза. Раскрашивают строки ооооочень редко, к тому же раскраска нигде не сохраняется. Если бы нужно было хранить цвет делал бы через ПриПолученииДанных.
(31) ZergKRSK, да понятно, к вам не имею претензий, просто сказал как делать идеологически верно ;)
а так можно и запросы в цикле выполнять, пользователь все равно этого не видит.
по картинкам видно, что у колонки Желтый, видимость = ложь. И в коде мы не можем к нему обратиться и проверить какое значение Истина или Ложь, в списке только Зеленый.
(35) Gendelf, ну если ПриВыводеСтроки (или ПриПолученииДанных, неважно) не получается обратиться к скрытой Колонке, тогда надо использовать промежуточную Таблицу значений, например. В общем развивать мой пример. При открытии загнать в эту ТЗ номер строки и цвет. И уже ПриВыводеСтроки / ПриПолученииДанных красить.
//окрашиваем в зеленый и желтый
Для каждого стр из ОформленияСтрок Цикл
Если стр.ДанныеСтроки.Желтый Тогда
стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.Желтый;
стр.Ячейки.Клиент.ЦветФона = WebЦвета.Желтый;
ИначеЕсли стр.ДанныеСтроки.Зеленый Тогда
стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
стр.Ячейки.Клиент.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
КонецЕсли
КонецЦикла;
(47) Gendelf, а код какой у вас? У меня это поле доступно в любом случае. Платформа у вас какая?
Ты явно что-то добавил не так. Либо это баг платформы.
Для каждого стр из ОформленияСтрок Цикл
Если стр.ДанныеСтроки.ССЫЛКА.Желтый Тогда
стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.Желтый;
стр.Ячейки.Клиент.ЦветФона = WebЦвета.Желтый;
ИначеЕсли стр.ДанныеСтроки.ССЫЛКА.Зеленый Тогда
стр.Ячейки.ВремяНапоминания.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
стр.Ячейки.Клиент.ЦветФона = WebЦвета.ЗеленоватоЖелтый;
КонецЕсли
КонецЦикла;
(57) Gendelf, ну в конце уже все чухнули что что-то не то с типом Табличного поля :D
Кстати, колонки в табполе Желтый и Зеленый можно вообще не создавать даже.
Чето тоже сомнения.
(47) Gendelf, ТабличноеПолеНапоминания - с какими данными связан? Табличная часть документа?
Колонки ТабПоля Желтый и Зеленый связаны с реквизитами табличной части ?