ТЗ=ТЗРежимов.НайтиСтроки(СтруктураОтбора) занимает 60% времени (это ОЧЕНЬ м #292897


#0 by VVi3ard
Здравствуйте, поделитесь опытом, какие варианты есть побыстрее? Дело в том что ТЗ очень большая (порядка 25 мб) релиз 8.0.18.
#1 by VVi3ard
Структура отбора: СтруктураОтбора.Вставить("Контрагент",пКонтрагент); Контрагент-Ссылка на элемент справочника "Контрагенты"
#2 by jcage
больше информации. Что за ТЗ, откуда она берется и т.д.
#3 by VVi3ard
В ТЗ содержатся порядка 5 записей на одного контрагента, 8 колонок в среднем 50000-150 000 строк. т.е. примерно 10000 контрагентов. Получается запросом.
#4 by BeaViS
Нармальные пацаны кешируют строки таблицы в Соответствии А халявшики переходят на 8.1 и индексируют таблицу значений
#5 by BeaViS
Кстати, чего бы не выгрузить запрос в дерево, где на верхнем уровне Контрагент А строки верхнего уровня, т.е. контрагентов кешировать в Соответствии Так еще быстрее ... хотя стойкое предубеждение, что ты где то перемудрил )
#6 by BeaViS
Если все же таблица, а не дерево, то можно отсортировать по Контрагенту и каждую первую строчку поместить в Соответствие Теперь вместо поиска получаешь первую строчку из соответствия, а далее перебором строк
#7 by BabySG
Предполагаю, что решения задачи было не лучшим. Для чего производиться такая выборка и может есть возможность ее сократить еще на стадии запроса? Т.е. исходные данные и что нужно получить?
#8 by VVi3ard
Схематично выглядит так: Есть большой запрос который выбирает практически все данные из базы но при условии что данные можно отображать одной строкой. т.е. Вида: Контрагент, Сальдо, Количество транспорта, Отддано тон, Приянто тонн и.т.п. Для вывода данных в макет используется конструкция вида .Параметры.Заполнить(СтрокаТЗ); Макет может быть произвольным (подгружается с диска) Это всё замечательно работало долгое время. Затем понадобились данные которые в одну строку отобрать уже не возможно. Например К полю количестов транспорта теперь нужна ещё и расшифровка вида: Контрагент - транспорт1 и.т.д Поэтому я решил получать эти данные отдельным запросом. а в макет их выводить таким орбазом: Это обрезаный модуль на самом деле Льгота0-Льгота10. А потом при выводе в макет я добавил только одну строчку: И таких запроса у меня уже 4. Я боюсь что если переделывать все запросы в один то на это уйдет много времени, и смысла это не иммеет потому как результат запроса сильно вырастет. (При добавлении например таблицы "Лготы" количество строк выростет примерно в 7 раз) Т.е. схема с отдельным выбором таких данных мне кажется оптимальной. По поводу соответствия: Не уверен что это позволит ускорить работу обработки. т.к. фактически ищу я в тз для каждого Контрагента только один раз и поэтому время которое я потрачу на заполнение соответствия будет конечно быстрее чем при поиске но всё же. Можно например вносить Контрагент - "НомерСтрокиТЗ/ПоследнийНомерСтрокиТЗ" Вида(схематично): КонецЦикла А потом делать что то типа: Рез=СтрЗаменить(СоотвКонтр_НомерСтр[Контрагент],"/", Символы.ПС); Для Стр=Число(ПолучитьСтроку(Рез,1)) пока Число(ПолучитьСтроку(Рез,2)) Но как то это не красиво выглядит хотя работать будет побыстрее. Я Сегодня попробую использовать построитель Запроса, и отбор может быстрее будет.
#9 by Diman000
"Я Сегодня попробую использовать построитель Запроса, и отбор может быстрее будет" Не будет. Я пробовал. Лучше прислушайся к рекомендациям - З.Ы. В код в не вчитывался, так что не пинать, если - для него не подходят ;-)
#10 by VVi3ard
подходят, но может есть более красивое решение.
#11 by VVi3ard
Кстати тут говорили про индексирование в 8.1. Интересно оно реально поможет? Просто скоро переходить будем. Можно подождать
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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