Имя: Пароль:
1C
 
УТ. СКД. Оптимальный Запрос для отбора в параметрах виртуальной таблицы по ключам аналитик
0 SerGa
 
30.07.24
16:03
УТ. Регистр накопления с измерением АналитикаУчетаНоменклатуры (тип Ключи аналитики номенклаьтуры) и АналитикаУчетаПоПартнерам

В этих ключах сидит Номенклатура и Партнер в качестве реквизита.

Делаю отчет на СКД возможностью отбора по Номенклатуре и Партнеру
Запрос выглядит так:

	ВЫБРАТЬ
		ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Партнер КАК Клиент,
 		ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
		ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК Количество,
	ИЗ
		РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК ВыручкаИСебестоимостьПродажОбороты


Если я ставлю отбор в отчете в пользовательском режиме - то СКД в запрос добавляет (в консоли компоновки инструментов разработчика это видно)

ГДЕ 
 ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура = &П
И ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Партнер = &П2


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


Как мне заставить СКД запихивать отбор в параметры виртуальной таблицы?
1 Homer
 
30.07.24
16:00
мда, откройте Регистры сведений АналитикаУчетаНоменклатуры и АналитикаУчетаПоПартнерам и тд
2 SerGa
 
30.07.24
16:02
(1) поясните, пожалуйста, не вполне понял как это использовать.
3 Homer
 
30.07.24
16:05
отбираешь ключи, далее указываешь данные ключи в виртуальной таблицы
4 Мультук
 
30.07.24
16:36
(0)

а так ? (сорри, тестить лень)

ВЫБРАТЬ
	ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Партнер КАК Клиент,
	ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
	ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК Количество
ИЗ
	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, {(АналитикаУчетаНоменклатуры.Номенклатура).* КАК Номенклатура}) КАК ВыручкаИСебестоимостьПродажОбороты

5 SerGa
 
30.07.24
16:54
(4)(3) если я правильно понял то нужно примерно так:
ВЫБРАТЬ
    АналитикаУчетаНоменклатуры.Номенклатура КАК НоменклатураОтбор    ,
    АналитикаУчетаНоменклатуры.Серия КАК Серия,
    АналитикаУчетаНоменклатуры.МестоХранения КАК МестоХранения,
    АналитикаУчетаНоменклатуры.КлючАналитики КАК КлючАналитики
ПОМЕСТИТЬ втКлючиОтбораНоменклатура
ИЗ
    РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
{ГДЕ
    АналитикаУчетаНоменклатуры.Номенклатура.*,
    АналитикаУчетаНоменклатуры.Серия.*,
    АналитикаУчетаНоменклатуры.МестоХранения.*}
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Контрагент КАК Клиент,
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Контрагент КАК Контрагент,
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Контрагент КАК ЙЙЙ,
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам.Договор КАК Договор,
    ВыручкаИСебестоимостьПродажОбороты.ЗаказКлиента КАК ЗаказКлиента,
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Серия КАК Серия,
    ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК Количество,
    ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиРеглОборот КАК СтоимостьРеглУчет,
    ВыручкаИСебестоимостьПродажОбороты.СуммаВыручкиСНДСРеглОборот КАК СтоимостьСНДСРеглУчет,
    ВыручкаИСебестоимостьПродажОбороты.Регистратор КАК ДокументПродажи
{ВЫБРАТЬ
    Клиент.*,
    Договор.*,
    Номенклатура.*,
    Серия.*,
    ДокументПродажи.*,
    СтоимостьСНДСРеглУчет,
    СтоимостьРеглУчет,
    Количество,
    ЗаказКлиента.*}
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, {(АналитикаУчетаНоменклатуры В
                (ВЫБРАТЬ
                    втКлючиОтбораНоменклатура.КлючАналитики
                ИЗ
                    втКлючиОтбораНоменклатура)) КАК Поле2}) КАК ВыручкаИСебестоимостьПродажОбороты
6 Мультук
 
30.07.24
17:17
(0)

P.S.
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор


Точно нужен регистратор, а не Авто ?
7 SerGa
 
30.07.24
17:22
(6) не обязательно, наверно авто тоже нормально
8 SerGa
 
30.07.24
17:23
но я за 5 не уверен  
в консоли компоновки смотртю... СКД и первый запрос и то что в параметрах виртуальной таблицы выкидывает...  не работает это
9 SerGa
 
31.07.24
12:08
посмотрел по типовой. как в отчетах это сделано и увидел что параметрами никто не заморачивается.  Делают примерно так:
ВЫБРАТЬ
    ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК Количество,
    КлючиАналитикиУчетаПоПартнерам.Партнер КАК Партнер,
    КлючиАналитикиУчетаПоПартнерам.Договор КАК Договор,
    КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    КлючиАналитикиУчетаНоменклатуры.Серия КАК Серия
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачала, &ДатаОкончания, Авто, ) КАК ВыручкаИСебестоимостьПродажОбороты
        {ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
        ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры = КлючиАналитикиУчетаНоменклатуры.Ссылка
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаПоПартнерам КАК КлючиАналитикиУчетаПоПартнерам
        ПО ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаПоПартнерам = КлючиАналитикиУчетаПоПартнерам.Ссылка}
{ГДЕ
    КлючиАналитикиУчетаПоПартнерам.Партнер.*,
    КлючиАналитикиУчетаПоПартнерам.Договор.*,
    КлючиАналитикиУчетаНоменклатуры.Номенклатура.*,
    КлючиАналитикиУчетаНоменклатуры.Серия.*}

Почему так - непонятно:
1. почему левое соединение а не внутреннее, если нужно отбор оптимизировать
2. и зачем ГДЕ в фигурные скобки, ведь можно вообще эту конструкцию в фигурных скобках убрать