Перейти к содержимому

7.12 Флажок «Все», устанавливаемый у таблицы, выбранной на закладке «Связи» конструктора запросов, означает

Опубликовано: Обновлено:

Telegram → Просто о платформе 1С

❓ 7.12 Флажок «Все», устанавливаемый у таблицы, выбранной на закладке «Связи» конструктора запросов, означает:


В вопросах 7.9–7.11 уже разобрано, что на закладке «Связи» конструктора запросов задаются соединения таблиц-источников и условия связи между ними.

Здесь рассмотрим назначение флажка «Все».

Флажок «Все» относится не к полям таблицы, а к ее записям при соединении.

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

Например:

Товары                         Цены
------                         ----
Стол ───────────────────────── 1000
Стул ───────────────────────── 2000
Шкаф ──────────────── нет соответствующей записи

Если флажок «Все» установлен для таблицы Товары, запись Шкаф также должна попасть в результат. Если соответствующая запись таблицы Цены отсутствует, поля этой стороны соединения в результате будут содержать NULL.

Для двух связанных таблиц смысл можно представить так:

Таблица 1Таблица 2Смысл
Все снятВсе снятВ результат попадают записи, имеющие соответствие по условию соединения
Все установленВсе снятСохраняются все записи первой таблицы
Все снятВсе установленСохраняются все записи второй таблицы
Все установленВсе установленСохраняются все записи обеих таблиц

Важно различать смысл флажка в конструкторе и конкретное представление соединения в тексте запроса.

Например, требуется сохранить все записи таблицы Товары:

Товары Цены
Все ☑ Все ☐

Такое соединение может быть представлено как:

Справочник.Товары КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены КАК Цены
ПО Товары.Ссылка = Цены.Товар

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

A ПРАВОЕ СОЕДИНЕНИЕ B
≡
B ЛЕВОЕ СОЕДИНЕНИЕ A

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

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

Язык запросов 1С — это не SQL конкретной СУБД. Это собственный язык платформы, основанный на SQL и дополненный возможностями 1С, например итогами по иерархии.

Разработчик пишет запрос на языке запросов 1С, а платформа при его выполнении формирует обращения к СУБД.

Упрощенно:

Язык запросов 1С
        ↓
Платформа 1С
        ↓
SQL-запросы к СУБД
        ↓
СУБД

Поэтому конструкции языка запросов 1С во многом похожи на SQL:

Язык запросов 1СSQL
ВНУТРЕННЕЕ СОЕДИНЕНИЕINNER JOIN
ЛЕВОЕ СОЕДИНЕНИЕLEFT JOIN / LEFT OUTER JOIN
ПРАВОЕ СОЕДИНЕНИЕRIGHT JOIN / RIGHT OUTER JOIN
ПОЛНОЕ СОЕДИНЕНИЕFULL JOIN / FULL OUTER JOIN

При этом текст запроса 1С и SQL, выполняемый СУБД, не следует считать одним и тем же запросом.

Правое соединение не дает принципиально нового результата по сравнению с левым: его можно выразить левым соединением, поменяв стороны местами.

A ПРАВОЕ СОЕДИНЕНИЕ B
          ↓
B ЛЕВОЕ СОЕДИНЕНИЕ A

Это полезно учитывать при работе с конструктором запроса: визуальное представление соединения и его текстовая запись — не одно и то же.

Важно не смешивать две разные настройки конструктора:

  • поля результата задаются на закладке «Таблицы и поля»;
  • флажок «Все» на закладке «Связи» определяет, должны ли сохраняться записи таблицы, для которых отсутствует соответствие с другой стороны соединения.

Сам по себе установленный флажок «Все» не означает добавление всех полей таблицы в список выбираемых полей.


Флажок «Все» означает сохранение в результате всех записей соответствующей таблицы, даже если для части из них отсутствуют соответствующие записи в другой таблице. При анализе конструктора важно отделять смысл флажка от конкретной текстовой формы соединения: эквивалентное соединение может быть представлено с другим порядком таблиц.