|
Изменилась логика отборов СКД при смене платформы | ☑ | ||
---|---|---|---|---|
0
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!?!?!??!" Как заставить отрабатывать отборы по "первоначальному" варианту? |
|||
1
butterbean
03.03.20
✎
12:58
|
сделай в НаборДанных_Выборка2 еще одно поле Склад2 -копию поля Склад и отбирай по нему. А объединение оставь по полю Склад
|
|||
2
fisher
03.03.20
✎
12:58
|
Ответ: Не стоит удивляться. Это 1С.
Совет: для начала я бы попробовал отключить автозаполнение настроек у второго набора и явно прописать в настройках требуемый отбор |
|||
3
fisher
03.03.20
✎
13:01
|
Так, стоп. А в настройках полей объединения стоит разрешение отбора по полю "Склад"? Если стоит, тогда как раз новый вариант поведения более логичен.
|
|||
4
mzelensky
03.03.20
✎
13:02
|
(1) Не получится. Результат тот же. Я не могу " объединение оставь по полю Склад".
|
|||
5
mzelensky
03.03.20
✎
13:03
|
(2) А смысл, если на его уровне все отрабатывает корректною. По всем признакам косяк именно в отборе на уровне "НаборДанных_ОБЪЕДИНЕНИЕ" ?
|
|||
6
mzelensky
03.03.20
✎
13:05
|
(3) "А в настройках полей объединения стоит разрешение отбора по полю "Склад"" - конечно стоит. Я уже думал об этом. Если я его от туда убираю, то поле "Склад" вообще пропадает из отборов, а значит я не смогу его наложить на "НаборДанных_Выборка2"
|
|||
7
fisher
03.03.20
✎
13:08
|
(6) Этого-то я и боялся. Тогда остается надежда на вариант, что из отборов полностью оно теперь пропадает из-за особенностей автозаполнения настроек.
Я бы попробовал все-таки во втором наборе отключить автозаполнение настроек и в фигурных скобках прописать возможность отбора по полю "Склад". И попробовать после этого оба варианта - с включением и отключением возможности отбора по складу на уровне объединения. В идеале СКД должно понять, что раз мы явно прописали возможность отбора по складу на уровне вложенного набора, то его пользователю нужно оставить. |
|||
8
fisher
03.03.20
✎
13:10
|
А так-то на уровне объединения сейчас работает логично. Раз мы указали возможность отбора на уровне объединения, то отбор и должен применяться к результатам объединения.
|
|||
9
mzelensky
03.03.20
✎
13:12
|
(7) Не помогло.
|
|||
10
mzelensky
03.03.20
✎
13:13
|
(8) Первоначальный вариант меня больше устраивал. Он работал. А сейчас получается, что задачу, которую мне требуется решить, НЕЛЬЗЯ решить!!!
Мне нужно вывести все данные из "НаборДанных_Выборка1" и отобранные данные из "НаборДанных_Выборка2" |
|||
11
fisher
03.03.20
✎
13:16
|
(9) То есть несмотря на описанный в настройках для вложенного набора отбор, его не дают пользователю если отбор отключен для объединения? Тогда печаль.
(10) А в первом варианте нельзя было решить другую задачу - применить отбор к результатам объединения. Оба варианта неполноценны. |
|||
12
fisher
03.03.20
✎
13:22
|
Что-то меня в твоем объединении смущает.
Остаток у тебя значит объединяется, а склады - нет. Пытаюсь понять прикладной смысл и у меня это не очень получается. |
|||
13
catena
03.03.20
✎
13:27
|
(10)Ну почему, можно, просто по-другому
|
|||
14
mzelensky
03.03.20
✎
13:36
|
"То есть несмотря на описанный в настройках для вложенного набора отбор, его не дают пользователю если отбор отключен для объединения? Тогда печаль." - ДА
"А в первом варианте нельзя было решить другую задачу - применить отбор к результатам объединения. Оба варианта неполноценны." - Нет |
|||
15
mzelensky
03.03.20
✎
13:38
|
(12) Прикладной смысл - одно поле "Остаток" для всего отчета, соответственно одна выводимая колонка и все настройки для одного поля.
|
|||
16
mzelensky
03.03.20
✎
13:40
|
(12) Суть не в этом. А в том, чтобы ВСЕГДА выводились Остатки по Основному складу (они в НаборДанных_Выборка1), даже если остатков нет (0), и далее выводились данные по складам из "Отбора".
Отчет крайне замороченный, долго все нюансы объяснять. Самое главное, что все это работало... |
|||
17
mzelensky
03.03.20
✎
13:41
|
(13) Например как?
|
|||
18
catena
03.03.20
✎
13:43
|
(16)При смене платформы всегда вылазят неочевидные изменения в логике, которые часто нигде неописаны. Поэтому перевод самописок с платформы на платформу не всегда минутное дело и остается только грустно ржать над предложениями техподдержки на каждый пук установить последнюю версию платформы.
(17)Например через параметр. |
|||
19
mzelensky
03.03.20
✎
13:46
|
(18) "(17)Например через параметр." не совсем понял предложения.
В смысле отказаться от отборов для "НаборДанных_Выборка2" и использовать параметры "склад" ? А что делать, если нужны все склады, без отбора? "Выбирать в параметре ВСЕ склады" ? |
|||
20
Franchiser
гуру
03.03.20
✎
13:47
|
Нужно сделать отдельное поле для фильтрации склада на закладке "Компоновка" во втором наборе и обозвать его как нибудь, а отбор по складу отключить. Но при этом для пользователя новое поле отбора можно показывать как "Склад".
|
|||
21
Franchiser
гуру
03.03.20
✎
13:49
|
Назови новое поле поле компоновки СкладОтбор, Представление для пользователя "Склад", Галочка "использовать только для отбора".
Для поля Склад ставишь все галки кроме "использовать для отбора". |
|||
22
catena
03.03.20
✎
13:52
|
(19)Не умеете писать запрос, чтоб работало с незаполненным параметром?
"ГДЕ склад=&склад или &склад=Значение(Справочник.Склады.ПустаяСсылка)" |
|||
23
Franchiser
гуру
03.03.20
✎
13:53
|
(22) зачем если можно указывать пареметры/отборы на закладке "Компоновка"?
|
|||
24
mzelensky
03.03.20
✎
13:54
|
(19) Во-первых плохое условие для отбора в виртуальных таблицах
Во-вторых, что при таком подходе, вы будите делать, если нужно отобраться не на сам склад, а допустим на "Склад.ТипСклада" ? |
|||
25
catena
03.03.20
✎
13:55
|
(23)Рабочий пример есть? Я попробовала с различными вариантами имен и ограничений отборов, решения, как и ТС, не нашла.
|
|||
26
Провинциальный 1сник
03.03.20
✎
13:55
|
Сталкивался с подобной фигнёй, 1с в СКД накладывала отбор не на результаты составного запроса, а на первый запрос в объединении. Решил проблему выводом во временную таблицу, с последующей выборкой уже из неё.
|
|||
27
Franchiser
гуру
03.03.20
✎
13:56
|
(25) есть
|
|||
28
catena
03.03.20
✎
13:56
|
(24)У вас тоже есть другое решение? Параметр и значение параметра можно и программно обработать. Я к тому, что нет такой задачи, которую решить прям нельзя))
|
|||
29
catena
03.03.20
✎
13:57
|
(27)Выложите, я с удовольствием посмотрю
|
|||
30
mzelensky
03.03.20
✎
13:58
|
(21) Это где такая Галочка "использовать только для отбора" ?
|
|||
31
Franchiser
гуру
03.03.20
✎
13:58
|
(29) у меня есть отчет, но он очень специфичен по собственному регистру
|
|||
32
Franchiser
гуру
03.03.20
✎
13:59
|
(30) в наборе данных галочка "условие"
|
|||
33
mzelensky
03.03.20
✎
14:02
|
(21) НА удивление работает, только как-то долго очень. Прям зависание на 75 ОЧЕНЬ ощутимое.
|
|||
34
Franchiser
гуру
03.03.20
✎
14:03
|
Вот такие конструкции в отчете при получении оборотов:
{ГДЕ МойРегистр.Покупатель, МойРегистр.НомерНакХ КАК НомерНакОтбор, МойРегистр.ДатаХ КАК ДатаХОтбор, МойРегистр.ТипОплатыХ КАК ВидОплатыОтбор, МойРегистр.ОперацияПрочие КАК ОперацияПрочиеОтбор, МойРегистр.КодКонтрагентаХ = &КодХ} |
|||
35
mzelensky
03.03.20
✎
14:03
|
(33) Такое ощущение, что как-то оно через жопноеное место этот отбор накладывает. Там запрос огромный, попробую покапаться в этом направлении, может не совсем корректно условие сделал
|
|||
36
Franchiser
гуру
03.03.20
✎
14:04
|
(33) смотря куда ты добавил. Можно же фильтровать в разделе "ГДЕ", а можно в параметрах вирт. таблицы. Понятно что через "Где" будет работать дольше
|
|||
37
mzelensky
03.03.20
✎
14:05
|
(34) И что будет?
Типа условие "МойРегистр.КодКонтрагентаХ = &КодХ" отработает только при заполненном параметре "&КодХ" ? |
|||
38
Franchiser
гуру
03.03.20
✎
14:05
|
(35) сравни запросы в макете компоновки до и после и оптимизируй до нужного результата
|
|||
39
Franchiser
гуру
03.03.20
✎
14:05
|
(37) да, именно так
|
|||
40
mzelensky
03.03.20
✎
14:05
|
(36) Это я уже разберусь. Просто запрос перебрать нужно. Раньше то в нем "Автозаполнение" отрабатывало.
|
|||
41
Franchiser
гуру
03.03.20
✎
14:07
|
(40) Автозаполнение никак не влияет на то, что ты пропишешь данные на закладке "Компоновка"
|
|||
42
Franchiser
гуру
03.03.20
✎
14:08
|
(40) единственно нужно запретить использовать в условиях поля которые приведут к некорректной фильтрации наборов
|
|||
43
mzelensky
03.03.20
✎
14:09
|
(41) Почему? Установленная галочка "Автозаполнение" ведь отключает ручные настройки "{}". Т.е. если галочка "Автозаполнение" стоит, то все настройки в "{}" игнорируются. Или я не прав?
|
|||
44
Franchiser
гуру
03.03.20
✎
14:15
|
(43) нет ты не прав. Автозаполнение помогает заполнить только закладку "Набор данных". При этом ты не можешь полученные поля как-то удалить, можно только включать/отключать галочками использование в групиировка, отборах, полях и т.д.
|
|||
45
Franchiser
гуру
03.03.20
✎
14:18
|
Вообще на курсах по СКД в фирме 1С (Белоусов) говорил для источника данных запрос никогда не нужно отключать автозаполнение, это только усложняет работу забивания полей в наборы.
|
|||
46
mzelensky
03.03.20
✎
14:24
|
(45) Да вроде ничего сложного в забивании полей. Зато уже точно уверен, что отрабатывать условия и выборка полей будут именно так, как ты задал ,а не так, как система сочла для себя лучше
Но, как показывает даже опыт этой ветки....это не точно! |
|||
47
Franchiser
гуру
03.03.20
✎
14:25
|
(37) + не при заполненном параметре, а в том случае если параметр используется
|
|||
48
Franchiser
гуру
03.03.20
✎
14:26
|
(46) на самом деле давно известно откуда система подбирает все эти поля: берутся параметры виртуальных таблицы + поля выборки последнего запроса.
|
|||
49
Franchiser
гуру
03.03.20
✎
14:28
|
(46) забивая поля вручную, ты можешь получить на выходе не оптимальный запрос, но это твое дело. я предпочитаю оставлять автозаполнение, и при необходимости корректировать поведение компоновки.
|
|||
50
toypaul
гуру
03.03.20
✎
14:33
|
нашли решение? а то я 3 недели статью на эту тему писал, но ее публиковать не хотят :)
|
|||
51
palsergeich
03.03.20
✎
14:36
|
(46) Не, для оптимизатора СКД добавили Вы поля руками или автозаполнили - однофигственно.
фигурные скобки - и там и там работают. Есть особенности оптимизатора, которые надо на себе прочуствовать и больше на это не попадаться. В идеале глазами увидеть итоговый результат и исполняемый текст запроса и как правило все станет ясно |
|||
52
mzelensky
03.03.20
✎
14:39
|
(50) Подсказка в (20) и (21) вроде помогла
|
|||
53
toypaul
гуру
03.03.20
✎
14:39
|
хочу картинки настроек наборов :) и запросы
|
|||
54
toypaul
гуру
03.03.20
✎
14:40
|
(52) а. ну ок. значит стандартные грабли. а я думал что-то новенькое
|
|||
55
Franchiser
гуру
03.03.20
✎
14:41
|
(54) это не грабли а фича. иногда действительно так удобнее.
|
|||
56
toypaul
гуру
03.03.20
✎
14:46
|
кто-то говорил что Автозаполнение не влияет на логику работы если расставлены. не совсем так. иногда очень даже влияет.
кто-то спрашивал не понятно каким образом накладывается отбор. вот таким образом накладывается на объединение http://prntscr.com/raunj6 |
|||
57
mzelensky
03.03.20
✎
14:48
|
(50) Опубликуй в другом месте
|
|||
58
Franchiser
гуру
03.03.20
✎
14:49
|
(56) что мешает программно убрать фильтр на объединение из макета компоновки, тогда будет работать по-старому
|
|||
59
Провинциальный 1сник
03.03.20
✎
14:49
|
(55) Это именно грабли, но они не просто так, а в целях оптимизации. Недокументированное поведение. Но к сожалению в некоторых случаях получается на эти грабли наступить.
Самое логичное было бы, если бы СКД не пыталась лезть вглубь запросов, а все отборы накладывала на "конечный" источник данных. Но тогда могут быть потери в производительности. |
|||
60
toypaul
гуру
03.03.20
✎
14:50
|
(20) и (21) похоже что единственно правильное решение. потому что даже если отключить автозполнение в наборе 2, такая же шняга происходит. была надежда что сработает. потому что иногда именно отключение автозаполнения отключает применение отбора в ненужном месте
|
|||
61
Franchiser
гуру
03.03.20
✎
14:53
|
(59) ну смотри пример.
Есть два набора данных: 1. Запрос по остаткам 2. Запрос по оборотам. По оборотам есть поле которого нет по остаткам. Если поставить фильтр на это поле, то что лучше вывести все остатки и данные с фильтром по оборотам или же остатки не показывать а вывести только отфильтрованные обороты. По-моему лучше не показывать остатки вообще, так отчет будет меньше. |
|||
62
Franchiser
гуру
03.03.20
✎
14:54
|
(59) а как сделать в старом варианте такую же фильтрация как в новом я не представляю.
|
|||
63
toypaul
гуру
03.03.20
✎
14:54
|
||||
64
toypaul
гуру
03.03.20
✎
14:57
|
хотя нет. не совсем оно
|
|||
65
fisher
03.03.20
✎
16:41
|
(33) Вероятно, у тебя теперь при отключенном автозаполнении настроек не срабатывают какие-то оптимизации, которые раньше автозаполнение делало.
Попробуй, как советовали, включить автозаполнение но оставить фигурные скобки в отборе. Автозаполнение их не отключает. Фигурные скобки имеют приоритет. |
|||
66
catena
04.03.20
✎
05:28
|
(34)Все, теперь я вас поняла. Я думала, вы про настройки использования отборов :) Ваш вариант практически то же самое, что я предлагала, только с обработкой пустого параметра на стороне СКД.
|
|||
67
Franchiser
гуру
04.03.20
✎
11:19
|
(66) можно использовать как необязательные отборы, так и необязательные параметры в разных частях запросов.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |