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