Помогите оптимизировать запрос

1. insurgut 207 10.10.14 02:18 Сейчас в теме
В последнее время стал очень долго отрабатывать запрос. Помогите оптимизировать :) Что-то в нем явно не так...

ВЫБРАТЬ РАЗЛИЧНЫЕ
	СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура,
	ОсновнаяТаблица.Регистратор,
	ОсновнаяТаблица.ВидДвижения,
	ОсновнаяТаблица.НомерСтроки,
	ЕСТЬNULL(ОсновнаяТаблица.КоличествоПриход, 0) КАК КоличествоПриход,
	ЕСТЬNULL(ОсновнаяТаблица.СтоимостьПриход, 0) КАК СтоимостьПриход,
	ЕСТЬNULL(ОсновнаяТаблица.КоличествоРасход, 0) КАК КоличествоРасход,
	ЕСТЬNULL(ОсновнаяТаблица.ЦенаПриход, 0) КАК ЦенаПриход,
	СебестоимостьТоваров.Регистратор.Партнер.Ссылка,
	ОсновнаяТаблица.Период
ИЗ
	РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
			СебестоимостьТоваров.Период КАК Период,
			СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
			СебестоимостьТоваров.Регистратор КАК Регистратор,
			СебестоимостьТоваров.НомерСтроки КАК НомерСтроки,
			СебестоимостьТоваров.ВидДвижения КАК ВидДвижения,
			СебестоимостьТоваров.Количество КАК КоличествоПриход,
			СебестоимостьТоваров.Стоимость КАК СтоимостьПриход,
			NULL КАК КоличествоРасход,
			NULL КАК СтоимостьРасход,
			ВЫБОР
				КОГДА СебестоимостьТоваров.Стоимость ЕСТЬ NULL 
						ИЛИ СебестоимостьТоваров.Количество ЕСТЬ NULL 
					ТОГДА 0
				ИНАЧЕ СебестоимостьТоваров.Стоимость / СебестоимостьТоваров.Количество
			КОНЕЦ КАК ЦенаПриход
		ИЗ
			РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров
		ГДЕ
			СебестоимостьТоваров.ВидДвижения = &Приход
			И СебестоимостьТоваров.Период >= &ДатаНачалаПриход
			И СебестоимостьТоваров.Период <= &ДатаОкончанияПриход
			И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
			И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РаспределениеРасходовНаСебестоимостьТоваров)
			И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РасчетСебестоимостиТоваров)
		
		ОБЪЕДИНИТЬ ВСЕ
		
		ВЫБРАТЬ
			СебестоимостьТоваров.Период,
			СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура,
			СебестоимостьТоваров.Регистратор,
			СебестоимостьТоваров.НомерСтроки,
			СебестоимостьТоваров.ВидДвижения,
			NULL,
			NULL,
			СебестоимостьТоваров.Количество,
			СебестоимостьТоваров.Стоимость,
			NULL
		ИЗ
			РегистрНакопления.СебестоимостьТоваров КАК СебестоимостьТоваров
		ГДЕ
			СебестоимостьТоваров.ВидДвижения = &Расход
			И СебестоимостьТоваров.Период >= &ДатаНачалаРасход
			И СебестоимостьТоваров.Период <= &ДатаОкончанияРасход
			И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)) КАК ОсновнаяТаблица
		ПО СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура = ОсновнаяТаблица.Номенклатура
ГДЕ
	СебестоимостьТоваров.ВидДвижения = &Приход
	И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
	И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РаспределениеРасходовНаСебестоимостьТоваров)
	И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РасчетСебестоимостиТоваров)
Показать
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
27. Lord_Michael 10.10.14 11:50 Сейчас в теме
(26) insurgut, попробуйте так

ВЫБРАТЬ
    СебестоимостьТоваров.Период КАК Период,
    СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    СебестоимостьТоваров.Регистратор КАК Регистратор,
    СебестоимостьТоваров.Регистратор.Партнер КАК Партнер,
    СебестоимостьТоваров.ВидЗапасов.Поставщик КАК Поставщик,
    СебестоимостьТоваров.КоличествоПриход КАК КоличествоПриход,
    СебестоимостьТоваров.СтоимостьПриход КАК СтоимостьПриход,
    СебестоимостьТоваров.КоличествоРасход КАК КоличествоРасход,
    СебестоимостьТоваров.СтоимостьРасход КАК СтоимостьРасход,
    ВЫБОР
        КОГДА СебестоимостьТоваров.КоличествоПриход = 0
            И СебестоимостьТоваров.СтоимостьПриход = 0
            ТОГДА &Расход
        КОГДА СебестоимостьТоваров.КоличествоРасход = 0
            И СебестоимостьТоваров.СтоимостьРасход = 0
            ТОГДА &Приход
    КОНЕЦ КАК ВидДвижения,
    ВЫБОР
        КОГДА СебестоимостьТоваров.КоличествоПриход = 0
            И СебестоимостьТоваров.СтоимостьПриход = 0
                ТОГДА 0
        ИНАЧЕ СебестоимостьТоваров.СтоимостьПриход / СебестоимостьТоваров.КоличествоПриход
    КОНЕЦ КАК ЦенаПриход
ПОМЕСТИТЬ ВТ_СебестоимостьТоваров
ИЗ
    РегистрНакопления.СебестоимостьТоваров.Обороты(&ДатаНачалаПриход, &ДатаОкончанияПриход, Регистратор, ) КАК СебестоимостьТоваров
ГДЕ
    (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РаспределениеРасходовНаСебестоимостьТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РасчетСебестоимостиТоваров)
;

////////////////////////////////////////////////////////////­///////////////////    
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТ_СебестоимостьТоваров.Номенклатура,
    ВТ_СебестоимостьТоваров.Поставщик
ПОМЕСТИТЬ ВТ_ТоварыПоставщиков
ИЗ
    ВТ_СебестоимостьТоваров КАК ВТ_СебестоимостьТоваров
ГДЕ
    ВТ_СебестоимостьТоваров.ВидДвижения = &Приход
;

////////////////////////////////////////////////////////////­///////////////////    
ВЫБРАТЬ
    ВТ_ТоварыПоставщиков.Номенклатура,
    ВТ_ТоварыПоставщиков.Поставщик,
    ОсновнаяТаблица.Период,
    ОсновнаяТаблица.Регистратор,
    ОсновнаяТаблица.Партнер,
    ОсновнаяТаблица.ВидДвижения,
    ОсновнаяТаблица.КоличествоПриход,
    ОсновнаяТаблица.СтоимостьПриход,
    ОсновнаяТаблица.КоличествоРасход,
    ОсновнаяТаблица.СтоимостьРасход,
    ОсновнаяТаблица.ЦенаПриход
ИЗ
    ВТ_ТоварыПоставщиков КАК ВТ_ТоварыПоставщиков
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СебестоимостьТоваров КАК ОсновнаяТаблица
        ПО ВТ_ТоварыПоставщиков.Номенклатура = ОсновнаяТаблица.Номенклатура
            И ВТ_ТоварыПоставщиков.Поставщик = ОсновнаяТаблица.Поставщик
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
14. alex_sh2008 4 10.10.14 09:36 Сейчас в теме
(1) insurgut, Избавьтесь от "ВЫБРАТЬ РАЗЛИЧНЫЕ".
16. AlX0id 10.10.14 10:03 Сейчас в теме
(1) insurgut,
http://kb.1c.ru/articleView.jsp?id=44 в помощь )
Ну и профайлер, как самый точный инструмент )
2. insurgut 207 10.10.14 06:56 Сейчас в теме
3. MARISHA_Viktoria 35 10.10.14 06:59 Сейчас в теме
а попробуй условия поставить в параметры виртуальной таблицы
4. Lord_Michael 10.10.14 07:36 Сейчас в теме
для начала попробуйте использовать виртуальные таблицы регистра вместо реальных, например, Обороты с периодичностью Запись или Регистратор. и не забудьте указать параметры виртуальных таблиц, в первую очередь хотя бы период.

во-вторых, избавьтесь от объединения во вложенном запросе. например, можно использовать конструкцию для полей

ВЫБОР
    КОГДА СебестоимостьТоваров.ВидДвижения = &Приход ТОГДА
        СебестоимостьТоваров.Количество
    ИНАЧЕ 0
КОНЕЦ КАК КоличествоПриход,
5. Lord_Michael 10.10.14 08:09 Сейчас в теме
что-то вроде этого должно получиться:

ВЫБРАТЬ РАЗЛИЧНЫЕ
    СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура,
    ОсновнаяТаблица.Регистратор,
    ОсновнаяТаблица.ВидДвижения,
    ОсновнаяТаблица.НомерСтроки,
    ЕСТЬNULL(ОсновнаяТаблица.КоличествоПриход, 0) КАК КоличествоПриход,
    ЕСТЬNULL(ОсновнаяТаблица.СтоимостьПриход, 0) КАК СтоимостьПриход,
    ЕСТЬNULL(ОсновнаяТаблица.КоличествоРасход, 0) КАК КоличествоРасход,
    ЕСТЬNULL(ОсновнаяТаблица.ЦенаПриход, 0) КАК ЦенаПриход,
    СебестоимостьТоваров.Регистратор.Партнер.Ссылка,
    ОсновнаяТаблица.Период
ИЗ
    РегистрНакопления.СебестоимостьТоваров.Обороты(&ДатаНачалаПриход, &ДатаОкончанияПриход, Регистратор, ) КАК СебестоимостьТоваров
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
            СебестоимостьТоваров.Период КАК Период,
            СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
            СебестоимостьТоваров.Регистратор КАК Регистратор,
            СебестоимостьТоваров.НомерСтроки КАК НомерСтроки,
            СебестоимостьТоваров.ВидДвижения КАК ВидДвижения,
            ВЫБОР
                КОГДА СебестоимостьТоваров.ВидДвижения = &Приход 
            		ТОГДА СебестоимостьТоваров.Количество
            	ИНАЧЕ 0
            КОНЕЦ КАК КоличествоПриход,
            ВЫБОР
                КОГДА СебестоимостьТоваров.ВидДвижения = &Приход 
            		ТОГДА СебестоимостьТоваров.Стоимость
            	ИНАЧЕ 0
            КОНЕЦ КАК СтоимостьПриход,
            ВЫБОР
                КОГДА СебестоимостьТоваров.ВидДвижения = &Расход 
            		ТОГДА СебестоимостьТоваров.Количество
            	ИНАЧЕ 0
            КОНЕЦ КАК КоличествоРасход,
            ВЫБОР
                КОГДА СебестоимостьТоваров.ВидДвижения = &Расход 
            		ТОГДА СебестоимостьТоваров.Стоимость
            	ИНАЧЕ 0
            КОНЕЦ КАК СтоимостьРасход,
            ВЫБОР
                КОГДА СебестоимостьТоваров.ВидДвижения = &Расход
                		ИЛИ СебестоимостьТоваров.Стоимость ЕСТЬ NULL 
                        ИЛИ СебестоимостьТоваров.Количество ЕСТЬ NULL
                    ТОГДА 0
                ИНАЧЕ СебестоимостьТоваров.Стоимость / СебестоимостьТоваров.Количество
            КОНЕЦ КАК ЦенаПриход
        ИЗ
            РегистрНакопления.СебестоимостьТоваров.Обороты(&ДатаНачалаПриход, &ДатаОкончанияПриход, Регистратор, ) КАК СебестоимостьТоваров
        ГДЕ
            (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
            И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РаспределениеРасходовНаСебестоимостьТоваров)
            И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РасчетСебестоимостиТоваров)) КАК ОсновнаяТаблица
        ПО СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура = ОсновнаяТаблица.Номенклатура
ГДЕ
    СебестоимостьТоваров.ВидДвижения = &Приход
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РаспределениеРасходовНаСебестоимостьТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РасчетСебестоимостиТоваров)
Показать


если бы указали конфу, то даже проверить можно было бы))
6. jarinat 10.10.14 08:14 Сейчас в теме
Попробуйте так же вместо трех запросов к одному регистру, получить одним запросом все необходимые данные и поместить их в виртуальную таблицу, а остальные запросы уже делать к этой виртуальной таблице.
7. proger2011 10.10.14 08:16 Сейчас в теме
Доброго времени суток!

Во-первых, сделайте выборку данных через виртуальные таблицы, на примере первой таблицы:
| ВЫБРАТЬ РАЗЛИЧНЫЕ
|    СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура,
|       ...................
|       СебестоимостьТоваров.Регистратор.Партнер.Ссылка
|    
|ИЗ
|    РегистрНакопления.СебестоимостьТоваров.Обороты(,,Регистратор, {"Перечень измерений регистра для наложения условий (для СКД или построителя отчета)"}) КАК СебестоимостьТоваровОборот


Во-вторых, выборки в соединении тоже надо делать через виртуальные таблицы.
8. insurgut 207 10.10.14 08:21 Сейчас в теме
Конфигурация УТ 11.1.2.10
9. insurgut 207 10.10.14 08:31 Сейчас в теме
Уточню, в оборотном регистре вида движения нету. Как понимаю определять его условием надо, что-то вроде "СуммаПриход > 0 Тогда приход"
10. Uncore 1274 10.10.14 09:00 Сейчас в теме
(9) insurgut, так и надо. Только для пущей правильности следует проверять так:
ВЫБОР КОГДА ИмяТаблицы.КоличествоПриход - ИмяТаблицы.КоличествоРасход > 0 ТОГДА // для прихода
ВЫБОР КОГДА ИмяТаблицы.КоличествоРасход - ИмяТаблицы.КоличествоПриход > 0 ТОГДА // для расхода

т.к. в некоторых регистрах приход отражается как расход с минусом и наоборот.
11. Lord_Michael 10.10.14 09:02 Сейчас в теме
(9) согласен, вида движения нет, как и НомерСтроки.
с учетом всех предыдущих постов предлагаю такой вариант. подойдет, если НомерСтроки не критичен.

ВЫБРАТЬ РАЗЛИЧНЫЕ
    СебестоимостьТоваров.Период КАК Период,
    СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    СебестоимостьТоваров.Регистратор КАК Регистратор,
    СебестоимостьТоваров.Регистратор.Партнер КАК Партнер,
    СебестоимостьТоваров.КоличествоПриход КАК КоличествоПриход,
    СебестоимостьТоваров.СтоимостьПриход КАК СтоимостьПриход,
    СебестоимостьТоваров.КоличествоРасход КАК КоличествоРасход,
    СебестоимостьТоваров.СтоимостьРасход КАК СтоимостьРасход,
    ВЫБОР
        КОГДА СебестоимостьТоваров.КоличествоПриход = 0
            И СебестоимостьТоваров.СтоимостьПриход = 0
            ТОГДА &Расход
        КОГДА СебестоимостьТоваров.КоличествоРасход = 0
            И СебестоимостьТоваров.СтоимостьРасход = 0
            ТОГДА &Приход
    КОНЕЦ КАК ВидДвижения
ПОМЕСТИТЬ ВТ_СебестоимостьТоваров
ИЗ
    РегистрНакопления.СебестоимостьТоваров.Обороты(&ДатаНачалаПриход, &ДатаОкончанияПриход, Регистратор, ) КАК СебестоимостьТоваров
ГДЕ
    (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РаспределениеРасходовНаСебестоимостьТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РасчетСебестоимостиТоваров)
;

////////////////////////////////////////////////////////////­///////////////////    
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТ_СебестоимостьТоваров.Номенклатура,
    ОсновнаяТаблица.Регистратор,
    ОсновнаяТаблица.ВидДвижения,
    ЕСТЬNULL(ОсновнаяТаблица.КоличествоПриход, 0) КАК КоличествоПриход,
    ЕСТЬNULL(ОсновнаяТаблица.СтоимостьПриход, 0) КАК СтоимостьПриход,
    ЕСТЬNULL(ОсновнаяТаблица.КоличествоРасход, 0) КАК КоличествоРасход,
    ЕСТЬNULL(ОсновнаяТаблица.ЦенаПриход, 0) КАК ЦенаПриход,
    ВТ_СебестоимостьТоваров.Партнер КАК Партнер,
    ОсновнаяТаблица.Период
ИЗ
    ВТ_СебестоимостьТоваров КАК ВТ_СебестоимостьТоваров
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
            ВТ_СебестоимостьТоваров.Период КАК Период,
            ВТ_СебестоимостьТоваров.Номенклатура КАК Номенклатура,
            ВТ_СебестоимостьТоваров.Регистратор КАК Регистратор,
            ВТ_СебестоимостьТоваров.ВидДвижения КАК ВидДвижения,
            ВТ_СебестоимостьТоваров.КоличествоПриход КАК КоличествоПриход,
            ВТ_СебестоимостьТоваров.СтоимостьПриход КАК СтоимостьПриход,
            ВТ_СебестоимостьТоваров.КоличествоРасход КАК КоличествоРасход,
            ВТ_СебестоимостьТоваров.СтоимостьРасход КАК СтоимостьРасход,
            ВЫБОР
                КОГДА ВТ_СебестоимостьТоваров.СтоимостьПриход ЕСТЬ NULL 
                        ИЛИ ВТ_СебестоимостьТоваров.КоличествоПриход ЕСТЬ NULL
                        ИЛИ ВТ_СебестоимостьТоваров.КоличествоПриход = 0
                    ТОГДА 0
                ИНАЧЕ ВТ_СебестоимостьТоваров.СтоимостьПриход / ВТ_СебестоимостьТоваров.КоличествоПриход
            КОНЕЦ КАК ЦенаПриход
        ИЗ
            ВТ_СебестоимостьТоваров КАК ВТ_СебестоимостьТоваров) КАК ОсновнаяТаблица
        ПО ВТ_СебестоимостьТоваров.Номенклатура = ОсновнаяТаблица.Номенклатура
ГДЕ
    ВТ_СебестоимостьТоваров.ВидДвижения = &Приход
Показать
12. Uncore 1274 10.10.14 09:12 Сейчас в теме
(11) Lord_Michael, можно еще вложенный запрос на пакет заменить, должно быстрее работать в пакетном.
15. Lord_Michael 10.10.14 09:59 Сейчас в теме
(12) Uncore, не, вообще ничего не надо) никаких пакетов) я ж не всматривался в запрос) во вложенном только расчет цены остался. можно сделать его сразу во временной и соединять временную саму с собой) а пустая наверно потому, что еще на NULL во временной проверять нужно. нет под рукой конфы, а разворачивать влом. как-то так должно получиться:

ВЫБРАТЬ РАЗЛИЧНЫЕ
    СебестоимостьТоваров.Период КАК Период,
    СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    СебестоимостьТоваров.Регистратор КАК Регистратор,
    СебестоимостьТоваров.Регистратор.Партнер КАК Партнер,
    СебестоимостьТоваров.КоличествоПриход КАК КоличествоПриход,
    СебестоимостьТоваров.СтоимостьПриход КАК СтоимостьПриход,
    СебестоимостьТоваров.КоличествоРасход КАК КоличествоРасход,
    СебестоимостьТоваров.СтоимостьРасход КАК СтоимостьРасход,
    ВЫБОР
        КОГДА (СебестоимостьТоваров.КоличествоПриход = 0
            И СебестоимостьТоваров.СтоимостьПриход = 0)
            ИЛИ (СебестоимостьТоваров.КоличествоПриход = ЕСТЬ NULL
            И СебестоимостьТоваров.СтоимостьПриход = ЕСТЬ NULL)
            ТОГДА &Расход
        КОГДА (СебестоимостьТоваров.КоличествоРасход = 0
            И СебестоимостьТоваров.СтоимостьРасход = 0)
            ИЛИ (СебестоимостьТоваров.КоличествоРасход = ЕСТЬ NULL
            И СебестоимостьТоваров.СтоимостьРасход = ЕСТЬ NULL)
            ТОГДА &Приход
    КОНЕЦ КАК ВидДвижения,
    ВЫБОР
        КОГДА СебестоимостьТоваров.СтоимостьПриход ЕСТЬ NULL 
            ИЛИ СебестоимостьТоваров.КоличествоПриход ЕСТЬ NULL
            ИЛИ СебестоимостьТоваров.КоличествоПриход = 0
                ТОГДА 0
        ИНАЧЕ СебестоимостьТоваров.СтоимостьПриход / СебестоимостьТоваров.КоличествоПриход
    КОНЕЦ КАК ЦенаПриход
ПОМЕСТИТЬ ВТ_СебестоимостьТоваров
ИЗ
    РегистрНакопления.СебестоимостьТоваров.Обороты(&ДатаНачалаПриход, &ДатаОкончанияПриход, Регистратор, ) КАК СебестоимостьТоваров
ГДЕ
    (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РаспределениеРасходовНаСебестоимостьТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РасчетСебестоимостиТоваров)
;

////////////////////////////////////////////////////////////­///////////////////    
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТ_СебестоимостьТоваров.Номенклатура,
    ОсновнаяТаблица.Регистратор,
    ОсновнаяТаблица.ВидДвижения,
    ОсновнаяТаблица.НомерСтроки,
    ЕСТЬNULL(ОсновнаяТаблица.КоличествоПриход, 0) КАК КоличествоПриход,
    ЕСТЬNULL(ОсновнаяТаблица.СтоимостьПриход, 0) КАК СтоимостьПриход,
    ЕСТЬNULL(ОсновнаяТаблица.КоличествоРасход, 0) КАК КоличествоРасход,
    ЕСТЬNULL(ОсновнаяТаблица.ЦенаПриход, 0) КАК ЦенаПриход,
    ВТ_СебестоимостьТоваров.Партнер КАК Партнер,
    ОсновнаяТаблица.Период
ИЗ
    ВТ_СебестоимостьТоваров КАК ВТ_СебестоимостьТоваров
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СебестоимостьТоваров КАК ОсновнаяТаблица
        ПО ВТ_СебестоимостьТоваров.Номенклатура = ОсновнаяТаблица.Номенклатура
ГДЕ
    ВТ_СебестоимостьТоваров.ВидДвижения = &Приход
Показать


если опять будет пусто, то нужно проверить правильно или нет ВидДвижения во временной определяется. сделайте выборку в консоли только временной таблицы, чтобы посмотреть результат. ну и да, РАЗЛИЧНЫЕ не всегда адекватно себя ведет)
17. insurgut 207 10.10.14 10:09 Сейчас в теме
(15), результат запроса остается предательски пустым :)

Если не накладываю условие по партнеру, то изначальный запрос выдает 257 517 строк за 205 секунд, а твой - 116 793 строк за 16 секунд.

Не исключаю вероятности, что старый запрос просто напросто некорректно работал. Буду уменьшать период и сравнивать результаты выборок.
18. Lord_Michael 10.10.14 10:39 Сейчас в теме
(17) в принципе, в исходной выборке даже на NULL не нужно проверять. достаточно таких условий.

ВЫБРАТЬ РАЗЛИЧНЫЕ
    СебестоимостьТоваров.Период КАК Период,
    СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    СебестоимостьТоваров.Регистратор КАК Регистратор,
    СебестоимостьТоваров.Регистратор.Партнер КАК Партнер,
    СебестоимостьТоваров.КоличествоПриход КАК КоличествоПриход,
    СебестоимостьТоваров.СтоимостьПриход КАК СтоимостьПриход,
    СебестоимостьТоваров.КоличествоРасход КАК КоличествоРасход,
    СебестоимостьТоваров.СтоимостьРасход КАК СтоимостьРасход,
    ВЫБОР
        КОГДА СебестоимостьТоваров.КоличествоПриход = 0
            И СебестоимостьТоваров.СтоимостьПриход = 0
             ТОГДА &Расход
        КОГДА СебестоимостьТоваров.КоличествоРасход = 0
            И СебестоимостьТоваров.СтоимостьРасход = 0
            ТОГДА &Приход
    КОНЕЦ КАК ВидДвижения,
    ВЫБОР
        КОГДА СебестоимостьТоваров.КоличествоПриход = 0
            ТОГДА 0
        ИНАЧЕ СебестоимостьТоваров.СтоимостьПриход / СебестоимостьТоваров.КоличествоПриход
    КОНЕЦ КАК ЦенаПриход
ПОМЕСТИТЬ ВТ_СебестоимостьТоваров
ИЗ
    РегистрНакопления.СебестоимостьТоваров.Обороты(&ДатаНачалаПриход, &ДатаОкончанияПриход, Регистратор, ) КАК СебестоимостьТоваров
ГДЕ
    (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РаспределениеРасходовНаСебестоимостьТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РасчетСебестоимостиТоваров)
Показать


попробуй только эту часть в консоли прогнать. что в результат упадет?
если глюки, то попробуй без РАЗЛИЧНЫЕ
20. ben19791010 10.10.14 10:46 Сейчас в теме
(17) insurgut, ПериодСекунда,день??? как уменьшать?
22. Lord_Michael 10.10.14 11:08 Сейчас в теме
(20) ben19791010, я думаю, он имел в виду НачалоПериода и КонецПериода, то есть входящие параметры)
13. insurgut 207 10.10.14 09:28 Сейчас в теме
(11) Lord_Michael, отработало быстро, но результат пустой по сравнению со старым запросом :) Буду смотреть.
19. insurgut 207 10.10.14 10:44 Сейчас в теме
Кажется разреза организации сильно не хватает :) Потому что по одной организации у нас может быть приход, а по другой расход. Если свернуть - то корректно расход и приход не определить :)
21. Bukaska 140 10.10.14 10:52 Сейчас в теме
Мне кажется вместе с регистратором нужно брать период секунда
а ветку ГДЕ - лучше назначить в параметрах виртуальной таблицы.. назначите параметры, будет возможность выбрать период секунда)
23. insurgut 207 10.10.14 11:13 Сейчас в теме
Дурной запрос. В исходном виде я получаю результат:
Изолента ПВХ 15мм (рул.20м) бел. AVIORA Отчет о розничных продажах ИПУТ-000228 от 09.10.2014 20:17:47 Расход 1 ООО "Энергопром"


И это при том, что в самом ОРП нигде ссылки на партнера Энегопром (исходный поставщик товара) - нету.

Единственный вариант зацепиться за поставщика - ключ ВидЗапасов
Собственный товар; Поставщик: ООО "Энергопром"


Однако он будет верным для передачи от одной организации к другой. Когда же другая будет продавать этот товар, то ключ будет уже таким:
Собственный товар; Поставщик: Водолей ООО
25. Lord_Michael 10.10.14 11:23 Сейчас в теме
(23) insurgut, ну дык, вы просили оптимизировать) а за логику никто не просил отвечать) так-то результат достигнут - 16 секунд против 205)))
озвучьте цель запроса: какой отчет вы хотите получить? что к чему должно соотноситься? пока что я вижу, что вы хотите для каждого товара по поставщику вывести набор движений. предложенный мной запрос этому вроде бы соответствует. я не спец в УТ11, хотя и приходится работать, поэтому спрогнозировать результат не представляю возможным без более подробного описания.
26. insurgut 207 10.10.14 11:37 Сейчас в теме
(25) Lord_Michael, сколько товаров определенного поставщика было получено и продано. Все это с учетом передач между своими организациями (интеркомпани).
27. Lord_Michael 10.10.14 11:50 Сейчас в теме
(26) insurgut, попробуйте так

ВЫБРАТЬ
    СебестоимостьТоваров.Период КАК Период,
    СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    СебестоимостьТоваров.Регистратор КАК Регистратор,
    СебестоимостьТоваров.Регистратор.Партнер КАК Партнер,
    СебестоимостьТоваров.ВидЗапасов.Поставщик КАК Поставщик,
    СебестоимостьТоваров.КоличествоПриход КАК КоличествоПриход,
    СебестоимостьТоваров.СтоимостьПриход КАК СтоимостьПриход,
    СебестоимостьТоваров.КоличествоРасход КАК КоличествоРасход,
    СебестоимостьТоваров.СтоимостьРасход КАК СтоимостьРасход,
    ВЫБОР
        КОГДА СебестоимостьТоваров.КоличествоПриход = 0
            И СебестоимостьТоваров.СтоимостьПриход = 0
            ТОГДА &Расход
        КОГДА СебестоимостьТоваров.КоличествоРасход = 0
            И СебестоимостьТоваров.СтоимостьРасход = 0
            ТОГДА &Приход
    КОНЕЦ КАК ВидДвижения,
    ВЫБОР
        КОГДА СебестоимостьТоваров.КоличествоПриход = 0
            И СебестоимостьТоваров.СтоимостьПриход = 0
                ТОГДА 0
        ИНАЧЕ СебестоимостьТоваров.СтоимостьПриход / СебестоимостьТоваров.КоличествоПриход
    КОНЕЦ КАК ЦенаПриход
ПОМЕСТИТЬ ВТ_СебестоимостьТоваров
ИЗ
    РегистрНакопления.СебестоимостьТоваров.Обороты(&ДатаНачалаПриход, &ДатаОкончанияПриход, Регистратор, ) КАК СебестоимостьТоваров
ГДЕ
    (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РаспределениеРасходовНаСебестоимостьТоваров)
    И (НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РасчетСебестоимостиТоваров)
;

////////////////////////////////////////////////////////////­///////////////////    
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ВТ_СебестоимостьТоваров.Номенклатура,
    ВТ_СебестоимостьТоваров.Поставщик
ПОМЕСТИТЬ ВТ_ТоварыПоставщиков
ИЗ
    ВТ_СебестоимостьТоваров КАК ВТ_СебестоимостьТоваров
ГДЕ
    ВТ_СебестоимостьТоваров.ВидДвижения = &Приход
;

////////////////////////////////////////////////////////////­///////////////////    
ВЫБРАТЬ
    ВТ_ТоварыПоставщиков.Номенклатура,
    ВТ_ТоварыПоставщиков.Поставщик,
    ОсновнаяТаблица.Период,
    ОсновнаяТаблица.Регистратор,
    ОсновнаяТаблица.Партнер,
    ОсновнаяТаблица.ВидДвижения,
    ОсновнаяТаблица.КоличествоПриход,
    ОсновнаяТаблица.СтоимостьПриход,
    ОсновнаяТаблица.КоличествоРасход,
    ОсновнаяТаблица.СтоимостьРасход,
    ОсновнаяТаблица.ЦенаПриход
ИЗ
    ВТ_ТоварыПоставщиков КАК ВТ_ТоварыПоставщиков
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СебестоимостьТоваров КАК ОсновнаяТаблица
        ПО ВТ_ТоварыПоставщиков.Номенклатура = ОсновнаяТаблица.Номенклатура
            И ВТ_ТоварыПоставщиков.Поставщик = ОсновнаяТаблица.Поставщик
Показать
28. insurgut 207 10.10.14 12:02 Сейчас в теме
(27), огромное спасибо за помощь! Все получилось!
29. AllexSoft 10.10.14 12:03 Сейчас в теме
(27) Lord_Michael, вот индексирование в виртуальных таблицах еще бы добавить... по полям Номенклатура , Поставщик
иначе толку не будет..

+
ВЫБОР
КОГДА СебестоимостьТоваров.КоличествоПриход = 0
И СебестоимостьТоваров.СтоимостьПриход = 0
ТОГДА &Расход
КОГДА СебестоимостьТоваров.КоличествоРасход = 0
И СебестоимостьТоваров.СтоимостьРасход = 0
ТОГДА &Приход
КОНЕЦ КАК ВидДвижения,

вот от этого избавиться.. я понимаю что все хочется универсально, но лишний выбор в запросе - лишние тормоза.. по цене тоже самое.. лучше рассчитать кодом

+ вообще это делается не через ВТ.. а через условие ИМЕЮЩИЕ МояТаблица.ВидДвижения = &Приход

и все будет ОК, без всяких ВТ
+ &Приход заменить на ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
&Расход заменить на ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)

+ Если делать через ИМЕЮЩИЕ то и выкрутасы с ВидомДвижения не надо
30. Lord_Michael 10.10.14 12:27 Сейчас в теме
(29) AllexSoft, по индексам - да, согласен)

вот от этого избавиться.. я понимаю что все хочется универсально, но лишний выбор в запросе - лишние тормоза.. по цене тоже самое.. лучше рассчитать кодом

+ вообще это делается не через ВТ.. а через условие ИМЕЮЩИЕ МояТаблица.ВидДвижения = &Приход

проблема в том, что в виртуальной таблице Обороты нет ВидаДвижения, поэтому приходится извращаться. а рассчитать кодом не лучше. это придется вне запроса в цикле при выводе делать. вы уверены, что так быстрей будет?

+ вообще это делается не через ВТ.. а через условие ИМЕЮЩИЕ МояТаблица.ВидДвижения = &Приход

ГДЕ - условие над каждой записью группировки
ИМЕЮЩИЕ - условие над результатом группировки
в запросе есть группировки? если группировать, то да, вы будете правы.

+ &Приход заменить на ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
&Расход заменить на ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)

отчасти согласен - запрос более логичен и удобочитаем. но эта запись означает, что каждый раз при обработке очередной записи регистра будет вычисляться значение, а это медленней, чем готовое значение передать параметром, единожды его вычислив вне запроса.

+ Если делать через ИМЕЮЩИЕ то и выкрутасы с ВидомДвижения не надо

опять же, подойдет только при работе с реальной таблицей регистра, а не с виртуальной Остатки. и при условии использования группировок.

почему же не использовать группировки? потому что группируется результат запроса. то есть для каждой записи будет проверяться условие. здесь же мы сразу выбираем различные в отдельную таблицу. в общем можно спорить долго. результат будет зависеть от конкретных данных. ваш вариант тоже имеет место быть. но хотелось бы его увидеть для конструктивного обсуждения.
31. AllexSoft 10.10.14 12:43 Сейчас в теме
(30) Lord_Michael,
а рассчитать кодом не лучше. это придется вне запроса в цикле при выводе делать. вы уверены, что так быстрей будет?

а он скорее всего вне запроса все равно циклом обрабатывает результат..как я понял он результат этого запроса пишет в какой то регистр.. так что кодом в данном случае будет быстрее
ГДЕ - условие над каждой записью группировки
ИМЕЮЩИЕ - условие над результатом группировки
в запросе есть группировки? если группировать, то да, вы будете правы.

смысл предложения по ИМЕЮЩИЕ как раз есть в том чтобы в основном запросе сгруппировать то что надо и избавиться от ВТ, а на результат группировки наложить условие через ИМЕЮЩИЕ

но эта запись означает, что каждый раз при обработке очередной записи регистра будет вычисляться значение, а это медленней, чем готовое значение передать параметром, единожды его вычислив вне запроса.

вполне вероятно, тут не могу сказать, это надо пожалуй спросить гуру MS SQL как там что происходит. Но сдается мне что ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) будет вычислено один раз в 1С:Сервере на этапе конвертации из запроса 1С в запрос к субд.. ведь MS SQL не знает как вычислять подобные предопределенные системные значения

