|
Раскрашивание строк Табличного Поля | ☑ | ||
---|---|---|---|---|
0
ProChelny
26.10.16
✎
07:41
|
Есть документ, в табличное поле которого заносится расписание проведения занятий по какому-либо курсу обучения.
Табличное поле называется "Занятия". В табличном поле есть столбец "ДатаНачалаЗанятия", в нем содержится дата и время. Есть еще и столбец "датаокончания...", но сейчас он не важен. Если в курсе много занятий, то чисто зрительно становится неудобно их различать, поскольку бывает ситуация, что в один день пару занятий по часу, а в другой - одно на 7 часов. Поэтому попросили строки выделять разным цветом. Но свойство "ЧередованиеЦветовСтрок" не подходит, т.к. нужно цветом отделять друг от друга именно разные дни, а не просто разные строки. Я написал такой код: Процедура ЗанятияПриПолученииДанных(Элемент, ОформленияСтрок) Если ОформленияСтрок.Количество() > 0 Тогда МЦ = Новый массив(); МЦ.Добавить(WebЦвета.БледноЗеленый);//Этот цвет нам не понадобится, просто чтобы нумерация цветов была 1 или 2 МЦ.Добавить(WebЦвета.Пшеничный); МЦ.Добавить(WebЦвета.Белый); ТекущийДеньРассписания = НачалоДня(ОформленияСтрок[0].ДанныеСтроки.ДатаНачалаЗанятия); F = 1; ТекущийЦвет = МЦ[F]; Для Каждого офСтроки Из ОформленияСтрок Цикл Если ТекущийДеньРассписания <> НачалоДня(офСтроки.ДанныеСтроки.ДатаНачалаЗанятия) Тогда F = F%2+1; офСтроки.ЦветФона = МЦ[F]; ТекущийДеньРассписания = НачалоДня(офСтроки.ДанныеСтроки.ДатаНачалаЗанятия); иначе офСтроки.ЦветФона = МЦ[F]; КонецЕсли; Если НачалоДня(офСтроки.ДанныеСтроки.ДатаНачалаЗанятия) = НачалоДня(ТекущаяДата()) Тогда офСтроки.ЦветФона = WebЦвета.Аквамарин;//ДымчатоБелый; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры Ну и понятно, что она не отрабатывает как надо. При начальном открытии документа вроде всё выглядит идеально, но когда начинаешь прокручивать расписание вверх-вниз происходит ерунда. Допустим первое занятие 10го октября выделяется белым цветом, а второе и все последующие занятия в этот день уже Пшеничным. Пожалуйста помогите найти ошибку. |
|||
1
Альбатрос
26.10.16
✎
07:43
|
Патамушта надо юзать ПриВыводеСтроки()
|
|||
2
CMblCL
26.10.16
✎
07:53
|
Если ДеньГода(ДанныеСтроки.ДатаНачалаЗанятия) % 2 Тогда
//Цвет №1 Иначе //Цвет №2 КонецЕсли |
|||
3
CMblCL
26.10.16
✎
07:55
|
(1) Все правильно делает ТС, лучше вызвать процедуру 1 раз и обработать 3 строки, чем 3 раза вызвать процедуру для одной строки.
|
|||
4
Lexey_
26.10.16
✎
08:20
|
(0) не вникал, но, видимо, со всеми строками надо сравнивать, а не только с отображаемыми?
|
|||
5
CMblCL
26.10.16
✎
08:23
|
(4) Нужен какой-то единый признак для каждой строки и в зависимости от его значения устанавливать цвет.
В (2) я привел пример такого признака. |
|||
6
ProChelny
26.10.16
✎
13:43
|
(1) подскажите, используя ПриВыводеСтроки() можно как-то получит предыдущую строку? Тогда бы я нашел её день и цвет - сравнил, сопоставил и покрасил.
|
|||
7
ProChelny
27.10.16
✎
07:31
|
(5) Про единый признак тоже думал, но вариант из (2) не подходит: к примеру занятия идут только по четным дням (Вт, Чт, Сб)- то остаток от деления даты на 2 для этих занятий будет одинаков. В итоге занятия одной недели окрасятся в один цвет, а занятия следующей недели - в другой.
(4) Вот в этом помощь и нужна мне. Обработчик какого события может отвечать за все строки Табличного Поля, а не только отображаемой части. Уже думал о варианте: изначально ничего не красить, а при повторном открытии брать из ТабличнуыеЧасти документа нужную мне - там присваивать цвета, и отдельно писать обработчики на добавление/удаление строк и на изменение дат в строке - но это очень много кода, а мне кажется что существует некое "красивое" решение. Может у кого-нибудь есть наводка. |
|||
8
Lexey_
27.10.16
✎
07:47
|
(7) вместо "Для Каждого офСтроки Из ОформленияСтрок Цикл"
использовать "Для Каждого СтрокаТЧ Из ТабЧасть Цикл" |
|||
9
CMblCL
27.10.16
✎
09:34
|
||||
10
ProChelny
24.11.16
✎
07:35
|
(9) Спасибо огромное. Это то что нужно.
А если вы научите меня еще и поиском пользоваться, я наверное стану самым счастливым человеком на свете. Не могу понять как я сам эту тему не нашел. |
|||
11
Lexey_
24.11.16
✎
09:11
|
(10) это все лень
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |