Опять эта сортировка
Модераторы: m0p3e, edward_K, Модераторы
Опять эта сортировка
Люди добрые, пацкажите
Как мовно отсортировать таблицу TMPSaldo3 так, чтоб при Loop'е автоматом выводилось упорядочено по KatPodr.Name, и по TMPSaldo3.cParty?
Как мовно отсортировать таблицу TMPSaldo3 так, чтоб при Loop'е автоматом выводилось упорядочено по KatPodr.Name, и по TMPSaldo3.cParty?
Viva la resistans
Maverick
Доброе время суток!
Да, в результате таблица должна быть упорядочена во-первых по подразделениям, а внутри подразделений - по партиям. Я уже вывернул это через дополнительные цикл по подразделениям и партиям, но хотелось бы уточнить, как это можно сделать проще. С индексами никак толком разобраться не могу.
Доброе время суток!
Да, в результате таблица должна быть упорядочена во-первых по подразделениям, а внутри подразделений - по партиям. Я уже вывернул это через дополнительные цикл по подразделениям и партиям, но хотелось бы уточнить, как это можно сделать проще. С индексами никак толком разобраться не могу.
Viva la resistans
-
- Абориген
- Сообщения: 943
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: External Developer
- Контактная информация:
Первоначально порядок сортировки в таблицах определяется порядком их подцепки в условии Where главной логической таблицы (интерфейса или отчета с SQL-таблицей). Если же порядок неоднозначный (т.е. подцепка осуществляется по N полям, задающих часть индекса, т.е. N сегментов из M(N<M), которые присутствуют в нескольких индексах), то таблица будет индексирована по первому индексу, описанному в словаре, и его N сегментов совпадают с порядком подцепки. Чтобы явно указать индекс в этом случае, после имени физической таблицы в секции FROM в круглых скобках задают имя индекса: MyTable (MyTable01). Аналогично поступают и в том случае, когда на таблицу не наложено никаких ограничений в WHERE.
Пример1:
В данном случае т.к. KatSopr не ограничена в логической таблице, то она будет индексирована по первому индексу словаря - т.е. по NRec (по индексу KatSopr01),по Nrec же будут индексированы таблицы KatOrg, KatMC и KatUsl. Но их индекс уже будет определяться тем, что в подцепке первым условием подцепки для них используется NRec, а это есть первые сегменты соответствующих индексов по Nrec (KatOrg01, KatMC01 и KatUsl01 соответственно).
Таблица же SpSopr будет индексирована по одному из индексов, первым сегментом которых является поле cSopr. Это индексы SpSopr03, SpSopr05, SpSopr06, SpSopr08 и т.д. По умолчанию система из этих индексов выбирает первый, который описан в словаре - это индекс SpSopr03, т.о. сортировка таблицы SpSopr будет осуществляться по полям cSopr+Npp.
Пример2:
Данная логическая таблица ничем не отличается от предыдущей, за исключением того, что теперь таблица SpSpor будет отсортирована по полям cSopr+cMcUsl+Npp, т.е. по индексу SpSopr11 (vs его описали в круглых скобках после имени таблицы).
Однако необходимо помнить, что явное указание индекса для таблицы и условие ее подцепки в WHERE должны быть взаимно корректными (т.е. в вышеприаедленных примерах нельзя явно задавать индекс, первым сегментом которого является поле, отличное от cSopr). В этом случае система скомпилирует все, но при инициализации данной лог.таблицы (в интерфейсе, отчете) пользователь получит сообщение об ошибке конфликта используемого индекса и условий ограничения на таблицу.
Пример1:
Код: Выделить всё
Create View
As Select *
From
KatSopr,
SpSopr,
KatOrg,
KatMC,
KatUsl
Where
((
Katsopr.NRec == SpSopr.cSopr And
KatSopr.cOrg == KatOrg.NRec And
SpSopr.cMcUsl == KatMC.NRec And
SpSopr.cMcUsl == KatUsl.NRec
));
Таблица же SpSopr будет индексирована по одному из индексов, первым сегментом которых является поле cSopr. Это индексы SpSopr03, SpSopr05, SpSopr06, SpSopr08 и т.д. По умолчанию система из этих индексов выбирает первый, который описан в словаре - это индекс SpSopr03, т.о. сортировка таблицы SpSopr будет осуществляться по полям cSopr+Npp.
Пример2:
Код: Выделить всё
Create View
As Select *
From
KatSopr,
SpSopr (SpSopr11),
KatOrg,
KatMC,
KatUsl
Where
((
Katsopr.NRec == SpSopr.cSopr And
KatSopr.cOrg == KatOrg.NRec And
SpSopr.cMcUsl == KatMC.NRec And
SpSopr.cMcUsl == KatUsl.NRec
));
Однако необходимо помнить, что явное указание индекса для таблицы и условие ее подцепки в WHERE должны быть взаимно корректными (т.е. в вышеприаедленных примерах нельзя явно задавать индекс, первым сегментом которого является поле, отличное от cSopr). В этом случае система скомпилирует все, но при инициализации данной лог.таблицы (в интерфейсе, отчете) пользователь получит сообщение об ошибке конфликта используемого индекса и условий ограничения на таблицу.
-
- Абориген
- Сообщения: 943
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: External Developer
- Контактная информация:
Индексы явно можно задавать не только непосредственно в описании логической таблицы, но и уже в самом алгоритме обхода того или иного узла - в ф-ях GetFirst - GetNext - GetPrev - GetLast и в цикле _Loop
Пример 3
Пример 4
Пример 3
Код: Выделить всё
//цикл по таблице с типом документа tDoc и годом выписки y
Var tdoc, y : word;
...
If GetFirst BaseDoc Where (( tDoc == BaseDoc.vidDoc And y == BaseDoc )) = tsOk
Do
{
..
}
While (GetNext BaseDoc Where (( tDoc == BaseDoc.vidDoc And y == BaseDoc )) = tsOk);
Код: Выделить всё
//встать на последний имеющийся архив для указанного ОС
var cOs : comp;
If GetLast ArcIznos (ArcIznos04) Where ((cOs == ArcIznos.cKatos)) = tsOk then
{
..
};