Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Пагинатор для запроса: получение результата страницами

Пагинатор для запроса: получение результата страницами
Я
   Asmody
 
15.02.18 - 11:18
Есть запрос, который возвращает 100500+ записей. Требуется получать результат порциями по N записей.
Вот как бы сделать такую красоту, не выполняя запрос каждый раз?
 
 
   Ненавижу 1С
 
1 - 15.02.18 - 11:19
1. в 1С?
2. зачем?
   Волшебник
 
Модератор
2 - 15.02.18 - 11:19
Нужно упорядочить по полю и получать ПЕРВЫЕ N записей ГДЕ поле > значение
   vde69
 
3 - 15.02.18 - 11:20
для этого есть "выборка", это динамический обьект и он считывает информацию по мере необходимости

или я не так понял?
   Asmody
 
4 - 15.02.18 - 11:20
(1) В 1С. надо.
   Ненавижу 1С
 
5 - 15.02.18 - 11:21
Тогда (2) и поле должно быть уникальным
   Волшебник
 
Модератор
6 - 15.02.18 - 11:23
(5) Не обязательно. Можно сделать условие ГДЕ поле > значение-1

В каждой порции данные будут немного повторяться, но главный результат будет достигнут
   drcrasher
 
7 - 15.02.18 - 11:23
и остаётся вопрос: зачем?
   Волшебник
 
Модератор
8 - 15.02.18 - 11:24
На мисте так сделано
   Philix
 
9 - 15.02.18 - 11:24
(5) и не меняться в результате обработки выборки первых N записей. Иначе можно погрузиться в вечную выборку одного и того же :)
   Cyberhawk
 
10 - 15.02.18 - 11:25
(3) Откуда считывает?
 
 Рекламное место пустует
   arsik
 
11 - 15.02.18 - 11:26
(0) Динамический список
   vde69
 
12 - 15.02.18 - 11:27
(10) с сервера
   Asmody
 
13 - 15.02.18 - 11:27
Зачем-зачем. Есть внешний сервис, который дергает данные из 1С и делает нужное. Все 100500 записей разом ему не переварить, надо порциями.
   бомболюк
 
14 - 15.02.18 - 11:28
1С так не умеет, она для динамических списков использует метод (2). ADO может что то похожее, называется AsyncFetch.
   Cyberhawk
 
15 - 15.02.18 - 11:28
(12) Что за "сервер"? Судя по (0), ему хочется одним запросом к БД обойтись
   Cyberhawk
 
16 - 15.02.18 - 11:29
(13) Пиши результат запроса в регистр, и пусть сервис потом дергает данные из регистра
   Asmody
 
17 - 15.02.18 - 11:29
(15) Наоборот, я могу обойтись запросом на каждый вызов. Но я не хочу каждый раз тащить все записи.
   Timon1405
 
18 - 15.02.18 - 11:30
а обращаться к БД без 1с можно?
https://technet.microsoft.com/ru-ru/library/gg699618(v=sql.110).aspx
   vde69
 
19 - 15.02.18 - 11:30
(12) на сколько я понимаю результат хранится на сервере во временных файлах и по мере обращения к конкретным полям выборки происходит чтение соответствующих областей временных файлов
   Asmody
 
20 - 15.02.18 - 11:31
(16) Из регистра записи тоже будут дергаться запросом. Тоже самое получится.
   Cyberhawk
 
21 - 15.02.18 - 11:31
(20) Так в регистре будет срез всех данных на момент "большого" запроса. А потом уже порционное получение.
   Cyberhawk
 
22 - 15.02.18 - 11:32
"обойтись запросом на каждый вызов. Но я не хочу каждый раз тащить все записи" // Так ты не знаешь как получать за каждый вызов порцию данных запросом, так что ли?
   Asmody
 
23 - 15.02.18 - 11:33
(21) В этом случае еще надо будет мутить обновление данных в регистре, ослежвание считанных-несчитанных… Геморно
   Cyberhawk
 
24 - 15.02.18 - 11:34
(23) Так почему у тебя за один вызов сервиса идет получение данных в большем объеме, чем ты хочешь за этот вызов отдать?
   Asmody
 
25 - 15.02.18 - 11:35
(22) Видишь на главной мисты под списком тем циферки? Тык, получаю 20 записей, тык - следующие 20. При этом из базы тащится ровно те 20 записей, а не миллион. Вот такое мне надо, только в 1С.
   Волшебник
 
Модератор
26 - 15.02.18 - 11:36
(25) Попробуй пролистать дальше, поймёшь принцип
   Asmody
 
27 - 15.02.18 - 11:36
Просто в mysql есть LIMIT N, M
   Cyberhawk
 
28 - 15.02.18 - 11:36
(25) Так это зависит от самих данных в таблице же.
Что такое "следующие 20" - это ровно те, что шли бы после предыдущего получения данных или любые 20, отличающиеся от первых? Таблица упорядоченная?
   vde69
 
29 - 15.02.18 - 11:37
(23) а так тебе надо гемороится с проверкой, что кто то не записал новую запись в ту часть которую ты уже прошел.

если надо быстро и ты допускаешь, что небольшая часть записей могут потеряться, то самое лучшее (2)

а если важно обработать все - то придется писать в базу "обработан"
   Волшебник
 
Модератор
30 - 15.02.18 - 11:39
(27) Просто он тоже тормозит, поэтому пришлось изобрести решение (2)
   Asmody
 
31 - 15.02.18 - 12:04
Блин, нельзя использовать ВЫБРАТЬ ПЕРВЫЕ &КоличествоЗаписей...
   Cyberhawk
 
32 - 15.02.18 - 12:08
(31) Регистр сведений и свой курсор как душе угодно )
   Asmody
 
33 - 15.02.18 - 12:09
(32) это не stateless…
 
 
   Cyberhawk
 
34 - 15.02.18 - 12:10
(33) Так что с (28)? Что будет "следующие N" с соблюдением твоего стейтлеса?
   Остап Сулейманович
 
35 - 15.02.18 - 12:19
(34) А зачем вы вопросом на вопрос отвечаете?

Простейшая задача. Показывать на странице по 100 наименований из 25 000. Юзер ткнул в страничку, которая должна показать товар с 12700 по 12799.
Как? Не включая ненужные первые 12699 записей в выборку запроса?

ИМХО в 1С - только получив первые 12799. А потом из выборки забрав только последние 100.
   Вафель
 
36 - 15.02.18 - 12:24
можно и запросом 

выбрать первые 100
(ВЫБРАТЬ ПЕРВЫЕ 1000 ..)
Упорядочить по Поле УБЫВ
   Asmody
 
37 - 15.02.18 - 12:31
Переосмыслил вариант (2). Теперь сервис будет спрашивать "дай N записей, начиная с ключа K". Только запрос должен быть с "первичным ключом". В моём случае это подходит.
   Волшебник
 
Модератор
38 - 15.02.18 - 12:31
(37) Ну слава богу. Я уж подумал, что выпал из реальности.
   Вафель
 
39 - 15.02.18 - 12:32
(37) не ужто ты раньше этого не знал?
   Asmody
 
40 - 15.02.18 - 12:55
(39) Знал. Хотелось меньшей кровью обойтись.
   Cyberhawk
 
41 - 15.02.18 - 14:35
(35) "вопросом на вопрос отвечаете?" // Проспись что ли
   Asmody
 
42 - 16.02.18 - 08:38
Кстати, способ (2) подходит только для прохода в одну сторону. Для прохода в другую сторону надо менять параметры и условия. Для полноценного пагинатора (т.е. доступа к "странице" данных по номеру) этот способ не подходит.
   Mort
 
43 - 16.02.18 - 09:06
Data commander 3 это умеет


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует