1с язык запросов самоучитель

Содержание

1с язык запросов самоучитель

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: установка 1С, знакомство с базой и первый запрос

Автор уроков и преподаватель школы: Владимир Милькин

Установка 1С и знакомство с базой

Для выполнения практической части уроков нам понадобятся три вещи:

Установка платформы

На вашем рабочем столе должен появиться вот такой ярлык:

Установка и подключение базы данных

Для всех уроков из этого цикла мы будем использовать подготовленную мной базу данных «Гастроном». Скачайте её по следующей ссылке, распакуйте и подключите в список баз.

Обработка «Консоль запросов»

Все запросы на наших уроках мы будем выполнять в режиме 1С:Предприятия. Для этого нам понадобится предназначенная для этого обработка «Консоль запросов». Скачайте её по этой ссылке и распакуйте на рабочий стол.

Знакомство с базой

Наконец, рабочее место настроено и сейчас самое время открыть нашу базу «Гастроном» в режиме 1С:Предприятия:

Пользователь: Администратор.
Пароль пустой.

Наша база уже содержит определенные данные. Вы можете в этом убедиться, если пощёлкаете по объектам базы из меню верхней панели (Еда, Вкусы, Цвета и так далее):

Виды объектов

Например, объект Еда служит для хранения информации о том, какая бывает еда, а объект Заказы клиентов хранит информацию о заказах, которые были сделаны нашими клиентами.

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

Справочники

Документы

Кто есть кто в нашей базе

А теперь, основываясь на информации приведенной выше, попробуйте разделить объекты нашей базы на Справочники и Документы.

Не торопитесь смотреть в ответ. Сначала сформируйте свои мысли.

Настоящие имена наших объектов

Но для написания запросов нам необходимо знать именно настоящее имя объекта. Как его можно выяснить?

Зайдите в конфигуратор базы данных и выполните из главного меню «Конфигурация»-«Открыть конфигурацию»:

Итак, какое настоящее имя у объекта «Заказ клиента»?

ЗаказКлиента

Наш первый запрос

Давайте, наконец, напишем наше «Hello, World» для запросов. Конечно, язык запросов, как и любой другой язык, имеет свои правила, но к их рассмотрению мы перейдём со следующего урока. А пока, просто примите как данность следующий текст запроса:

Запрос очень простой и, в принципе, интуитивно понятный. Попробуйте разобраться в нём самостоятельно и только потом смотрите объяснение.

Ну запрос-то мы составили, но как бы нам его теперь «испытать»? Для этого нам понадобится запустить базу в режиме 1С:Предприятия и открыть обработку «Консоль запросов», которую мы распаковали на рабочий стол:

Вот как она выглядит в запущенном виде:

В этой обработке перейдите в окошко «Текст запроса». Вот в него мы и будем писать запросы. Вставьте туда наш запрос:

Нажмите кнопку «Выполнить».

Источник

Самоучитель языка запросов 1С.

Уважаемые разработчики! Представляем вашему вниманию Консоль изучения запросов 1С:Предприятие 8.

Это конфигурация разработанная на платформе 8.2, предназначенная для получения практических навыков написания запросов 1С.

Сервис постоянно развивается, добавляются новые задания (100 заданий), улучшается интерфейс.

Работа с сервисом возможна посредством:
— веб-клиента
— тонкого клиента
— толстого клиента (с возможностью конструктора запросов), подробнее.

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

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

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

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

Пользователь может просматривать персональную статистику (количество заработанных баллов, место в рейтинге, количество выполненных заданий, общее время, затраченное на их выполнение.). Помимо персональной статистики пользователь может просматривать общую статистику (top 100).

Для получения методической поддержки и обсуждения порядка решения заданий можно воспользоваться форумом группы //infostart.ru/community/groups/1107/forum/.

Дополнительно вы можете использовать интерактивные программы:

3 шага к подключению к консоли в режиме Толстого клиента:
1. Скачайте дистрибутив конфигурации Клиент для веб-сервиса, скачать.
2. Создайте новую информационную базу на основе установленного шаблона
3. Запустите информационную базу используя Толстый клиент (обычное приложение)

Читайте также:  Арабский язык в уфе

Подключение к консоли в режиме Тонкого клиента:

1. Установить Тонкий клиент (8.2.17.169), добавить новую информационную базу, подробнее.
2. Указать строку адреса подключения http://v8query.its22.ru/v8query, подробнее.
3. Выбрать режим запуска и указать дополнительные параметры, подробнее.

Для регистрации выполните вход под пользователем guest (пароль пустой).

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

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

Источник

Описание языка запросов 1С 8

Язык запросов 1С — одно из основных отличий между версиями 7.7 и 8. Одним из важнейших пунктов в изучении 1С-программирования является язык запросов. В 1С 8.3 запросы — самый мощный и эффективный инструмент получения данных. Язык запросов позволяет в удобном виде получать информацию из базы данных.

Сам синтаксис очень сильно напоминает классический T-SQL, за исключением того, что в 1С с помощью языка запросов можно только получать данные, используя конструкцию Выбрать(select). Язык поддерживает и более сложные конструкции, например, вложенные запросы (запрос в запросе). Запросы в 1С 8 можно составлять как на кириллице, так и на латинице.

В статье я постараюсь рассказать про основные ключевые слова в языке запросов 1С:

А так же небольшие хитрости языка 1С, применяя которые вы сможете оптимально построить текст запроса.

Для отладки запросов в системе 1С предусмотрен специальный инструмент — консоль запросов. Увидеть описание и скачать его можно по ссылке — консоль запросов 1C.

Основные конструкции языка запросов

Рассмотрим самые важные и интересные операторы языка запросов 1С.

ВЫБРАТЬ (SELECT)

В языке запросов 1С предприятия 8 любой запрос начинается с ключевого слова ВЫБРАТЬ. В языке 1С нет конструкций UPDATE, DELETE, CREATE TABLE, INSERT, эти манипуляции производятся в объектной технике. Предназначение его — только чтение данных.

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

Запрос вернёт таблицу с наименованиями номенклатуры.

Рядом с конструкцией ВЫБРАТЬ можно встретить ключевые слова ДЛЯ ИЗМЕНЕНИЯ, РАЗРЕШЕННЫЕ, РАЗЛИЧНЫЕ, ПЕРВЫЕ

ДЛЯ ИЗМЕНЕНИЯ — блокирует записи таблицы на время транзакции (не актуально для управляемых блокировок). Подробнее в статье ДЛЯ ИЗМЕНЕНИЯ в запросах 1С.

РАЗРЕШЕННЫЕ — выбирает только записи из таблицы, на которые есть права у текущего пользователя.

РАЗЛИЧНЫЕ — означает, что в результат не попадет дублирующих строк.

ПЕРВЫЕ n — в языке 1С 8.3 запрос отберет только n первых записей.

ВЫБОР (CASE)

Очень часто данная конструкция недооценивается программистами. Пример её использования:

КОГДА ТекущийСправочник.Услуга ТОГДА

КОНЕЦ КАК ВидНоменклатуры

Справочник.Номенклатура КАК ТекущийСправочник

Пример возвратит в поле «ВидНоменклатуры» текстовое значение — «Товар» или «Услуга».

ГДЕ (WHERE)

Конструкция языка запросов 1C, позволяющая наложить отбор на получаемые данные. Учтите, что от сервера система получает все данные, а только потом они отбираются по данному параметру.

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

В примере мы отбираем записи, у которых значение реквизита «Услуга» установлено в положение «Истина». В данном примере можно было бы обойтись и таким условием:

По сути, мы отбираем строки, у которых выражение после ключевого слова равно «Истина».

В выражениях можно использовать прямые условия:

С помощью оператора «ЗНАЧЕНИЕ()» в условиях использовать обращение к предопределенным элементам и перечислениям в запросе 1С:

ГДЕ ТипНоменклатуры= Значение(Перечисление.ТипыНоменклатуры.Товар)

Значения времени могут указываться следующим образом:

ГДЕ ДатаПоступления > ДАТАВРЕМЯ(2012,01,01):

Чаще всего условия указываются в виде параметров, передаваемых в запрос:

ГДЕ НоменклатурнаяГруппа= &НоменклатурнаяГруппа

Условие можно наложить на тип реквизита, если он составного типа:

ГДЕ РегистрНакопления.Регистратор ССЫЛКА Документ.ПоступленияТоваров

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

ГДЕ РегистрНакопления.Регистратор В (&СписокДокументовДляОтбора)

Условие может быть и сложное, состоящее из нескольких условий:

ГДЕ ДатаПоступления > ДАТАВРЕМЯ(2012,01,01) И НоменклатурнаяГруппа= &НоменклатурнаяГруппа И НЕ Услуга

СГРУППИРОВАТЬ ПО (GROUP BY)

Конструкция языка запросов 1С, используемая для группировки результата.

ВЫБРАТЬ
ПоступлениеТоваровУслугTовары.Товар,
СУММА(ПоступлениеТоваровУслугTовары.Количество) КАК Количество,
СУММА(ПоступлениеТоваровУслугTовары.Сумма) КАК Сумма
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугTовары

СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугTовары.Товар

Данный запрос просуммирует все поступления по сумме и количеству в разрезе номенклатуры.

Помимо ключевого слова СУММА можно использовать другие агрегатные функции: КОЛИЧЕСТВО, КОЛИЧЕСТВО РАЗНЫХ, МАКСИМУМ, МИНИМУМ, СРЕДНЕЕ.

ИМЕЮЩИЕ (HAVING)

Конструкция, о которой часто забывают, но она очень важна и полезна. Она позволяет указать отбор в виде агрегатной функции, этого нельзя сделать в конструкции ГДЕ.

Пример использования ИМЕЮЩИЕ в запросе 1С:

ВЫБРАТЬ
ПоступлениеТоваровУслугТовары.Товар,
СУММА(ПоступлениеТоваровУслугТовары.Количество) КАК Количество,
СУММА(ПоступлениеТоваровУслугТовары.Сумма) КАК Сумма
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары

СГРУППИРОВАТЬ ПО
ПоступлениеТоваровУслугТовары.товар

Так мы отберем количество товаров, которых поступило более 5 штук.

ЗНАЧЕНИЕ()

В запросе 1C ЗНАЧЕНИЕ () можно использовать для указания предопределенных значений, таких как значения перечисления, пустую ссылку или значение предопределенного элемента (справочника, плана счетов, ПВХ и т.д).

ГДЕ Банк = Значение(Справочник.Банки.ПустаяСсылка)

ГДЕ ВидНоменклатуры = Значение(Справочник.ВидыНоменклатуры.Товар)

ГДЕ ТипНоменклатуры= Значение(Перечисление.ТипыНоменклатуры.Услуга)

ТИП в запросе

Тип данных можно проверить следующим образом: с помощью функций ТИП() и ТИПЗНАЧЕНИЯ() или с помощью логического оператора ССЫЛКА.

ГДЕ ТИПЗНАЧЕНИЯ(Проект.Ссылка) <> ТИП(Справочник.Проект)

ГДЕ Проект.Ссылка ССЫЛКА Справочник.Проект

ВЫРАЗИТЬ()

Оператор Выразить в запросах 1С служит для преобразования типов данных.

Читайте также:  Государственное обучение иностранным языкам

Синтаксис: ВЫРАЗИТЬ( КАК )

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

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

ВЫБРАТЬ
КонтактнаяИнформация.Объект,
ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(150)) КАК Представление
ИЗ
РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация

СГРУППИРОВАТЬ ПО
ВЫРАЗИТЬ(КонтактнаяИнформация.Представление КАК СТРОКА(150)),
КонтактнаяИнформация.Объект

ЕСТЬNULL (ISNULL)

Достаточно полезная функция языка запросов 1С, которая проверяет значение в записи, и если оно равно NULL, то позволяет заменить на своё значение. Чаще всего используется при получении виртуальных таблиц остатков и оборотов, чтобы скрыть NULL и поставить понятный 0 (ноль).

Такая функция языка запросов 1С ЕСТЬNULL при отсутствии значения вернет ноль, что позволит избежать ошибки.

СОЕДИНЕНИЕ (JOIN)

Соединения бывают 4 типов: ЛЕВОЕ, ПРАВОЕ, ПОЛНОЕ, ВНУТРЕННЕЕ.

ЛЕВОЕ и ПРАВОЕ СОЕДИНЕНИЕ

Соединения используются для связи двух таблиц по определенному условию. Особенность при ЛЕВОМ СОЕДИНЕНИИ в том, что мы берём первую указанную таблицу полностью и привязываем по условию вторую таблицу. Поля второй таблицы, которые не удалось привязать по условию, заполняются значением NULL.

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

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

Вернет всю таблицу Контрагентов и заполнит поле «Банк» лишь в тех местах, где будет соблюдаться условие «Контрагенты.Наименование = Банки.Наименование». Если условие не соблюдается, в поле Банк будет установлено NULL.

ПРАВОЕ СОЕДИНЕНИЕ в языке 1С 8.3 абсолютно аналогично ЛЕВОМУ соединению, за исключением одного отличия: в ПРАВОМ СОЕДИНЕНИИ «главная» таблица — вторая, а не первая.

ПОЛНОЕ СОЕДИНЕНИЕ

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

ВЫБРАТЬ
Клиенты.Ссылка КАК Клиенты,
Банки.Ссылка КАК Банк
ИЗ
Справочник.Контрагенты КАК Клиенты

ПОЛНОЕ СОЕДИНЕНИЕ
Справочник.Банки КАК Банки

ПО
Клиенты.Наименование = Банки.Наименование

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

ВНУТРЕННЕЕ СОЕДИНЕНИЕ

ВНУТРЕННЕЕ СОЕДИНЕНИЕ отличается от полного тем, что выводит только те записи, которые смогли соединить по заданному условию.

ВЫБРАТЬ
Клиенты.Ссылка КАК Клиенты,
Банки.Ссылка КАК Банк

ИЗ
Справочник.Контрагенты КАК Клиенты

ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Справочник.Банки КАК Банки

ПО
Клиенты.Наименование = Банки.Наименование

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

Заключение

Это лишь небольшая часть синтаксиса из языка запросов 1С 8, в дальнейшем я попробую рассмотреть более подробно некоторые моменты, показать способы оптимизации запросов и многое другое!

Рубрикатор статей сайта по запросам

Видеокурс по 1С

Если вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые виде):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

1с язык запросов самоучитель

Войдите как ученик, чтобы получить доступ к материалам школы

Язык запросов 1С 8.3 для начинающих программистов: основы синтаксиса

Автор уроков и преподаватель школы: Владимир Милькин

Начиная с этого урока мы начинаем изучать синтаксис языка запросов.

Основы синтаксиса

В двух словах синтаксис языка запросов можно описать так:

ВЫБРАТЬ
СЮДА ПИШЕМ ЧТО БУДЕМ ВЫБИРАТЬ
ИЗ
СЮДА ПИШЕМ ОТКУДА БУДЕМ ВЫБИРАТЬ

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

Попробуйте написать этот запрос в консоли запросов, как мы это делали на первом уроке (ссылка):

И затем выполнить его (кнопка Выполнить):

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

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

Выборка нескольких свойств

Если мы хотим запросить несколько свойств (к примеру, Наименование и Цвет), то их нужно перечислить через запятую:

Читайте также:  Арифметического выражения на алгоритмическом языке

Выборка всех свойств

Выборка первых N строк

Теперь давайте решим такую задачу: «Запросить названия первых 3 элементов справочника Еда«. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Чтобы ограничить количество строк, которое вернёт нам запрос используем ключевое слово ПЕРВЫЕ 3:

Выборка различных строк

А что если справочник Еда содержал бы два элемента с именем «Банан» и нам требовалось, чтобы запрос возвращал среди прочей еды только один банан, а не два? Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.

В этом случае нам пригодилось бы ключевое слово РАЗЛИЧНЫЕ:

Дополнительные пояснения

Как выглядит таблица справочника еда? Какие в ней столбцы?

Во-первых, её полное название Справочник.Еда.

Во-вторых, её столбцы как следует из конфигуратора следующие:

Плюс стандартные для всех справочников:

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

Отвлечёмся не надолго.

А как выглядит таблица справочника цвета?

Судя по конфигуратору у него есть только стандартные реквизиты. Таким образом в его таблице будут только следующие столбцы:

А теперь такой момент.

Судя по конфигуратору столбец из таблицы Справочник.Еда с именем Цвет является ссылкой на справочник Цвета (а вернее на его таблицу). Каким образом мы можем имея эту ссылку обратиться к реквизитам (столбцам, свойствам) самого цвета?

Конечно же через точку:

Теперь о документах.

Рассмотрим документ ЗаказКлиента. У него также есть своя таблица со следующими столбцами (см. конфигуратор и предыдущие уроки):

И чтобы обратиться к любому из них мы напишем:

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

Но это не все данные, которые есть у документа. Как следует из конфигуратора у него есть табличная часть с именем Продукты. Это как бы ещё одна таблица, привязанная к этому документу. У этой таблицы есть свои столбцы (см. конфигуратор):

Источник

1с язык запросов самоучитель

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Авторизуйтесь, чтобы получить доступ ко всем материалам школы

Источник

Поделиться с друзьями
admin
Расскажем обо всем понемногу
Adblock
detector