хотелось бы его увидеть для конструктивного обсуждения.

ща напишу) придется прочитать ветку сначала чтобы понять что запрос далает
32. insurgut 207 13.10.14 09:27 Сейчас в теме
(31), нет, ничего не обрабатывается. В том вся и "прелесть", что все делается на СКД безо всякой пост-обработки. В окончательном варианте запрос принял вид:
ВЫБРАТЬ РАЗЛИЧНЫЕ
	СебестоимостьТоваров.Период КАК Период,
	СебестоимостьТоваров.Организация КАК Организация,
	СебестоимостьТоваров.НомерСтроки КАК НомерСтроки,
	СебестоимостьТоваров.АналитикаУчетаНоменклатуры,
	СебестоимостьТоваров.Регистратор КАК Регистратор,
	СебестоимостьТоваров.ВидЗапасов КАК ВидЗапасов,
	СебестоимостьТоваров.КоличествоПриход КАК КоличествоПриход,
	СебестоимостьТоваров.СтоимостьПриход КАК СтоимостьПриход,
	СебестоимостьТоваров.КоличествоРасход КАК КоличествоРасход,
	СебестоимостьТоваров.СтоимостьРасход КАК СтоимостьРасход,
	ВЫБОР
		КОГДА СебестоимостьТоваров.КоличествоПриход = 0
			ТОГДА ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
		КОГДА СебестоимостьТоваров.КоличествоРасход = 0
			ТОГДА ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
	КОНЕЦ КАК ВидДвижения,
	ВЫБОР
		КОГДА СебестоимостьТоваров.СтоимостьПриход ЕСТЬ NULL 
				ИЛИ СебестоимостьТоваров.КоличествоПриход ЕСТЬ NULL 
				ИЛИ СебестоимостьТоваров.КоличествоПриход = 0
			ТОГДА 0
		ИНАЧЕ СебестоимостьТоваров.СтоимостьПриход / СебестоимостьТоваров.КоличествоПриход
	КОНЕЦ КАК ЦенаПриход
ПОМЕСТИТЬ ВТ_СебестоимостьТоваров
ИЗ
	РегистрНакопления.СебестоимостьТоваров.Обороты(&ДатаНачалаПриход, &ДатаОкончанияПриход, Запись, ) КАК СебестоимостьТоваров
ГДЕ
	НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ПеремещениеТоваров
	И НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РаспределениеРасходовНаСебестоимостьТоваров
	И НЕ СебестоимостьТоваров.Регистратор ССЫЛКА Документ.РасчетСебестоимостиТоваров
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ОсновнаяТаблица.Организация КАК Организация,
	ВТ_СебестоимостьТоваров.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
	ОсновнаяТаблица.Регистратор,
	ВЫБОР
		КОГДА ОсновнаяТаблица.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
			ТОГДА ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
		ИНАЧЕ ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
	КОНЕЦ КАК ВидДвижения,
	ОсновнаяТаблица.НомерСтроки,
	ЕСТЬNULL(ОсновнаяТаблица.КоличествоПриход, 0) КАК КоличествоПриход,
	ЕСТЬNULL(ОсновнаяТаблица.СтоимостьПриход, 0) КАК СтоимостьПриход,
	ЕСТЬNULL(ОсновнаяТаблица.КоличествоРасход, 0) КАК КоличествоРасход,
	ЕСТЬNULL(ОсновнаяТаблица.ЦенаПриход, 0) КАК ЦенаПриход,
	ВТ_СебестоимостьТоваров.ВидЗапасов.Поставщик КАК Поставщик,
	ОсновнаяТаблица.Период
ИЗ
	ВТ_СебестоимостьТоваров КАК ВТ_СебестоимостьТоваров
		ЛЕВОЕ СОЕДИНЕНИЕ ВТ_СебестоимостьТоваров КАК ОсновнаяТаблица
		ПО ВТ_СебестоимостьТоваров.АналитикаУчетаНоменклатуры = ОсновнаяТаблица.АналитикаУчетаНоменклатуры
Показать
33. Lord_Michael 13.10.14 10:37 Сейчас в теме
(32) insurgut, с НомеромСтроки запамятовал, что можно было периодичность Запись поставить.
а еще рекомендации:
ВЫБОР
КОГДА СебестоимостьТоваров.КоличествоПриход = 0
ТОГДА ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
КОГДА СебестоимостьТоваров.КоличествоРасход = 0
ТОГДА ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
КОНЕЦ КАК ВидДвижения,

лучше оставить проверку не только по количеству, но и по сумме. так как могут быть корректирующие записи ТОЛЬКО по сумме (если нужно скорректировать стоимость, например)

ВЫБОР
КОГДА СебестоимостьТоваров.СтоимостьПриход ЕСТЬ NULL
ИЛИ СебестоимостьТоваров.КоличествоПриход ЕСТЬ NULL
ИЛИ СебестоимостьТоваров.КоличествоПриход = 0
ТОГДА 0
ИНАЧЕ СебестоимостьТоваров.СтоимостьПриход / СебестоимостьТоваров.КоличествоПриход
КОНЕЦ КАК ЦенаПриход

на NULL здесь нет смысла проверять, так как здесь только одна таблица без соединений. у ресурсов тип Число, поэтому NULL и Неопределено быть не может. достаточно проверить делитель на 0, то есть Количество.

СебестоимостьТоваров.АналитикаУчетаНоменклатуры,
СебестоимостьТоваров.ВидЗапасов КАК ВидЗапасов,

