Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
1c:база:запросы [2014/12/25 11:05] admin [Объединения] уточнение |
1c:база:запросы [2020/10/01 03:34] (текущий) admin мелкое оформление |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Запросы ====== | ||
+ | ===== Описание ===== | ||
+ | Запросы представляют собой, табличную модель доступа к данным. С помощью запросов удобно организовывать чтение данных, | ||
+ | Перед тем как возьметесь за конструктор, | ||
+ | </ | ||
+ | ===== Виды таблиц ===== | ||
+ | Таблицы в 1С делятся на реальные и виртуальные. Реальные таблицы, | ||
+ | <WRAP round important> | ||
+ | Если используется какое-либо условие при обращении к виртуальной таблице, | ||
+ | </ | ||
+ | Не следует переоценивать роль параметров виртуальной таблицы. Бывает начинающие разработчики разобравшись как устанавливаются параметры в виртуальных таблицах, | ||
+ | Запрос объявляется следующим образом: | ||
+ | <code 1c> | ||
+ | // и далее можно указать текст запроса, | ||
+ | Запрос.Текст = " | ||
+ | </ | ||
+ | ===== Основной синтаксис языка запросов. ===== | ||
+ | Для составления запроса, | ||
+ | Опишем основные разделы часто используемые при построении запросов, | ||
+ | |||
+ | ==== Таблицы и поля ==== | ||
+ | Любой запрос начинается с выражения «Выбрать» или Select, далее следуют перечисление полей которые вы хотите видеть в запросе и источник откуда будут браться эти поля как в запросе выше, в качестве источника могут быть как таблицы базы данных, | ||
+ | {{http:// | ||
+ | |||
+ | ==== Группировка строк запроса. ==== | ||
+ | При формировании запроса очень часто бывает необходимо " | ||
+ | - Петров 100 | ||
+ | - Иванов 200 | ||
+ | - Иванов 400 | ||
+ | - Сидоров 90 | ||
+ | - Петров 150 | ||
+ | Здесь в процессе группировки в качестве группируемых полей будет выступать сотрудник, | ||
+ | В итоге мы должны получить следующие записи: | ||
+ | - Петров 250 | ||
+ | - Иванов 600 | ||
+ | - Сидоров 90 | ||
+ | Не следует путать группировку и итоги, что бы закрепить понимание, | ||
+ | Пример запроса с группировкой | ||
+ | < | ||
+ | Запрос.Текст = | ||
+ | " | ||
+ | | РеализацияТоваровУслугТовары.Номенклатура, | ||
+ | | СУММА(РеализацияТоваровУслугТовары.Сумма) КАК Сумма | ||
+ | |ПОМЕСТИТЬ СправочникТоваров | ||
+ | |ИЗ | ||
+ | | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ||
+ | | | ||
+ | |СГРУППИРОВАТЬ ПО | ||
+ | | РеализацияТоваровУслугТовары.Номенклатура"; | ||
+ | </ | ||
+ | {{http:// | ||
+ | |||
+ | ==== Условие и параметры в запросе ==== | ||
+ | На результат выборки запроса, | ||
+ | <code 1c> Запрос.Текст = | ||
+ | " | ||
+ | | Номенклатура.Ссылка | ||
+ | |ПОМЕСТИТЬ СправочникТоваров | ||
+ | |ИЗ | ||
+ | | Справочник.Номенклатура КАК Номенклатура | ||
+ | |ГДЕ | ||
+ | | Номенклатура.Ссылка В(& | ||
+ | </ | ||
+ | Передать параметр в запрос, | ||
+ | <code 1c> | ||
+ | |||
+ | ==== Псевдонимы ==== | ||
+ | В случаях когда результат запроса может быть сразу выгружен в табличную часть документа, | ||
+ | <code 1c> Запрос.Текст = | ||
+ | " | ||
+ | | Товары.Ссылка КАК Товар | ||
+ | |ПОМЕСТИТЬ СправочникТоваров | ||
+ | |ИЗ | ||
+ | | Справочник.Номенклатура КАК Товары | ||
+ | |ГДЕ | ||
+ | | Товары.Ссылка В(& | ||
+ | </ | ||
+ | {{http:// | ||
+ | ==== Объединения ==== | ||
+ | Когда необходимо выбрать данные из двух никак не связанных таблиц, | ||
+ | <code 1c> Запрос.Текст = | ||
+ | " | ||
+ | | Товары.Ссылка КАК Товар, | ||
+ | | Товары.Наименование, | ||
+ | | Товары.Код | ||
+ | |ПОМЕСТИТЬ СправочникТоваров | ||
+ | |ИЗ | ||
+ | | Справочник.Номенклатура КАК Товары | ||
+ | |ГДЕ | ||
+ | | Товары.Ссылка В(& | ||
+ | | | ||
+ | |ОБЪЕДИНИТЬ ВСЕ | ||
+ | | | ||
+ | |ВЫБРАТЬ | ||
+ | | РеализацияТоваровУслугТовары.Номенклатура, | ||
+ | | РеализацияТоваровУслугТовары.Номенклатура.Наименование, | ||
+ | | РеализацияТоваровУслугТовары.Номенклатура.Код | ||
+ | |ИЗ | ||
+ | | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ||
+ | |ГДЕ | ||
+ | | РеализацияТоваровУслугТовары.Ссылка = & | ||
+ | </ | ||
+ | {{http:// | ||
+ | ==== Соединения ==== | ||
+ | Соединения позволяют получить <wrap hi>в одной строке результата запроса данные из нескольких таблиц</ | ||
+ | {{http:// | ||
+ | <code 1c> Запрос.Текст = | ||
+ | " | ||
+ | | РеализацияТоваровУслугТовары.Номенклатура, | ||
+ | | ТоварыНаСкладахОстатки.КоличествоОстаток | ||
+ | |ИЗ | ||
+ | | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ||
+ | | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки | ||
+ | | ПО РеализацияТоваровУслугТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура" | ||
+ | </ | ||
+ | |||
+ | Перед построением запроса, | ||
+ | * **Декартово произведение**, | ||
+ | * **Внутреннее соединение** или inner join(галочка " | ||
+ | * **Левое соединение** или left inner join (галочка " | ||
+ | * **Правое соединение** или right inner join тоже самое что и левое соединение, | ||
+ | * **Полное соединение** или full outer join (галочка " | ||
+ | |||
+ | ==== Вложенные запросы ==== | ||
+ | Вложенные запросы это " | ||
+ | {{http:// | ||
+ | Пример запроса, | ||
+ | < | ||
+ | " | ||
+ | | ВложенныйЗапрос.Номенклатура | ||
+ | |ИЗ | ||
+ | | (ВЫБРАТЬ | ||
+ | | РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура | ||
+ | | ИЗ | ||
+ | | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ||
+ | | ГДЕ | ||
+ | | РеализацияТоваровУслугТовары.Ссылка = & | ||
+ | </ | ||
+ | |||
+ | ==== Сортировка ==== | ||
+ | Если необходимо упорядочить результаты запроса, | ||
+ | |||
+ | ==== Тип данных NULL ==== | ||
+ | NULL тип данных который можно получить только в одном месте: в запросе, | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ==== Использование функций ==== | ||
+ | Язык запросов обладает ограниченным набором функций, | ||
+ | |||
+ | ===== Получение данных из табличных частей документов ===== | ||
+ | Если необходимо получить данные из табличной части какого либо документа, | ||
+ | {{http:// | ||
+ | < | ||
+ | Запрос.Текст = | ||
+ | " | ||
+ | | ОтчетОРозничныхПродажах.Товары.( | ||
+ | | Номенклатура | ||
+ | | ) | ||
+ | |ИЗ | ||
+ | | Документ.ОтчетОРозничныхПродажах КАК ОтчетОРозничныхПродажах"; | ||
+ | |||
+ | </ | ||
+ | |||
+ | А вот так будет правильно: | ||
+ | {{http:// | ||
+ | < | ||
+ | Запрос.Текст = | ||
+ | " | ||
+ | | ОтчетКомитентуОПродажахТовары.Номенклатура | ||
+ | |ИЗ | ||
+ | | Документ.ОтчетКомитентуОПродажах.Товары КАК ОтчетКомитентуОПродажахТовары"; | ||
+ | </ | ||
+ | Разумеется в любом случае нужно наложить условие на поле " |