Курс по Оптимизации 1С — Занятие №7
В рамках этого занятия необходимо изучить следующие материалы.
Модуль 3. Причины медленной работы
- Глава 8. Анализ причин медленной работы и оптимизация системы
- Подзапрос в условии соединения
- Работа с полями состовного типа в запросах
- Параметры виртуальной таблицы. Запросы в цикле
- Особенности работы с виртуальными таблицами
- Рекомендации по написанию запросов
Практическое задание
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии / обсуждение (221):
Комментарии закрыты

Как я понимаю в pdf «Решение практического задания» показано эталонное решение. Если да то я не понимаю ответ на задание 8.4 ведь у нас по факту получается куча таблиц которые в запросе не участвуют, а в качестве оптимизации предлагается перенести остатки во временную таблицу. Можно пояснить почему? Зарание спасибо.
…
(текст комментария доступен только участникам Мастер-группы)
Можно пояснить выражение «нужно было выбирать требуемые поля сразу в момент создания таблицы», если всего одна таблица в запросе?
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте.
В таблице итогов регистра накопления с включенным режимом разделения итогов хранятся пары одинаковых строк по измерениям, но разными значениями ресурсов и разделителя (Splitter). Та строка, у которой разделитель равен нулю, содержит ненулевой ресурс, а у которой разделитель равен единице — нулевой.
Например, так:
Номенклатура Склад Количество Разделитель
Товар1 Склад1 10 0
Товар1 Склад1 0 1
Почему так происходит?
…
(текст комментария доступен только участникам Мастер-группы)
После пересчета итогов запустил скрипт, который Вы в курсе приводите для подсчета нулевых строк, и получается, что нулевых записей в 2 раза меньше общего числа записей для каждого периода.
…
(текст комментария доступен только участникам Мастер-группы)
Почему после пересчета итогов в регистре общее число записей ровно в 2 раза больше нулевых?
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, доброго времени суток.
Бегло пробежался по комментариям и похожий вопрос увидел только от слушателя курса с ником «imagic». Вопрос касается к обращению к реквизиту составного типа через точку. В лекциях рекомендуется в таком случае для оптимизации пожертвовать размером хранимых данных в пользу производительности. Однако, в достаточно известной статье от Рупасова Константина есть пункт, в котором приводится пример использования оператора «Выбор … Когда… Тогда… Конец» совместно с оператором «Выразить(… КАК…)» — см. ниже. В лекциях же использование оператора «Выбор…» и полей составного типа наглядно демонстрируется не в его (оператора) пользу. Напишите, пожалуйста, по возможности, поподробнее, возможно ли корректное использование нескольких (а не одного, как в примере в уроке «3.8-2.50 Получение данных через точку. Решение») типов документов в одном поле запроса из реквизита составного типа («imagic» предложил использовать объединение нескольких запросов с использованием в них оператора «Выразить»).
Пример из статьи Константина Рупасова:
«…
| ВЫБОР
| КОГДА Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
| ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Номер
| КОГДА Продажи.Регистратор ССЫЛКА Документ.ЗаказПокупателя
| ТОГДА ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.ЗаказПокупателя).Номер…»
…
(текст комментария доступен только участникам Мастер-группы)
То есть, в таком случае СУБД создаст левое соединение только с несколькими таблицами, которые участвуют в выражениях оператора «Выразить», а не со всеми 20, которые входят в состав, правильно?
Ещё небольшой вопрос: есть оборотный регистр накопления — самое первое измерение (самое верхнее) составного типа. Пишем запрос в котором на данное измерение накладываем условие, плюс, условия на начало и конец периода (естественно, всё в параметрах виртуальной таблицы) — при анализе обнаруживаем, что по идее, должен отработать полностью оператор IndexSeek, НО «Profiler» упорно пихает данное измерение в предикаты, то есть получаем Seek…Where…; Поясните, пожалуйста, почему получается именно так?
…
(текст комментария доступен только участникам Мастер-группы)
Нет… :( Всё равно используется «Seek…Where…»; Получается, дело не в составном типе измерения… Текст запроса, который для теста использовал и его же текстовый план во вложении.
…
(текст комментария доступен только участникам Мастер-группы)
Хорошо, как только «окно» появится, постараюсь «обрезать» данные и выложить выгрузку.
Вопрос, связанный с заданием 7. В курсе говорилось, что соединение с виртуальной таблицей само по себе является потенциальным источником проблем, также как и сподзапросом (т.к. «внутри» виртуальная таблица — это подзапрос и есть). Тем не менее в «эталонном решении» подзапрос в отдельную временную таблицу вынесли,
а виртуальную таблицу не стали. Т.е. решили, что вместо соединения подзапроса с виртуальной таблицей достаточно сделать соединение временой таблиц с виртуальной. Почему не стали доводить до логического конца — создавать на основе виртальной таблицы врременную и делать соединение двух временных таблиц?
…
(текст комментария доступен только участникам Мастер-группы)
Да, действительно, проявил невнимательность. Приношу извинения.
При просмотре уроков, посвященных причинам медленной работе запросов возник вопрос: а в файловой базе такие же проблемы? Например, обращение к полю через несколько точек, «тонкие» места при работе с полем составного типа и т.д. Это для общего понимания.
…
(текст комментария доступен только участникам Мастер-группы)
А что значит больших объемов и высокой нагрузки?
С высокой нагрузкой вроде понятно — ожидания на блокировках пошли, значит «война» за ресурсы, файловую базу переросли. А вот касаемо больших объемов? У меня примеры есть, когда 10 человек работаю в базе (не очень активно и конкуренции нет), но базы уже больше 10-15 ГБ. Естественно работают в терминале. Такой размер считается нежелательно большим для файлового режима?
…
(текст комментария доступен только участникам Мастер-группы)
Возникла неожиданная проблема при включении Итогов на срез последних у регистров сведений в 8.3
Типовой построитель отчетов перестает правильно работать, если данные в регистр сведений вносятся задним числом он их не ловит. Видимо нужен пересчет итогов…
СКД при это работает корректно…
Возник вопрос, как программно пересчитать итоги по регистру сведений?
…
(текст комментария доступен только участникам Мастер-группы)
Возник вопрос по практическому заданию №7.
Текст запроса увидел, но нет конфигурации и БД на тестирование запроса и просмотра плана запроса.
Ну просто как минимум видно основные проблемы запроса, но например непонятно используются ли индексы к полям отбора и т.д.
Как получается сдавать решение по заданию если его нельзя даже отконфигурировать?
…
(текст комментария доступен только участникам Мастер-группы)
Просто интересно было б посмотреть на выполнения планов запроса с использованием соединений как было приведено в курсе. Тоесть соединения виртальной таблицы с физической. Как оптемальней толи загонять это во временную ну и т.д.
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, спасибо за ответы на мои многочисленные вопросы))
Вопрос по индексам во временных таблицах.
1. Как они будут работать?
2. Что будет, если, например, реальная таблица проиндексирована по одному полю, а временную таблицу индексируем по другому?
…
(текст комментария доступен только участникам Мастер-группы)
Определяемые типы в 8.3, имеют такие же ограничения в запросах как и составные типы?
…
(текст комментария доступен только участникам Мастер-группы)
Вопрос (уточнение) про подсчет количества нулевых строк в таблице итогов. Если у меня участвуют не один, а несколько ресурсов, например, количество, сумма, сумма НУ, то тогда условие надо ставить одновременно по всем ресурсам?
…
(текст комментария доступен только участникам Мастер-группы)
Вопрос про Объединить и Объединить Все. А как потом без вреда для производительности сгруппировать данные?
…
(текст комментария доступен только участникам Мастер-группы)
Конструкция Выбор Когда с полями НЕ составного типа тоже лучше не использовать?
…
(текст комментария доступен только участникам Мастер-группы)
Вопрос по обращение через точку к полям составного типа. Можно ли считать решением объединение?
Т.е.
Выразить(…).поле
Объединить все
Выразить(…).поле
Объединить все
Выразить(…).поле ?
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, добрый день.
А есть какие нибудь рекомендации по работе с планом видов характеристик?
Например в УТ 11, на ПВХ реализован механизм дополнительных реквизитов, да и в остальных типовых он используется сплошь и рядом. И получается заведомо не оптимальная система…
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте, Андрей.
Вы часто говорите о том, что оптимизатор подбирает оптимальный план за определенное ограниченное время. Можно ли каким-либо образом изменить это время(увеличить/уменьшить время для поиска оптимального плана запроса)? Если да, то каким образом?
Сколько времени дается оптимизатору на построение плана запроса?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день. Вопрос такой: указанный тест запроса не на тестовой базе собран? Какую базу пользовать для оптимизации?
…
(текст комментария доступен только участникам Мастер-группы)
Попробовал получить остатки по группе товаров тремя способами
1. ИЗ Остатки() ГДЕ Номенклатура в иерархии ()
2. ИЗ Остатки(Номенклатура в иерархии () )
3. Выбрал товары из группы, поместил в виртуальную таблицу и затем соединил эту таблицу с остатками
Разницы в скорости не заметил (результат ~3000 строк), время выполнения ~1 сек.
Может, 3000 мало и надо 300 тыс? Как сделать расчет остатков наиболее быстрым способом по известному набору товаров?
…
(текст комментария доступен только участникам Мастер-группы)
В уроке 8-2-50 говорится, что надо использовать конструкцию «Выразить», а не «ссылка» для отбора номера документа по виду.
Это не совсем так: надо использовать обе конструкции.
Если меня интересуют номера документов поступлений товаров и я в запросе к регистру взаиморасчетов пишу «выразить», то запрос возвращает все 400 тыс записей, только номера пустые для случая, когда взаиморасчеты двигаются не поступлением. А если написать «где ссылка», тогда запрос возвращает 11тыс записей.
Причем если использовать только ссылку, без выразить, то он выполняется практически так же быстро (менее 1 сек на MSSQL), несмотря на гораздо более сложную схему плана запроса.
…
(текст комментария доступен только участникам Мастер-группы)
У меня в УПП,есть фрагмент в запросе
РегистрНакопления.ПартииТоваровНаСкладах.Остатки(&Дат, Номенклатура В
(ВЫБРАТЬ
СписанныеТовары.Номенклатура
ИЗ
СписанныеТовары ГДЕ СписанныеТовары.Регистратор = &Ссылка)
Анализирую план выполнения этого фрагмента. Получается следующее:
Вначале вытираются ВСЕ остатки в конце периода 13 милинонов строк, без фильтра по номенклатуре, движения выбираются фильтром с номенклатурой. и потом Nested Loops 13 милионов раз проходится соединяя эти таблицы.
Как лучше переписать этот фрагмент?
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте, Андрей.
У меня вопрос по полям составного типа.
Допустим имеется некое поле составного типа, все типы ссылочные.
Где 1С или СУБД (MS SQL) хранит информацию о том, какой тип в 1С (ПоступлениеТоваровСсылка, ПродажаТоваровСсылка и т.п.) какому типу(значению) в СУБД соответствует? Какими средствами это можно посмотреть?
…
(текст комментария доступен только участникам Мастер-группы)
То что создается несколько колонок это понятно.
Мне не понятно каким образом определить, что тип «ПоступлениеТоваровСсылка» соответствует в SQL значению «0x000000FA»(значение взято произвольно), а тип «ПродажаТоваровСсылка» соответствует в SQL значению «0x000000FB»?
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте, Андрей. А если не секрет, какая конфигурация используется для запросов в домашних заданиях? Что-то я никак не соображу.
…
(текст комментария доступен только участникам Мастер-группы)
Правильно ли я понимаю, что для временных таблиц возможен только один индекс? Допустим у меня 3 поля в ВТ А, Б и В. Допустим запрос выстроен так, что где-то мне нужно соединение по А и Б, где-то по Б, затем по А, а где-то по Б и В. Как быть в этом случае? Создавать отдельную ВТ для каждого соединения?
…
(текст комментария доступен только участникам Мастер-группы)
Есть вопрос-уточнение по заданию 7: нужно ли индексировать временные таблицы, если предполагается, что в табличной части накладной будет небольшое количество строк (до 20)? Ведь на индексацию тоже уходит время.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день. Не подскажите, как можно избежать конструкции
Выбор Когда Субконто1 is NULL Тогда
Когда …
Иначе
Конец
?
…
(текст комментария доступен только участникам Мастер-группы)
Конфигурация «в наследство» досталась, увы.
Вопро про количество таких комбинаций (Выбор Когда Тогда) в запросе. У меня их количество, по-видимому, превысило какое-то количество и SQL выдал ошибку. На какое количество комбинаций в SQL заложено условие о «превышении»?
…
(текст комментария доступен только участникам Мастер-группы)
В своей тестовой базе при включении итогов (срез последних) для РС цены номенклатуры в консоли запросов увидел вот такую интересную картину. Версия платформы 1С:Предприятие 8.3 (8.3.5.1186). Внутри обе таблицы одинаковые. Можете как-то прокомментировать такой эффект?
…
(текст комментария доступен только участникам Мастер-группы)
В общем-то я так и решил:) Спасибо
Есть форма списка журнала документов контрагентов. При его открытие, все обрабатывается мгновенно. Судя по трассировке система просто выбирает первые N записей (N видимо число записей, которые поместится на экране), за определенную дату.
А вот если указать отбор в журнале, например, по контрагенту, то система задумается на несколько минут. Этот механизм вообще как-то поддается оптимизации? Журнал документов индексирован по контрагенту.
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, в курсе вы сказали о новой возможности 8.3 в части использования регистров сведений, и создания дополнительной таблицы итогов.
Поставил галку — таблица итогов появилась, но у нее один автоматический индекс, а как сделать дополнительный индекс для измерения ВидСтатуса (в основной таблице он он есть…)
Таблица: РегистрСведений.СКЛ_ИсторияИзмененияСтатусовОбъектов, Имя таблицы хранения: InfoRgSL32157, Назначение: ИтогиСрезПоследних
— поля:
(Period)
Объект (Fld30903)
ВидСтатуса (Fld30904)
Статус (Fld30905)
Пользователь (Fld30906)
ДокументДвижения (Fld30907)
— индексы:
ByDims
Объект + ВидСтатуса (Fld30903 + Fld30904)
…
(текст комментария доступен только участникам Мастер-группы)
Андрей а можно увидеть запрос 1С из п.5 8-го задания
…
(текст комментария доступен только участникам Мастер-группы)
это понятно , просто Ваш ответ на это задание показался каким то «простым» . я думал там больше проблем . Может в закрытой части для тех кто уже ответил имеет смысл его выложить
…
(текст комментария доступен только участникам Мастер-группы)
ясно -)
Здравствуйте.
По вашему решению задания № 7.
1. Вы индексируете таблицу ВремТаблицаНоменклатура. Заведомо известно, что она будет сканироваться.
При этом говорите что, если из врем. таблицы будете получать все данные, то нет смысла ее индексировать.
Проверил, с индексом работает быстрее.
Все-таки можно ли утверждать, что если индекс есть и он может быть использован, то он будет применен и получен выигрыш в скорости?
2. В таблице ВремТаблицаОстаток вы используете подзапрос в параметрах вирт. таблицы остатки для измерения номенклатура. Но в параметрах вирт. табл. это не рекомендуется. Проверил, работает медленнее, чем левое соединение по номенклатура.
Почему вы применяете именно этот прием?
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте.
Использование МИНИМУМ, МАКСИМУМ для полей составного типа.
1. При чтении плана запроса с УПОРЯДОЧИТЬ и ПЕРВЫЕ 1 можно ли сказать, что оператор Top запрашивает первую строку у оператора Index scan в котром применено предложение ORDERED?
2. Если не использовать УПОРЯДОЧИТЬ и ПЕРВЫЕ 1, то в скане индекса нельзя применить предложение ORDERED, что приводит к применению оператора Aggregate ко всей выборке, возвращаемой сканом. В результате — замедление. Верно?
…
(текст комментария доступен только участникам Мастер-группы)
Андрей,
Вот Вы рекомендуете не использовать соединения с подзапросами, а разбивать запрос на части и использовать временные таблицы. В случае MSSQL это выглядит логично и органично, а вот в случае, например, Oracle у меня уже возникают вопросы. А именно, как 1С транслирует на запросы Oracle использование временных таблиц? Ведь в Oracle нет такого понятия временных таблиц, как это есть в MSSQL.
Некоторое время назад я читал статью Тома Кайта (известного специалиста по Oracle) где он отвечал на вопрос программиста имевшего опыт в разработке на MSSQL и который хотел перейти на Oracle. Вопрос касался того, как же быть без временных таблиц в Oracle. Том Кайт ответил, что концепции в MSSQL и Oracle отличаются и что он настолько уверен в оптимизаторе Oracle, что рекомендует использовать его потенциал полностью, в том числе нагружая его подзапросами. Как Вы относитесь к такому мнению?
Заранее спасибо за ответ.
…
(текст комментария доступен только участникам Мастер-группы)
Может опечатка в условии?
———————
// Остаток по товару должен быть больше установленного лимита
Если (ВыборкаЛимитов.Лимит < ВыборкаОстатков.Остаток — ВыборкаОстатков.Количество) Тогда
Сообщить ("Документ не проведен!");
Отказ = Истина;
КонецЕсли;
—————————
Если (ВыборкаЛимитов.Лимит 100-95
или
2) Если НЕ (ВыборкаЛимитов.Лимит < ВыборкаОстатков.Остаток — ВыборкаОстатков.Количество) Тогда
Сообщить ("Документ не проведен!");
Отказ = Истина;
КонецЕсли;
——————-
Почему-то не сохраняется полностью мой текст ((((
…
(текст комментария доступен только участникам Мастер-группы)
Я просто стараюсь прогнать всю теорию и практические задания через тестовые базы )))
Вы пишите:
«В ИЕРАРХИИ надо стараться не использовать, лучше предварительно собрать список элементов из этой иерархии во врем таблицу, а потом в основном запросе написать
Или Поле1 В (Выбрать Поле1 ИЗ ВТ_ЭлементыИЗИерархии)
Или сделать внутреннее соединение со врем таблицей: Таб1 Внутреннее соединение ВТ_ЭлементыИЗИерархии ПО Таб1.Поле1= ВТ_ЭлементыИЗИерархии.Поле1»
1. Насколько я видел в profiler, при использовании В ИЕРАРХИИ платформа автоматичекси создает временную таблицу, заполняет ее за несколько проходов и использует в запросе. Это так?
2. Как самостоятельное заполнение поможет решить проблему скорости?
3. Как самостоятельно ее заполнить эффективнее, чем платформа?
…
(текст комментария доступен только участникам Мастер-группы)
Задание №7. Решение преподавателя.
1. Почему в последнем запросе использовано внутреннее соединение, а не левое? А если есть не все остатки или лимиты.
2. Поскольку задача на оптимизацию, то можно в последнем запросе использовать «Первые 1».
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте, Андрей. У меня такой вопрос: Имеется база УПП объемом за 100ГБ. В этой базе работают единовременно не более 30 пользователей. Первые четыре месяца Расчет себестоимости выпуска проводился за 4-6 часов, это 7 операций, а распределение и расчет прямых затрат за 2 -2,5 часа. Внезапно, с пятого месяца время проведения распределения и расчета прямых затрат увеличилось до 7 часов. Статистики обновлял, кэш не чистил, у нас СУБД MS SQL 2008R2. План запроса получить не просто, учитывая время проведения документа. А можно предположить в чем проблема до получения и разбора плана запроса? Могут ли данные влиять на скорость выполнения запрос?
…
(текст комментария доступен только участникам Мастер-группы)
У нас изменили способ распределения затрат в одном месяце, добавили фильтры, в итоге расчет себестоимости начал проводиться вместо 20 минут 3-4 часа.
Андрей, добрый день.
В одном из уроков прозвучала рекомендация по возможности не указывать период в виртуальной таблице остатков. Заметил, что при указании параметра периода, равной началу месяца план запроса также получается облегченный (конечно при условии рассчитанных итогов за указанный период). Можно ли быть постоянно уверенным в оптимальности запроса получения остатка на начало любого рассчитанного в системе месяца или есть какие-либо подводные камни?
Спасибо.
…
(текст комментария доступен только участникам Мастер-группы)
Вопросы по эталонному решению.
1. В параметрах вирт.таблицы ТоварыНаСкладах.Остатки в поле период стоит &Склад. Наверное это ошибка.
2. Проверка на лимиты в запросе — это наверное хорошо, но как понять из результатов запроса нужно ли проводить документ?
…
(текст комментария доступен только участникам Мастер-группы)
Но пустой запрос не даст нам сформировать движения по регистрам документа. Поэтому в своем решении я предложил вариант, в котором есть поле «ПревышенЛимит» типа «Булево» и сделал в окончательном запросе по этому полю упорядочивание по убыванию. При чтении выборки в цикле, если у нас есть действительно превышение лимита, то в первой итерации цикла будет выведено сообщение об ошибке и дальнейшее проведение документа будет прервано, а если превышение лимита нет, то в цикле формируются движения по регистру.
Андрей, добрый день!
Встречался на практике примерно со следующей ситуацией. Например, есть регистр, в котором хранятся остатки для 1 млн. значений измерения. Нам необходимо получить остатки только для 100 тыс. значений измерения. Предварительно эти 100 тыс. значений собраны во временную таблицу, например ВТ_ЗапрашиваемыеЗначения.
И далее получается, что намного быстрее: взять остатки по ВСЕМ значениям измерения, поместить их во временную таблицу и в следующем запросе отсечь лишнее соединением с временной таблицей ВТ_ЗапрашиваемыеЗначения,
нежели
указывать в параметрах вирт. таблицы отбор по данному измерению: Измерение В (Выбрать ВТ_ЗапрашиваемыеЗначения.Измерение Из ВТ_ЗапрашиваемыеЗначения).
Т.е. получается, что если мы читаем достаточно существенную порцию большого регистра, то лучше не использовать отбор на эту порцию в параметрах виртуальной таблицы?
…
(текст комментария доступен только участникам Мастер-группы)
думаю что учитывать характеристики мест хранения данных тоже есть смысл, если сделать РАМ-диск и разместить там темпдб, то ситуация может быть другой
т.е. значимым является «стоимость» потребления тех или иных ресурсов
Андрей, добрый день!
В каких случаях уместно во временных таблицах, в запросах, использовать закладку индекс? Какие поля нужно индексировать? Каким образом «ИНДЕКСИРОВАТЬ ПО» влияет на оптимизатор СУБД?
…
(текст комментария доступен только участникам Мастер-группы)
В статье http://kb.1c.ru/articleView.jsp?id=44 есть фраза: «Внимание! Не забудьте проиндексировать созданную временную таблицу. В качестве индексных полей следует указать все поля, которые используются в условии соединения.» Также она продублирована в «Настольной книге эксперта» на стр. 188.
1. Т.е. получается, что нужно ВСЕГДА индексировать поля временной таблицы, которые участвуют в соединении?
2. Правильно я понимаю, что если оптимизатор выбирает для соединения hash match или merge join, то наличие/отсутствие индексов по полям соединения никак не влияет на скорость выполнения соединения?
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте!
Хотел уточнить, как хранятся итоги среза первых/последних для регистра сведений в 8.3. Итоги хранятся только на актуальную дату (3999-11-01) или для всех дат? Остатки по регистру накопления, например, хранятся по месяцам, а на промежуточные даты рассчитываются с учетом оборотов.
…
(текст комментария доступен только участникам Мастер-группы)
Здравствуйте. Есть ли какие-нибудь рекомендации по использованию условия «В». Если в запрос передаётся массив значений и на поле накладывается условие «В» ? Если передаётся таблица значений и накладывается условие «В» по нескольким полям? Нужно ли предварительно выбирать данные из массива/таблицы значений в во временную таблицу, индексировать и только потом соединять?
Так же интересуют особенности работы с индексами оператора «В ИЕРАРХИИ».
…
(текст комментария доступен только участникам Мастер-группы)
Доброе утро. Правильно ли я понял, что при передаче в запрос массива значений (пусть даже разного типа) и при использовании условия МоёПоле В (&МойМассив) индекс будет использоваться?
…
(текст комментария доступен только участникам Мастер-группы)
Т.е. переданный массив индексируется СУБД автоматически?
…
(текст комментария доступен только участникам Мастер-группы)
Если идет замена на OR и индексы используются, тогда как быть с информацией из видео «35.Условия, не позволяющие использовать индекс. ИЛИ».
Что я упускаю из виду? Когда OR это хорошо а когда плохо?
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, добрый день. У меня такой вопрос, допустим есть два регистра Остатки и Продажи. измерения, ресурсы одинаковые — номенклатура и количество. Нужно получить таблицу вида Номенклатура, КоличествоОстаток, ПродажиЗаПериод. Есть два варианта — соединить эти регистры или объединить с последующей группировкой. Делал замеры — время выполнения примерно одинаковое. Вопрос что лучше использовать и при каких условиях, может общие рекомендации какие есть?
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, здравствуйте!
У меня такой вопрос: как лучше делать, с точки зрения производительности, соединять 3-4 таблицы разом или постепенно соединять их, используя временные таблицы?
На создание ВТ и индексацию ведь тратятся определенные ресурсы, но зато текст запроса получается более читаемый и аккуратный что ли.
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, не помню в каком занятии вы говорили об эскалации и гранулярности, подскажите, а где посмотреть эти сущности, то есть как увидеть что СУБД выполнила эскалацию и это свойство гранулярности ?
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день
Есть ли какие-то негативные последствия если включать флаги «разрешить итоги (срез последних/первых)» для регистров сведений, подчиненных регистратору.
…
(текст комментария доступен только участникам Мастер-группы)
Добрый день. Вопрос по использованию таблиц среза последних для регистра сведений в 8.3. Встречались ли Вы со такими случаями, когда запрос при установке флага «разрешить итоги» запрос к таблице среза последних может возвращать разные данные, если указывать дату в параметрах виртуальной таблицы, и если не указывать? То есть запросы вида Выбрать * ИЗ РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(&Дата,) И Выбрать * ИЗ РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(,) возвращают разные данные, даже если параметр Дата равен концу текущего дня. У меня встречалась такая проблема и я так до конца и не понял, в чем дело и как с этим бороться.
…
(текст комментария доступен только участникам Мастер-группы)
А если есть вопрос по 7-му заданию, который может раскрывать часть решения, его тоже тут задавать ? (Вопрос вида «а будут ли вот такие-то дополнительные действия оптимизировать код? «) Или эти вопросы описать сразу в решении?
…
(текст комментария доступен только участникам Мастер-группы)
Я имел ввиду, что есть вопросы к вам по материалам занятия:
1. Нужно ли индексировать виртуальную таблицу, если мы ее группируем? (Перед группировкой табличная часть сортируется?)
2. А если в ТЧ Товары установить свойство “Индексировать” реквизиту “Номенклатура”, будет ли вариант оптимизации “соединить табличную часть с таблицами остатов и лимитов, а потом уже группировать” хуже/равнозначен/лучше, чем вариант ” поместить табличную часть в виртуальную таблицу, а потом соединять ” ?
3. По 3-му вопросу, судя по решению, я правильно понимаю, что нет смысла «оптимизировать» установку параметра запроса СпрСклады.НайтиПоНаименованию(“Основной”) путем переноса этого поиска в основной запрос?
…
(текст комментария доступен только участникам Мастер-группы)
В образце решения ПР №7 маленький недочет: «потеряно» условие по складу в фильтре виртуальной таблицы остатков РН
…
(текст комментария доступен только участникам Мастер-группы)
Параметр &Склад на месте периода, должно быть &Склад И …
…
(текст комментария доступен только участникам Мастер-группы)
Есть вопрос по практическому заданию №7: логика при разборе кода должна быть сохранена?
Сейчас получается, что запрос и проверка на лимиты работают только для одного склада «Основной». Также проверка на лимиты не работает, если товара нет в остатке.
Нужно ли обращать внимание на эти моменты при решении или задача состоит только в оптимизации запросов?
…
(текст комментария доступен только участникам Мастер-группы)
Всё понял.
На странице с ответами на практическое задание 8 не закрыты комментарии :)
Добрый день!
На странице с заданием 8 нужно только отчитываться о выполнении задания.
По одному из 5 запросов задания 8 есть вопрос.
Он синтаксически некорректен. Либо так задумывалось, либо он другой.
…
(текст комментария доступен только участникам Мастер-группы)
Андрей, добрый день,
практическое-задание-08
Практическое задание 8-3.txt
Ошибся, всё хорошо, кроме префикса РМС_ у псевдонима таблицы (РМС_УпаковкиВДокументах), т.к. далее используется без префикса в соединении.
Текст запроса:
ВЫБРАТЬ
УпаковкиВДокументах.Упаковка.Ссылка КАК Упаковка
ПОМЕСТИТЬ ОтгруженныеУпаковки
ИЗ
РегистрСведений.УпаковкиВДокументах КАК РМС_УпаковкиВДокументах
ВНУТРЕННЕЕ СОЕДИНЕНИЕ УпаковкиВДок КАК УпаковкиВДок
ПО УпаковкиВДокументах.Упаковка.Ссылка = УпаковкиВДок.УпаковкиВДокументах.Ссылка
ГДЕ
УпаковкиВДокументах.Документ.Ссылка ССЫЛКА Документ.РеализацияТоваровУслуг
…
(текст комментария доступен только участникам Мастер-группы)