Что является источником данных запроса в 1с
Перейти к содержимому

Что является источником данных запроса в 1с

  • автор:

Предложение ИЗ (FROM) в языке запросов 1С:Предприятия 8

В данной статье рассмотрено предложение ИЗ, его место и роль в языке запросов 1С:Предприятия 8.

Предложение ИЗ присутствует почти в каждом запросе 1С:Предприятия 8, так как в большинстве случаев именно в нем указываются таблицы-источники данных для запроса. Кроме того, предложение ИЗ позволяет выполнить соединение нескольких таблиц, а также указать параметры при получении виртуальной таблицы.

Ниже рассмотрены следующие темы:

  • Место предложения ИЗ в структуре запроса 1С:Предприятия 8
  • Таблицы-источники данных
  • Примеры запросов с предложением ИЗ:
    • Выборка данных из различных таблиц-источников
    • Виртуальные таблицы
    • Псевдонимы источников
    • Вложенный запрос как источник
    • Соединение таблиц

    Место предложения ИЗ в структуре запроса

    Структуру запроса 1С:Предприятия 8 можно представить в виде следующей схемы:

    Из приведенной схемы можно сделать следующие выводы:

    • В запросе может не быть предложения ИЗ (если поля в списке выборки полностью квалифицированы, т.е. включают имя таблицы).
    • Источников в запросе может быть несколько (в этом случае, они обычно соединяются по определенному условию)
    • В качестве источника может быть обычная таблица-источник, виртуальная таблица с параметрами, а также вложенный запрос
    • Для источника можно назначить псевдоним с помощью ключевого слова КАК ( Внимание: если источником является вложенный запрос, то псевдоним обязателен).

    Таблицы-источники

    Все таблицы-источники можно поделить на три класса:

    • Таблицы, связанные со ссылочными объектами конфигурации (справочники, планы, документы и журналы документов)
    • Таблицы, связанные с регистрами (сведений, накопления, бухгалтерии, расчета)
    • Таблицы, связанные с остальными объектами конфигурации (константы, последовательности, критерии отбора)

    На следующих схемах применяются следующие условные обозначения:

    1. Таблицы-источники, связанные со ссылочными объектами конфигурации:

    2. Таблицы-источники, связанные с регистрами:

    3. Таблицы-источники, связанные с другими объектами конфигурации:

    Примеры запросов с предложением ИЗ

    Выборка данных из различных таблиц-источников

    Выборка элементов справочника:

    ВЫБРАТЬ *, Представление ИЗ Справочник.Номенклатура

    Выборка документов определенного вида:

    ВЫБРАТЬ Ссылка, Номер, Дата, Представление
    ИЗ Документ.АвансовыйОтчет

    Выборка проведенных документов, входящих в журнал СкладскиеДокументы:

    ВЫБРАТЬ Ссылка, Номер, Дата
    ИЗ ЖурналДокументов.СкладскиеДокументы
    ГДЕ Проведен = Истина

    Выборка активных записей регистра накопления:

    ВЫБРАТЬ Номенклатура, ПодразделениеКомпании, СуммаПродажи
    ИЗ РегистрНакопления.ПродажиКомпании
    ГДЕ Активность = Истина

    Выборка данных из табличной части документа:

    //обращение к табличной части документа
    ВЫБРАТЬ Номенклатура, Количество
    ИЗ Документ.АвансовыйОтчет.Товары

    При обращении к табличной части документа как источнику данных обычные реквизиты документа доступны через поле табличной части Ссылка, например:

    ВЫБРАТЬ Ссылка.Номер, Ссылка.Дата, Номенклатура, Количество
    ИЗ Документ.АвансовыйОтчет.Товары

    Виртуальные таблицы

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

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

    //обращение к виртуальной таблице регистра накопления (вызов без параметров)
    ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты

    //выборка оборотов за период
    ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты(&Нач, &Кон,,)

    //выборка оборотов по конкретному товару
    ВЫБРАТЬ * ИЗ РегистрНакопления.ПродажиКомпании.Обороты(. Номенклатура = &ВыбТовар)

    //остатки товаров на определенную дату
    ВЫБРАТЬ * ИЗ РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&ВыбДата,)

    Замечание. Виртуальная таблица «Остатки», а также «ОстаткиИОбороты» существуют только у регистра накопления типа «Остатки». Виртуальная таблица «Обороты» существует у регистра оборотов и регистра остатков.Виртуальная таблица «ОборотыДтКт» существует только у регистра бухгалтерии с поддержкой корреспонденции.

    Псевдонимы источников

    Для источников можно задавать псевдонимы с помощью ключевого слова КАК (AS). Тогда при обращении к полям в списке полей выборки, условии и т.д. можно использовать псевдоним (а иногда без этого не обойтись).

    ВЫБРАТЬ Продажи.Номенклатура,
    Продажи.ПодразделениеКомпании,
    Продажи.СуммаПродажи
    ИЗ РегистрНакопления.ПродажиКомпании КАК Продажи
    ГДЕ Активность = Истина

    Вложенный запрос как источник

    В системе 1С:Предприятие 8 можно указать в качестве источника другой запрос, т.е. запрос может выбирать данные из вложенного запроса. Для вложенного запроса обязательно указывается псевдоним источника, как показано в следующем примере:

    ВЫБРАТЬ
    Товары.Номенклатура КАК Товар,
    Товары.Номенклатура.Артикул
    ИЗ
    (
    ВЫБРАТЬ Номенклатура ИЗ Документ.ВнутреннийЗаказ.Товары
    ОБЪЕДИНИТЬ
    ВЫБРАТЬ Номенклатура ИЗ Документ.ЗаказПокупателя.Товары
    ) КАК Товары

    Соединение таблиц

    Важной возможностью языка запросов системы 1С:Предприятие 8 является обращение сразу к нескольким таблицам. При этом их можно соединять определенным образом.

    Рассмотрим сначала, что произойдет, если в предложении ИЗ будет несколько источников. В этом случае будет сформировано «декартово произведение» двух множеств. Каждой записи одной таблицы будут сопоставлены все записи из другой. Например,

    ВЫБРАТЬ Спр.Ссылка, ДокТовары.Номенклатура
    ИЗ Справочник.Номенклатура КАК Спр, Документ.АвансовыйОтчет.Товары КАК ДокТовары

    Результат запроса содержит все комбинации записей из двух таблиц друг с другом:

    Такая таблица обычно не используется для практических целей. Как правило, обращение производится к нескольким взаимосвязанным таблицам. Это производится с помощью соединений, которые бывают внутренними, левыми внешними, правыми внешними и полными внешними.

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

    ВЫБРАТЬ ДокТовары.Номенклатура, Спр.Артикул, ДокТовары.Количество, ДокТовары.Сумма
    ИЗ Справочник.Номенклатура КАК Спр
    СОЕДИНЕНИЕ Документ.АвансовыйОтчет.Товары КАК ДокТовары
    ПО Спр.Ссылка = ДокТовары.Номенклатура

    Результат этого запроса будет следующий:

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

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

    Замечание. При соединениях чаще всего применяется условие на «равно», но в языке запросов есть возможность использовать все операции сравнения и логические операции И, ИЛИ, НЕ.

    Левое внешнее соединение

    Конструкция ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отличие от внутреннего соединения, в результат запроса надо включить еще и записи из первого источника (указанного слева от слова СОЕДИНЕНИЕ), для которых не найдено соответствующих условию записей из второго источника.

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

    Обратите внимание, что NULL-значения не являются нулем или пустой строкой. Это специальные маркеры, обозначающие неуказанные (отсутствующие) значения или значения, не имеющие смысла.

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

    ВЫБРАТЬ Спр.Наименование КАК Валюта, Рег.Курс
    ИЗ Справочник.Валюты КАК Спр
    ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних КАК Рег
    ПО Спр.Ссылка = Рег.Валюта

    Результат запроса показан в следующей таблице:

    Для валюты «AUD» (Австралийский доллар) в таблице среза последних записей регистра сведений «КурсыВалют» не было найдено соответствующей записи, поэтому в поле «Курс» содержится значение NULL.

    Правое внешнее соединение

    Конструкция ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить еще и записи из второго источника (указанного справа от слова СОЕДИНЕНИЕ), для которых не найдено соответствующих условию записей из первого источника.

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

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

    ВЫБРАТЬ Спр.Наименование КАК Валюта, Рег.Курс
    ИЗ РегистрСведений.КурсыВалют.СрезПоследних() КАК Рег
    ПРАВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Спр
    ПО Спр.Ссылка = Рег.Валюта

    Полное внешнее соединение

    Конструкция ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и те записи из обоих источников, для которых не найдено соответствий.

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

    Таким образом, предложение ИЗ является одним из самых важных элементов языка запросов, поскольку позволяет указать таблицы-источники для запроса. Гибкие возможности предложения ИЗ позволяют использовать язык запросов для решения самых разнообразных задач.

    Внешний источник данных

    Внешние источники данных — это прикладные объекты конфигурации. Они позволяют работать с внешними базами данных, не основанными на 1С:Предприятии. Благодаря этим объектам конфигурации информацию из внешних баз можно использовать внутри прикладного решения так же, как будто бы она хранится в самой информационной базе.

    Внешний источник может получать данные из ODBC-источников в операционных системах Windows и Linux, причем при работе с СУБД Microsoft SQL Server, IBM DB2, PostgreSQL и Oracle Database обеспечиваются полные возможности языка запросов. Кроме этого внешние источники данных позволяют подключить к прикладному решению многомерные источники данных, такие как:

    • Microsoft Analysis Services;
    • Oracle Essbase;
    • IBM InfoSphere Warehouse.

    При работе с другими СУБД некоторые конструкции языка запросов могут не работать, т. к. они ограничены возможностями того ODBC-драйвера, который используется.

    Внешний источник данных состоит из набора таблиц.

    Внешний источник данных

    Таблицы внешнего источника данных можно описать вручную, или с помощью конструктора.

    Внешний источник данных

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

    Внешний источник данных

    Каждая таблица, по сути, является самостоятельным объектом конфигурации. Она содержит набор полей, для неё могут быть определены формы, созданы команды и заданы макеты.

    Внешний источник данных

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

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

    Внешний источник данных

    К данным этих таблиц можно обращаться с помощью языка запросов.

    Внешний источник данных

    Эти таблицы можно использовать в отчётах на системе компоновки данных.

    Внешний источник данных

    Также на элементы этих таблиц можно ссылаться как на любые другие данные объектного типа. Например, как на элементы справочников или документы.

    Внешний источник данных

    Авторы: Е.Ю. Хрусталева

    Механизм запросов

    Механизм запросов — это один из способов доступа к данным, которые поддерживает платформа. Используя этот механизм, разработчик может читать и обрабатывать данные, хранящиеся в информационной базе; изменение данных с помощью запросов невозможно. Это объясняется тем, что запросы специально предназначены для быстрого получения и обработки некоторой выборки из больших массивов данных, которые могут храниться в базе данных.

    Табличный способ доступа к данным

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

    Механизм запросов

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

    Язык запросов

    Для того чтобы разработчик имел возможность использовать запросы для реализации собственных алгоритмов, в платформе реализован язык запросов. Этот язык основан на SQL, но при этом содержит значительное количество расширений, ориентированных на отражение специфики финансово-экономических задач и на максимальное сокращение усилий по разработке прикладных решений. Можно перечислить наиболее существенные возможности, реализуемые языком запросов:

    Обращение к полям через точку (».»)

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

    Механизм запросов

    Обращение к вложенным таблицам (табличным частям документов и элементов справочников)

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

    Механизм запросов

    Но также мы можем считать заголовочную запись документа, в которой значением поля Товары будут все записи вложенной таблицы, подчиненные этому объекту (документу):

    Механизм запросов

    Автоматическое упорядочивание

    Для выбора наиболее правильного («естественного») порядка вывода информации на экран или в отчет разработчику в большинстве случаев достаточно задать режим автоматического упорядочивания.

    Механизм запросов

    Многомерное и многоуровневое формирование итогов

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

    Механизм запросов

    Поддержка виртуальных таблиц

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

    Механизм запросов

    Стандартные SQL операции

    В языке запросов поддерживаются стандартные для SQL операции, такие, как объединение (Union), соединение (Join) и т. д.

    Механизм запросов
    Механизм запросов

    Временные таблицы

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

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

    Механизм запросов

    Запрос, использующий временную таблицу, будет иметь вид:

    Механизм запросов

    Пакетные запросы

    Для более удобной работы с временными таблицами в языке запросов поддерживается работа с пакетными запросами — таким образом, создание временной таблицы и ее использование помещаются в один запрос. Пакетный запрос представляет собой последовательность запросов, разделенных символом «;». Запросы исполняются один за другим. Результатом выполнения пакетного запроса в зависимости от используемого метода будет являться либо результат, возвращаемый последним запросом пакета, либо массив результатов всех запросов пакета в той последовательности, в которой следуют запросы в пакете.

    Механизм запросов

    Конструкторы запроса

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

    • Конструктор запроса позволяет составить только текст запроса. Подробнее…
    • Конструктор запроса с обработкой результата помимо текста запроса формирует фрагмент программного кода, который исполняет запрос и выводит результаты в табличный документ или диаграмму. Подробнее…

    Консоль запросов

    Инструмент «Консоль запросов» позволяет разработчикам конфигураций и специалистам по внедрению отлаживать запросы и просматривать результаты их выполнения в режиме «1С:Предприятие 8». Подробнее…

    Вирус скуки

    Запрос – используется для получения информации, хранящейся в полях базы данных, в виде выборки, сформированной по заданным правилам. Важное уточнение: в запросе мы работает со ссылками. То есть это как взяли, сфоткали витрину магазина и дали фотку вам в руки. По этой фотке можно узнать, какой ассортимент товара, посчитать, сколько, например, апельсинов в углу и т.д. Но, если вы возьмете маркер и нарисуете на фотографии резиновый член, лежащий на прилавке, следует помнить, что от этого действия резиновый член в продаже не появится, следовательно, надо ножками притопать в магазин и положить таки этот важный предмет обихода на прилавок. В случае запросов мы по ссылке должны получить объект.

    Для чего предназначена система компоновки данных?

    Для создания произвольных отчетов в системе 1С:Предприятие и состоит из нескольких частей; На деле – на мой взгляд, очень неудобная штука. Мейби, дело привычки.

    Для чего предназначена схема компоновки данных?
    Для получения исходных данных для компоновки отчета;

    Схема компоновки данных – штука, описывающая текст запроса, наборы данных, связи между ними, доступные поля, параметры получения данных, первоначальные настройки компоновки;

    Для чего предназначены настройки компоновки данных?

    Настройки компоновки данных работают вместе со схемой компоновки данных и служат для формирования макета;

    В чем отличие между реальными и виртуальными таблицами?
    Реальные таблицы содержат данные таблицы, которые (внезапно) реально хранятся в базе данных;

    Виртуальные – формируются из данных нескольких таблиц базы данных; Для виртуальных таблиц можно задать ряд параметров, определяющих, какие данные будут включены в эти виртуальные таблицы. Набор таких параметров может быть различным для разных виртуальных таблиц;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *