Имя: Пароль:
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) Ну тайна так тайна.

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