Имя: Пароль:
1C
 
Пронумеровать в запросе строки с учетом периода
0 Homer
 
31.10.16
13:39
Есть запрос. В нем необходимо пронумеровать строки во временной таблица для последующего поиска максимума номера. Пользуюсь стандартным методом: связь двух таблиц по условию ИсходнаяТаблица.Ссылка > ИсходнаяТаблица1.Ссылка. Все прекрасно отрабатывает при малом количестве строк в ИсходнаяТаблица. Проблема в том, что таблицы большого объема (>10 000 строк) начинает тормозить. Есть способ нумерации строк с учетом того, что в будущих виртуальных таблицах необходимо будет искать максимум номера строки.
1 Ildarovich
 
31.10.16
14:01
Вообще всегда интересно знать фактуру задачи (скрывая эту информацию, вы лишаете многих интереса к решению, поскольку неясно, насколько задача актуальна и правильно ли она сформулирована). Ответьте хотя бы на это:
- Что за данные в временной таблице?
- Есть ли другие поля для упорядочивания, кроме ссылки?
- Нужно ли вообще нумеровать строки, если максимальный номер можно определить, сначала найдя максимальную ссылку, а затем посчитав число ссылок меньше нее?
2 Homer
 
31.10.16
14:07
(1) Задача почитать какие поступления закрыт планом при условии план связан с поступлением только договором. Вычисляется только запросом.
Легче стало?
3 Ildarovich
 
31.10.16
17:13
(2) Конечно, стало. Намного, намного легче и понятней. То есть вы решаете задачу "ФИФО запросом". На самом деле я знаю как решить эту задачу для 10 000 строк (и больше) без существенного торможения. Нумерация - это ведь частный случай нарастающего итога, который по сути - интеграл.

По стечению обстоятельств, как раз сейчас заканчиваю публикацию с готовым запросом на эту тему. Наброски можете посмотреть вот тут: http://catalog.mista.ru/public/201526/ и вот тут http://catalog.mista.ru/public/262300/.

Обязательно опубликую в этой теме ссылку на статью, когда она будет готова.
4 polosov
 
31.10.16
17:45
(3) Очень полезные статьи. Спасибо.
5 Homer
 
01.11.16
09:25
(3)
http://catalog.mista.ru/public/262300/ Данный метод смотрел 2 года назад. Как то геморно показалось))
Из  http://catalog.mista.ru/public/201526/
"Для таких особенных задач и предназначен описываемый далее метод. Он не опирается ни на какие технологические ухищрения, а является чисто алгоритмическим. Метод требует, чтобы строки исходной таблицы были пронумерованы. "

И в чем преимущество твоего алгоритма?? Пронумеровать я могу также внешне, я интересуюсь именно быстрой нумерацией в запросе!!
В моем отчете нумерация занимает 90% времени при количестве строк > 25 тыс.
В цифрах: 200 сек отчет 180 сек нумерация 19 сек таб с нарастающим и 1 сек вычисление
6 Ildarovich
 
01.11.16
12:25
Преимущества в том, что при НУМЕРАЦИИ В ЗАПРОСЕ нет квадратичной зависимости от числа строк.

...геморно показалось... - а более простых методов нет даже в теории. В SQL для этого оконные функции придумали. Поскольку в 1С их нет, приходится идти на достаточно серьезные усложнения.

Мне нравятся такие цифры: они говорят о том, что метод, который я разрабатываю, нужен.

А есть ли какая-либо возможность протестировать мой подход на ваших данных? Я бы переписал запрос на ваш случай, если дадите свой исходный запрос (можно в почту).
7 sapphire
 
01.11.16
13:07
(0) В нем необходимо пронумеровать строки во временной таблица для последующего поиска максимума номера.

Интересно, чем же максимум будет отличаться от количества записей?
8 Homer
 
01.11.16
13:16
(6) Запрос коммерческая тайна))
Я же написал, что могу вынести нумерацию из запроса. просто не удобно для отладки. В вашем механизме все равно надо сначала обработать какую-то таблицу и только потом ее выгрузить, пронумеровать и передать вашему математическому алгоритму. В моем методе аналогичная последовательность, только все в одном запросе. Или я не вижу в каком месте вы нумеруете таб?
(7) Данный акцент был сделал для того что бы не писали про момент времени.
9 sapphire
 
01.11.16
13:18
(8) Вам нужен максимальный номер?
Чем он будет отличаться от количества строк?
10 Homer
 
01.11.16
13:24
(9) мне необходимо воспользоваться функцией Минимум. Прошу прощения кого ввел заблуждение про Максимум.
МИНИМУМ(мТабПредварительная.Номер) КАК Номер
ПОМЕСТИТЬ мТабЧастичноОплаченнаяФакт
11 Ildarovich
 
01.11.16
14:54
(8) Ну тайна так тайна.

Тогда подождите статью - возьмете запрос оттуда. Там действительно решается эта или очень похожая проблема. Но довольно сложным способом. Для этого метод "баттерфляй", приведенный по ссылке, был улучшен. Теперь нумерации не требуется.