Имя: Пароль:
1C
1С v8
ВТ и вложенный запрос возвращают различные данные в СКД !!! Объясните
0 atamanov_ys
 
23.08.19
16:25
Подскажите, почему получается такая ситуация, как на условном примере, который я нарисовал ниже.

https://i.imgur.com/NhqkMOM.png

Поясните ВТОРОЙ случай, что это ?

На реальной базе в реальном запросе убил пол дня, чтобы понять, что запрос выдаёт различные данные в СКД в зависимости от того, из вложенного запроса получаем данные или из ВТ. ПРИ ЭТОМ в консоле запросов всё работало нормально при любых вариантах, как при использовании временной таблицы или вложенного запроса.

Суть запроса в том, что, если у нас одна позиция полностью повторяется, СКД сама её группирует, если мы второе поле не выбираем. Я сам ничего не группирую, запросы идентичны (проставление измерения в ролях СКД или обязательного поля в никак проблемы не решило).
Решилась проблема заменой временной таблицей на вложенный запрос, тогда данные получились идентичны.

Сам запрос был нетривиальный: нужно было в рамках одного запроса получить срез последних и остатки на каждый день, получив кол-во дней, когда были нулевые остатки и получить среднюю цену от этих дней. То есть группировка была только по номенклатуре, а дата была агрегирующим полем, но в итоге кол-во дней всегда было равно 1, если я данные получал из временной таблицы, тк СКД выбирала только одну позицию, как я потом понял.

Объясните
1 sqr4
 
23.08.19
16:27
(0) оптимизатор
2 sqr4
 
23.08.19
16:28
(0) когда правила обмена будете писать, он тоже вам встретится
3 aleks_default
 
23.08.19
16:54
Тестовое задание чтоли?
4 atamanov_ys
 
23.08.19
17:08
(3) нет, рабочая задача. Меня в подробности не посвящали, но это формула оценочная для расчета потерянной выручки.
https://i.imgur.com/b4CS6Gl.png
(рассчитанная потребность рассчитывается в других временных таблицах, это оценочный показатель, сколько нужно товара заказать, в КА2 есть похожий механизм типовой)

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

Но вообще получилась бы неплохая учебная задача, если убрать всё лишнее.

(1)
Это я догадывался, но для меня это просто чёрный ящик. Это документированное поведение вообще или нет. Как понять, почему СКД выбирает такую стратегию оптимизации, что я теряю данные.
5 Buster007
 
23.08.19
17:59
что-то не получается у меня такое сделать... покажи запрос
6 atamanov_ys
 
23.08.19
18:13
(5) Я сейчас подготовил тестовую конфу, где в справочник все данные запихал один. Там наглядно показано, в чём проблема.

Запрос такой:
https://i.imgur.com/iOYn5nS.png

DT файл с тестовой базой, ничего лишнего, никаких регистров, только один справочник. 2 запроса уже созданы одинаковых: в одних из ВТ берутся данные, в другой из вложенного запроса + консоль запроса в базе есть, там из ВТ и из вложенного одни и те же данные. То есть результат такой, как у меня на картинке в шапке. СКД вообще какую-то дичь творит, он не так считает...

https://dvfustud-my.sharepoint.com/:f:/g/personal/atamanov_ius_students_dvfu_ru/EuVUqalXNfhBqtHbVXtDI4kBlkLl0MHgpNVVj2ra-soHZQ?e=HPTiQB
7 RomanYS
 
23.08.19
18:21
(6) "Номенклатура.Ссылка" - это сильно
У тебя сгруппировать по Номенклатура, такой запрос не может возвращать несколько записей по номенклатуре нигде (запрос/построитель/СКД).
8 timurhv
 
23.08.19
18:23
(6) Сделал по-человечески без СУММА и группировок в запросе, убрал автозаполнение, заполнил ресурсы, в настройках указал поле группировки - все ок.
9 timurhv
 
23.08.19
18:23
+(8) Два отчета стали идентичные данные выводить.
10 palsergeich
 
23.08.19
18:29
В СКД есть оптимизатор - это его работа, по хорошему группировок в текстах запросов СКД во избежании этой проблемы надо издегать
11 atamanov_ys
 
23.08.19
18:31
(7)  я здесь и не возвращаю несколько записей по номенклатуре, я их уже сгруппировал. Иллюстрация в шапке очень условна же, я как-бы показываю, что СКД при расчете кол-ва дней только одну запись видит в этом случае, если из ВТ её достаю  
(9)(8)
На реальном запросе, где 10+ временных таблиц попробовали бы итоги собрать в ресурсах...
К тому же внутри запроса будет более быстро.
Можно, конечно, с извращениями в ресурсах это собрать, но мне бы пришлось реструктуризацию многоэтажного запроса делать, заменить ВТ на вложенный запрос оказалось легче.
Это не итоговый запрос, эти данные идут дальше собираться.
К тому же не всегда есть возможность СКД использовать, если это не отчёт.

Там итоговые данные различные, а запрос ОДИНАКОВЫЙ. В моей выгрузке это видно.
12 atamanov_ys
 
23.08.19
18:32
(10) да, вы правы, но уже слишком поздно было изменять логику запроса, тк я начал его формировать так изначально
13 atamanov_ys
 
23.08.19
18:34
(11) хотя я сам себе сейчас противоречу. Если это не СКД, то и данные будут собраны верные. Да, нужно СКД изучать. Но там слишком нетривиальные формулы, казалось через запрос легче собрать это. А так остатки и срез последних на дату только через несколько наборов данных получать
14 atamanov_ys
 
23.08.19
18:42
(13) *на каждую дату (каждый день) имеется ввиду. И потом еще на один коэффициент умножать. 3 набора данных минимум.
15 timurhv
 
23.08.19
19:25
(11) что вы скинули, мы разобрали и объяснили. Исходный запрос показывайте
16 atamanov_ys
 
23.08.19
20:14
(15) Если это что-то даст.

Вот так рассчитывается потерянная выручка https://i.imgur.com/b4CS6Gl.png

А сам коэффициент количества рассчитанной потребности вот так по шагам (1- красная, 2- зеленая, 3- голубая) https://i.imgur.com/jKUOF9U.png.

Кто в КА2 с механизмом статистического обеспечения потребностей знаком, то суть будет ясна (тут похожая идея, но не совсем).

Запрос: https://pastebin.com/M4hkehe3
файл запроса: https://dvfustud-my.sharepoint.com/:i:/g/personal/atamanov_ius_students_dvfu_ru/ESuSnDXW69lEkHWLZYNUNxYBMwXNH6207gYwmAVQph2clw?e=dd3Ucz
ЧТоб в конструкторе открыть нужна КА~2.4.8

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

Наверное, можно через СКД в одном наборе рассчитать потребность, а в другом данные с детализацией до дней. И в ресурсах через ВЫчислитьВыражениеСГруппировкойМассив считать по номенклатурам часть показателей, но непонятно, как наборы данных соединятся, там же умножатся записи...
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан