Имя: Пароль:
1C
1С v8
Сортировка результата запроса в соответствии с определенным массивом
0 PiotrLoginov
 
25.04.13
13:34
Здравствуйте всем. Может кто поделиться хитростью, как отсортировать результат запроса в соответствии с порядком элементов в некотором массиве, собственно использовавшемся для отбора в запросе. Вот код:

       ЗапросШаблона.Текст = "ВЫБРАТЬ
                             |    Номенклатура.Ссылка КАК Номенклатура
                             |ИЗ
                             |    Справочник.Номенклатура КАК Номенклатура
                             |ГДЕ
                             |    Номенклатура.Ссылка В(&КШаблону)
                             |    И (Номенклатура.Родитель В (&МассивОтбора)
                             | ИЛИ Номенклатура.Ссылка В (&Группы))"

КШаблону и МассивОтбора - это массивы со ссылками на элементы и группы номенклатуры. Надо чтобы в итоге строки в результате запроса следовали в том же порядке, как в МассивОтбора. Заранее огромное спасибо за подсказку.
1 PiotrLoginov
 
25.04.13
13:35
*поделится
2 RomaH
 
naïve
25.04.13
13:38
массив в ТЗ
ТЗ во временную таблицу
3 PiotrLoginov
 
25.04.13
14:12
попробовал (Группы - массив, по которому надо сортировать):

       ЗапросШаблона.Текст = "ВЫБРАТЬ
                             |    Номенклатура.Ссылка
                             |ПОМЕСТИТЬ ВТ_Отбор
                             |ИЗ
                             |    Справочник.Номенклатура КАК Номенклатура
                             |ГДЕ
                             |    (Номенклатура.Родитель В (&Группы)
                             |            ИЛИ Номенклатура.Ссылка В (&Группы))
                             |;
                             |
                             |////////////////////////////////////////////////////////////////////////////////
                             |ВЫБРАТЬ
                             |    ВТ_Отбор.Ссылка КАК Номенклатура
                             |ИЗ
                             |    ВТ_Отбор КАК ВТ_Отбор
                             |ГДЕ
                             |    ВТ_Отбор.Ссылка В(&КШаблону)";

Не помогло :(
4 PiotrLoginov
 
25.04.13
14:20
Пробовал и наоборот - сначала ВТ на основании КШаблону, а потом из нее выбирать строки, фильтруя по Группы. Один фиг, порядок перемешивается.

В обшем,задача есть: имеем два массива (Группы и КШаблону), надо выбрать их пересечение так, чтобы сортировка результата основывалась на сортировке Группы. Задача осложняется тем, что Группы выбирают не только номенклатуру, где "Ссылка В &Группы", но и где "Ссылка.Родитель В &Группы" .

Попробую помучать консоль запросов. Упрощу задачу для тестовых целей... Раньше с такой сортировкой не сталкивался, надо осваивать.
5 PiotrLoginov
 
25.04.13
14:59
Так. Выяснилось, что если, имея определенным образом отсортированный массив со ссылками на группы и элементы номенклатуры(ГруппаКастрюль, Сковорода1, ГруппаЧайников, Сковорода2), составить более простой запрос

       ЗапросШаблона.Текст = "ВЫБРАТЬ
                             |    Номенклатура.Ссылка
                             |ИЗ
                             |    Справочник.Номенклатура КАК Номенклатура
                             |ГДЕ
                             |    Номенклатура.Родитель В (&Группы)";


... то мы получим ТЗ со ссылками на разные кастрюли и чейники в соответствии с порядком в Группы, но без сковород. А если написать

       ЗапросШаблона.Текст = "ВЫБРАТЬ
                             |    Номенклатура.Ссылка
                             |ИЗ
                             |    Справочник.Номенклатура КАК Номенклатура
                             |ГДЕ
                             |    (Номенклатура.Родитель В (&Группы)
                             | ИЛИ Номенклатура.Ссылка В (&Группы))";

... то получим ТЗ почему-то имеющую порядок лиь отдаленно напоминающий сортировку в Группы.

Если есть кто-то, кто хорошо разбирается в сортировке результатов запросов, откликнитесь, плиз.
6 PiotrLoginov
 
25.04.13
15:44
Закончил возню. Перебрал обычным циклом Группы и сформировал из них новый массив, где каждый родитель стал списком своих дочерних элементов. Получившийся массив использовал для создания ВТ. Тема закрыта.