Уроки по языку запросов в 1С 8.3

«Болтовня ничего не стоит. Покажите мне код.»
Линус Торвальдс (создатель Linux)

Основы языка запросов в 1С 8.3, представленные в уроках ниже,  предназначены для тех, кто уже прошёл первые два этапа обучения (ссылка) и уверенно владеет внутренним языком 1С.

Если у вас есть опыт работы с запросами или с SQL, то, возможно, вам лучше сразу перейти к упражнениям (ссылка) для продвинутых. Язык запросов в 1С имеет много общего с SQL.

Зачем вообще нужен язык запросов и так ли он необходим?

Как следует из названия, он предназначен для того, чтобы ЗАПРАШИВАТЬ данные, которые хранятся в базе 1С. Это может быть информация о контрагентах, номенклатуре, документах ...

В принципе, всё это можно получить и не зная языка запросов. Для этого можно  использовать, так называемую, объектную технику, когда мы получаем все данные прямо из внутреннего языка 1С без использования запросов напрямую.

Но и в этом случае 1С всё-равно будет преобразовывать наш объектный код в маленькие порции запросов и часто она будет это делать не так эффективно, как если бы мы сами написали весь запрос целиком.

Давайте представим, что у компании есть контейнер фруктов, который находится в другом городе.

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

Если мы будем использовать объектную технику (без применения запросов), то наша программа в худших случаях может работать примерно так:

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

Вы сами видите, что этот способ дорогой, долгий и неэффективный.

А вот как будет выглядеть программа, которая использует запросы:

  • Мы посылаем на склад, где хранится наш контейнер СМС с текстом "ХОТИМ 10 ЯБЛОК".
  • Работники склада на месте отбирают 10 яблок и отсылают нам через службу доставки.

Как видите, второй способ имеет ряд преимуществ. Он более быстрый и дешёвый в сравнении с первым.

Если перенести эту аналогию на базы данных, то получится, что:

  • Контейнер - это наша база данных.
  • Склад в другом городе - это сервер, то есть  компьютер, который может храниться в другом здании, городе или даже стране.
  • Наша компания - это клиент, конечный пользователь базы данных.
  • Текст СМС - это текст запроса, который клиент посылает серверу.
  • Служба доставки - это линия связи (локальная сеть или интернет) которая связывает клиента с сервером.
  • Яблоки - это информация, которую клиент получает от сервера в ответ на запрос.

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

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

Система 1С 8, в отличие от старых версий, отличается более "строгой" реализацией клиент-серверной архитектуры, в частности, требует переноса выполнения всей бизнес-логики на сервер.

Это с одной стороны накладывает определенные ограничения, но с другой стороны даёт преимущества, о которых программисты семёрки могли только мечтать.

Я имею в виду работу в режиме управляемого приложения, когда весь интерфейс пользователя описывается декларативно и появляется возможность легко адаптировать его под другие платформы (linux) или даже запускать в веб-браузере.

Вот почему запросы фактически являются стандартом де факто для получения данных из базы 1С.

Ну хватит теории, давайте наконец приступим к практике!

№1: установка 1С, знакомство с базой и первый запрос
№2: таблицы повсюду
№3: свойства объектов и столбцы таблиц
№4: типы столбцов
№5: основы синтаксиса
№6: группировка
№7: условия
№8: упорядочивание
№9: функции для работы с датой
№10: функции для работы со строками
№11: условный оператор
№12: операторы МЕЖДУ и В
№13: функции и операторы для работы с типами
№14: функция ЗНАЧЕНИЕ
№15: итоги
№16: соединения
№17: объединение
№18: параметры
№19: пакетные запросы и временные таблицы