|
Чередование цветных строк в табличном поле. | ☑ | ||
---|---|---|---|---|
0
Быдлокодер 80 lvl
24.08.11
✎
11:51
|
Добрый день!
Есть табличное поле: Контрагент Колонка 1 Колонка N Контрагент 1 Данные Данные <====цвет синий Контрагент 1 Данные Данные <====цвет синий Контрагент 2 Данные Данные <====цвет белый Контрагент 3 Данные Данные <====цвет синий Хочу сделать подобное выделение строк цветом, чтобы одинаковые контрагенты были отмечены одним цветом (одинаковые контрагенты в таблице всегда находятся рядом друг с другом). Алгоритм прост - при выводе строки, если предыдущая строка содержит такого же контрагента, то и цвет делаем такой же как у него. Но вопрос такой - когда включаем отбор, как мне определить, какая строка предыдущая? Т.е. в результате отбора могут быть показаны строки № 5, 35, 151. |
|||
1
Быдлокодер 80 lvl
24.08.11
✎
11:52
|
+ (0) Забыл сказать, платформа 8.1.
|
|||
2
mikecool
24.08.11
✎
11:53
|
нафига определять предыдущую?
присваивай контрагентам определнный цвет, при выводе - указывай в оформлении |
|||
3
Axel2009
24.08.11
✎
11:54
|
(0) и тут бац бац и в этот отбор попадают только клиенты, по которым нужен синий цвет. что делать?
|
|||
4
Быдлокодер 80 lvl
24.08.11
✎
11:54
|
(2) Ладно, пускай так. А если я присвою им определенный цвет, а потом в результате отбора рядом окажутся 2 разных контрагента с одинаковым цветом?
|
|||
5
Быдлокодер 80 lvl
24.08.11
✎
11:55
|
(3) Вот я и пытаюсь узнать, что тогда делать :)
|
|||
6
butterbean
24.08.11
✎
11:58
|
(4) при заполнении таблицы в отдельную колонку запихивай цвет
|
|||
7
Быдлокодер 80 lvl
24.08.11
✎
11:59
|
(6) См. (4).
|
|||
8
Axel2009
24.08.11
✎
11:59
|
(7) при получении данных обнуляй переменную, что начал перерисовывать таблицу.
в при выводе строки если переменная = обнулена, тогда присваивай первый цвет и заполняй ее чемнибудь. и далее чередуй. |
|||
9
Mort
24.08.11
✎
11:59
|
(4) Если есть хотя бы два контра с одинаковым цветом, всегда можно установить отбор, чтобы они оказались рядом.
|
|||
10
Axel2009
24.08.11
✎
12:00
|
правда рябить будет шо пипец при прокрутке =)
|
|||
11
Mort
24.08.11
✎
12:01
|
+(9) А менять цвет не получится, т.к. при получении данных (как и при выводе строки) при прокрутке, напрмер, вызывается только для появившихся строк.
|
|||
12
Axel2009
24.08.11
✎
12:02
|
(11) при выводе строки для всех строк.
|
|||
13
Быдлокодер 80 lvl
24.08.11
✎
12:04
|
(10) Что поделаешь, воля заказчика. В 8.2 подсмотрел, только там просто через одну строку синим выделяет.
|
|||
14
Mort
24.08.11
✎
12:04
|
(12) А проверить?
|
|||
15
Быдлокодер 80 lvl
24.08.11
✎
12:07
|
Теоретически можно вызвать ТабличноеПоле.ОбновитьСтроки(), тогда можно будет обработать цвета для всех видимых строк, но как-то не нравится мне эта идея...
|
|||
16
butterbean
24.08.11
✎
12:09
|
(15) это таб часть документа?
|
|||
17
Быдлокодер 80 lvl
24.08.11
✎
12:09
|
(16) Нет, это табличное поле в обработке. Тип данных - ТЗ.
|
|||
18
Быдлокодер 80 lvl
24.08.11
✎
12:10
|
(17) Вру, не ТЗ, а табличная часть обработки.
|
|||
19
Mort
24.08.11
✎
12:11
|
Лучше хорошо узнать что хочет заказчик и предложить нормальное решение. Например сгруппировать по контрагентам в ДЗ.
|
|||
20
Axel2009
24.08.11
✎
12:11
|
(14) проверил. был не прав
|
|||
21
Быдлокодер 80 lvl
24.08.11
✎
12:12
|
(19) ДЗ предлагал, хотят таблицу.
|
|||
22
butterbean
24.08.11
✎
12:13
|
(18) сделай таб поле не привязанное к твоей таб части, заполняй по ней таб часть и сделай свои кнопки отбора, тогда сможешь установке отбора цвета пихать в строки
|
|||
23
Axel2009
24.08.11
✎
12:14
|
короче 100 баксов
|
|||
24
ptiz
24.08.11
✎
12:16
|
А что сложного в сравнении данных текущей строки с предыдущей?
Предыдущая получается по ТабЧасть[ИндексТекСтроки - 1] |
|||
25
Быдлокодер 80 lvl
24.08.11
✎
12:18
|
(24) Да ничего сложного! Вся суть описана в (4). В результате отбора рядом могут оказаться строки с одинаковым цветом.
|
|||
26
Быдлокодер 80 lvl
24.08.11
✎
12:20
|
(24) Подождите ка, а индексы перестраиваются после отбора? *ушел проверять*
|
|||
27
Быдлокодер 80 lvl
24.08.11
✎
12:26
|
+(26) Нет, индексы остаются те же.
|
|||
28
Arseny
24.08.11
✎
12:29
|
А почему не использовать событие при выводе строки и глобальную переменную формы списка цветПредыдущей?
|
|||
29
kosts
24.08.11
✎
12:30
|
Сделай массив побольше цветов
В событии при получении данных ищи в соответствии контрагент-Цвет. Если нашел выводи этот цвет Если не нашел добавляй в соответствие контрагент-цвет (цвет следующий по таблице. |
|||
30
Быдлокодер 80 lvl
24.08.11
✎
12:37
|
(29) Если будет много цветов, то все равно вероятность останется.
Такой вопрос: можно ли как то узнать предыдущую _видимую_ строку, а не предыдущую строку ТЧ? |
|||
31
kosts
24.08.11
✎
12:38
|
(30) При установлении отбора очищай соответствие.
На оставшуюся маленькую вероятность забей. |
|||
32
Mort
24.08.11
✎
12:39
|
(30) А что это даст. Тут ограничение исключительно теоретическое, т.е. вероятность нахождения цветов рядом всегда >0 и никакими программными извращениями его не обойдешь. А перекрашивать контрагентов каждый раз в новый цвет - это точно не то, что хотел заказчик.
|
|||
33
Arseny
24.08.11
✎
12:40
|
Событие привыводестроки возникает только для видимых строк! так что делай как я сказал и будет тебе щастье, а массив огранич двумя значениями, тогда будет просто красивое чередование
|
|||
34
Arseny
24.08.11
✎
12:41
|
Насчет того, что заказчик хотел, чтоб цвет был прицеплен к опрделенному контрагенту вроде никто не говорил
|
|||
35
Быдлокодер 80 lvl
24.08.11
✎
12:42
|
(33) А если мы покрутим на 1 строку вниз, а потом на одну вверх, то идея с цветом предыдущей не прокатит...
|
|||
36
Быдлокодер 80 lvl
24.08.11
✎
12:45
|
+(35) Я к тому, что отработает ПриВыводеСтроки для нижней, а потом для верхней, и вероятность установки правильного цвета во втором случае уже будет 50/50.
|
|||
37
Arseny
24.08.11
✎
12:45
|
А если обработать приполучении данных?
|
|||
38
Arseny
24.08.11
✎
12:46
|
(36) Я понял
|
|||
39
Быдлокодер 80 lvl
24.08.11
✎
12:47
|
(37) Только что крутил список, там оно при прокрутке 3 строк один раз отрабатывает.
|
|||
40
ptiz
24.08.11
✎
12:48
|
При возникновении события "ПриПолученииДанных" (оно срабатывает и при отбор), пробегать ВСЕ строки таб.части, игнорируя не соответствующие отбор (ТабПоле.ПроверитьСтроку()) и назначать им цвета.
Потом обойти ОформленияСтрок и раскрасить. |
|||
41
Быдлокодер 80 lvl
24.08.11
✎
12:51
|
(40) Однозначно будет слишком долго все строки обходить, пусть даже и на соответствие условию... (там уже порядка 1500 строк, и будет увеличиваться). Хотя можно в принципе проверить, все равно нет вариантов.
|
|||
42
kosts
24.08.11
✎
12:57
|
Можно попробовать завязаться на порядок сортировки и снизить вероятность совпадения, а так же сделать таблицу не менее 100 цветов...
|
|||
43
Arseny
24.08.11
✎
13:06
|
ПриПолученииДанных сделать:
Построитель = Новый ПостроительОтчета; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок); тз=Построитель.Результат.Выгрузить(); Получишь таблицу с тем, что будет выведено в список, оттуда вытащи контрагентов и назначь каждому свой цвет Причем это уже с учетом фильтров |
|||
44
Arseny
24.08.11
✎
13:09
|
А цвет генеришь рэндомом с проверкой был ли у кого из контрагентов такой цвет
|
|||
45
Arseny
24.08.11
✎
13:10
|
Самый красивый будет контрагент с цветом фона черным
|
|||
46
Axel2009
24.08.11
✎
13:35
|
привязывайся к номеру строки тогда раз у тебя это табличная часть.
|
|||
47
Arseny
24.08.11
✎
13:36
|
В соседних строках могут быть одинаковые контрагенты
|
|||
48
Axel2009
24.08.11
✎
13:38
|
(47) и что?
|
|||
49
Arseny
24.08.11
✎
14:52
|
нужно, чтоб они одинакового цвета были
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |