#0
by Калиостро
Справочник номенклатуры содержит около 25000 элементов. Количество уровней - 6. Есть реквизит "Код сортировки", строка, длина 3. Используется для групп и элементов. Фактически заполняется только для групп с целью отсортировать для вывода прайс-листа и каталога. СписокНоменклатуры - заполняется элементами с учетом нескольких фильтров и содержит около 5000 элементов И дальше запрос. ТекстЗапроса = " На базе DBF выполнялся 20 сек. Теперь, после перевода на SQL, время выполнения запроса около 18 мин!
#1
by Калиостро
Если делаю прямой запрос |select | СпрНоменклатура.ID [Номенклатура $Справочник.Номенклатура] То на выходе необходимый список элементов со всеми группами. Но как вытащить ту же структуру групп с сортировкой по полю "КодСортировки", что получается в результате черного запроса?
#5
by Злопчинский
и не нравится мне |Условие (Номенклатура в СписокНоменклатуры); с учетом 25000 раз проверить вхождение в список из 5000 элементов...
#11
by Злопчинский
ничем, ятакой хренью не занимаюсь, у меня номенклатуры на порядок меньше.. ;-) . если это разовый отчет - то и пофиг. если это регулярный отчет - то в эти 5000 прописать флажок=1 в индексируемое поле и отбирать по этому полю. . но я по запросам и их тонкой трактовке - не спец. лучше спецов дождаться.
#12
by viktor_vv
Можно еще попробовать для штатного черного Запрос.ВключитьSQL ; Запрос.Выполнить(ТекстЗапроса);
#16
by МихаилМ
в 1с77 sql чтобы это запрос работал быстрее, нужно отказаться от сортировки. тк для каждого элемента выборки после получения выборки будет сгенерирован запрос 5000 элементов = + 5000 запросов. поэтому лучше сортировать тз после выборки и выгрузки также очень медленно реализована передача списка отбора оператора В : для каждого элемента создается временная хранимая процедура, выполняется затем уничтожается. конструкцию в лучше заменть Условие (Номенклатура = пар[1] ИЛИ ... Номенклатура = пар[N]. есть ограничение на размер текста запроса odbc клиента так что в одном запросе можно указать не более 2200 9 символьных ключей.
#18
by Sorm
"@Условие (Номенклатура в СписокНоменклатуры)" убрать. По возможности заменить джоином с временной таблицей(плохо знаю запросы 1с 7.7). Отребилдить индексы на таблице номенклатуры.
#19
by МихаилМ
почему в запросе нет подсказок "nolock" лучше элементы выбирать отдельно , группы отдельно (есть индекс для групп)
#21
by Калиостро
Отчет не разовый, запускается как минимум 1 раз в день по регламенту или по требованию. Флаг сортировки у реквизита "КодСортировки" поставил. Результат практически нулевой. nolock в запросе поставлю. Запрос в запускался в тестовой базе. ОК, буду пробовать.
#24
by МихаилМ
выбрать элементы быстрее работает для dbf варианта для sql выборка из запросов быстрее
#26
by МихаилМ
конечно мерил. в 2003 году. естественно файловая база и ms sql были доступны через сеть 100 mb локальные замеры - бессмысленны.
#27
by dk
проверял несколько раз на разных базах скуль если в списке значений для фильтра больше 100 элементов, то быстрее на клиенте отфильтровать, через
#28
by ЧеловекДуши
Это нормальное явление, 1С не оптимизирует запросы к SQL, поэтому и тормоза. Начни осваивать 1С++ и прямые запросы :)
#31
by ЧеловекДуши
>>> |LEFT JOIN | $Справочник.Номенклатура РОД1 ON СпрНоменклатура.parentID = РОД1.ID Убери эту гадость :)
#37
by Калиостро
Без фильтров и без сортировки по наименованию отрабатыаает на локальной машине за 7 сек, на сервере - 15 сек.
#40
by Эмбеддер
а если вместо СпрНоменклатура.ID [Номенклатура $Справочник.Номенклатура] сделать просто СпрНоменклатура.ID ?
#41
by Калиостро
+ К запросу добавляю СписокНоменклатуры содержит 12000 элементов. На ноутбуке (тоже SQL 2000) запрос выполняется 10 минут. На сервере не проверял. Все равно долго.
#42
by Калиостро
У меня не получается прямым запросом вытащить иерархию групп для СписокНоменклатуры, упорядоченную по КодСортировки. Если есть образец, буду премного благодарен. Поэтому сейчас пытаюсь выйти на приемлемое время с помощью черного запроса. Пусть не 20 сек, как в DBF, но и не 10 минут же!
#43
by Злопчинский
мне принципиально кажется что необходимость регулярно проверять условие по вхождение в немелкий список - что-то в концепции попраить надо...?
#44
by Serginio1
Посмотри там есть обработка вывода иерархии добавил обработки по группировке данных и выводе с учетом иерархии и суммам по группам иерархи из ТаблицыЗначений
#45
by Эмбеддер
и все-таки еще раз - тормоза могут быть уже при чтении результата запроса. попробуй убрать [..$Справочник], считай просто строки
#47
by Эстет хренов
дурная работа, уже давно бы сделал справочник Прайс-лист в котором бы настраивал всю специфику каталогов и прайс-листов. Там можно создать различную иерархию, множественную вложенность товаров, свою сортировку, свое представление и оформление итд итп.
#48
by Калиостро
И как там получить отсортированный иерархический список групп по списку номенклатуры?
#49
by Калиостро
Дурная - не дурная, лучше не давать оценок, пока видишь только вершину айсберга проблем. База dbf работала с 2005 года. Чтобы после перевода на SQL запрос по номенклатуре выполнялся в 50 раз медленнее - этого, конечно, не ожидал.
#50
by Злопчинский
ну и фигли - это не значит, что все хорошо. как правило - смотришь на все это и думаешь, блин, ну что за уродство... . не.. когда из 25000 надо отфильтровать по вхождению в 12000 список - это не 5-6 позиций подбираемых руками - это уже какая-то система. а система - это флажки, реквизиты, но ну никак не список на 5000/12000 позиций, однозначно в консерватории...
#51
by Калиостро
Немного не в тему топика, но раз уж зашел разговор. В номенклатуре есть признак "Включать в прайс" и варианты: 1. Всегда (например, позиции собственного производства). 2. Никогда (специфические позиции раньше торговали массово, а теперь распродажа остатков с прилавка). 3. При остатке больше заданного количества (например, когда через интернет-магазин продавать меньше упаковки невыгодно). Формировать список, по-моему, здесь можно только в момент выгрузки, анализировать и перезаписывать флажки при проведении документов - еще хуже.
#52
by Mikeware
ну и у меня работает с 2005. иногда смотришь и думаешь - убил бы того, кто такое написал... а поразмыслишь - ну разве ж это повожд для самоубийства? :-)
#53
by Калиостро
+ Я и не говорю, что там все идеально. Система дописывалась годами. Где-то были глобальные переделки, где-то костыли. Сейчас тоже надо поставить костыль. Передохнем, а дальше подумаем.
#54
by Калиостро
+ 100. Если бы каждый раз при возникновении новой задачи надо было переделывать архитектуру с нуля, так и занимались бы описанием, согласованием ТЗ, тестированием, отладкой 90% времени. Лучше сейчас решить задачу на тройку. Если критических глюков не будет, когда-нибудь в свободное время займемся рефакторингом.
#55
by aka AMIGO
переходи на прямые © запросы :) у меня примерно такая-же ситуация была, когда надежды шефа на ускорение разрушились: отчет в скуле стал работать в 3 раза медленнее.. всего в 3! а у тебя 50 :)
#56
by Калиостро
Дайте рыбу списать:( Надо получить иерархию групп для СписокНоменклатуры, упорядоченную по КодСортировки. Как в черном запросе "
#57
by Sorm
|LEFT JOIN |(Select Val from FROM #СписокНоменклатуры order by Val) Список Я не знаю, так можно делать в прямых запросах 7.7.... Но скорость запроса возрастет.
#58
by Сияющий Асинхраль
А еще быстрее, как ни странно, заменить Условие (СписокНоменклатуры.Принадлежит(Номенклатура)=1) На: Условие (СписокНоменклатуры.НайтиЗначение(Номенклатура)<>0) Причем, что забавно НайтиЗначение частенько работает быстрее чем Принадлежит буквально в разы...
#59
by Mikeware
потому, что Найти - ищет в списке, а принадлежит - в иерархии. а поиск в иерархии - это запрос к базе
#62
by Сияющий Асинхраль
Согласен... Давно на эту бадягу напоролся, уже несколько лет семеркой занимаюсь от случая к случаю, но разница на опыте оказалась такая существенная, что до сих пор помню, что Принадлежит лучше не использовать :-)))
#63
by Калиостро
Нужен список групп в определенной последовательности. Внутри одной группы порядок по полю "КодСортировки". Нужны не все группы, а только те, в которые входят элементы из списка. Вроде бы в запросе это просматривается.
#64
by Эмбеддер
вообще-то это делается так LEFT JOIN автор, тебя здесь все уговаривают сделай так, сделай так. а ты придумываешь всякие отмазки почему не надо это делать
#65
by Эмбеддер
64+ потому что в принципе на SQL такие прямые запросы в принципе не могут долго выполняться
#68
by Mikeware
выбери всех прямых родителей элементов списка в индексированную таблицу, и сгруппируй по иерархии.
#69
by Bugmenot
- это разрыв шаблона, обычно при переходе на SQL все должно убыстряться, т.к. по сети гуляют не таблицы, а запросы.
#73
by Bugmenot
- дело не в SQL, а в том, что фирма 1Це не оптимизиорвала свою т.н. SQL версию для SQL
#74
by Эмбеддер
все меньше остается 1Сников, которые видели 7-ку, а сама она переходит в разряд мифов кроме того как автор выводит группировку, будет странный результат - не учитывается, что элементы будут на разных уровнях
#80
by Serginio1
Сделай дерево наподобие в 44 и будет тебе счастье. Или Сделай на индексированной таблице с отбором по родителю
#81
by Калиостро
Error: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'ID'.
#84
by Калиостро
Пойдем путем банана... Выдает список номенклатуры из СписокНоменклатуры. Групп нет. Печаль.
#91
by Калиостро
Элементы у меня уже есть. Мне нужны как раз группы. Но не все и в определенном порядке.
#94
by Serginio1
Ему нужна иерархия. Ему уже указали как решить проблему Через индексированную таблицу с рекурсивным отбором по родителю, либо через построение дерева 44.
#96
by Serginio1
То что Ёпрст предложил в 88 Получаешь таблицу А дальше рекурсивно Установить Индекс КонецПроцедуры
Тэги: 1С 7.7 и ранее
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- 1cv8 SQL: Имя SQL сервера и имя SQL базы данных
- v7: v7 : НДС при возврате
- v7: Что нужно чтоб подключить ККМ Меркурий 112F к 1с V7 Торговля + склад
- v7: v7.7 премещение элемента справочника
- v7: v8: v7: Кто-нибудь сумел скачать комплект отчетности за I квартал 2007 года
- v7: Как после выполнения запроса программно вставить поля сводной таблицы
- v7: 1С V7.7 в сети
- v7: 1C:V7 starter program (for SQL) - обнаружена ошибка
- v7: После тестирования БД пропадают документы
- v7: Перенос данных Бухгалтерия из v7 в v8
- v7: Медленное удаление помеч.на удаление документов после обрезки базы
- v7: v7 Перехват глобального события ПриЗаписи() или ОбработкаПроведения()
В этой группе 1С
- Объединить две таблицы по ссылке Что не так?
- Error#: -70 , Error#: -200 , Разрушен файл данных таблицы DH 1850
- Как через WEB сервис перебросить картинку - какой тип в XDTO ставить?
- УТ11. Где у юзера включить автозагрузку курсов валют?
- Не получается задать макет заголовка итоговой колонки в СКД
- v7: Выбрать значение справочника
- Как перевести диск из RAID массива в обычный режим
- v8: Переход на 64x Сервер 1С Предпряития - вопрос по переносу настроек
- Как сделать "двойное" условие запросе для конструкции "В"?
- v7: Предельный размер файловой базы
- Конвертация данных: подскажите, как сделать отбор в ПКО по организации?
- Переключатели в управляемой форме 1С 8.2
- УТ 11. Ошибка выполнения любого отчета на СКД после обновления платформы
- БП 2.0 Авансовый отчет. Как правильно заполнять?
- Настройка нового сервера для 1С с Hyper-V?
- УНФ доступ к одной организации
- Недостаточно фактических параметров при вызове дополнительного отчета.
- Ошибка при чтении XML
- Конвертор ИБ 1С Предприятия 7.7
- Настроить чековый принтер (USB) в штрих-м