Имя: Пароль:
1C
1С v8
СКД такое может?
,
0 Oleg333
 
07.03.17
10:52
Добрый день уважаемые коллеги!

Столкнулся с тем, что не могу простейший запрос реализовать на СКД. Подскажите, есть ли вариант решения (не хочется верить, что всеми хвалимая и мощная СКД такого не может).


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


Сложности возникают в связи с тем, что:

1. В запросе присутствует выборка из таблицы значений тзВнешняя;
2. Необходимо сначала связать таблицу Продаж с внешней таблицей, наложить на полученные данные отбор по полю из внешней таблицы (читай внутреннее соединение) и только потом получившийся набор левым соединением связывать с номенклатурой.

Сразу скажу - хочется найти решение при котором, данные и из справочника Номенклатуры и из регистра Продаж получаются в самой СКД, а через внешний набор данных передается только таблица значений.
1 nordbox
 
07.03.17
10:57
Конфа?
2 Asmody
 
07.03.17
10:58
(0) Может. Используй набор данных типа объект при описании схемы. При выполнении он заполняется программно. http://its.1c.ru/db/v8310doc#bookmark:dev:TI000000554
3 Oleg333
 
07.03.17
10:59
Извиняюсь

ПО ПродажиОбороты.Контрагент=ТЗ.Контрагент а не Характеристика


Конфа - ну например УТ, хотя это не важно, запрос упрощен, чтобы была понятна только проблема.
4 Oleg333
 
07.03.17
11:02
(2) Я так и делаю. Сложность не в том, чтобы передать в СКД ТЗ, а в том чтобы настроит порядок связывания таблиц и порядок наложения отбора. Короче говоря, мне нужно, чтобы в выборку попала вся номенклатура и только те контрагенты, которые удовлетворяют фильтру.
5 Vaflya
 
07.03.17
11:04
ну несколько наборов данных и связи между ними (в конструкторе скд только левое соединение)
6 Jokero
 
07.03.17
11:08
Связать номенклатуру и продажи в одном запросе
ТЗ передать как объект в СКД и связать с результатами предыдущего запроса

Таким образом получится максимальная выборка, а секцию "где", накладывать уже в отборе в настройках СКД
7 Oleg333
 
07.03.17
11:08
(5) Вся загвоздка в этих связях и есть - не получается никак в конструкторе такое настроить. Она никак не хочет выводить всю номенклатуру, выводить только часть удовлетворяющую отбору.
8 Oleg333
 
07.03.17
11:10
(6) Так изначально и делал, выводит не всю номенклатуру, а только удовлетворяющую отбору.
9 nordbox
 
07.03.17
11:10
ИМХО У тебя там стоит/не стоит наверное игнорировать NULL в ролях
10 DexterMorgan
 
07.03.17
11:11
(8) Отбор задается в пользоватеьлском режиме?
11 DexterMorgan
 
07.03.17
11:13
(8) Тебе кароче походу просто нужно явно прописать на закладке компоновка на что накладывать отбор по номенклатуре, в фигурных скобках в тексте появится
12 Oleg333
 
07.03.17
11:13
(9) Не понял, как это связано
(10) Ага
13 DexterMorgan
 
07.03.17
11:14
(12) ну тада (11)
14 Oleg333
 
07.03.17
11:15
(11) Да именно это и надо, но сложность в том, что есть внешний набор данных который нужно сначала связать с продажами и вот тут, как раз указать на эту связь отбор (но где там фигурные скобки у этой связи))) ?
15 DexterMorgan
 
07.03.17
11:15
(12) по умолчанию скд почти везде пользовательский отбор херачит
16 Oleg333
 
07.03.17
11:21
(15) см (14)
17 DexterMorgan
 
07.03.17
11:24
(16) Задай псевдоним на номенклатуру в запросе ном2, отбор будешь задавать на просто номенклатуру
18 DexterMorgan
 
07.03.17
11:25
(16) псевдоним на закладке компоновка
19 Jokero
 
07.03.17
11:27
А если так.
1 таблица с выборкой номенклатуры, левое соединение с оборотами продаж
2. объект ТЗ, откуда подтягиваем характеристику контрагента

Только отбор будет в вирт. таблице оборотов в виде параметра СКД. Он должен быть сформирован при компановке вручную на основе твоей ТЗ.

Тоесть при компановке ты смотришь свою ТЗ и заполняешь параметр - ДопустимыеКонтрагенты и их передаешь в параметры вирт. таблицы оборотов.
20 Oleg333
 
07.03.17
11:34
(17) Не понял, зачем мне отбор по номенклатуре, мне нужен отбор по характеристике из таблицы значений.

(19) В принципе как вариант, спасибо за идею, но тогда получается что надо анализировать какие пользователь наложил отборы в СКД и на основе этого формировать параметр для вирт. таблицы, т.е. надо писать код анализирующий эти отборы))) Неужели штатными средствами великой СКД никак не обойтись))?
21 DexterMorgan
 
07.03.17
11:37
(20) "Она никак не хочет выводить всю номенклатуру, выводить только часть удовлетворяющую отбору."

потому что скд херачит пользовательский отбор на все таблицы где есть номенклатура, задай ей псевдоним. чтобы на первыйй запрос к номенклатуре отбор не накладывался
22 DexterMorgan
 
07.03.17
11:37
(20) ну или кароче на что отбор у тебя идет
23 DexterMorgan
 
07.03.17
11:38
(20) на поля отбора задай псевдонимы
24 Oleg333
 
07.03.17
11:57
(21) Отбор у меня идет не по номенклатуре, а по Характеристике контрагента, это поле есть только в ТЗ, поэтому я никак не пойму, как помогут псевдонимы?
25 Oleg333
 
07.03.17
11:59
СКД делает внутреннее соединение всех 3-ех таблиц, если наложен глобальный отбор на поле из 3-ей таблицы - так вроде написано в документации.
26 Oleg333
 
07.03.17
13:26
Ну что, нет больше ни у кого идей?
27 rabbidX
 
07.03.17
13:39
Пакет запросов должен корректно отработать.
28 Oleg333
 
07.03.17
13:58
(27) Как сделать пакет, если есть внешний набор данных в виде таблицы значений?
29 Oleg333
 
07.03.17
14:39
Похоже есть всего 2 способа решения проблемы:

1. Перенести в Таблицу значений продажи (или всю номенклатуру);
2. Вариант предложенный в (19).
30 rabbidX
 
07.03.17
15:01
(28)
Выбрать
   ТЗ.Контрагент,
   ТЗ.Характеристика
Поместить ХарактеристикиКонтрагентов

Из тзВнешняя Как ТЗ
;

Выбрать
   Продажи.Номенклатура,
   Продажи.Контрагент,
   Характеристики.Характеристика
Поместить ПродажиСХарактеристиками

Из РегистрНакопления.Продажи.Обороты Как Продажи

   Внутреннее Соединение

     ХарактеристикиКонтрагентов Как Характеристики

      По Продажи.Контрагент = Характеристики.Контрагент

Где Характеристики.Контрагент = &Значение
;

Выбрать
   спрНоменклатура.Ссылка,
   Продажи.Контрагент,
   Продажи.Характеристика
Из Справочники.Номенклатура Как спрНоменклатура
Левое Соединение
   ПродажиСХарактеристиками Как Продажи
   По
       спрНоменклатура.Ссылка = Продажи.Номенклатура
31 Oleg333
 
07.03.17
15:12
(30) А как в СКД подсунуть менеджер временных таблиц? В нее ТЗ можно запихнуть исключительно через внешний набор данных.
32 Oleg333
 
09.03.17
14:03
В общем Хрусталевой надо было в своей книжке про сложные отчеты на первой страницы большими буквами написать предупреждение: "Разработка сложных отчетов на СКД на ваш страх и риск, достижение конечного результата не гарантируется в виду ограниченной функциональности применяемого инструмента" )))

А разработчикам платформы хочется пожелать, чтобы они добавили в СКД еще один набор данных "Вложенный набор", в котором можно было бы добавлять те наборы данных, которые имеются сейчас и делать между ними связи, а уже этот вложенный набор целиком связывать с наружным набором.