Подскажите, пожалуйста. Цель получить дату документа продажи. Такой запрос оптимальный или есть вариант лучше.
ВЫБРАТЬ
ДокументыРеализацииСерийСрезПоследних.ДокументПродажи КАК ДокументПродажи,
ДокументыРеализацииСерийСрезПоследних.Период КАК ДатаПродажи,
ДокументыРеализацииСерийСрезПоследних.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ втДокументыРеализацииСрез
ИЗ
РегистрСведений.ДокументыРеализацииСерий.СрезПоследних(, Серия = &Серия) КАК ДокументыРеализацииСерийСрезПоследних
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
втДокументыРеализацииСрез.ДокументПродажи КАК ДокументПродажи,
втДокументыРеализацииСрез.ДатаПродажи КАК ДатаПродажи,
втДокументыРеализацииСрез.Номенклатура КАК Номенклатура,
ЕСТЬNULL(втДокументыРеализацииСрез.ДокументПродажи.Дата, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаДокументаПродажи
ИЗ
втДокументыРеализацииСрез КАК втДокументыРеализацииСрез
ПоказатьПо теме из базы знаний
- Общая Форма Списка, построенная на Запросе
- Сведения об ОС - отчет тормозит. Неоптимальный запрос или странное поведение платформы?
- Управляемая консоль запросов, отчетов 3.9.0 (расширение, внешняя обработка)
- Смотрим запросы 1С через Microsoft SQL Profiler по следам ошибок разработчиков, приводящих к проблемам производительности
- Быстрый фронт в базе размером 6.8 терабайт – наши стандарты при разработке и рефакторинге запросов
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Это очень оптимально! Для того ,чтобы получить Дату из документа - несомненно необходимо использовать несколько временных таблиц!
PS. 13 лет на форуме, 193 звездочки.
PPS. А что - бывают документы без даты?
PS. 13 лет на форуме, 193 звездочки.
PPS. А что - бывают документы без даты?
(15) Он уже отобрал в параметрах виртуальной таблицы НУЖНЫЕ ему записи. То есть соединяются уже явно НЕ ВСЕ. А только записи виртуальной таблицы. (у него же нет дополнительного отбора ГДЕ)
Зачем дополнительно пихать записи виртуальной таблицы во временную - не понимаю.
Зачем дополнительно пихать записи виртуальной таблицы во временную - не понимаю.
(20) В данном случае, если сразу выбирать реквизит Дата у виртуальной таблицы, то будут соединения с таблицами составного типа, у которых есть такой тип реквизита.
И да, тесты это подтверждают.
Для теста, создал периодический независимый РС. В измерение добавил Объект тип ЛюбаяСсылка. Вторым измерением тип Строка, для отбора.
Гарантированно добавил только одну запись соответствующую отбору. И несколько записей не соответствующих. отбору.
При выбирании Поле Дата, план выполнения запроса построил соединение со всеми таблицами все возможных документов.
Вот повторяющаяся часть плана для каждого типа документов:
Причем, даже с теми, записи по которым вообще не делались в РС. Так что ничем не отличается от такой же выборки реквизита регистратора. Только вместо регистратора используется составной тип измерения.
И да, тесты это подтверждают.
Для теста, создал периодический независимый РС. В измерение добавил Объект тип ЛюбаяСсылка. Вторым измерением тип Строка, для отбора.
Гарантированно добавил только одну запись соответствующую отбору. И несколько записей не соответствующих. отбору.
При выбирании Поле Дата, план выполнения запроса построил соединение со всеми таблицами все возможных документов.
Вот повторяющаяся часть плана для каждого типа документов:
NESTED OUTER LOOP
_Document43 (T6) RANGE SCAN USING INDEX (_IDRREFIDX) (1 fields)
WHERE
(T1.Fld119_TYPE = 08)
AND
(T1.Fld119_RTRef = 0000002B)
AND
(T1.Fld119_RRRef = T6._IDRRef)
Причем, даже с теми, записи по которым вообще не делались в РС. Так что ничем не отличается от такой же выборки реквизита регистратора. Только вместо регистратора используется составной тип измерения.
(5) Тогда ничего особо не оптимизируешь.
ВЫБРАТЬ
ДокументыРеализацииСерийСрезПоследних.ДокументПродажи КАК ДокументПродажи,
ДокументыРеализацииСерийСрезПоследних.Период КАК ДатаПродажи,
ДокументыРеализацииСерийСрезПоследних.Номенклатура КАК Номенклатура,
ДокументыРеализацииСерийСрезПоследних.ДокументПродажи.Дата КАК ДатаДокументаПродажи
ИЗ
РегистрСведений.ДокументыРеализацииСерий.СрезПоследних(, Серия = &Серия) КАК ДокументыРеализацииСерийСрезПоследних
В некоторых случаях, когда в результате запроса количество различных типов документов почти всегда меньше всех возможных, то можно сделать в 2 этапа:
Сначала получить данные без даты, а затем отдельным запросом получить Даты документов, ограничив связь по фактическим типам.
Сначала получить данные без даты, а затем отдельным запросом получить Даты документов, ограничив связь по фактическим типам.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот