Капитально об программе 1С 8.0-8.3-8.4, 7.7

Соединение таблиц в запросе

Язык запросов 1С позволяет сделать соединения двух и более таблиц. Под соединением понимается состыковка двух таблиц по ключевым полям.

Всего 4 вида соединений

Возможно выборка всех полей объединяемых таблиц (обращение к ним по псевдониму), но если соединение не внутреннее, то в отсутствующем поле будет значение NULL, поэтому следует рассматривать его особым образом или подменять значение через функцию ЕстьNULL().

Условием соединения может быть и простое условие «ИСТИНА», которое соединит таблицы с значительным увеличением количества строк (каждая строка соединится с каждой строкой второй таблицы).

[qu_note note_color=»#f7ebe6″]Такие запросы на больших источниках может вызвать нехватку памяти, либо длительно выполнятся, вплоть до «зависания».[/qu_note]

Различные виды объединений используются для своих своих задач и целей:

Левое, когда требуется к одной основной таблице добавить какие-то свойства из другой. Например к списку контрагентов добавить задолженность, банковские реквизиты, фио руководителей.
При формировании такого запроса, следует добиться отсутствия в правой таблице дублей строк, этому способствует использование временных таблиц или вложенных. В противном случае в левой таблице появятся дубли контрагентов, что будет мешать верному восприятию.

Если задвоения будут в динамическом списке, это может вызвать ошибку дублирования ключевого поля.

Внутреннее соединение служит для максимально ограничения выборки, например: получить контрагентов у которых были реализации в выбранный период.

В управлении торговлей для решения такой задачи соединение не так уж важно, достаточного было бы обратится к регистру «Продажи», а вот в «Бухгалтерии предприятия» соединение будет более верным решением: ведь мы не знаем заранее какой счет учета используется для продажи, могут быть созданные пользователем субсчета (это даст более короткое решение, но все зависит от ситуации — не обязательно же оно должно быть универсальным).

При необходимости соединения более двух таблиц производится цепочка соединений — сначала производится первое соединение, а с результатом производится соединение последующих таблиц.

Требование к таким таблицам:

Как задать соединение в конструкторе запроса:

Шаг 1: выберите необходимые таблицы, которые возможно соединить 

Шаг 2: Переходим на вкладку «Связи»

Вид соединения задается соответствующим словом перед «СОЕДИНЕНИЕ», остальной синтаксис идентичен. Правое не рассматриваем, так как конструктор запроса автоматически поменяет таблицы местами и сделает левое соединение.

Пример текста запроса «Внутреннее соединение»:

ВЫБРАТЬ
    Контрагенты.Ссылка,
    КонтактныеЛица.Ссылка КАК КонтактноеЛицо
ИЗ
    Справочник.Контрагенты КАК Контрагенты
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица КАК КонтактныеЛица
        ПО Контрагенты.ОсновноеКонтактноеЛицо = КонтактныеЛица.Ссылка
        И (Контрагенты.ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо)

 

Пример левого соединения

ВЫБРАТЬ
    Контрагенты.Ссылка,
    КонтактныеЛица.Ссылка КАК КонтактноеЛицо
ИЗ
    Справочник.Контрагенты КАК Контрагенты
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица КАК КонтактныеЛица
        ПО Контрагенты.ОсновноеКонтактноеЛицо = КонтактныеЛица.Ссылка
        И (Контрагенты.ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо)

 

Пример «полного соединения»

ВЫБРАТЬ
    Контрагенты.Ссылка,
    КонтактныеЛица.Ссылка КАК КонтактноеЛицо
ИЗ
    Справочник.Контрагенты КАК Контрагенты
    ПОЛНОЕ СОЕДИНЕНИЕ Справочник.КонтактныеЛица КАК КонтактныеЛица
        ПО Контрагенты.ОсновноеКонтактноеЛицо = КонтактныеЛица.Ссылка
        И (Контрагенты.ЮрФизЛицо = ЗНАЧЕНИЕ(Перечисление.ЮрФизЛицо.ЮрЛицо)
 

На что следует обратить внимание:

ВЫБРАТЬ
    Контрагенты.Ссылка,
    КонтактныеЛица.Ссылка КАК КонтактноеЛицо
ИЗ
    Справочник.Контрагенты КАК Контрагенты,
    Справочник.КонтактныеЛица КАК КонтактныеЛица