рубрики: Конструктор запросов | Дата: 16 ноября, 2017
В конструкторе запросов есть один замечательный прием, который позволяет существенно сэкономить время и избежать ошибок при необходимости отредактировать текст существующего запроса. А именно, я говорю о замене одной таблицы на другую.
Достаточно часто при разработке запроса возникает ситуация, когда сначала планируешь использовать одну таблицу и вставляешь ее в запрос, а потом выясняется, что нужна другая, и приходится запрос переделывать. Например, сначала была таблица регистра сведений, а потом выяснилась, что нужно взять виртуальную таблицу среза последних этого же регистра. И если делать это вручную, то надо пройтись по всем закладкам конструктора: поля, условия и т.д., и везде подменить ссылки с одной таблицы на другую. Но можно сделать это автоматически, воспользовавшись пунктом меню Заменить таблицу
Давайте рассмотрим конкретный пример. Пусть у нас есть вот такой простейший запрос:
ВЫБРАТЬ
Товары.Ссылка,
Цена.Сумма
ИЗ
Справочник.Товары КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цена КАК Цена
ПО (Цена.Товар = Товары.Ссылка)
Как видим здесь соединяется справочник Товары с регистром сведений Цена.
В какой-то момент мы поняли, что ошиблись и нам нужна только последняя цена, то есть нужно использовать таблицу со срезом последних. Если открыть исходный запрос в конструкторе, то на закладке Таблицы и поля он будет выглядеть следующим образом:
А теперь заменим таблицу Цена на виртуальную таблицу Цена.СрезПоследних. Для этого щелкаем правой кнопкой мыши по нужной таблице и в контекстном меню выбираем Заменить таблицу:
В открывшемся окне выбираем нужную таблицу:
После этого простейшего действия текст нового запроса примет вот такой вид:
ВЫБРАТЬ
Товары.Ссылка,
ЦенаСрезПоследних.Сумма
ИЗ
Справочник.Товары КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цена.СрезПоследних(, ) КАК ЦенаСрезПоследних
ПО (ЦенаСрезПоследних.Товар = Товары.Ссылка)
Легко увидеть, что замена на новую таблицу произошла во всем запросе. И в полях, и в левом соединении. Конечно не стоит пользоваться этим инструментом бездумно. После замены необходимо проверять запрос, т.к. если в запросе использовались поля, которых нет в новой таблице, они просто пропадут из запроса. И никаких сообщений об ошибке при этом выводиться не будет.
Для замены можно использовать не только родственные таблицы как в приведенном примере, но и любые другие. Желательно только чтобы наборы полей в таблицах были примерно одинаковые.
Желаю всем быстрого и качественного конструирования запросов!
Добавить комментарий