Имя: Пароль:
1C
1С v8
Выборка порциями
,
0 TVA_11
 
01.08.13
09:49
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 100
        |    Банки.Код КАК Код,
        |    Банки.Ссылка
        |ИЗ
        |    Справочник.Банки КАК Банки
        |ГДЕ
        |    Банки.Код > &Код
        |
        |УПОРЯДОЧИТЬ ПО
        |    Код";

    Запрос.Текст=СтрЗаменить(Запрос.Текст,"Банки11",Справочник);
    Запрос.УстановитьПараметр("Код", "0");

    Цк=Истина;
    Пока Цк Цикл
        Тб = Запрос.Выполнить().Выгрузить();
        Если Тб.Количество() > 0 Тогда
         Для каждого Эл из Тб Цикл
              // Что-то делаем
         КонецЦикла;
         Запрос.УстановитьПараметр("Код", Эл.Код);
        Иначе
         Цк=ложь;
        КонецЕсли;
    КонецЦикла;
1 Как страшно жить
 
01.08.13
09:50
круто
2 TVA_11
 
01.08.13
09:51
Однако это только идея, по коду отбор порциями не работает., так как там текст и c префиксами.
3 Mitriy
 
01.08.13
09:51
фигня...
4 butterbean
 
01.08.13
09:52
запрос в цикле — это не круто
5 TVA_11
 
01.08.13
09:52
В инете читал, что нужен отбор по индексу, но реализации не видел. Кроме того

желательно, чтоб в отбор попадали 100 отсортированных по всему справочнику, а не сортированные только в группе по 100.
6 TVA_11
 
01.08.13
09:54
butterbean

А как еще, все равно порциями надо брать информацию, если сам справочник очень велик, а он очень велик и выбрать все, значит повесить.
7 TVA_11
 
01.08.13
09:55
Короче по коду, отбор делать не выходит.
Надо бы по номеру по порядку, но его в справочнике нет.
8 TVA_11
 
01.08.13
09:56
Справочник.Банки11 КАК Банки    - так в запросе, чтобы потом вставить любой выбранный справочник.
9 TVA_11
 
01.08.13
13:32
А ведь идей у меня нет, как порциями справочник качать.
10 Как страшно жить
 
01.08.13
13:33
а зачем?
11 KishMish
 
01.08.13
13:37
(7)  может так можно использовать массив обработанных ссылок
МассивОБрабтанныхСсылок=Новый Массив;
В него вбивать все обработанное

ВЫБРАТЬ ПЕРВЫЕ 100
...
ГДЕ НЕ Ссылка В (&МассивОБрабтанныхСсылок)
12 Как страшно жить
 
01.08.13
13:39
(2) и что из того, что "текст и c префиксами"?
13 Hmster
 
01.08.13
13:44
а зачем именно порциями?
что именно он там может повесить?
14 Serginio1
 
01.08.13
13:48
(0) Это идее 100 лет в обед. Так работают разные DBGridы,
Вэб страницы итд
v8: запрос в цикле
15 TVA_11
 
01.08.13
13:54
счас посмотрю ссылку!, МассивОбработанныхСсылок - строго говоря не выход, если в справочнике миллион записей, можно сделать выборку тогда из Справочника одними ссылками. Но мы полагаем, что справочник очень большой и нас экстенсивный путь не устраивает.
16 TVA_11
 
01.08.13
13:55
Как страшно
       жить

Так за счет этого нельзя сравнить на больше/меньше.
17 samozvanec
 
01.08.13
13:58
(0) чет я не понял. с условием ГДЕ типа не вешает? он же сначала выберет весь справочник, потом наложит условие и тебе покажет. значит вешается не на выборке, а на выводе?
18 TVA_11
 
01.08.13
14:01
samozvanec
        В выборке у нас указано первые 100, вот если бы в справочнике был индекс, то можно было бы по нему делать выборку порциями.

        Но у нас, нет индекса, как бы его создать для справочника в запросе. Вроде нельзя.