лучше сразу в ВТ выбрать конечные значения Номенклатура и Поставщик, это уменьшит количество серверных вызовов. фактически обращение к БД будет только при создании ВТ, а не в обоих пакетах.
24. insurgut 207 10.10.14 11:20 Сейчас в теме
Кажется нашел :) Вместо регистратор.партнер используем СебестоимостьТоваровОбороты.ВидЗапасов.Поставщик
34. tsmgeorg@gmail.com 13.10.14 11:21 Сейчас в теме
Добрый день! Все сообщения не читал. Но что сразу бросается в глаза, вы делаете левое соединение со вложенным запросом, что крайне не рекомендуется делать, потому что если смотреть на физику соединения с вложенным запросом, то производится циклический перебор таблицы из вложенного запроса и если удовлетворяет условиям то производится соединение, но вы представляете насколько это геморно с точки зрения физики соедениения. Лучше вместо вложенной таблицы использовать временную таблицу, а поле Номенклатура проиндексировать.
Читал мнение что нельзя объединение производить, мое мнение можно и даже нужно, почему нет, объединение запросов. Не рекомендуется использовать просто Объединить, а Объединить все можно использовать, ничего страшного. А если с точки логики построения то объединение здесь действительно не нужно, можно проще.
Плюс еще одна ошибка в следующем СебестоимостьТоваров.Регистратор.Партнер.Ссылка, лучше делать так
ВЫБОР
КОГДА СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ВашДокумент
ТОГДА ВЫРАЗИТЬ(СебестоимостьТоваров.Регистратор КАК Документ.ВашДокумент).Дата.Партнер.Ссылка
Конец
где в первом случае производится левое соединение на уровне физического запроса всех регистраторов документов, а во втором случае только явно указанный Вашдокумент
35. Lord_Michael 13.10.14 11:34 Сейчас в теме
(34) tsmgeorg@gmail.com,
Все сообщения не читал
и зря) во-первых, вопрос уже решен. во-вторых, от вложенного запроса ушли к временной таблице, так что "физика" пострадать не должна). в-третьих, регистраторов много и ВЫРАЗИТЬ для каждого вида документа может быть более трудоемко для вычисления, чем то, что у нас получилось в итоге. хотя все познается в сравнении)
ВЫБОР
КОГДА СебестоимостьТоваров.Регистратор ССЫЛКА Документ.ВашДокумент
ТОГДА ВЫРАЗИТЬ(СебестоимостьТоваров.Регистратор КАК Документ.ВашДокумент).Дата.Партнер.Ссылка
Конец

что тут делает Дата? и потом, забыли ИНАЧЕ. без него будут NULL значения, что тоже не очень хорошо для результата.
36. tsmgeorg@gmail.com 13.10.14 11:44 Сейчас в теме
(35) Lord_Michael, Я просто привел пример, а не разбирался в тонкостях. А дата это описка.
37. tsmgeorg@gmail.com 13.10.14 11:46 Сейчас в теме
(35) Lord_Michael, Согласен что однозначно нужно иначе) А то что использование Выразить используется в офдоках в случае операции разыменования регистраторов и в том числе книжке Хрусталевой отдельная глава по оптимизации это тоже она неэффективно предлагает значит?)
39. Bukaska 140 13.10.14 11:49 Сейчас в теме
(37) tsmgeorg@gmail.com, ВЫРАЗИТЬ() при небольших объемах норм.. а так везде свои плюсы и минусы))))
41. tsmgeorg@gmail.com 13.10.14 11:51 Сейчас в теме
(39) Bukaska, Как раз выразить норм при больших объемах я считаю. Если изучить физику операции разыменования регистраторов. Как вы видите на уровне физических таблиц операцию разыменования?
40. Lord_Michael 13.10.14 11:50 Сейчас в теме
(37) tsmgeorg@gmail.com, я не спорю, поэтому и сказал, что в данном случае регистраторов слишком много и их разыменовывание может съесть больше ресурсов, чем без него. и так же отметил, что нужно сравнивать результаты, чтобы принять решение)
42. tsmgeorg@gmail.com 13.10.14 11:52 Сейчас в теме
(40) Lord_Michael, Решение найдено, это самое главное и вы в отличие от предложений других дали правильный ответ по моему мнению. Только проблема видимо в том что я не прочитал ваше решение, а теперь прочитал, наши мнения сходятся))
38. tsmgeorg@gmail.com 13.10.14 11:47 Сейчас в теме
43. insurgut 207 15.10.14 12:54 Сейчас в теме
лучше сразу в ВТ выбрать конечные значения Номенклатура и Поставщик, это уменьшит количество серверных вызовов. фактически обращение к БД будет только при создании ВТ, а не в обоих пакетах.

увы, но наложение отборов начинает работать не совсем корректно, вернее до этапа выборки документов перепродажи. В результате они не попадают. Остановился на этом варианте.
44. insurgut 207 15.10.14 12:55 Сейчас в теме
Но что сразу бросается в глаза, вы делаете левое соединение со вложенным запросом, что крайне не рекомендуется делать

Да там вариантов других нету просто. Компания А продает Компании Б. Компания Б продает клиенту. Как узнать что клиенту в итоге был продан товар компании А. Вот как то таким "извращением" получается узнать :)
45. insurgut 207 15.10.14 12:58 Сейчас в теме
Результат - старый запрос висел часами (само собой предварительно делались и пересчеты итогов, и прогонялись планы оптимизации базы SQL) при обработке поступлений/продаж за год. Новый запрос - работает не более 5 минут. Более того, данные выдает корректные, в отличии от старого (там поступления порой совсем левые цеплялись).
46. unoDosTres 15.10.14 13:12 Сейчас в теме
Регистр сворачивать не пробовали ?:)
вообще условиях нужно было еще пихнуть конструкцию Выразить(), хотя об этом уже писали, ну и конечно же индексация Временных таблиц по полям соединения, тут я чтото ее не увидел, хотя об этом тоже упомянули, но вообще сверните регистр для долгосрочной перспективы.
ну а 300 сек для запроса, если его выполняет один пользователь вообще ерунда :) а если отчетик для массовго пользования, то тогда беда с ним 300 сек многовато так то.
47. insurgut 207 15.10.14 16:48 Сейчас в теме
(46) unoDosTres, так я и говорю, а до оптимизации он часами висел. По поводу свертки регистра - задачи не стояло :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот