Если вы начинающий разработчик - вступайте в мою группу помощник программиста 1С. В ней мы обсуждаем вопросы программирования в 1С для начинающих (Владимир Милькин, школа программирования).

<<< Основы Группировка Условия Упорядочивание Функции
<<< Итоги Соединение Объединение Параметры

Соединение в запросах в языке 1С 8.3, 8.2 (в примерах)

См. урок для начинающих по соединениям языка запросов

/// Как сделать внутреннее соединение таблиц в 1с 8.3, 8.2
 
//  -------------   --------------------------------
//  |Люди       |   |   Характеристики              |
//  -------------   ---------------------------------
//  |ИМЯ        |   |   ИМЯ             ВОЗРАСТ     |
//  -------------   ---------------------------------
//  |Алена      |   |   Алена           21          |
//  |Алефтина   |   |   Алефтина        18          |
//  |Владимир   |   |   Павел           25          |
//  |Владислав  |   |   Петр            30          |
//  |           |   |   Порфирий        50          |
//  -------------   ---------------------------------
 
//  Результат внутреннего соединения по имени:
 
//  ИмяИзТаблицы1   ИмяИзТаблицы2   ВозрастИзТаблицы2
//  Алена           Алена           21
//  Алефтина        Алефтина        18
 
Процедура ВнутреннееСоединениеТаблиц()
    Запрос = Новый Запрос(
        "
        | ВЫБРАТЬ
        |   Люди.Наименование КАК ИмяИзТаблицы1,
        |   Характеристики.Наименование КАК ИмяИзТаблицы2,
        |   Характеристики.Возраст КАК ВозрастИзТаблицы2
        | ИЗ
        |   Справочник.Люди КАК Люди
        |       ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        |   Справочник.Характеристики КАК Характеристики
        |       ПО
        |           Люди.Наименование = Характеристики.Наименование
        |"
    );
 
    Результат = Запрос.Выполнить();
    ОткрытьЗначение(Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой));
КонецПроцедуры
 
/// Как сделать левое внешнее соединение таблиц в 1с 8.3, 8.2
 
//  -------------   --------------------------------
//  |Люди       |   |   Характеристики              |
//  -------------   ---------------------------------
//  |ИМЯ        |   |   ИМЯ             ВОЗРАСТ     |
//  -------------   ---------------------------------
//  |Алена      |   |   Алена           21          |
//  |Алефтина   |   |   Алефтина        18          |
//  |Владимир   |   |   Павел           25          |
//  |Владислав  |   |   Петр            30          |
//  |           |   |   Порфирий        50          |
//  -------------   ---------------------------------
 
//  Результат левого внешнего соединения по имени:
 
//  ИмяИзТаблицы1   ИмяИзТаблицы2   ВозрастИзТаблицы2
//  Алена           Алена           21
//  Алефтина        Алефтина        18
//  Владимир        NULL            NULL
//  Владислав       NULL            NULL
 
//  Простыми словами это: внутреннее соединение + строки
//  из левой таблицы для которых не найдены соответствия.
 
Процедура ЛевоеСоединениеТаблиц()
    Запрос = Новый Запрос(
        "
        | ВЫБРАТЬ
        |   Люди.Наименование КАК ИмяИзТаблицы1,
        |   Характеристики.Наименование КАК ИмяИзТаблицы2,
        |   Характеристики.Возраст КАК ВозрастИзТаблицы2
        | ИЗ
        |   Справочник.Люди КАК Люди
        |       ЛЕВОЕ СОЕДИНЕНИЕ
        |   Справочник.Характеристики КАК Характеристики
        |       ПО
        |           Люди.Наименование = Характеристики.Наименование
        |"
    );
 
    Результат = Запрос.Выполнить();
    ОткрытьЗначение(Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой));
КонецПроцедуры
 
/// Как сделать правое внешнее соединение таблиц в 1с 8.3, 8.2
 
//  -------------   --------------------------------
//  |Люди       |   |   Характеристики              |
//  -------------   ---------------------------------
//  |ИМЯ        |   |   ИМЯ             ВОЗРАСТ     |
//  -------------   ---------------------------------
//  |Алена      |   |   Алена           21          |
//  |Алефтина   |   |   Алефтина        18          |
//  |Владимир   |   |   Павел           25          |
//  |Владислав  |   |   Петр            30          |
//  |           |   |   Порфирий        50          |
//  -------------   ---------------------------------
 
//  Результат правого внешнего соединения по имени:
 
//  ИмяИзТаблицы1   ИмяИзТаблицы2   ВозрастИзТаблицы2
//  Алена           Алена           21
//  Алефтина        Алефтина        18
//  NULL            Павел           25
//  NULL            Петр            30
//  NULL            Порфирий        50
 
//  Простыми словами это: внутреннее соединение + строки
//  из правой таблицы для которых не найдены соответствия.
 
Процедура ПравоеСоединениеТаблиц()
    Запрос = Новый Запрос(
        "
        | ВЫБРАТЬ
        |   Люди.Наименование КАК ИмяИзТаблицы1,
        |   Характеристики.Наименование КАК ИмяИзТаблицы2,
        |   Характеристики.Возраст КАК ВозрастИзТаблицы2
        | ИЗ
        |   Справочник.Люди КАК Люди
        |       ПРАВОЕ СОЕДИНЕНИЕ
        |   Справочник.Характеристики КАК Характеристики
        |       ПО
        |           Люди.Наименование = Характеристики.Наименование
        |"
    );
 
    Результат = Запрос.Выполнить();
    ОткрытьЗначение(Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой));
КонецПроцедуры
 
/// Как сделать полное внешнее соединение таблиц в 1с 8.3, 8.2
 
//  -------------   --------------------------------
//  |Люди       |   |   Характеристики              |
//  -------------   ---------------------------------
//  |ИМЯ        |   |   ИМЯ             ВОЗРАСТ     |
//  -------------   ---------------------------------
//  |Алена      |   |   Алена           21          |
//  |Алефтина   |   |   Алефтина        18          |
//  |Владимир   |   |   Павел           25          |
//  |Владислав  |   |   Петр            30          |
//  |           |   |   Порфирий        50          |
//  -------------   ---------------------------------
 
// Результат полного внешнего соединения по имени:
 
//  ИмяИзТаблицы1   ИмяИзТаблицы2   ВозрастИзТаблицы2
//  Алена           Алена           21
//  Алефтина        Алефтина        18
//  Владимир        NULL            NULL
//  Владислав       NULL            NULL
//  NULL            Павел           25
//  NULL            Петр            30
//  NULL            Порфирий        50
 
//  Простыми словами это: левое соединение + правое соединение.
 
Процедура ПолноеСоединениеТаблиц()
    Запрос = Новый Запрос(
        "
        | ВЫБРАТЬ
        |   Люди.Наименование КАК ИмяИзТаблицы1,
        |   Характеристики.Наименование КАК ИмяИзТаблицы2,
        |   Характеристики.Возраст КАК ВозрастИзТаблицы2
        | ИЗ
        |   Справочник.Люди КАК Люди
        |       ПОЛНОЕ СОЕДИНЕНИЕ
        |   Справочник.Характеристики КАК Характеристики
        |       ПО
        |           Люди.Наименование = Характеристики.Наименование
        |"
    );
 
    Результат = Запрос.Выполнить();
    ОткрытьЗначение(Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой));
КонецПроцедуры
 
/// Как сделать перекрестное соединение таблиц в 1с 8.3, 8.2
 
//  -------------   --------------------------------
//  |Люди       |   |   Характеристики              |
//  -------------   ---------------------------------
//  |ИМЯ        |   |   ИМЯ             ВОЗРАСТ     |
//  -------------   ---------------------------------
//  |Алена      |   |   Алена           21          |
//  |Алефтина   |   |   Алефтина        18          |
//  |Владимир   |   |   Павел           25          |
//  |Владислав  |   |   Петр            30          |
//  |           |   |   Порфирий        50          |
//  -------------   ---------------------------------
 
// Результат перекрестного соединения:
 
//  ИмяИзТаблицы1   ИмяИзТаблицы2   ВозрастИзТаблицы2
//  Алена           Алена           21
//  Алена           Алефтина        18
//  Алена           Павел           25
//  Алена           Петр            30
//  Алена           Порфирий        50
//  Алефтина        Алена           21
//  Алефтина        Алефтина        18
//  Алефтина        Павел           25
//  Алефтина        Петр            30
//  Алефтина        Порфирий        50
//  Владимир        Алена           21
//  Владимир        Алефтина        18
//  Владимир        Павел           25
//  Владимир        Петр            30
//  Владимир        Порфирий        50
//  Владислав       Алена           21
//  Владислав       Алефтина        18
//  Владислав       Павел           25
//  Владислав       Петр            30
//  Владислав       Порфирий        50
 
Процедура ПерекрестноеСоединениеТаблиц()
    Запрос = Новый Запрос(
        "
        | ВЫБРАТЬ
        |   Люди.Наименование КАК ИмяИзТаблицы1,
        |   Характеристики.Наименование КАК ИмяИзТаблицы2,
        |   Характеристики.Возраст КАК ВозрастИзТаблицы2
        | ИЗ
        |   Справочник.Люди КАК Люди,
        |   Справочник.Характеристики КАК Характеристики
        |"
    );
 
    Результат = Запрос.Выполнить();
    ОткрытьЗначение(Результат.Выгрузить(ОбходРезультатаЗапроса.Прямой));
КонецПроцедуры

Если вы начинающий разработчик - вступайте в мою группу помощник программиста 1С. В ней мы обсуждаем вопросы программирования в 1С для начинающих (Владимир Милькин, школа программирования).

<<< Основы Группировка Условия Упорядочивание Функции
<<< Итоги Соединение Объединение Параметры

Соединение в запросах в языке 1С 8.3, 8.2 (в примерах)

С уважением, (школа 1С программистов).

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).

Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

Владимир Милькин
Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.