Имя: Пароль:
1C
1С v8
Упорядочить результат запроса по ТЗ?
,
0 user1114234
 
22.04.19
11:12
Добрый день. Имею запрос номенклатуры и параметр в виде таблицы значений с кодами номенклатуры.
Нужно чтобы номенклатуры выдавались в том же порядке, что и соответствующие им коды в ТЗ, но запрос выполняется в разнобой. Куда копать?
    "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Номенклатура
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |ГДЕ
    |    Номенклатура.Код В(&ТЗКодов)"
    ;
    Запрос.УстановитьПараметр("ТЗКодов", ТЗ);
    Выгрузка = Запрос.Выполнить().Выгрузить();
1 VladZ
 
22.04.19
11:14
(0) Копать в сторону УПОРЯДОЧИТЬ ПО
2 ДенисЧ
 
22.04.19
11:22
Поместить тз в вт, потом соединить и сортровать по полю тз, а не спроавнчика
3 user1114234
 
22.04.19
11:23
(1) Не понимаю. Нельзя же упорядочить по параметру. И мне не нужны возрастание/убывание/иерархия.
4 user1114234
 
22.04.19
11:23
(2) Спасибо, попробую
5 Chameleon1980
 
22.04.19
11:39
возможно придется тебе в тз завести доп. колонку
которую пронумеровать по текущему положению кодов (если при их сортировке образуется другой порядок)
потом тз (именно таблицу) в запрос во ВТ.
и так далее
6 user1114234
 
23.04.19
12:59
Оставлю для потомков. Пришлось немного помучиться с тем, что тз должна быть типизирована, а потом в запросе также выражать поле как строку с 11 символами (как у кода). Ну и кто ж знал, что выгрузить колонку нельзя без добавления строк...
    ТЗ = Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Код", Новый ОписаниеТипов("Строка"));
    Массив = ТЗИзЕксель.ВыгрузитьКолонку("Код");
    Счётчик = 0;
    Пока Счётчик <= Массив.Количество() Цикл
         ТЗ.Добавить();
         Счётчик = Счётчик + 1;
         КонецЦикла;
    ТЗ.ЗагрузитьКолонку(Массив, "Код");
    Запрос = Новый Запрос;
    Запрос.Текст =     
    "ВЫБРАТЬ
    |    ТЗКодов.Код
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗКодов КАК ТЗКодов
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Номенклатура,
    |    ВЫРАЗИТЬ(ТЗ.Код КАК СТРОКА(11)) КАК Код
    |ИЗ
    |    ТЗ КАК ТЗ
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
    |        ПО ((ВЫРАЗИТЬ(ТЗ.Код КАК СТРОКА(11))) = Номенклатура.Код)"
    ;

    Запрос.УстановитьПараметр("ТЗКодов", ТЗ);
    Выгрузка = Запрос.Выполнить().Выгрузить();
7 VladZ
 
23.04.19
13:04
(6) А где УПОРЯДОЧИТЬ ПО?
8 user1114234
 
23.04.19
13:07
(7) И так прокатило, слава Ситису.
9 Йохохо
 
23.04.19
13:10
(8) оно однажды вроде сломается, как Счётчик подрастет
10 user1114234
 
23.04.19
14:38
(9) Хорошее замечание. Выгрузка всего один раз производится, но учту.
11 user1114234
 
23.04.19
14:40
(10) А нет, всё в порядке. Счётчик на ноль сбрасывается каждый раз при входе в функцию.
12 Йохохо
 
23.04.19
14:46
(11) ты не понял, что что у тебя порядок после соединения такой, какой тебе нужен - это не гарантировано с таким кодом. Сейчас прокатило, потом само сломается.
13 Йохохо
 
23.04.19
14:47
без упорядочить выборка не гарантирует тебе порядок
14 НЕА123
 
23.04.19
15:07
а я не понимаю, почему (1) недостаточно.
15 Вафель
 
23.04.19
15:10
сейчас можно номер строки получить при загрузке тз во временную автоматом
16 Йохохо
 
23.04.19
15:19
(14) порядок у него номер строки из экселя, нуятакпонял
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший