Имя: Пароль:
1C
1С v8
Раскрашивание строк Табличного Поля
,
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) это все лень