1С: Запросы. Соединение таблиц
Описание
Примеры реализации внутреннего, левого, правого и полного соединения, замены null значением при левом соединении в запросе
Оглавление (нажмите, чтобы раскрыть)
Внутреннее соединение
Пример внутреннего соединения в запросе 1С//При внутреннем соединении выводятся //выводятся только записи, по которым //найдено совпадение соответствующее //условию отбора. //Остальные записи обоих таблиц отбрасываются. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Клиенты.Ссылка КАК Клиент, | Контрагенты.Ссылка КАК Контрагент |ИЗ | Справочник.Клиенты КАК Клиенты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты | ПО Клиенты.Наименование = Контрагенты.Наименование"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить("" + Выборка.Клиент + ": " + Выборка.Контрагент); КонецЦикла;
Замена null значением при левом соединении
Пример замены null значением в запросе 1С при левом соединении//Если поле ПриходнаяНакладная.Склад не заполнено, //тогда Склады.Ссылка = NULL //заменяем значение NULL на "Основной" склад Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПриходнаяНакладная.КаталожныйНомер, | ЕСТЬNULL(Склады.Ссылка, ЗНАЧЕНИЕ(Справочник.Склады.Основной)) Склад |ИЗ | Документ.ПриходнаяНакладная КАК ПриходнаяНакладная | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Склады КАК Склады | ПО ПриходнаяНакладная.Склад = Склады.Ссылка"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.КаталожныйНомер + ": " + Выборка.Склад); КонецЦикла;
Левое и правое соединение
Пример левого и правого соединения в запросе 1С//При левом соединении из первой (главной) таблицы //выбираются все записи,а из второй таблицы //только записи, соответствующие условию соединения. //Если запись второй таблицы не найдена, //ее поля заполняются значение NULL. //При правом соединении главная - вторая таблица. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиМатериалов.Регистратор, | ПриходнаяНакладная.Ссылка |ИЗ | РегистрНакопления.ОстаткиМатериалов КАК ОстаткиМатериалов | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриходнаяНакладная КАК ПриходнаяНакладная | ПО ОстаткиМатериалов.Регистратор = ПриходнаяНакладная.Ссылка"; Выборка = Запрос.Выполнить().Выбрать(); //в данном примере поле "Ссылка" будет заполнено //только если регитсратором является документ //ПриходнаяНакладная //в остальных случаях "Ссылка" = NULL Пока Выборка.Следующий() Цикл Сообщить("" + Выборка.Регистратор + ": " + Выборка.Ссылка); КонецЦикла;
Полное соединение
Пример полного соединения в запросе 1С//При полном соединении выводятся //все записи обоих таблиц. //Если соответсвие не найдено //поля как первой, так и второй таблиц //могут содержать значение NULL Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Клиенты.Ссылка КАК Клиент, | Контрагенты.Ссылка КАК Контрагент |ИЗ | Справочник.Клиенты КАК Клиенты | ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты | ПО Клиенты.Наименование = Контрагенты.Наименование"; Выборка = Запрос.Выполнить().Выбрать(); //В данном примере поле "Клиент" //будет NULL если для контрагента не найден //клиент с таким же наименованием. //Поле "Контрагент" будет NULL //если не найден контрагент Пока Выборка.Следующий() Цикл Сообщить("" + Выборка.Клиент + ": " + Выборка.Контрагент); КонецЦикла;