Страница 1 из 2

Cross-Tab. Highlighting. Expression. Не работает условие.

Добавлено: 15 апр 2010, 06:10
Леонид
Доброе утро, уважаемые!

Сделал очередной отчёт для проекта. В нём cross-tab. Всё работает великолепно, но возникла одна загвоздка - мне нужно раскрасить колонки с сегодняшней датой. Казалось бы, всё просто, ставим у нужной ячейки условие по которому красить и всё, но нет - условие не срабатывает.
Суть в том, в ячейку cross-tab'а (см. отчёт в приложении) CrossTab1_Sum1 я ставлю Expression: qrMain.DOC_DATE.CompareTo(Today) == 0. Это условие почему-то не срабатывает. Пробовал уже и так qrMain.DOC_DATE.ToShortStringDate() == Today.ToShortStringDate(), хотя это маразм, но всё равно не работает.
Самое интересное в том, что в Вашем Demo-примере CrossTab with Highlighting просто по условию Today.CompareTo(System.DateTime.Parse("15.04.2010")) == 0 всё работает, равно как и по маразматическому условию Today.ToShortDateString() == System.DateTime.Parse("15.04.2010").ToShortDateString() так работает велоколепно.
Но почему же в моём отчёте тоже самое не работает?
У меня поле DOC_DATE типа DateTime (тянется из процедуры Oracle) и всё работает, но условие не выполняется, причём именно по этому полю. А, скажем, как в Вашем примере типа value < 20, то да, без проблем всё выполняется.
Странно... Провозился со вчерашнего вечера, и если бы не потратил на это почти 4 часа, то не спрашивал бы, но сил уже нет разбираться, уже всякие варианты перепробовал.

Файл отчёта во вложении.

Cross-Tab. Highlighting. Expression. Не работает условие.

Добавлено: 15 апр 2010, 10:15
Anton Lozovskiy
Здравствуйте,

Вы наверно прислали нам не тот проект. Я не нашел в нем кросс-таблиц. Пожалуйста, пришлите еще раз пример отчета и базу данных к нему.

Спасибо.

Cross-Tab. Highlighting. Expression. Не работает условие.

Добавлено: 15 апр 2010, 19:51
Anton Lozovskiy
Здравствуйте,

Мы немного изменили Ваш пример. Вы не внимательно посмотрели как работает пример из Demo, сделали почти правильно, но не до конца. Значение {qrMain.DOC_DATE} надо передавать в свойстве Tag компонента CrossTab1_Sum1. Соответственно условие немного изменилось. Т.к. у Вас в базе не было текущей даты, вместо "Today" мы использовали переменную. Обращайтесь, если появятся еще вопросы.

Спасибо.

Cross-Tab. Highlighting. Expression. Не работает условие.

Добавлено: 16 апр 2010, 06:08
Леонид
Сделал всё, как Вы сказали, всё равно не закрашивает ячейки.
Кроме того, не пойму, как работает это условие. Получается, свойство tag можно привести к необходимому типу данных и сравнить значение, т.е.
в момент прорисовки ячейки свойство tag перебирает все колонки DataTable поочереди, так?

Поставил условие в Expression: System.Convert.ToDateTime(tag).Date.CompareTo(Date_Test.Date) == 0, при этом переменной Date_Test присвоил значение '01.04.2009', для проверки, такое значение там есть (в xml базе).

Вы говорите, что у меня нет в базе значения Today. Это верно, но оно мне там и не нужно, т.к. в нашей базе время берётся с сервера, но иногда это не нужно, поэтому мы просто используем System.DateTime.Today либо встроенную переменную Today, что тоже самое, я полагаю.

Cross-Tab. Highlighting. Expression. Не работает условие.

Добавлено: 16 апр 2010, 08:57
Anton Lozovskiy
Здравствуйте,

Попробуйте написать Today.Date вместо Today. Т.к. в Today может быть задано еще и время(т.е. не равно 0:00:00), а тогда условие срабатывать не будет.

>>Кроме того, не пойму, как работает это условие. Получается, свойство tag можно привести к необходимому типу данных и сравнить значение, т.е.
в момент прорисовки ячейки свойство tag перебирает все колонки DataTable поочереди, так?
В свойстве Tag передается текущее значение указанного поля, на момент построения.

Спасибо.

Cross-Tab. Highlighting. Expression. Не работает условие.

Добавлено: 16 апр 2010, 09:10
Леонид
Попробуйте написать Today.Date вместо Today. Т.к. в Today может быть задано еще и время(т.е. не равно 0:00:00), а тогда условие срабатывать не будет.
Это очевидно, т.к. любая дата всегда содержит время, но я же сравниваю две одинаковые даты с временем 00:00:00.

Пробовал - не работает, ни так: System.Convert.ToDateTime(tag).Date.CompareTo(Today.Date) == 0, ни так System.Convert.ToDateTime(tag).Date.CompareTo(System.DateTime.Today.Date) == 0, ни даже так: System.Convert.ToDateTime(tag).Date.CompareTo(System.DateTime.Parse("01.04.2009").Date) == 0, 01.04.2009 - эта дата есть в xml-файле.

Проверил пару маразматических, но 100%-х кодов System.Convert.ToDateTime(tag).Date.ToShortDateString() == "01.04.2009", и tag == "01.04.2009 00:00:00", удивительно, но и они не дают результатов.

Не пойму, что ерунда.:tire:

Cross-Tab. Highlighting. Expression. Не работает условие.

Добавлено: 16 апр 2010, 09:30
Anton Lozovskiy
Здравствуйте,

Пришлите пожалуйста конечную версию вашего отчета, мы проверим у себя. Постараемся разобраться в чем проблема.

Спасибо.

Cross-Tab. Highlighting. Expression. Не работает условие.

Добавлено: 16 апр 2010, 09:32
Леонид
Конечная версия отчёта во вложении. В принципе, она не поменялась.

Только что попробовал System.DateTime.Parse(tag).Date.CompareTo(System.DateTime.Parse("01.04.2009 00:00:00")) == 0, тоже не хочет закрашивать. Очень странно.

Cross-Tab. Highlighting. Expression. Не работает условие.

Добавлено: 16 апр 2010, 10:01
Anton Lozovskiy
Здравствуйте,

1. У Вас не было задано свойство Tag у компонента CrossTab1_Sum1.
2. У Вас установлена старая версия продукта 2009.1.400. На последней версии эта проблема не наблюдает. Обновитесь пожалуйста до последней версии.

Мы немного изменили Ваш отчет. На последней версии он работает 100%.

Спасибо.

Cross-Tab. Highlighting. Expression. Не работает условие.

Добавлено: 16 апр 2010, 11:34
Леонид
Всё заработало. Ура! :biggrin:

Огромное спасибо!