Запросы в 1С

Механизм запросов — это один из способов доступа к данным, которые поддерживает платформа 1С:Предприятие. Используя этот механизм, разработчик может читать и обрабатывать данные, хранящиеся в информационной базе.

ВАЖНО! Изменение данных с помощью запросов невозможно. Это объясняется тем, что запросы специально предназначены для быстрого получения и обработки некоторой выборки из больших массивов данных, которые могут храниться в базе данных.

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

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

Рисунок

Отсюда

[свернуть]

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

  • рассчитаны общие и промежуточные итоги,
  • наложены ограничения на количество или состав записей и пр.

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

  • создать индексы в условиях запроса, полях соединения, агрегации и сортировки;
  • задавать параметры большинства виртуальных таблиц;
  • фильтрацию виртуальных таблиц необходимо производить с использованием параметров отбора.

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

При формировании запросов 1С нельзя:

  1. соединять таблицы с подзапросами;
  2. соединять обычные таблицы с виртуальными;
  3. использовать логическое «ИЛИ» в условиях;
  4. использовать подзапросы в условиях соединения;
  5. получать данные через точку от полей составного типа без ключевого слова «Выразить» (пример).

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

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

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

Наиболее существенные возможности, реализуемые языком запросов 1С:

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

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

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

[свернуть]
2. Обращение к вложенным тaблицам (табличным частям докумeнтов и элементов спрaвочников).

Система поддерживает обращения к вложенным табличным частям и как к отдельным таблицам, и как к целым полям одной таблицы.

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

Обращение к вложенным таблицам

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

1C Обращение к вложенным таблицам

[свернуть]
3. Автоматическое упорядочивание.

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

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

[свернуть]

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

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

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

[свернуть]

5. Поддeржка виртуальных тaблиц

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

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

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

[свернуть]

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

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

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

[свернуть]

7. Временные тaблицы.

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

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

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

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

Время «жизни» временной таблицы:

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

В обоих случаях временная таблиц может быть уничтожена и ранее этого, с помощью (соответственно):

  • конструкции языка запросов, либо
  • метода МВТ.

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

Время "жизни" временной таблицы

[свернуть]

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

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

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

[свернуть]

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

Кроме того, в явном виде в тексте запроса могут быть прописаны:
  • пустые ссылки;
  • перечисления и системные перечисления из перечня ВидДвиженияНакопления, ВидСчета, ВидДвиженияБухгалтерии.

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.