Вход | Регистрация
 

Изменилась логика отборов СКД при смене платформы

Изменилась логика отборов СКД при смене платформы
Я
   mzelensky
 
03.03.20 - 12:52
Доброго всем!

Имеется довольно сложный отчет написанный на СКД. Изначально писался на платформе 8.2.13 в режиме совместимости с 8.1. Запустил конфигурацию на платформе 8.3.15 без режима совместимости

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

Наборы данных:
НаборДанных_ОБЪЕДИНЕНИЕ. Поля: ОсновнойСклад, Склад, Остаток
   НаборДанных_Выборка1. БЕЗ АВТОЗАПОЛНЕНИЯ. Поля: ОсновнойСклад, Остаток
   НаборДанных_Выборка2. С АВТОЗАПОЛНЕНИЕМ. Поля: Склад, Остаток

ИЗНАЧАЛЬНО (на платформе 8.2.13 в режиме совместимости с 8.1) - если на уровне "Отчета" поставить отбор "Склад = КакойТоСклад", то система накладывала этот отбор на "НаборДанных_Выборка2" и в результате я получал все данные из набора "НаборДанных_Выборка1" и отобранные данные из "НаборДанных_Выборка2"

ПОСЛЕ ПЕРЕХОДА (на платформе 8.3.15 без режима совместимости) - если на уровне "Отчета" поставить отбор "Склад = КакойТоСклад", то система накладывала этот отбор на "НаборДанных_Выборка2" И этот же отбор наложит на набор "НаборДанных_ОБЪЕДИНЕНИЕ". В результате я сперва получу все данные из набора "НаборДанных_Выборка1" и отобранные данные из "НаборДанных_Выборка2", а потом они еще раз "обрежутся" по "Склад = КакойТоСклад" и в результате останутся только данные из "НаборДанных_Выборка2"

ВОПРОС - what the fuck!?!?!??!" Как заставить отрабатывать отборы по "первоначальному" варианту?
 
 
   butterbean
 
1 - 03.03.20 - 12:58
сделай в НаборДанных_Выборка2 еще одно поле Склад2 -копию поля Склад и отбирай по нему. А объединение оставь по полю Склад
   fisher
 
2 - 03.03.20 - 12:58
Ответ: Не стоит удивляться. Это 1С.
Совет: для начала я бы попробовал отключить автозаполнение настроек у второго набора и явно прописать в настройках требуемый отбор
   fisher
 
3 - 03.03.20 - 13:01
Так, стоп. А в настройках полей объединения стоит разрешение отбора по полю "Склад"? Если стоит, тогда как раз новый вариант поведения более логичен.
   mzelensky
 
4 - 03.03.20 - 13:02
(1) Не получится. Результат тот же. Я не могу " объединение оставь по полю Склад".
   mzelensky
 
5 - 03.03.20 - 13:03
(2) А смысл, если на его уровне все отрабатывает корректною. По всем признакам косяк именно в отборе на уровне "НаборДанных_ОБЪЕДИНЕНИЕ" ?
   mzelensky
 
6 - 03.03.20 - 13:05
(3) "А в настройках полей объединения стоит разрешение отбора по полю "Склад"" - конечно стоит. Я уже думал об этом. Если я его от туда убираю, то поле "Склад" вообще пропадает из отборов, а значит я не смогу его наложить на "НаборДанных_Выборка2"
   fisher
 
7 - 03.03.20 - 13:08
(6) Этого-то я и боялся. Тогда остается надежда на вариант, что из отборов полностью оно теперь пропадает из-за особенностей автозаполнения настроек.
Я бы попробовал все-таки во втором наборе отключить автозаполнение настроек и в фигурных скобках прописать возможность отбора по полю "Склад". И попробовать после этого оба варианта - с включением и отключением возможности отбора по складу на уровне объединения. В идеале СКД должно понять, что раз мы явно прописали возможность отбора по складу на уровне вложенного набора, то его пользователю нужно оставить.
   fisher
 
8 - 03.03.20 - 13:10
А так-то на уровне объединения сейчас работает логично. Раз мы указали возможность отбора на уровне объединения, то отбор и должен применяться к результатам объединения.
   mzelensky
 
9 - 03.03.20 - 13:12
(7) Не помогло.
   mzelensky
 
10 - 03.03.20 - 13:13
(8) Первоначальный вариант меня больше устраивал. Он работал. А сейчас получается, что задачу, которую мне требуется решить, НЕЛЬЗЯ решить!!!

Мне нужно вывести все данные из "НаборДанных_Выборка1" и отобранные данные из "НаборДанных_Выборка2"
   fisher
 
11 - 03.03.20 - 13:16
(9) То есть несмотря на описанный в настройках для вложенного набора отбор, его не дают пользователю если отбор отключен для объединения? Тогда печаль.
(10) А в первом варианте нельзя было решить другую задачу - применить отбор к результатам объединения. Оба варианта неполноценны.
   fisher
 
12 - 03.03.20 - 13:22
Что-то меня в твоем объединении смущает.
Остаток у тебя значит объединяется, а склады - нет. Пытаюсь понять прикладной смысл и у меня это не очень получается.
   catena
 
13 - 03.03.20 - 13:27
(10)Ну почему, можно, просто по-другому
   mzelensky
 
14 - 03.03.20 - 13:36
"То есть несмотря на описанный в настройках для вложенного набора отбор, его не дают пользователю если отбор отключен для объединения? Тогда печаль." - ДА

"А в первом варианте нельзя было решить другую задачу - применить отбор к результатам объединения. Оба варианта неполноценны." - Нет
   mzelensky
 
15 - 03.03.20 - 13:38
(12) Прикладной смысл - одно поле "Остаток" для всего отчета, соответственно одна выводимая колонка и все настройки для одного поля.
   mzelensky
 
16 - 03.03.20 - 13:40
(12) Суть не в этом. А в том, чтобы ВСЕГДА выводились Остатки по Основному складу (они в  НаборДанных_Выборка1), даже если остатков нет (0), и далее выводились данные по складам из "Отбора".

Отчет крайне замороченный, долго все нюансы объяснять. Самое главное, что все это работало...
   mzelensky
 
17 - 03.03.20 - 13:41
(13) Например как?
   catena
 
18 - 03.03.20 - 13:43
(16)При смене платформы всегда вылазят неочевидные изменения в логике, которые часто нигде неописаны. Поэтому перевод самописок с платформы на платформу не всегда минутное дело и остается только грустно ржать над предложениями техподдержки на каждый пук установить последнюю версию платформы.

(17)Например через параметр.
   mzelensky
 
19 - 03.03.20 - 13:46
(18) "(17)Например через параметр." не совсем понял предложения.

В смысле отказаться от отборов для "НаборДанных_Выборка2" и использовать параметры "склад" ? А что делать, если нужны все склады, без отбора? "Выбирать в параметре ВСЕ склады" ?
   Franchiser
 
20 - 03.03.20 - 13:47
Нужно сделать отдельное поле для фильтрации склада на закладке "Компоновка" во втором наборе и обозвать его как нибудь, а отбор по складу отключить. Но при этом для пользователя новое поле отбора можно показывать как "Склад".
   Franchiser
 
21 - 03.03.20 - 13:49
Назови новое поле поле компоновки СкладОтбор, Представление для пользователя "Склад", Галочка "использовать только для отбора".
Для поля Склад ставишь все галки кроме "использовать для отбора".
   catena
 
22 - 03.03.20 - 13:52
(19)Не умеете писать запрос, чтоб работало с незаполненным параметром?
"ГДЕ склад=&склад или &склад=Значение(Справочник.Склады.ПустаяСсылка)"
   Franchiser
 
23 - 03.03.20 - 13:53
(22) зачем если можно указывать пареметры/отборы на закладке "Компоновка"?
   mzelensky
 
24 - 03.03.20 - 13:54
(19) Во-первых плохое условие для отбора в виртуальных таблицах

Во-вторых, что при таком подходе, вы будите делать, если нужно отобраться не на сам склад, а допустим на "Склад.ТипСклада" ?
   catena
 
25 - 03.03.20 - 13:55
(23)Рабочий пример есть? Я попробовала с различными вариантами имен и ограничений отборов, решения, как и ТС, не нашла.
   Провинциальный 1сник
 
26 - 03.03.20 - 13:55
Сталкивался с подобной фигнёй, 1с в СКД накладывала отбор не на результаты составного запроса, а на первый запрос в объединении. Решил проблему выводом во временную таблицу, с последующей выборкой уже из неё.
   Franchiser
 
27 - 03.03.20 - 13:56
(25) есть
   catena
 
28 - 03.03.20 - 13:56
(24)У вас тоже есть другое решение? Параметр и значение параметра можно и программно обработать. Я к тому, что нет такой задачи, которую решить прям нельзя))
   catena
 
29 - 03.03.20 - 13:57
(27)Выложите, я с удовольствием посмотрю
   mzelensky
 
30 - 03.03.20 - 13:58
(21) Это где такая Галочка "использовать только для отбора" ?
 
 Рекламное место пустует
   Franchiser
 
31 - 03.03.20 - 13:58
(29) у меня есть отчет, но он очень специфичен по собственному регистру
   Franchiser
 
32 - 03.03.20 - 13:59
(30) в наборе данных галочка "условие"
   mzelensky
 
33 - 03.03.20 - 14:02
(21) НА удивление работает, только как-то долго очень. Прям зависание на 75 ОЧЕНЬ ощутимое.
   Franchiser
 
34 - 03.03.20 - 14:03
Вот такие конструкции в отчете при получении оборотов:
{ГДЕ
    МойРегистр.Покупатель,
    МойРегистр.НомерНакХ КАК НомерНакОтбор,
    МойРегистр.ДатаХ КАК ДатаХОтбор,
    МойРегистр.ТипОплатыХ КАК ВидОплатыОтбор,
    МойРегистр.ОперацияПрочие КАК ОперацияПрочиеОтбор,
    МойРегистр.КодКонтрагентаХ = &КодХ}
   mzelensky
 
35 - 03.03.20 - 14:03
(33) Такое ощущение, что как-то оно через жопноеное место этот отбор накладывает. Там запрос огромный, попробую покапаться в этом направлении, может не совсем корректно условие сделал
   Franchiser
 
36 - 03.03.20 - 14:04
(33) смотря куда ты добавил. Можно же фильтровать в разделе "ГДЕ", а можно в параметрах вирт. таблицы. Понятно что через "Где" будет работать дольше
   mzelensky
 
37 - 03.03.20 - 14:05
(34) И что будет?

Типа условие "МойРегистр.КодКонтрагентаХ = &КодХ" отработает только при заполненном параметре "&КодХ" ?
   Franchiser
 
38 - 03.03.20 - 14:05
(35) сравни запросы в макете компоновки до и после и оптимизируй до нужного результата
   Franchiser
 
39 - 03.03.20 - 14:05
(37) да, именно так
   mzelensky
 
40 - 03.03.20 - 14:05
(36) Это я уже разберусь. Просто запрос перебрать нужно. Раньше то в нем "Автозаполнение" отрабатывало.
   Franchiser
 
41 - 03.03.20 - 14:07
(40) Автозаполнение никак не влияет на то, что ты пропишешь данные на закладке "Компоновка"
   Franchiser
 
42 - 03.03.20 - 14:08
(40) единственно нужно запретить использовать в условиях поля которые приведут к некорректной фильтрации наборов
   mzelensky
 
43 - 03.03.20 - 14:09
(41) Почему? Установленная галочка "Автозаполнение" ведь отключает ручные настройки "{}". Т.е. если галочка "Автозаполнение" стоит, то все настройки в "{}" игнорируются. Или я не прав?
   Franchiser
 
44 - 03.03.20 - 14:15
(43) нет ты не прав. Автозаполнение помогает заполнить только закладку "Набор данных". При этом ты не можешь полученные поля как-то удалить, можно только включать/отключать галочками использование в групиировка, отборах, полях и т.д.
   Franchiser
 
45 - 03.03.20 - 14:18
Вообще на курсах по СКД в фирме 1С (Белоусов) говорил для источника данных запрос никогда не нужно отключать автозаполнение, это только усложняет работу забивания полей в наборы.
   mzelensky
 
46 - 03.03.20 - 14:24
(45) Да вроде ничего сложного в забивании полей. Зато уже точно уверен, что отрабатывать условия и выборка полей будут именно так, как ты задал ,а не так, как система сочла для себя лучше

Но, как показывает даже опыт этой ветки....это не точно!
   Franchiser
 
47 - 03.03.20 - 14:25
(37) + не при заполненном параметре, а в том случае если параметр используется
   Franchiser
 
48 - 03.03.20 - 14:26
(46) на самом деле давно известно откуда система подбирает все эти поля: берутся параметры виртуальных таблицы + поля выборки последнего запроса.
   Franchiser
 
49 - 03.03.20 - 14:28
(46) забивая поля вручную, ты можешь получить на выходе не оптимальный запрос, но это твое дело. я предпочитаю оставлять автозаполнение, и при необходимости корректировать поведение компоновки.
   toypaul
 
50 - 03.03.20 - 14:33
нашли решение? а то я 3 недели статью на эту тему писал, но ее публиковать не хотят :)
   palsergeich
 
51 - 03.03.20 - 14:36
(46) Не, для оптимизатора СКД добавили Вы поля руками или автозаполнили - однофигственно.
фигурные скобки - и там и там работают.
Есть особенности оптимизатора, которые надо на себе прочуствовать и больше на это не попадаться. В идеале глазами увидеть итоговый результат и исполняемый текст запроса и как правило все станет ясно
   mzelensky
 
52 - 03.03.20 - 14:39
(50) Подсказка в (20) и (21) вроде помогла
   toypaul
 
53 - 03.03.20 - 14:39
хочу картинки настроек наборов :) и запросы
   toypaul
 
54 - 03.03.20 - 14:40
(52) а. ну ок. значит стандартные грабли. а я думал что-то новенькое
   Franchiser
 
55 - 03.03.20 - 14:41
(54) это не грабли а фича. иногда действительно так удобнее.
   toypaul
 
56 - 03.03.20 - 14:46
кто-то говорил что Автозаполнение не влияет на логику работы если расставлены. не совсем так. иногда очень даже влияет.

кто-то спрашивал не понятно каким образом накладывается отбор. вот таким образом накладывается на объединение http://prntscr.com/raunj6
   mzelensky
 
57 - 03.03.20 - 14:48
(50) Опубликуй в другом месте
   Franchiser
 
58 - 03.03.20 - 14:49
(56) что мешает программно убрать фильтр на объединение из макета компоновки, тогда будет работать по-старому
   Провинциальный 1сник
 
59 - 03.03.20 - 14:49
(55) Это именно грабли, но они не просто так, а в целях оптимизации. Недокументированное поведение. Но к сожалению в некоторых случаях получается на эти грабли наступить.
Самое логичное было бы, если бы СКД не пыталась лезть вглубь запросов, а все отборы накладывала на "конечный" источник данных. Но тогда могут быть потери в производительности.
   toypaul
 
60 - 03.03.20 - 14:50
(20) и (21) похоже что единственно правильное решение. потому что даже если отключить автозполнение в наборе 2, такая же шняга происходит. была надежда что сработает. потому что иногда именно отключение автозаполнения отключает применение отбора в ненужном месте
   Franchiser
 
61 - 03.03.20 - 14:53
(59) ну смотри пример.
Есть два набора данных:
1. Запрос по остаткам
2. Запрос по оборотам.
По оборотам есть поле которого нет по остаткам.
Если поставить фильтр на это поле, то что лучше вывести все остатки и данные с фильтром по оборотам или же остатки не показывать а вывести только отфильтрованные обороты.
По-моему лучше не показывать остатки вообще, так отчет будет меньше.
   Franchiser
 
62 - 03.03.20 - 14:54
(59) а как сделать в старом варианте такую же фильтрация как в новом я не представляю.
   toypaul
 
63 - 03.03.20 - 14:54
Нашел это изменение (вроде оно)

http://prntscr.com/rauu3r
   toypaul
 
64 - 03.03.20 - 14:57
хотя нет. не совсем оно
   fisher
 
65 - 03.03.20 - 16:41
(33) Вероятно, у тебя теперь при отключенном автозаполнении настроек не срабатывают какие-то оптимизации, которые раньше автозаполнение делало.
Попробуй, как советовали, включить автозаполнение но оставить фигурные скобки в отборе. Автозаполнение их не отключает. Фигурные скобки имеют приоритет.
   catena
 
66 - 04.03.20 - 05:28
(34)Все, теперь я вас поняла. Я думала, вы про настройки использования отборов :) Ваш вариант практически то же самое, что я предлагала, только с обработкой пустого параметра на стороне СКД.
 
 Рекламное место пустует
   Franchiser
 
67 - 04.03.20 - 11:19
(66) можно использовать как необязательные  отборы, так и необязательные параметры в разных частях запросов.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.