Как быстро свернуть большую таблицу значений? #419213


#0 by eeyore
Создаю ТЗ:        ТЗ.Колонки.Добавить("СуммаЗатратНаВесПродукции", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2))); Заполняю ее в обработке - получаю ~200 000 записей Далее стоит задача свернуть ее, по такому правилу: После сворачивания - в таблице остается в 2 раза меньше записей, НО 1с сворачивает ее 1 час. Как решить вопрос со скоростью?
#1 by Лефмихалыч
запросом пробовал?
#2 by 73
Запросом не пробовал?
#3 by eeyore
, - забыл уточнить у меня платформа 8.0
#4 by НЕА123
индексы могет помогут, но не уверен.
#5 by GedKo
а может в обработке не добавлять строки, а искать по нужным критериям уже созданные строки и изменять значения?
#6 by eeyore
к сожалению индексы только в 8.1 а у меня 8.0, к тому же там с индексами нюанс:
#7 by НЕА123
+но в 80 индексов вроде тоже нет.
#8 by Лефмихалыч
может заюзать xBase? там и индексы есть, и можно через ОЛЕДБ запросом свернуть
#9 by GedKo
или писать напрямую в какую-нить скл таблицу и доставать запросом
#10 by eeyore
- в принципе вариант, я об этом думал, только это значительно усложняет наглядность кодо - т.е. я формирую не одну таблицу для нескольких расчетов, которую затем группирую под каждый вид расчета, а создаю отдельную таблицу для каждого расчета. Мне такой вариант не очень импонирует, но если лучше решения не найдется то придется идти по этому пути.
#11 by НЕА123
колонки, которые не участвуют в свернутой таблице нужны? если нет то и не добавлять, если нужны, то типизировать все.
#12 by eeyore
- идею понравилась, а как из 1с 8.0 напрямую с sql работать? Можешь ссылку дать или пример кода?
#13 by НЕА123
+ в 77 это сильно убыстряло.
#14 by Живой Ископаемый
а можно базу сконвертить в в81
#15 by eeyore
- c xBase попробую, не понял второй части, а именно как "через ОЛЕДБ запросом свернуть"?
#16 by Живой Ископаемый
2 Записать таблицу с 200 т строк в Хбэйс, а ту которую тебе нужно - получить не сворачиванием и скл-запросм через ОЛЕДБ с  уже нужными тебе группировками
#17 by НЕА123
интересно, а сколько отрабатывает после заполнения без свертки ТЗ = Неопределено; не пробовал?
#18 by eeyore
- все колонки нужны - т.к. по этой таблице строятся еще такие итоги но тут получается мало(~200)записей и такаое сворачиваение работает быстро - 20сек. Я не понял какой смысл типизировать колонки которые в сворачивании не учавствуют - они же все равно выбрасываются из таблица по теории?
#19 by eeyore
- не понял ни вопроса ни идеи.
#20 by НЕА123
освобождение памяти при удалении. например, если тип число, ссылка на объект БД - ниче не проверяется. если СЗ, ТЗ - тоды да. если не типизировано - всегда смотрит что там. в 77 эффект типизации был огромный.
#21 by eeyore
как из 1с работать с OLEDB - через какой объект?
#22 by Живой Ископаемый
2 э... через ОЛЕ... примеры искать в гугле.
#23 by eeyore
- ок, с оптимизаций попробую, лишние колонки удалю, посмотрю что получится.
#24 by eeyore
- спасибо за идею - поищу.
#25 by vde69
у меня похожая шняга на 7.7 реализована поэтапным сворачиванием, обьясню: обработка тянет данные из навижена по куче счетов, после каждого запроса и добавления полей в ТЗ я сворачиваю всю ТЗ, но это только в том случае если итоговая таблица будет не очень большая, в моем случае свертка 1 ляма строк до 50тыс идет примерно 3 минуты
#26 by eeyore
- а как в моем случаем можно сделать поэтапное сворачивание? если у меня на 200 000 исходных записей приходится 100 000 конечных? т.е. в среднем одинаковые записи всего в 2х экземлярах. Если бы их было много, то тогда еще понятно.
#27 by Пеппи
на заметку
#28 by vde69
ну в твоем случае мой совет не пойдет
#29 by Злопчинский
Организовать заполнение тз таким образом (порядок исходной выборки данных) чтобы добавить запись в конец, а потом к ней суммировать...
#30 by 73
Попробуй построителем. Вот идея: ТЗ.Колонки.Добавить("Примечание", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки));
#31 by Читатель
Колонки типизировать не пробовал ?
#32 by eeyore
- не представляю как это возможно - выборки из запроса нет, тз заполняется на внутреннем языке путем сложного распределения себестоимости используемых в производстве материалов на конечную продукцию.
#33 by eeyore
- типизировал все колонки, которые участвуют в сворачивании, лишнии удалил. Это ничего не дало вообще, как он час сворачивал так и сворачивает.
#34 by eeyore
ТЗ.Колонки.Добавить("КоличествоПродукции", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));    ТЗ.Колонки.Добавить("СуммаЗатратНаВесПродукции", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)));    ТЗ.Колонки.Добавить("КоличествоМатериалаНаВесПродукции", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 3)));
#35 by eeyore
- спасибо - то что нужно! Запрос за 7 секунд отрабатывает! И еще за 80 секунд я этот запрос преобразовываю в ТЗ.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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