Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / сортировка TablePane / 18 сообщений из 18, страница 1 из 1
15.06.2010, 17:13
    #36688246
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
В наличии: tablePane c колонкой ДАТА в формате (TOCHAR(dat,'dd/mm/yyyy'))
при нажатии на заголовок таблицы происходит сортировка таблицы по указанному столбцу, Но в случае сортировки по дате получается сортировка по стрингу, а хотелось бы по хорологу (integer)
кто нибудь переопредял сортировку ?
или как с этим бороться?
...
Рейтинг: 0 / 0
15.06.2010, 18:22
    #36688398
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
Ymka2007,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ]
{
<page xmlns="http://www.intersystems.com/zen">
  <tablePane sql="select id,current_date-(id*30) d from del.d where id<10"
  useSnapshot="true"
   >
     <column colName="id" header="ID"/>
     <column colName="d" header="Дата" OnDrawCell="DrawDate"/>
   </tablePane>
</page>
}

Method DrawDate(pTable As %ZEN.Component.tablePane, pName As %String, pSeed As %String) As %Status 
{
  write $system.SQL.TOCHAR(%query(pName),"DD/MM/YYYY")
  q $$$OK
}
...
Рейтинг: 0 / 0
16.06.2010, 12:35
    #36689705
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
Ymka2007или как с этим бороться?
Ставим тип даты в определении свойства класса, тогда в SQL ничего переделывать не нужно...
Но в 2007 нет нашего формата ДД.ММ.ГГГГ...
А у тебя какой Кащей?
...
Рейтинг: 0 / 0
16.06.2010, 12:40
    #36689717
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
Так же еще используем свойство OnCreateResultSet у tablePane , а там уже можно фантазировать сколько угодно!
...
Рейтинг: 0 / 0
16.06.2010, 18:05
    #36690853
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
servit,
спасибо, так и сделал (забыл кой чего от экспериментов удалить, фильтр работал в одну сторону)
krvsa ,
твое предложение хорошо с нулевого цикла
v2010
чтоб обновлять OnCreateResultSet нужно вызывать executeQuery()
а при нажатии на заголовок таблицы он не срабатывает повторно
это все при условии useSnapshot=1
...
Рейтинг: 0 / 0
16.06.2010, 22:04
    #36691228
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
Ymka2007твое предложение хорошо с нулевого цикла
v2010
Не так уж и долго "пробежаться" поклассам и проставить нужный тип даты... Тем паче в 2010 нужный тип вроде есть.
А потом так же пробежаться по табличкам... Зато результат оправдает затраты.

Я аналогичными "пробежками" занимался не раз... Т.ч. знаю про что пишу.
...
Рейтинг: 0 / 0
17.06.2010, 11:34
    #36691846
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
krvsa,

не я не готов на рабочем проекте "пробежать" :)
...
Рейтинг: 0 / 0
17.06.2010, 11:52
    #36691902
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
Ymka2007 , а на тестовых не так интересно...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
27.07.2011, 07:17
    #37368306
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
servit,

Тоже решила воспользоваться вашим примером, та же проблема, что и у Ymka2007.
Есть готовый запрос, который выполняется в портале в режимах logical и display и сортирует по дате правильно.

Код: plaintext
1.
2.
SELECT [Хранимая процедура которая вовзращает значение типа дата] as colFSDate
FROM [Таблица]
ORDER BY [Хранимая процедура которая вовзращает значение типа дата] ASC

Тот же самый текст только без ORDER BY я помещаю в tablePane и пытаюсь сортировать значения по клику на заголовок таблицы (useSnapshot="true"), при этом данные похоже сортируются как строки, а не как даты...

Попробовала ваш пример

Код: plaintext
1.
2.
3.
4.
Method DrawDate(pTable As %ZEN.Component.tablePane, pName As %String, pSeed As %String) As %Status 
{
  write $system.SQL.TOCHAR(%query(pName),"DD/MM/YYYY")
  q $$$OK
}

при отрисовке ячейки таблицы ошибка <ZCHAR>IllegalValuePassedToTOCHAR^%qarfunc

но мы используем свой тип даты ДД.ММ.ГГ

так тоже пробовала, ошибка та же

Код: plaintext
1.
2.
3.
4.
Method DrawDate(pTable As %ZEN.Component.tablePane, pName As %String, pSeed As %String) As %Status 
{
  write $system.SQL.TOCHAR(%query(pName),"DD.MM.YY")
  q $$$OK
}

видимо я что-то неправильно делаю,
как же получить нужную мне сортировку по клику на название столбца?
...
Рейтинг: 0 / 0
27.07.2011, 07:17
    #37368307
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
Cache for Windows (x86-32) 2010.1.1 (Build 503)
...
Рейтинг: 0 / 0
27.07.2011, 07:25
    #37368311
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
ну и столбец вот так задаю:

Код: plaintext
<column header="Название" colName="colFSDate" colExpression="[Хранимая процедура которая вовзращает значение типа дата]" OnDrawCell="DrawDate" />
...
Рейтинг: 0 / 0
27.07.2011, 09:45
    #37368404
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
Аленочка ,

Мне кажется, путаница возникает из-за того, какой конечный тип поля-даты Вы используете в запросе: %Integer, %Date или %String

Проверьте в Портале при Logical/Display режимах следующий запрос:

select %external({d '2011-06-27'}) d_str,{d '2011-06-27'} d_date,%internal({d '2011-06-27'}) d_int
ПримерClass del.test Extends %ZEN.Component.page
{

/// Этот блок Style содержит определение CSS-стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

XData Contents [ XMLNamespace = " http://www.intersystems.com/zen"  ]
{
<page xmlns=" http://www.intersystems.com/zen"  title="">
  <tablePane
    queryClass="del.test"
    queryName="Test"
    useSnapshot="true"
  >
  <column colName="ID" header="ID"/>
  <column colName="Дата1" header="Дата в формате $Integer" OnDrawCell="DrawDate"/>
  <column colName="Дата2" header="Дата в формате $Date"/>
  <column colName="Дата3" header="Дата в формате $String"/>
  </tablePane>
  <tablePane
    sql="select 1 ID,del.GetDate(1) Дата1,to_char({d '2011-06-27'},'DD.MM.YY') Дата2 
    union select 2,del.GetDate(2),to_char({d '2011-05-28'},'DD.MM.YY')
    union select 3,del.GetDate(3),to_char({d '2011-04-28'},'DD.MM.YY')"
    useSnapshot="true"
  >
  <column colName="ID" header="ID"/>
  <column colName="Дата1" header="Дата"/>
  <column colName="Дата2" header="Дата как строка"/>
  </tablePane>
</page>
}

Method DrawDate(
  pTable As %ZEN.Component.tablePane,
  pName As %String,
  pSeed As %String) As %Status
{
  write $system.SQL.TOCHAR(%query(pName),"DD.MM.YY")
  q $$$OK
}

Query Test() As %SQLQuery(ROWSPEC = "ID:%Integer,Дата1:%Integer,Дата2:%Date,Дата3:%String") [ SqlProc ]
{
  select 1,%internal({d '2011-06-27'}),{d '2011-06-27'},%external({d '2011-06-27'})
  union select 2,%internal({d '2011-05-28'}),{d '2011-05-28'},%external({d '2011-05-28'})
  union select 3,%internal({d '2011-04-28'}),{d '2011-04-28'},%external({d '2011-04-28'})
}

ClassMethod GetDate(ID As %String) As %Date [ SqlName = GetDate, SqlProc ]
{
  q $H-(ID*30)
}

}
Сравните сортировку полей, представленных в разных форматах.

Если всё-таки не получится самостоятельно разобраться, то я жду от Вас законченного примера по аналогии с моим.

PS: пример тестировал на версии 2011.1RC1, но думаю, не должно быть различий с версией 2010.1.1
Опциональный FROM в Вашей версии поддерживается .
...
Рейтинг: 0 / 0
27.07.2011, 11:50
    #37368612
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
я думаю, что
если в свойстве типа дата указать формат
то потом ничего делать не надо, сортировка и отображение должны работать нормально

соответственно если у вас хранимая процедура то ее можно вынести в вычисляемое свойство, которому потом и задать формат отображения
...
Рейтинг: 0 / 0
27.07.2011, 11:54
    #37368619
Ymka2007
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
w $tr($ZD(+$h,4,,2),"/",".")
либо сделать первоначальную настройку локали на разделитель в дате

OnDrawCell - уже не нужен будет

Правда бывают некоторые заморочки с рукописными фильтрами для tablePane
я в таком случае пишу свой OnCreateResultSet в котором можно все переиначить в нужном направлении ))
...
Рейтинг: 0 / 0
28.07.2011, 04:32
    #37370122
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
servit,

я взяла ваш пример и добавила немного другие даты (кстати каким SRC пользуетесь..?)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
 Class  MyApp.test  Extends  %ZEN.Component.page
{

/// Этот блок Style содержит определение CSS стиля страницы.
XData Style
{
<style type="text/css">
</style>
}

/// Этот XML блок описывает содержимое этой страницы.
XData Contents [XMLNamespace="http://www.intersystems.com/zen"]
{
<page xmlns="http://www.intersystems.com/zen" title="">
  <tablePane
    queryClass="MyApp.test"
    queryName="Test"
    useSnapshot="true"
  >
  <column colName="ID" header="ID"/>
  <column colName="Дата1" header="Дата в формате $Integer" OnDrawCell="DrawDate"/>
  <column colName="Дата2" header="Дата в формате $Date"/>
  <column colName="Дата3" header="Дата в формате $String"/>
  </tablePane>
  <tablePane
    sql="select 1 ID, MyApp.test_GetDate(1) Дата1,to_char({d '2011-01-14'},'DD.MM.YY') Дата2 
    union select 2,MyApp.test_GetDate(2),to_char({d '2011-01-18'},'DD.MM.YY')
    union select 3,MyApp.test_GetDate(3),to_char({d '2010-08-10'},'DD.MM.YY')
    union select 4,MyApp.test_GetDate(4),to_char({d '2010-08-14'},'DD.MM.YY')
    union select 5,MyApp.test_GetDate(5),to_char({d '2011-08-14'},'DD.MM.YY')"
    useSnapshot="true"
  >
  <column colName="ID" header="ID"/>
  <column colName="Дата1" header="Дата"/>
  <column colName="Дата2" header="Дата как строка"/>
  </tablePane>
</page>
}

Method DrawDate(
  pTable As %ZEN.Component.tablePane,
  pName As %String,
  pSeed As %String) As %Status
{
  write $system.SQL.TOCHAR(%query(pName),"DD.MM.YY")
  q $$$OK
}

Query Test() As %SQLQuery(ROWSPEC = "ID:%Integer,Дата1:%Integer,Дата2:%Date,Дата3:%String") [ SqlProc ]
{
  select  1 ,%internal({d '2011-01-14'}),{d '2011-01-14'},%external({d '2011-01-14'})
  union select  2 ,%internal({d '2011-01-18'}),{d '2011-01-18'},%external({d '2011-01-18'})
  union select  3 ,%internal({d '2010-08-10'}),{d '2010-08-10'},%external({d '2010-08-10'})
  union select  4 ,%internal({d '2010-08-14'}),{d '2010-08-14'},%external({d '2010-08-14'})
  union select  5 ,%internal({d '2011-08-14'}),{d '2011-08-14'},%external({d '2011-08-14'})
}

ClassMethod GetDate(ID As %String) As %Date [ SqlProc ]
{
  q:ID= 1  $ZDATEH("01.14.2011", 5 )
  q:ID= 2  $ZDATEH("01.18.2011", 5 )
  q:ID= 3  $ZDATEH("08.10.2010", 5 )
  q:ID= 4  $ZDATEH("08.14.2010", 5 )
  q:ID= 5  $ZDATEH("08.14.2011", 5 )
  
}

}

Правильно отсортировался только первый столбец в первой таблице, там где "Дата в формате $Integer", остальные в разнобой.

Я свою задачу решила, спасибо, изменила тип данных которая возвращает моя хранимка на %Integer и втавила ваш обработчик:

Код: plaintext
1.
2.
3.
4.
Method DrawDate(pTable As %ZEN.Component.tablePane,pName As %String,pSeed As %String) As %Status
{
      write $system.SQL.TOCHAR(%query(pName),"DD.MM.YY")
      quit $$$OK
}

Всё заработало просто замечательно.
...
Рейтинг: 0 / 0
28.07.2011, 09:39
    #37370264
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
=АленочкаПравильно отсортировался только первый столбец в первой таблице, там где "Дата в формате $Integer", остальные в разнобой.Проверил на версии 2010.1.0, результат совпадает с Вашим.
В версии 2011.1 сортировка правильно отображается и при %Date.

=Аленочка(кстати каким SRC пользуетесь..?)Возьмите моё сообщение, нажмите на "Цитировать" и увидите, что никаким...
Кстати, уже была похожая тема.
...
Рейтинг: 0 / 0
28.07.2011, 16:24
    #37371244
Аленочка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
можно конечно обновится и до 2011, но кто даст гарантии что тогда не вылезут новые глюки..
...
Рейтинг: 0 / 0
28.07.2011, 16:38
    #37371286
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка TablePane
Аленочкаможно конечно обновится и до 2011, но кто даст гарантии что тогда не вылезут новые глюки..Для этого заранее и выпускаются Field Test, Release Candidate .
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / сортировка TablePane / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]