Имя: Пароль:
1C
1С v8
Особенность или недопонимание работы запросов
0 Skaz_ru
 
29.05.17
14:02
Здравствуйте.
Изучаю создание отчетов с помощью СКД. Такая ситуация: добавил набор данных "Запрос" и с помощью конструктора создал запрос:
- выбрал справочник, выбрал регистр сведений;
- добавил левое внешнее соединение (из справочника берутся все элементы);
- создал ресурсы, настройки.
Формирую отчет без отбора - отчет выводится как надо: в колонках идут все элементы справочника, а в строках все данные что есть в регистре сведений.
Пример (в ячейках указана дата покупки):
              |  Товар 1    | Товар 2     | Товар 3    | ... | Товар N |
Покупатель 1  |  27.05.2017 |             | 22.05.2017 |     |         |
Покупатель 2  |             |  24.05.2017 |            |     |         |

Если я использую отбор (например выбираю "Покупатель 1"), то выводятся колонки в которых есть данные:
              |  Товар 1    | Товар 3    |
Покупатель 1  |  27.05.2017 | 22.05.2017 |

А я думал что должно быть:
              |  Товар 1    | Товар 2     | Товар 3    | ... | Товар N |
Покупатель 1  |  27.05.2017 |             | 22.05.2017 |     |         |
  
Так и должно быть или я что-то не так делаю? Ведь если не применять отбор то ЛЕВОЕ соединение отрабатывает и выводятся все элементы из справочника.
1 Волшебник
 
модератор
29.05.17
14:03
ты что-то не так делаешь
2 cw014
 
29.05.17
14:04
А точно товары у тебя все? Запрос хоть покажи
3 aleks_default
 
29.05.17
14:09
Отбор на ВСЮ таблицу нужно накладывать а не на отдельную группировку
4 Лефмихалыч
 
29.05.17
14:11
Ветку не читал потому, что и так понятно, что это очередная избитая граблями тема о том, что условие в ГДЕ превращает левое соединение во внутреннее.
5 Лефмихалыч
 
29.05.17
14:13
И это - отборы в группировке СКД накладываются после того, как набор был сгруппирован. Очень важно это понимать.
6 Letum
 
29.05.17
14:17
Нужно снять в полях галку "автозаполнение" и самому указать в запросе в каких местах должны применяться отборы (Компоновка данных - условия).
7 aleks_default
 
29.05.17
14:38
(6) Проще поля разыменовать.
8 Letum
 
29.05.17
14:38
Соответственно, при необходимости накладывать отбор только на регистр нужно прописать возможные поля отбора в параметры виртуальной таблицы на закладке "Компоновка данных".
Если таблица регистра не виртуальная то стоит переделать левое соединение в объединение. ИМХО его изначально стоит переделать.
9 Letum
 
29.05.17
14:44
(7) Не понял, что имеется ввиду.
10 aleks_default
 
29.05.17
14:56
(9)При снятии галки автозаполнение придется каждое поле описывать вручную. А так, при создании у поля в нужном нам месте запроса уникального псевдонима отбор накладывается только на него и только там там где нам нужно.
11 Skaz_ru
 
29.05.17
15:25
(8) Вы имеете ввиду, что нужно сделать пакет запросов где в первом запросе я буду получать данные по условию (если условие задано) из регистра, а во втором запросе объединить этот результат со справочником?
(6) Вот этот способ получился. Спасибо большое
(4) (5) Буду знать об этом и надеюсь не забуду. Спасибо
(7) (10) До такого я еще не дошел, но буду искать информацию где можно указать в нужном месте запроса отбор. Спасибо
12 Letum
 
29.05.17
15:33
(11) Можно и без пакетника сделать объединение, образно:

выбрать
   Регистр -   Товар,Склад, Количество {Где Склад.*, Товар.*}
Объединить
   Справочник - Ссылка, NULL, 0

для склада нужно указать "Игнорировать NULL".

Без джойна имхо лучше.