|
Как выбрать запросе вторые x элементов.? | ☑ | ||
---|---|---|---|---|
0
Antizdoba
22.05.12
✎
17:08
|
Добрый день. Волнует такой вопрос. Как выбрать в запрос вторые, третьи ... x элементов.Например мне нужно разбить выборку из 15000 элементов на 3 части, чтоб в каждой транзакции обрабатывать по 5000 элементов. Как в запросе выбрать первые 5000 понятно. Как выбрать следующие 5000?
|
|||
1
Maxus43
22.05.12
✎
17:09
|
>>чтоб в каждой транзакции обрабатывать по 5000
что мешает? в таких случаях счетчик делают, и как 5 тыщ достигнет - фиксируем транзакцию, сбрасываем счетчик и начинаем новую |
|||
2
andrewks
22.05.12
✎
17:10
|
выбрать 15 тыщ, и счётчик при обходе, не?
|
|||
3
Antizdoba
22.05.12
✎
17:11
|
В таком случае запрос сделает выборку по всем элементам и на время его выполнения заблокирует таблицы. Зачем мне выбирать вторые 5000, если при обработке первых 5000 может произойти ошибка.
|
|||
4
andrewks
22.05.12
✎
17:12
|
а выборка для изменения, что-ли?
|
|||
5
Rovan
гуру
22.05.12
✎
17:13
|
(0) очень просто
1. получаешь первые х элементов 2. обрабатываешь их 3. делаешь следующий запрос с условием ....ГДЕ НЕ Ссылка В (&МассивОбработанных) |
|||
6
Antizdoba
22.05.12
✎
17:15
|
(5) На последних шагах МассивОбработанных будет очень большой, не будет ли такой запрос выполнятся дольше, чем просто выбрать все.
|
|||
7
Maxus43
22.05.12
✎
17:15
|
(5) легко то легко, но тормозно это
|
|||
8
Maxus43
22.05.12
✎
17:15
|
(6) в запросе ДЛЯ ИЗМЕНЕНИЯ делаеш?
|
|||
9
Fragster
гуру
22.05.12
✎
17:16
|
(6) но так работают списки в 1ске. это я профайлером смотрел
|
|||
10
МишКа
22.05.12
✎
17:19
|
Вторые:
ВЫБРАТЬ ПЕРВЫЕ 5000 Ссылка ИЗ <> ГДЕ НЕ (Ссылка В (ВЫБРАТЬ ПЕРВЫЕ 5000 Ссылка ИЗ <>)) |
|||
11
Antizdoba
22.05.12
✎
17:19
|
(8) Получаю данные для выгрузки в другую базу
|
|||
12
andrewks
22.05.12
✎
17:19
|
(10) незачёт
|
|||
13
sivalor
22.05.12
✎
17:20
|
(0) Разделяемая блокировка ставится только если запрос выполняется в транзакции, вложенных транзакций 1С не поддерживает.
|
|||
14
Fragster
гуру
22.05.12
✎
17:20
|
(10) только правильно отсортировать надо еще
|
|||
15
Fragster
гуру
22.05.12
✎
17:20
|
(13) бугагага
|
|||
16
sivalor
22.05.12
✎
17:21
|
(15) ?
|
|||
17
Maxus43
22.05.12
✎
17:21
|
(10) а потом третие и четвёртые понадобится... не красиво
|
|||
18
МишКа
22.05.12
✎
17:22
|
(17) Третьи и четвертые: очевидны.
|
|||
19
Maxus43
22.05.12
✎
17:23
|
(18) очевидны, я говорю что не красиво...
|
|||
20
Fragster
гуру
22.05.12
✎
17:24
|
(16) поддерживает
|
|||
21
Fragster
гуру
22.05.12
✎
17:24
|
косяк с ПЕРВЫЕ, что оно параметр не поддерживает
|
|||
22
andrewks
22.05.12
✎
17:24
|
(18) вот что совсем неочевидно, так это то, что 5001-й элемент сейчас будет 5001-м элементом через 3 секунды
|
|||
23
sivalor
22.05.12
✎
17:25
|
(20) Давно ли?
|
|||
24
Fragster
гуру
22.05.12
✎
17:25
|
(23) для 1с > 7.7
|
|||
25
andrewks
22.05.12
✎
17:26
|
(20) что в твоём понимании "поддерживает"?
|
|||
26
Murzz
22.05.12
✎
17:28
|
для вторых 5000 выбрать первые 10000, отсортировать их в обратном порядке и из этих 10000 выбрать первые 5000.
Но блин лучше по счсетчику всю выборку обрабатывай. через попу все это |
|||
27
andrewks
22.05.12
✎
17:28
|
(20) даже не так: что в твоём понимании "вложенная транзакция"?
|
|||
28
sivalor
22.05.12
✎
17:28
|
(24) Отмена вложенной транзакции приводит к отмене всех вышестоящих, в 1С только при открытии вложенной транзакции лишь увеличивается счетчик транзакций.
|
|||
29
Maxus43
22.05.12
✎
17:28
|
(24)Предложение ДЛЯ ИЗМЕНЕНИЯ предназначено для указания необходимости блокировки считываемых в транзакции данных.
Блокировка снимается после завершения транзакции. я хз что чего поддерживает, но для ИЗМЕНЕНИЯ только в рамках транзакции, иначе тупо не блокирует |
|||
30
Fragster
гуру
22.05.12
✎
17:28
|
(25) я могу сделать запись одного документа из другого, причем запись верхнего не упадет, даже если упадет запись вложенного (если сделать обработку исключения)
|
|||
31
Fragster
гуру
22.05.12
✎
17:28
|
(28) если сделать обработку исключения, то нет
|
|||
32
PR
22.05.12
✎
17:29
|
(3) С рожна ли заблокирует?
А ты не блокируй. |
|||
33
Maxus43
22.05.12
✎
17:30
|
(31) во второй раз упадёт в рамках той же транзакции
|
|||
34
andrewks
22.05.12
✎
17:30
|
(30) сам понял, чё сказал? если ты сделаешь обработку исключения, то она не упадёт
|
|||
35
H A D G E H O G s
22.05.12
✎
17:31
|
(7) Временную таблицу пользуйте.
|
|||
36
Fragster
гуру
22.05.12
✎
17:34
|
(34) кстати, я в (30) не прав. проверил только что с кодом
документ Д1: Процедура ПриЗаписи(Отказ) Д2 = Документы.Д2.СоздатьДокумент(); Попытка Д2.Записать(); Исключение Сообщить("Отвалились"); КонецПопытки; КонецПроцедуры Документ Д2: Процедура ПриЗаписи(Отказ) ВызватьИсключение ""; КонецПроцедуры Падает так: http://s019.radikal.ru/i604/1205/d1/8ba3afcaee73.png |
|||
37
Fragster
гуру
22.05.12
✎
17:35
|
а в документации 1с пишет про вложенные транзакции
|
|||
38
PR
22.05.12
✎
17:35
|
(37) Транзакции, а не попытки.
|
|||
39
Никола_
Питерский 22.05.12
✎
17:41
|
(37) Да ты шо правда что ль ???
Ахренеть, дайте две таких документации мне,а то я вот эту херь читаю )) http://imglink.ru/show-image.php?id=ab1ac38e9a03e11bcc0f266e824db2b9 |
|||
40
Fragster
гуру
22.05.12
✎
17:53
|
(38) а д2.Записать() это что такое?
Один фиг при пустом модуле д2, а в д1 НачатьТранзакцию(); Д2 = Документы.Д2.СоздатьДокумент(); Д2.Дата = Дата; Д2.Записать(); ОтменитьТранзакцию(); падает точно так же. (39) слова "вложенные транзакции" есть: http://s019.radikal.ru/i611/1205/20/b6e5c1d8ed6b.png |
|||
41
Fragster
гуру
22.05.12
✎
17:54
|
(39) ну, это ж ИТС, я его открываю только когда совсем не влом
|
|||
42
Fragster
гуру
22.05.12
✎
17:54
|
странная ошибка просто
|
|||
43
Miffka
22.05.12
✎
17:56
|
(0) Пришло на ум 2 способа:
1). Выборка вроде и так порциями подгружает, насколько помню. Типа .Следующий() и до свиданья (но не уверен) 2). Первый раз "Выбрать первые" с сортировкой по ссылке (или другому уникальному полю. Желательно, индексируемому). Обработали, берём последний элемент и делаем "выбрать первые ... где Ссылка > &Ссылка5000" и т.п. (с) стр. 721 "Не использовать запросы, результатом которых могут быть очень большие выборки" книги "Профессиональная разработка в системе 1С:Предприятие 8". |
|||
44
IKSparrow
22.05.12
✎
17:57
|
Можно так:
ВЫБРАТЬ ПЕРВЫЕ 5000 Ссылка ИЗ Тра-Ля-Ля ВЫБРАТЬ ВТОРЫЕ 5000 Ссылка ИЗ Тра-Ля-Ля ВЫБРАТЬ ТРЕТЬИ 5000 Ссылка ИЗ Тра-Ля-Ля |
|||
45
andrewks
22.05.12
✎
20:22
|
(40) 2. про "вложенные транзакции" - имеется в виду синтаксически, на уровне интерпретации кода. но сам интерпретатор не обрабатывает их как положено, а, по сути, практически игнорирует
|
|||
46
ILM
гуру
22.05.12
✎
22:42
|
(44) А ведь работает же)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |