Оформление строк табличного поля #624974


#0 by KindLion
Доброго дня! В табличном поле документа мне необходимо менять оформление строки, сравнивая данные текущей и предыдущей строк. Алгоритм, который написал - несовершенен, т.к. начинает глючить после редактирования любой ячейки, или при удалении любой строки. Собственно, сам код: ============================== Как этот код нужно доработать?
#1 by KindLion
Ап?
#2 by Kashemir
Пользуй событие ПриПолученииДанных
#3 by Mort
Не взлетит. Нет, оформлять нужно в этих процедурах, а вот считать параметры оформления нужно уже на других событиях ТЧ.
#4 by Mort
Ещё ТП имеет отличное событие на изменение порядка строк. А именно никакое.
#5 by KindLion
Да, я видел это событие. Но вот чего не соображу - ОформленияСтрок - коллекция только для видимой части ТЧ, а для того, чтобы оформить [0] строку этой коллекции, мне надо заглянуть на одну строчку вверх от горизонта. :)
#6 by KindLion
Перетаскивание строк я запретил - тут проблемы не будет. Но вот удаление строки... это возможно - оно ведь тоже меняет состав строк.... :(
#7 by Mort
1. Делаешь соответствие строкаТЧ - реквизиты оформления. 2. При удалении/окончании редактирования обновляешь это соотвествие. 3. При получении данных читаешь оформление для своих строк из соответствия. .. Profit!
#8 by pessok
данные надо сравнивать все же не по табличному полю, а по табличной части. ключом у тебя будет НомерСтроки. Т.е. ты берешь ТЧ[ОформлениеСтроки.Ячейки.НомерСтроки-1] = ТЧ[ОформлениеСтроки.Ячейки.НомерСтроки-2] Как-то так. Только не забудь про условия на 0 там и прочее
#9 by pessok
так будет дольше, наверное
#10 by KindLion
Рассматривал я этот вариант. Только СтрокаТЧ ничего не знает об оформлении стрки в таб.поле. А писать в ТЧ что-то про оформление - путь легкий, но моветонистый, имхо.
#11 by KindLion
вот это я тоже рассматривал. Муторно слегка, но, в принципе, взлететь должно
#12 by Mort
Тут не совсем понятно в задаче, достаточно ли одной предыдущей строки для однозначного вычисления оформления. Если да, то вариант в , конечно лучше.
#13 by Mort
+ Вообще судя по недостаточно.
#14 by pessok
т.е. тебе надо сравнивать не сами данные из двух строк, а еще и их оформление?
#15 by KindLion
Для оформления текущей строки необходимо и достаточно знать: 1. Данные предыдущей строки 2. Оформление предыдущей строки Ну или понимания того, что текущая строка - первая в табличном поле, и тогда оформлять ее данными по умолчанию
#16 by Kashemir
Процедура ТабличноеПоле1ПриПолученииДанных(Элемент, ОформленияСтрок) Оформлением можно оперировать лишь в пределах текущих видимых строк. Отсюда опираться на оформление предыдущей строки для первой выводимой невозможно.
#17 by pessok
1. Данные предыдущей строки 2. Оформление предыдущей строки 2 строится не из 1?
#18 by Mort
Вообще есть функция получения текущего оформления для строки, но юзать её здесь небезопасно.
#19 by pessok
+ ну как вариант, можно при изменении тч создавать ее копию, в нее добавлять колонки, в которых хранить условия оформления строк, а уже при выводе строки делать как в или , но уже по отношению к новой ТЗ
#20 by KindLion
вот об этом я и писал в - нет, 2 строится не из 1, а из 1 и 2 для вышележащей строки
#21 by Kashemir
Ну так это невозможно в принципе - оформление существует только для видимых строк
#22 by KindLion
- да, я тоже склоняюсь к этому варианту. И, каждый раз переписывать эту копию после окончания редактирования и после удаления. Муторно, но если все сделать аккуратно, то должно сработать. Спасибо!
#23 by pessok
подумай в адрес . в твоем случае, это, наверное, единственный приемлемый вариант. рассказывать тебе про рекурсию ведь не надо?
#24 by pessok
можно так, или поизголятся таки с рекурсией. может даже красивше получится, но не факт, что быстрее
#25 by Kashemir
#26 by hhhh
не взлетит. Те строки, которые не участвуют в ПриПолученииДанных останутся старых цветов.
#27 by hhhh
Автор - Петросян, ветку в юмор. ЧередованиеЦветовСтрок (UseAlternationRowColor) Использование: Чтение и запись. Описание: Тип: Булево. Содержит признак чередования цветов строк. Истина - цвета чередуются. Доступность: Толстый клиент. См. также: ТабличноеПоле, свойство ЦветФонаЧередованияСтрок
#28 by pessok
так там речь шла не о чередовании, а об условиях различных... или он нас всех наобманул?)
#29 by Kashemir
С чего вдруг ? Данные кэша обновляются при изменениях ТЧ
#30 by KindLion
тебя бы в юмор, как читать не умеющего. Мне надо не через строку, а по условию
#31 by Kashemir
Ну да. У автора цвет должен меняться только изменении в сочетании номенклатура+характеристика
#32 by Kashemir
Вобщем этот код проверил - работает без проблем Только желательно ОбновлениеКэша всунуть под события фактического изменении ТЧ - в текущем виде напостой будет пересчитывать - лишняя нагрузка
#33 by KindLion
Спасибо, сей попробую.
#34 by KindLion
!!! Все летает без проблем! Спасибо тебе огромное, Kashemir!
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С