#0
by Crush
Не могу сообразить. Есть два набора данных. Соединяю их. В результате получается полное соединение. А нужно левое. Наборы данных достаточно сложные, что бы методом тыка искать причину. В инете нарыл, что скд делает полное соединение, когда в правой таблице есть условие на НЕ НУЛЛ. Взял два простых набора и ни как не получается заставить скд делать полное соединение. Цель темы: понять из-за чего возникает полное соединение и добиться на простом примере. Набор данных 1 ВЫБРАТЬ Набор данных 2 "Кухня", 4 ; ВЫБРАТЬ ГДЕ (НЕ вт.Товар ЕСТЬ NULL ) Вывод: Таблица {Строки=Товар; Колонки = Склад; Ресурсы = Количество} Срабатывает левое соединение. Как заставить СКД делать полное?
#1
by fisher
"Как заставить СКД делать полное?" Спроси это у того мудреца, который про него заикнулся.
#2
by el-gamberro
Идешь в библиотеку. Берешь любую книгу по теории реляц. баз данных. Долго куришь. Потом долго смеешься на там какую ерунду ты написал в етой теме. По сути убери условие ГДЕ (НЕ вт.Товар ЕСТЬ NULL )
#3
by el-gamberro
Кстати говоря в в запросе нет НИ ОДНОГО соединения, и етот человек спршивает как получить ПОЛНОЕ вместо ЛЕВОГО
#5
by Crush
Без этого условия срабатывает левое соединение. И с ним тоже. Соединение наборов данных по полю Товар (думал, что это и так понятно)
#6
by Crush
Ссори! Речь не о полном, а о ВНУТРЕННЕМ соединении. 2 часа сна сказываются. Простите. Вместо левого у меня получается внутреннее. Помогите разобраться от чего это зависит
#7
by fisher
От кривых рук. Наборы данных всегда левым соединяются. Или докажи обратное на простом примере.
#8
by Crush
Да вот за простым примером и обратился сюда. Если никто не сталкивался, то придется тогда упрощать свои наборы данных. Обязательно выложу.
#9
by fisher
Проверь отборы СКД. Может, у тебя хитрый отбор накладывается на результат соединения, а тебе кажется что внутреннее отрабатывает.
#10
by Crush
Отбор ставится только на правый набор. Псевдоним поля отбора не совпадает с полями левого набора. Если задать отбор приводящий к пустой правой таблице, то весь отчет получается пустой.. Эм... попробую ка я дать разные имена полям по которым соединяю..
#11
by fisher
Это ТЫ ВООБРАЖАЕШЬ, что отбор ставится только на правый набор. Чтобы это стало реальностью, нужна магия фигурных скобок. А сейчас у тебя отбор применяется к РЕЗУЛЬТАТУ соединения наборов.
#12
by Classic
Отбор в СКД ставится уже на результирующую таблицу. Если у тебя левое соединение, а отбор вешается на элементы из правой таблицы, то фактические нулы правой таблицы не попадают в вывод. А значит получаешь внутреннее соединение. Что не понятно?
#15
by fisher
Не пофиг. Вот благодаря такой формулировке, в мозгу ТС и поселилась ересь, что СКД умеет соединять наборы не только левым соединением.
#16
by Crush
Лёд тронулся. Перенес отбор в параметы В правой таблице было условие {ГДЕ Теперь левая таблица полностью выводится. (Осталось вспомнить на кой я вчера это кривое условие добавил.)
#17
by Crush
Да, точно! Такая штука и в обычных запросах есть когда Выбрать что то Из вт1 Левое соединение вт2 Где вт2.Поле1 = "бла бла" Вроде условие ставишь на правую таблицу, а ограничивается весь результат Спасибо за помощь!
#18
by fisher
Хм... Если это условие было только в правом наборе и автозаполнение настроек было отключено - тогда должно было правильно отработать. Может, галка автозаполнения настроек стоит?
#19
by Crush
Автозаполнение отключено на обоих наборах. И это условие тоже было ни причем. Второй набор данных выбирается из виртуальной таблицы оборотов регистра накопления. Если в параметрах таблицы написать .Обороты(, , , Измерение1=&ЗначениеИзмерения), то результат не ограничивается, а если .Обороты(, , , {(Измерение1)}) или .Обороты(, , , {(Измерение1).*}), то весь результат ограничивается данными правой таблицы. С параметром всё работает, но хочется пользоваться отбором скд. А сливать запросы обоих наборов - это уж очень тяжелая табличка получится. Хотя... Кто знает эту шибкоумную скд. Попробую.
#20
by Classic
С колокольни твоей логики ограничение на Измерение1 - это не отбор. Это фактически условие соединения.
#23
by Crush
Отдельные имена уже давал. Всё равно строки с правыми нулами отбрасывает. Чесал левой рукой правое ухо: 1) Ставил отбор не в параметры виртуальной таблицы а в секцию ГДЕ. Результат: Формируется долго и всё равно не выводит пустые значения. 2) Объединил наборы данных в один. Результат: Формируется долго. В группировку колонок попадает группировка по Null. т.е. лишняя пустая колонка выводится. Интуиция мне подсказывает, что должно быть решение, работающее как с параметрами.
#25
by Crush
Нашел у себя типовую демку бухгалтерии 2.0. Там простой пример сделал. Левый набор: ВЫБРАТЬ Ссылка из ПланСчетов.Хозрасчетный Правый набор: ВЫБРАТЬ СчетРасходов, Организация, СуммаОборот ИЗ РегистрНакопления.РеализацияУслуг.Обороты(, , , {(Организация)}) Соединение по Счет=СчетРасходов Вывод Таблица: Строки: Счета Если не задавать отбор по организации, то будет весь план счетов и суммы по всем организациям. Если задать отбор, то счета будут не все.
#26
by Crush
Мне к зубному. Может кто догадается как решить задачу с использованием скд отбора без потери левого соединения. Результат должен быть такой же как если вместо СКД отбора задать параметр. Платформы от 8.1.12.101 до 8.2.17.153
#27
by fisher
Ыыыыы! Связь наборов компоновки данных таки может быть внутренней! В конструкторе СКД этого нет, но у объекта "СвязьНаборовДанныхМакетаКомпоновкиДанных" есть свойство "ТипСвязи" типа "ТипСвязиНаборовДанныхКомпоновкиДанных" принимающее значения "Внешняя" и "Внутренняя". Изначально она внешняя. Но как только в СКД устанавливается отбор в правом наборе, она какого-то муя автоматом меняется на внутреннюю!
#28
by Crush
Попробовал сначала временную таблицу получить, а потом её вставил в условие таблицы оборотов. Воз и ныне там. ... РегистрНакопления.РеализацияУслуг.Обороты(,,,Организация В (ВЫБРАТЬ вт.Ссылка ИЗ втОрганизации КАК вт)) ... Копаю в сторону изменения типа связи налету или может найдется способ ограничить интеллектуальные способности скд.
#29
by Crush
УРА!!!!!ПОБЕДА!!! Ларчик просто открывался!:))) Нужно в настройках ставить отбор не на весь отчет (глобальный отбор), а только на интересующую группировку. Тогда сохраняется левое соединение. Рабочий пример для БП20 тут Помогла тема
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Альфа-Авто: логика ведения учета
- Отчет производства за смену - логика работы
- СКД: Расшифровка в СКД
- СКД: Как программно задать поля-ресурсы в СКД?
- СКД: Как правильно составить запрос для СКД, некорректные данные
- СКД: СКД. Понимает ли СКД ссылки на МенеджерВременныхТаблиц?
- СКД: Как сделать выпадающий список у значения параметра в СКД
- СКД: СКД. В группировке верхнего уровня получить сумму группировок нижнего
- СКД: Как прикрутить к СКД, произвольнуя форму настроек отчета.
- СКД: СКД. Отчет из трех связанных блоков. Как сделать?
- СКД: СКД. Как задать устанавливать параметры вложенных схем СКД?
- СКД: Загрузить программно настройки в компоновщик настроек СКД из файла
В этой группе 1С
- Установить режим открытия форм в закладках
- включить эмуляцию RS-232 metrologic voyager ms 9520
- Восстановление по УИД
- Программно очистить значения реквизитов в форме записи регистра сведений
- Закрытие 60 счета. Остатки есть и по 60.1 и по 60.2
- Настройка прав в РИБ
- Точка останова в регламентном задании
- Как добавить в отчет Оборотно-сальдовая ведомость
- v8: ЗУП В Списке отпусков организации отпуск есть. А у сотрудниках в истории отпуска нет
- Как программно добавить колонки в макет?
- Изменить график работника в УПП
- v8: Как поставить конфигурацию на поддержку сохранив изменения?
- v7: Проблемы с разворачиванием садьдо в балансе по счёту 60.3
- Проверка на равенство Таблиц Значений
- v7: Булево при COM соединении с 1C82
- Каким должен быть вычет по УСН на страх. взносы - 50% или 100%?
- Как передать параметр в универсальный отчет?
- Признак учета vs. Признак учета субконто
- не видна экспортная функция
- Обработка выгрузки в Сбербанк