Накопительный итог 1С #531923


#0 by ОператорПК
Здравствуйте. Стоит задача получить лесенку (накопительный итог) по последовательности документов. Поясню напримере - есть исходная таблица произвольных документов:   Нужна таблица: РТиУ №01    100    880 РТиУ №02    500    780 РТиУ №03    80    280 РТиУ №04    200    200 Какой самый быстрый способ ее получить? Сейчас используется конструкция: Но для большого количества документов работает дико медленно. Собственно вопрос каким  запросом можно получить тот – же результат за меньшее время?
#1 by mikecool
выбрать в ТЗ, пробежаться посчитать?
#2 by Axel2009
ТЗ обработать?
#3 by Asmody
самый быстрый - правильно использовать регистры
#4 by ОператорПК
Запрос состоит из множества пакетов (этот один из промежуточных).
#5 by zak555
ты бы хотть так написал бы : РТиУ №01    200    200 РТиУ №02     80    280 РТиУ №03    500    780 РТиУ №04    100    880
#6 by ОператорПК
мне нужно так как написано в . хотя это не принцыпиально.
#7 by Axel2009
индексы по моментвремени+суммаупр попробовать
#8 by ОператорПК
по моменту времени нет индексации.
#9 by shuhard
Рг накопления прикрутить уже поздно ?
#10 by ОператорПК
да
#11 by shuhard
та же 25 Гбайт мясная база ?
#12 by Axel2009
условия сделать на дату + ссылку и по ним индексы
#13 by ОператорПК
нет 150 Гб (наш филиальчеГ) :))
#14 by acsent
Чем регистр накопления поможет?
#15 by ОператорПК
попробывал, не канает...
#16 by Axel2009
чем не канает?
#17 by zak555
а если сделать так для печатной формы
#18 by ОператорПК
быстрее не стало работать.
#19 by ОператорПК
результат запроса в не конечный он еще многократно обрабатывается.
#21 by zak555
что ещё ?
#22 by fisher
Навскидку:
#23 by ОператорПК
то же самое...
#24 by 73
Что то же? Ты хоть почитай. Условие как у тебя. Решение там - пост 10.
#25 by shuhard
предлагаешь курсор сделать ?
#26 by ОператорПК
тот же коннект ПериодыИзменения.Период >= Регистр.Период что нового я там должен увидить?
#27 by ОператорПК
чево за курсор как по одноэсовски будет?
#28 by Axel2009
и какой же индекс был использован?
#29 by 73
А что ты хочешь увидЕть? Если решение - то оно там. Что ещё?
#30 by fisher
Да, в самом деле... Извини. Мож в комментах что полезное.
#31 by ОператорПК
ИНДЕКСИРОВАТЬ ПО    Регистратор,    СуммаУпр -только не понятно как этот индекс может ускорить соединение по МоментВремени.
#32 by fisher
+ Мда... Ничего применимого к 1С в комментах не нашел. Все более быстрые способы к 1С не применимы.
#33 by ОператорПК
обычно одну и туже задачу можно решить разными способами вот я и спрашиваю про другой способ т.к. этот способ давольно медленно работает в моем случае.
#34 by shuhard
[как по одноэсовски будет] ни как отдаленный аналог курсора - временная таблица, её ты уже использовал
#35 by Axel2009
если не помог, значит ничего больше не поможет.. если только не извращаться и уменьшать количество обрабатываемых строк.. в цикле там обрабатывать..
#36 by shuhard
дык вариант с накоплением итога по регистратору в Рг накопления ты отверг
#37 by ОператорПК
как мне его накопить? допустим есть пары Договор+Контрагент один пользователь захочет посмотреть в разрезе одного договора другой в разрезе всех.... у меня нет четкого соответствия Регистратор-Накопительный итог.
#38 by ОператорПК
Договор+Контрагент=Договор+регистратор сори...
#39 by fisher
Судя по всему, на голом SELECTе быстрее никак. В T-SQL более быстрые варианты реализуют курсорами и DML.
#40 by Axel2009
не зная полной задачи , трудно посоветовать. может удастся както обойти этот пересчет. и сколько документов попадает под пересчет обычно?
#41 by ОператорПК
40 тыс. документов "на входе".
#42 by Axel2009
и сколько отрабатывает по времени? и если "на входе" будет 1000 доков, скока будет отрабатывать?
#43 by Axel2009
800млн строк обработать - не шухры мухры =)
#44 by ОператорПК
минут 10-20 не замерял точно.
#45 by Axel2009
в таблице 890 строк запрос отработал 1,4с        "ВЫБРАТЬ ПЕРВЫЕ 200        "ВЫБРАТЬ ПЕРВЫЕ 200 отработал за 0.6сек на количестве данных 40000 будет еще существеннее. за минутку может и отработать.. быстрее хз как =)
#46 by IKSparrow
А разве через таблицу оборотов не получается искомое?
#47 by Axel2009
вопрос не в искомом, а в скорости получения искомого.
#48 by fisher
Вопрос, как поведет себя такая методика на многомиллионных таблицах в сравнении с обычным методом. Сравни, плиз, с шагом в лимонов 5 строк несколько замеров. У тебя ведь всё готово уже. Очень интересно тенденцию отследить. Насколько замедлит работу многократное переливание туда-сюда огромной исходной таблицы (с выкусыванием обработанных порций). Ведь замедление этой операции замедляет работу всего алгоритма в геометрической прогрессии. Хочется понять, насколько метод применим на больших таблицах. Кстати, ЛЕВОЕ СОЕДИНЕНИЕ ПО ИСТИНА можно заменить на стандартную запись декартова произведения в SQL - просто указав вторую таблицу через запятую без всяких соединений. А Не ВыборкаПроверка.Следующий на Запрос.Выполнить.Пустой
#49 by Axel2009
если будет 1млн строк, то присоединение из даст обработку в 500 трл строк. сервер сдохнет.. а на счет "Пустой" тоже можно =)
#50 by fisher
Вот не факт, что сдохнет. Тут практика важнее домыслов.
#51 by Axel2009
ошибся, в 500блн строк
#52 by Axel2009
у сервера стока оперативки нетю..
#53 by Axel2009
не, трл =) чета засчитался. ща проверю на более больших данных
#54 by Axel2009
ЗЫ на млн строк даж пробовать не буду =) сами пробуйте если хотите.
#55 by fisher
Ну, можно на меньших объемах. Главное хоть какой-то тренд наметить.
#56 by Axel2009
скульсервак (база на скуле, новые тесты). до этого была файловая база проверка на 1000 строк одним запросом: 0.55сек обработкой по 200 строк: 0.77сек обработкой по 500 строк: 1.3сек проверка на 16 000 строк одним запросом: 82сек обработкой по 200 строк: 17сек обработкой по 500 строк: 12.7сек обработкой по 1000 строк: 13.1сек
#57 by fisher
Можно было бы полный аналог курсоров забабахать на порционных выборках (как 1С и делает в своих системных механизмах). Без переливания туда-сюда больших объемов. Просто выбирать порции из последовательных диапазонов исходной таблицы по нужному ключу, обрабатывать и результаты накапливать. Извечная проблема с накоплением. Т.к. добавить в 1С строки во временную таблицу можно только её полным пересозданием... Сколько нужных вещей в эту фигню упирается...
#58 by fisher
Спасибо. В общем, в независимости от оптимальности второго метода, первый однозначно идёт в топку на больших объемах...
#59 by Axel2009
да много чего можно было бы.. только запросы в 1с только те что T-SQL. а курсоры - это дело каждой СУБДшки.. поэтому и не делают
#60 by fisher
+ Но всё равно будет быстрее твоего варианта, хотя и сложнее...
#61 by Axel2009
а я и не спорю. =) в части накопительных сумм ток у Оракла знаю есть такая приблуда..
#62 by Axel2009
+ ну и следующий скуль обещают наваять.. в 10ке.. хотя бета уже есть, можно глянуть. но на 1с это не отразится =)
#63 by fisher
T-SQL это как раз курсоры :) Это название диалекта MSSQL. Речь не о курсорах, их понятно почему нет. Речь о возможности INSERTов во временные таблицы. Это кучу бы возможностей дало.
#64 by Axel2009
T-SQL - транзактСКЛ, стандарт собственно говоря,которая каждая СУБДшка должна поддерживать =)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С