19 Serginio1
 
01.08.13
14:07
(18) Сделай временную таблицу индексируй и выбирай из нё
20 samozvanec
 
01.08.13
14:08
(18) синий текст не увидел. как собираешься использовать индекс и что ты вообще подразумеваешь под словом индекс в этом контексте? доступа то нет к индексам
21 Maxus43
 
01.08.13
14:19
сортировать по ссылке не вариант? она входит в состав основного индекса
22 Maxus43
 
01.08.13
14:20
и вобще, фоновым заданием доставай. клиент не подвесится
23 TVA_11
 
01.08.13
14:24
Просто приведите пример, как сортировать по ссылке.

      Временная таблица не вариант, так проще делать выборку ссылок на весь справочник целиком, полагаем, что этого сделать нельзя.
24 zmaximka
 
01.08.13
14:24
Сортируй по ссылке и условие накладывай на
|ГДЕ
        |    Банки.Сыылка> &Ссылка
25 Maxus43
 
01.08.13
14:32
я не вижу как достигнестя "развисание" используя (0). Всё равно пока не прогонит целиком юзер будет курить в сторонке, + запрос будет не один
26 Reaper_1c
 
01.08.13
14:34
(6) Выборка чем не устроила?
27 TVA_11
 
01.08.13
14:37
Maxus43

Так ведь память будет выделена, под весь справочник целиком.
Что и обеспечит тормоза.
28 Maxus43
 
01.08.13
14:37
(27) 15 лет назад за память переживать надо, сейчас - это уже смешно...
29 samozvanec
 
01.08.13
14:38
попробовал сейчас выбрать все из справочника с 750000 элементов. за 8 минут результата не было, тупо повис(
30 Maxus43
 
01.08.13
14:38
и результат выборки - не значит что весь справочник там, там только указанные поля
31 Maxus43
 
01.08.13
14:39
(29) попробуй вытянуть только Ссылка
32 TVA_11
 
01.08.13
14:39
Reaper_1c

Это тоже самое, что выбрать весь справочник в массив ссылок, сразу и целиком. Что даже проще.
Чем формировать таблицу и постепенно заполнять ее до размера всего справочника.
33 H A D G E H O G s
 
01.08.13
14:39
Все бред, кроме (24)
34 TVA_11
 
01.08.13
14:40
Maxus43
Согласен, но по факту тормоза бывают из-за памяти, при наличии свободной памяти.
35 H A D G E H O G s
 
01.08.13
14:40
(32) Он имеет ввиду
СправочникВыборка

Но это еще большая глупость.
36 TVA_11
 
01.08.13
14:41
samozvanec

Говорит верно, проблемы возникают при больших объемах.
37 Defender aka LINN
 
01.08.13
14:41
Гени(т)ально.
Что мешает использовать ссылку вместо кода?
38 GROOVY
 
01.08.13
14:41
(35) А между тем СправочникВыборка получает данные порционно по 25 строк... :)
39 TVA_11
 
01.08.13
14:41
H A D G E H O G

не думал, что это возможно. Счас проверю! )
40 samozvanec
 
01.08.13
14:46
(31) только ссылку и вытягивал, все - имелось в виду все элементы справочника без ограничений
41 H A D G E H O G s
 
01.08.13
14:46
(38) Ну и.. И делает ПолучитьОбъект() по факту то.
И всего 25 строк.

И принцип у него тот же, что и  в (24)
42 Serginio1
 
01.08.13
15:10
(23) Зависит от существующих индексов. Если есть индекс по  упорядочиванию выборки то все нормально и будет использоваться индекс, иначе че же практически ты каждый раз внутри будет создаваться временную таблицу сортироваться и выбираться нужные записи. А так ты создал внутреннюю таблицу, отсортировал её и выбирай порциями
v8: Подзапросы с Выбрать Первые