Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Раскрашивание строк Табличного Поля

Раскрашивание строк Табличного Поля
Я
   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
Патамушта надо юзать ПриВыводеСтроки()
   CMblCL
 
2 - 26.10.16 - 07:53
Если ДеньГода(ДанныеСтроки.ДатаНачалаЗанятия) % 2 Тогда
  //Цвет №1

Иначе
  //Цвет №2

КонецЕсли
   CMblCL
 
3 - 26.10.16 - 07:55
(1) Все правильно делает ТС, лучше вызвать процедуру 1 раз и обработать 3 строки, чем 3 раза вызвать процедуру для одной строки.
   Lexey_
 
4 - 26.10.16 - 08:20
(0) не вникал, но, видимо, со всеми строками надо сравнивать, а не только с отображаемыми?
   CMblCL
 
5 - 26.10.16 - 08:23
(4) Нужен какой-то единый признак для каждой строки и в зависимости от его значения устанавливать цвет.
В (2) я привел пример такого признака.
   ProChelny
 
6 - 26.10.16 - 13:43
(1) подскажите, используя ПриВыводеСтроки() можно как-то получит предыдущую строку? Тогда бы я нашел её день и цвет - сравнил, сопоставил и покрасил.
   ProChelny
 
7 - 27.10.16 - 07:31
(5) Про единый признак тоже думал, но вариант из (2) не подходит: к примеру занятия идут только по четным дням (Вт, Чт, Сб)- то остаток от деления даты на 2 для этих занятий будет одинаков. В итоге занятия одной недели окрасятся в один цвет, а занятия следующей недели - в другой.

(4) Вот в этом помощь и нужна мне. Обработчик какого события может отвечать за все строки Табличного Поля, а не только отображаемой части.

Уже думал о варианте: изначально ничего не красить, а при повторном открытии брать из ТабличнуыеЧасти документа нужную мне - там присваивать цвета, и отдельно писать обработчики на добавление/удаление строк и на изменение дат в строке - но это очень много кода, а мне кажется что существует некое "красивое" решение. Может у кого-нибудь есть наводка.
   Lexey_
 
8 - 27.10.16 - 07:47
(7) вместо "Для Каждого офСтроки Из ОформленияСтрок Цикл"
использовать "Для Каждого СтрокаТЧ Из ТабЧасть Цикл"
   CMblCL
 
9 - 27.10.16 - 09:34
   ProChelny
 
10 - 24.11.16 - 07:35
(9)  Спасибо огромное. Это то что нужно.
А если вы научите меня еще и поиском пользоваться, я наверное стану самым счастливым человеком на свете.
Не могу понять как я сам эту тему не нашел.
 
 Рекламное место пустует
   Lexey_
 
11 - 24.11.16 - 09:11
(10) это все лень

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует