Имя: Пароль:
1C
1С v8
Выбрать первые 1 выдает не первую запись
,
0 OnCheck
 
19.06.12
13:07
Здравствуйте.
Текст запроса
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
   ПодразделенияОрганизаций.Ссылка,
   ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации
ИЗ
   Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
ГДЕ
   ПодразделенияОрганизаций.Владелец = &Организация

УПОРЯДОЧИТЬ ПО
   ПодразделенияОрганизаций.Наименование ИЕРАРХИЯ

выдает не ту запись, которая стоит первой в результате запроса

ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ПодразделенияОрганизаций.Ссылка,
   ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации
ИЗ
   Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
ГДЕ
   ПодразделенияОрганизаций.Владелец = &Организация

УПОРЯДОЧИТЬ ПО
   ПодразделенияОрганизаций.Наименование ИЕРАРХИЯ
При чем одну и ту же. Не могу понять, с чем связано.
Помогите советом. Спасибо.
1 mikecool
 
19.06.12
13:07
субд?
2 mikecool
 
19.06.12
13:08
и вообще - а должен?
3 OnCheck
 
19.06.12
13:08
(1) SQL
4 OnCheck
 
19.06.12
13:09
(2) а почему нет?
5 Прохожий
 
19.06.12
13:09
Может иерархический справочник?
6 OnCheck
 
19.06.12
13:10
(5) ну да, иначе смысл упорядочивать по иерархии?
7 Андрюха
 
19.06.12
13:10
Попробуй сначала без ПЕРВЫЕ 1, выдаст что-нибудь вообще?
8 azernot
 
19.06.12
13:11
Дай угадаю, в результате запроса первый стоит родитель того самого элемента котрый выдаётся как первый?
9 OnCheck
 
19.06.12
13:11
(7) так в том то и дело что разные результаты выдает с первый и без первые!
10 Прохожий
 
19.06.12
13:11
Справочник упорядочивается по наименованию по всем записям, а иерархическая выборка первого может ограничиваться принадлежностью к группе в первой записи таблицы, наверно...
11 Ненавижу 1С
 
гуру
19.06.12
13:12
потому что ПЕРВЫЕ 1 выполняет СУБД и находит оное
а
УПОРЯДОЧИТЬ ПО
   ... ИЕРАРХИЯ делается уже позже и причем на сервере приложений
12 OnCheck
 
19.06.12
13:12
(8) нет, фактически уровень 1
13 Ненавижу 1С
 
гуру
19.06.12
13:12
(8) не угадал ))
14 OnCheck
 
19.06.12
13:13
(11) это типовой код в ЗУП, блин... как править?
15 Прохожий
 
19.06.12
13:13
Группа1
---Подргуппа1
-------"Булка"
"Арбуз"


Может выходит так:
Результат 1 - "Булка"
Результат 2 - "Арбуз"
16 acsent
 
19.06.12
13:13
а как можно по наименованию по иерархии упорядочить?
17 Прохожий
 
19.06.12
13:13
?
18 OnCheck
 
19.06.12
13:13
как отправить конкретный элемент в топ этой выборки?
19 OnCheck
 
19.06.12
13:14
(13) как отправить конкретный элемент в топ этой выборки?
20 palpetrovich
 
19.06.12
13:16
а так что дает?
ВЫБРАТЬ ПЕРВЫЕ 1
21 azernot
 
19.06.12
13:18
(19) Убрать к чёрту слово ИЕРАРХИЯ
22 OnCheck
 
19.06.12
13:21
(20) не то что дает в первой строчке без "первые 1"
(21) не хотелось бы, типовой код, там суть в том что поставщиком табличного поля является справочникСписок подразделения организаций. И при проходе по этому списку первым идет именно тот элемент который возвращает запрос без "первые 1".
23 OnCheck
 
19.06.12
13:22
+(22) именно так они идентифицирую первый элемент выборки и для него заводят корневой элемент - организация
24 OnCheck
 
19.06.12
13:24
(13) полагаю, что в запросе select top 1 на СУБД упорядочивается по ГУИД?
25 exchang
 
19.06.12
13:29
может сперва отсортировать и потом выбрать 1?
26 Jaap Vduul
 
19.06.12
13:30
ВЫБРАТЬ Ссылка, НазваниеОрганизации ИЗ
(ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
   ПодразделенияОрганизаций.Ссылка,
   ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации
ИЗ
   Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
ГДЕ
   ПодразделенияОрганизаций.Владелец = &Организация

УПОРЯДОЧИТЬ ПО
   ПодразделенияОрганизаций.Наименование)
УПОРЯДОЧИТЬ ПО Ссылка ИЕРАРХИЯ
27 mikecool
 
19.06.12
13:31
а так будет правильно?
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
   ПодразделенияОрганизаций.Ссылка,
   ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации
(ВЫБРАТЬ
   ПодразделенияОрганизаций.Ссылка,
   ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации
ИЗ

   Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
ГДЕ
   ПодразделенияОрганизаций.Владелец = &Организация) Как ПодразделенияОрганизаций

УПОРЯДОЧИТЬ ПО
   ПодразделенияОрганизаций.Наименование ИЕРАРХИЯ
28 andrewks
 
19.06.12
13:31
выбрать первые 1 из
(выбрать бла-бла-бла
упорядочить...)
29 mikecool
 
19.06.12
13:31
вернее так
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
   ПодразделенияОрганизаций.Ссылка,
   ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации
(ВЫБРАТЬ
   ПодразделенияОрганизаций.Ссылка,
   ПодразделенияОрганизаций.Владелец.Наименование КАК НазваниеОрганизации
ИЗ

   Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
ГДЕ
   ПодразделенияОрганизаций.Владелец = &Организация

УПОРЯДОЧИТЬ ПО
   ПодразделенияОрганизаций.Наименование ИЕРАРХИЯ) Как ПодразделенияОрганизаций
30 andrewks
 
19.06.12
13:31
(26) зачем второе упорядочивание?
31 Jaap Vduul
 
19.06.12
13:40
(30) Для иерархии
32 OnCheck
 
19.06.12
13:43
да это все понятно, хотел поправить не переписывая запрос. Думаю про проверить вариант с упорядочиванием по ГУИД.
33 thargon
 
19.06.12
13:44
(24) "полагаю, что в запросе select top 1 на СУБД упорядочивается по ГУИД?" - нет,  если порядок явно не указан - то порядок вывода не определен и может быть любым на усмотрение оптимизатора...
34 OnCheck
 
19.06.12
13:45
(33) Возможно, но возвращает один и тот же элемент справочника
35 andrewks
 
19.06.12
13:46
(32) да поймы ты, СУБД тебе не обязана вернуть 1-ю запись с учётом упорядочивания, оно уже потом выполняется. поэтому надо явно об этом попросить
36 andrewks
 
19.06.12
13:47
+(35) более того, в разных СУБД можно получить разные записи. и даже в одной СУБД теоретически можно получить разные записи
37 OnCheck
 
19.06.12
13:51
(36) но 1с ники же сделали так и работало, пока не поломал :-)!
38 thargon
 
19.06.12
13:52
(34) а порядок согласно стандарту все равно не определен :) В реальных случаях он будет в основном один и тот же, но случай когда оптимизатор решит, что теперь записи удобнее выгребать в другом порядке - возможен. Это может произойти из-за того, что статистика обновилась, индексы пересчитались, селективность индексов изменилась, апдейт на sql очередной поставили, вообще сервер sql поменяли на более другой...
39 andrewks
 
19.06.12
13:56
т.е.
1. выбрать первую запись, удовлетворяющую заданным условиям
2. группируем
3. упорядочиваем

вот здесь много букв:  http://www.gilev.ru/1c/81/index/optimquery.htm
40 Jaap Vduul
 
19.06.12
14:20
Вообще, если в упорядочивании указано ИЕРАРХИЯ, то сортировка на уровне СУБД выполняется сначала по ID родителя, затем по ID элемента, вне зависимости от того какое поле указано для сортировки в самом запросе.
41 OnCheck
 
20.06.12
07:23
вот такой запрос я вижу на скуле.
exec sp_executesql N'SELECT TOP
1
T1._IDRRef,

T2._Description,

T1._ParentIDRRef,

T1._Description

FROM _Reference94 T1 WITH(NOLOCK)

LEFT OUTER JOIN _Reference80 T2 WITH(NOLOCK)

ON T1._OwnerIDRRef = T2._IDRRef

WHERE (T1._OwnerIDRRef = P1)

ORDER BY (T1._ParentIDRRef), (T1._IDRRef)',N'P1 varbinary(16)',0x00000000000000000000000000000000

ORDER BY тут есть, упорядочивает он по ParentIDRRef, IDRRef. теперь задача как правильно поправить ID-шники
42 OnCheck
 
20.06.12
07:26
Уникальный идентификатор и есть IDRef?
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс