Имя: Пароль:
1C
1С v8
Запрос срез последних - внутреннее соединение
0 dk
 
21.06.18
13:23
есть запрос в 8 к регистру сведений - довольно небыстрый
хочу добавить фильтр по остаткам
можно как-то внутреннее соединение внутри виртуальной таблицы сделать а не снаружи? типа как в 1с++
или как в условии задать фильтр по паре товар-магазин?
1 Sammo
 
21.06.18
13:26
В параметрах запроса Номенклатура в (Выбрать...)
Но может и не дать ускорения.
2 dk
 
21.06.18
13:26
просто внутреннее соединение работает, но уже после получения среза последних, а надо чтобы сам срез тоже по фильтру работал
3 dk
 
21.06.18
13:27
надо по товар / магазин  а не просто по товар
4 catena
 
21.06.18
13:32
(товар,магазин) в (выбрать товар, магазин...)
5 xXeNoNx
 
21.06.18
13:32
(3) скинь сам запрос
6 dk
 
21.06.18
13:36

ВЫБРАТЬ
    КатегорииНоменклатуры.Ссылка КАК Категория
ПОМЕСТИТЬ Категории
ИЗ
    Справочник.КатегорииНоменклатуры КАК КатегорииНоменклатуры
ГДЕ
    КатегорииНоменклатуры.Действует
    И КатегорииНоменклатуры.ВидКатегории <> ЗНАЧЕНИЕ(Перечисление.ВидыКатегориийНоменклатуры.ОбщесетевойПризнак)
;    
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ТоварыНаСкладахОстатки.Склад.Магазин    Магазин
    , ТоварыНаСкладахОстатки.Номенклатура    Номенклатура
ПОМЕСТИТЬ ВремОстатки
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ), ) КАК ТоварыНаСкладахОстатки
ГДЕ    
    ТоварыНаСкладахОстатки.КоличествоОстаток > 0
ИНДЕКСИРОВАТЬ ПО
    Магазин, Номенклатура
;
ВЫБРАТЬ
    КатегорииФакт.Номенклатура
ИЗ
     РегистрСведений.КатегорииНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&Дата, ДЕНЬ), ((Магазин, Номенклатура) в (Выбрать Магазин, Номенклатура ИЗ ВремОстатки)) И(КатегорияНоменклатуры В (ВЫБРАТЬ * ИЗ Категории))) КАК КатегорииФакт
        //ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВремОстатки
        //ПО КатегорииФакт.Магазин = ВремОстатки.Магазин
        //    И КатегорииФакт.Номенклатура = ВремОстатки.Номенклатура
        //    И (КатегорииФакт.Актуальность)
7 dk
 
21.06.18
13:40
(4) спасибо, вроде то что нужно
8 Мандалай
 
21.06.18
13:48
Внутреннее соединение тебя спасет.
9 Мандалай
 
21.06.18
13:49
(4)Отрабатывает неоптимально на клиент серверной схеме, на файловой не знаю.
10 dk
 
21.06.18
13:56
(8) внутреннее отрабатывает уже ПОСЛЕ получения среза - это медленно
11 Мандалай
 
21.06.18
14:10
(10)Почитай изменения в 13 платформе.
12 youalex
 
21.06.18
14:13
(10)
Что значит "после" ? Срез - это вложенный запрос. У тебя идет соединение с вложенным запросом, а там как оптимизатор угадает.  
Можешь сам сделать запрос среза, хоть через вт. Тогда, если у тебя соединение с полями среза, можешь сразу ненужное отсечь, и оптимизатору будет проще..

+
Если Срез чаще используется без параметра Период, есть смысл добавить итоги по срезу последних.
13 dk
 
21.06.18
14:22
(11) 8.3.10.2580
------------
(12) срез последних это не обычная таблица, а вложенный запрос и джойн делается похожу уже после выполнения вложенного, а хочется джойн внутри вложенного
по крайней мере время выполнения сильно разнится
14 Сти
 
21.06.18
14:35
(13) Да, это вложенный запрос, но оптимизатор запроса SQL-сервера может отследить эти соединения и перенести их вовнутрь. Только недавно отслеживал такое поведение MS SQL на примере запроса к ВТ оборотов регистра накопления c внешними условиями и связями с другой таблицей.