воскресенье, 4 февраля 2018 г.

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

Язык запросов предоставляет широкие возможности по построчному соединению нескольких таблиц. Соединение может быть безусловным и по ключу, то есть по заданному условию связи.
В случае безусловного соединения, в конструкторе запросов достаточно определить выбираемые таблицы, не указывая, по каким полям они будут связаны (то есть не заполняя закладку Связи):
В этом случае система вернет все возможные комбинации запрошенных таблиц - каждый элемент против каждого:
На практике чаще встречаются задачи соединения по определенному полю двух таблиц. Например, ниже запрос, в котором нужно выбрать тех контрагентов, по которым в один день была и продажа, и покупка. Для этого таблицы документов РТУ и ПТУ соединим по полям Контрагент и Дата:

Условное соединение может быть:
  • полным - все записи обеих таблиц; для тех, которым не нашлось соответствия, запрос возвращает NULL
  • левым / правым - все записи из соответственно левой / правой таблицы, из противоположной только те, которым есть соответствие, для ненайденных запрос возвращает NULL. Нюанс - консоль запросов всегда преобразует правое соединение в левое, меняя таблицы местами (в случае, если запрос написать вручную, и потом открыть конструктором)
  • внутренним - только совпадающие записи обеих таблиц
В конструкторе запросов тип условного соединения регулируется флажком "Все" (В... на скриншоте) - где он стоит, из той таблицы и выбираются все записи.

***
Вопрос 07.09 экзамена 1С:Профессионал по платформе. При соединении таблиц-источников данных в конструкторе запросов можно:
  1. Назначить соединение без указания условия связи
  2. Назначить соединение с указанием условия связи, причем это условие может быть только одно
  3. Назначить соединение с указанием условия связи, причем это условие может быть только простое
  4. Назначить необходимое количество соединений с указанием необходимого количества условий связи, причем эти условия могут быть как простые, так и произвольные
Правльный ответ четвертый - соединение может происходить по нескольким полям, см. пример выше, и для полей может быть прописано произвольное условие.

***
Вопрос 07.10 экзамена 1С:Профессионал по платформе. На закладке "Связи" конструктора запросов можно определить:
  1. Соединение таблиц-источников данных и связи между ними
  2. Объединение таблиц-источников данных и связи между ними
  3. Связи между полями таблицы, получаемой в результате выполнения запроса
  4. Связи между полями таблицы-источника данных и таблицы, получаемой в результате выполнения запроса
Правильный ответ первый. Связь именно между таблицами-источниками.

***
Вопрос 07.11 экзамена 1С:Профессионал по платформе. Создание соединения таблиц-источников данных в конструкторе запросов допускает:
  1. Соединение только двух таблиц-источников данных
  2. Соединение необходимого количества таблиц-источников данных
  3. Соединение только двух таблиц-источников данных, причем флажок "Все" обязательно должен быть проставлен хотя бы у одной из таблиц
  4. Соединение необходимого количества таблиц-источников данных, причем флажок "Все" обязательно должен быть проставлен хотя бы у одной из таблиц
Правильный ответ второй - соединять можно любое необходимое число таблиц.

***
Вопрос 07.12 экзамена 1С:Профессионал по платформе. Флажок "Все", устанавливаемый у таблицы, выбранной на закладке "Связи" конструктора запросов означает:
  1. Что в результат запроса надо включить все доступные поля этой таблицы
  2. Что в результат запроса надо включить все записи этой таблицы
  3. Что в результат запроса надо включить все поля и все записи этой таблицы
  4. Что результат запроса будет сформирован с учетом всех условий, заданных для соединения таблиц-источников
Правильный ответ второй - флажок определяет внешнее соединение по данной таблице (если установлен, то по данной таблице будет внешнее соединение).

6 комментариев:

  1. в 7.10 в чем разница между ответами 1) и 2)?

    ОтветитьУдалить
    Ответы
    1. Этот комментарий был удален автором.

      Удалить
    2. а я думал это игра слов и поэтому мне не понятно(я не очен хорошо знаю русскый язык)

      Удалить
    3. соединение - построчное слияние, объединение - столбцовое.

      Удалить
  2. Если в конструкторе запроса при использовании нескольких таблиц очистить закладку "Связи" то
    Запрос станет не исполняемым
    Конструктор запроса не даст это сделать
    Запрос отработает исходя из логики, которая в нем заложена

    Ответ - 3.Проверено 1с тренажер.

    ОтветитьУдалить