|   |   | 
| 
 | Раскрашивание строк Табличного Поля | ☑ | ||
|---|---|---|---|---|
| 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) это все лень     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |