powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / сортировка TablePane
18 сообщений из 18, страница 1 из 1
сортировка TablePane
    #36688246
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В наличии: tablePane c колонкой ДАТА в формате (TOCHAR(dat,'dd/mm/yyyy'))
при нажатии на заголовок таблицы происходит сортировка таблицы по указанному столбцу, Но в случае сортировки по дате получается сортировка по стрингу, а хотелось бы по хорологу (integer)
кто нибудь переопредял сортировку ?
или как с этим бороться?
...
Рейтинг: 0 / 0
сортировка TablePane
    #36688398
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
сортировка TablePane
    #36689705
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007или как с этим бороться?
Ставим тип даты в определении свойства класса, тогда в SQL ничего переделывать не нужно...
Но в 2007 нет нашего формата ДД.ММ.ГГГГ...
А у тебя какой Кащей?
...
Рейтинг: 0 / 0
сортировка TablePane
    #36689717
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же еще используем свойство OnCreateResultSet у tablePane , а там уже можно фантазировать сколько угодно!
...
Рейтинг: 0 / 0
сортировка TablePane
    #36690853
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
servit,
спасибо, так и сделал (забыл кой чего от экспериментов удалить, фильтр работал в одну сторону)
krvsa ,
твое предложение хорошо с нулевого цикла
v2010
чтоб обновлять OnCreateResultSet нужно вызывать executeQuery()
а при нажатии на заголовок таблицы он не срабатывает повторно
это все при условии useSnapshot=1
...
Рейтинг: 0 / 0
сортировка TablePane
    #36691228
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007твое предложение хорошо с нулевого цикла
v2010
Не так уж и долго "пробежаться" поклассам и проставить нужный тип даты... Тем паче в 2010 нужный тип вроде есть.
А потом так же пробежаться по табличкам... Зато результат оправдает затраты.

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

не я не готов на рабочем проекте "пробежать" :)
...
Рейтинг: 0 / 0
сортировка TablePane
    #36691902
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ymka2007 , а на тестовых не так интересно...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
сортировка TablePane
    #37368306
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
сортировка TablePane
    #37368307
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cache for Windows (x86-32) 2010.1.1 (Build 503)
...
Рейтинг: 0 / 0
сортировка TablePane
    #37368311
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну и столбец вот так задаю:

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

Мне кажется, путаница возникает из-за того, какой конечный тип поля-даты Вы используете в запросе: %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
сортировка TablePane
    #37368612
Ymka2007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я думаю, что
если в свойстве типа дата указать формат
то потом ничего делать не надо, сортировка и отображение должны работать нормально

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

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

Правда бывают некоторые заморочки с рукописными фильтрами для tablePane
я в таком случае пишу свой OnCreateResultSet в котором можно все переиначить в нужном направлении ))
...
Рейтинг: 0 / 0
сортировка TablePane
    #37370122
Фотография Аленочка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
сортировка TablePane
    #37370264
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
=АленочкаПравильно отсортировался только первый столбец в первой таблице, там где "Дата в формате $Integer", остальные в разнобой.Проверил на версии 2010.1.0, результат совпадает с Вашим.
В версии 2011.1 сортировка правильно отображается и при %Date.

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


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