К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как научиться писать запросы в 1С с нуля

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

Язык запросов 1С — основной инструмент для выборки данных из базы: без него невозможно построить отчёт, заполнить табличную часть по остаткам или проверить корректность учёта. Синтаксис намеренно похож на SQL, поэтому тем, кто знаком с базами данных, освоение даётся быстрее, а новичкам помогает встроенный конструктор запроса.

Главная ошибка начинающих — попытка учить синтаксис по шпаргалкам без практики. Работает обратный подход: берёте реальную задачу из своей базы (например, «показать остатки товаров по складу»), собираете запрос в конструкторе и разбираете, какой текст он сгенерировал. Так за несколько недель формируется устойчивый навык.

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

С чего начать: среда и учебная база

Для обучения не нужна отдельная программа — достаточно конфигуратора 1С и любой файловой базы. Оптимальный вариант — учебная версия платформы или копия рабочей базы, развёрнутая локально. Никогда не тренируйтесь на продуктивной базе с реальными данными контрагентов и проводками.

Порядок подготовки простой: создайте пустую информационную базу, загрузите в неё демо-конфигурацию (например, демонстрационную поставку «Управление торговлей» или любую типовую с заполненными данными) либо выгрузите копию своей базы через режим «Загрузить информационную базу». Демо-данные важны: запросы по пустым таблицам не показывают, правильно ли работает логика.

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

Как устроен язык запросов 1С

Язык запросов 1С — декларативный: вы описываете, какие данные нужны, а платформа сама строит план выборки. Базовый скелет любого запроса — предложения ВЫБРАТЬ (SELECT), ИЗ (FROM) и, при необходимости, ГДЕ (WHERE). Имена таблиц строятся по шаблону: Справочник.Номенклатура, Документ.РеализацияТоваровУслуг, РегистрНакопления.ТоварыНаСкладах.

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

Ещё одна особенность — обращение к полям через точку и разыменование: запрос может «провалиться» из документа в реквизиты контрагента (Документ.Контрагент.ИНН). Это удобно для чтения, но при больших объёмах порождает скрытые соединения, о чём полезно помнить при оптимизации.

Осваиваем конструктор запроса пошагово

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

Типовая последовательность работы: на закладке «Таблицы и поля» выберите источник (например, справочник «Номенклатура»), перетащите нужные поля в список выборки, на закладке «Условия» задайте отбор (например, «ЭтоГруппа = ЛОЖЬ»), на закладке «Объединения/Псевдонимы» проверьте имена полей. Нажмите «ОК» — и изучите сгенерированный текст.

Полезное упражнение: соберите запрос в конструкторе, затем закройте его и попробуйте написать тот же текст руками, сверяясь с результатом. Через 10–15 таких повторений базовый синтаксис запоминается без зубрёжки.

Первый запрос в конструкторе
  1. 1
    Откройте консоль запросов в учебной базе и вызовите конструктор
  2. 2
    Добавьте таблицу Справочник.Номенклатура и выберите поля Ссылка, Наименование, Артикул
  3. 3
    На закладке «Условия» добавьте отбор ЭтоГруппа = ЛОЖЬ
  4. 4
    Завершите построение и выполните запрос — проверьте, что вернулись только элементы, а не группы
  5. 5
    Сохраните текст запроса и перепишите его вручную, сверяя результат

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

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

Первый приём — соединения таблиц: ЛЕВОЕ СОЕДИНЕНИЕ используется, когда основная выборка не должна потерять строки, даже если в присоединяемой таблице нет данных (типичный случай — товары и их остатки). ВТОРОЕ — группировка с агрегатными функциями СУММА, КОЛИЧЕСТВО, МАКСИМУМ и предложением СГРУППИРОВАТЬ ПО для сводных итогов.

Третий приём — параметры через символ «&» (&НачалоПериода, &Склад): они делают запрос универсальным и защищают от подстановки строк вручную. Четвёртый — объединение выборок через ОБЪЕДИНИТЬ ВСЕ, когда нужно склеить данные из нескольких источников. Пятый — вложенные запросы и временные таблицы (ПОМЕСТИТЬ), которые разбивают сложную логику на читаемые этапы.

bsl
ВЫБРАТЬ
    Товары.Номенклатура КАК Номенклатура,
    СУММА(Товары.КоличествоОстаток) КАК Остаток
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(&Период, Склад = &Склад) КАК Товары
СГРУППИРОВАТЬ ПО
    Товары.Номенклатура

Работа с регистрами и виртуальными таблицами

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

Параметры виртуальной таблицы указываются в скобках сразу после её имени: период, условие отбора, иногда разрезы. Важно передавать отбор именно в параметры виртуальной таблицы, а не в предложение ГДЕ — тогда платформа отфильтрует данные на раннем этапе и запрос выполнится заметно быстрее.

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

Остатки или Обороты

Виртуальная таблица Остатки

Подходит для вопроса «сколько есть на дату»: складские остатки, взаиморасчёты, остатки на счетах. Не показывает динамику за период.

Виртуальная таблица Обороты

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

Физическая таблица регистра

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

Как проверять запрос и искать ошибки

Проверка результата — обязательная часть работы, а не формальность. Минимальный приём: сравните итог по вашему запросу с типовым отчётом конфигурации за тот же период (например, сумму остатков — с отчётом «Остатки товаров на складах»). Совпадение цифр — лучший признак корректности.

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

Третий приём — тест на граничных условиях: пустой период, отбор по несуществующему складу, документ без движений. Запрос не должен падать с ошибкой и не должен возвращать «мусор» вроде NULL там, где ожидается ноль. Для подавления NULL используйте функцию ЕСТЬNULL(Поле, 0).

Контрольные точки

Как проверить результат запроса

Итоговые суммы
Норма

Совпадают с типовым отчётом за тот же период

Тревожный признак

Расхождение — проверяйте параметры виртуальной таблицы и условия соединений

Количество строк
Норма

Соответствует логике выборки (например, по числу товаров с остатками)

Тревожный признак

Строк резко больше после соединения — вероятно, неполное условие связи

Значения NULL
Норма

В числовых итогах нули или отсутствуют

Тревожный признак

NULL в суммах — добавьте ЕСТЬNULL или проверьте тип соединения

Типичные ошибки и ограничения

Самая частая ошибка — фильтрация через ГДЕ вместо параметров виртуальной таблицы. Запрос работает правильно, но медленно: платформа сначала вычисляет все остатки, а потом отбрасывает лишнее. На больших базах такой запрос может выполняться минутами вместо секунд.

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

Третья группа — работа с периодами: смешение границ периода (начало дня против конца дня), забытой параметр периода в виртуальной таблице (остатки берутся на текущую дату, а не на дату отчёта). Всегда явно передавайте даты через параметры и проверяйте, какая граница периода имеется в виду.

Типичные ошибки новичков
01
Отбор в ГДЕ вместо параметров виртуальной таблицы — запрос работает медленно на больших объёмах
02
Внутреннее соединение вместо левого — из результата исчезают позиции без движений
03
Отсутствие ЕСТЬNULL — в итогах появляются NULL вместо нулей и ломают дальнейшие вычисления
04
Забытый параметр периода — остатки берутся не на ту дату, цифры не сходятся с отчётами
05
Соединение по одному полю из нескольких измерений — строки дублируются, суммы завышаются

Как выстроить обучение дальше

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

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

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

Маршрут решения

Как выбрать следующий шаг

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

Частые вопросы

Нужно ли знать SQL, чтобы писать запросы в 1С?

Нет, это не обязательно. Синтаксис похож, и знание SQL ускоряет обучение, но язык запросов 1С осваивается самостоятельно — начинать можно с конструктора без какой-либо подготовки по базам данных.

Чем консоль запросов отличается от конструктора?

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

Почему запрос возвращает NULL вместо нулевых остатков?

При левом соединении, если в присоединяемой таблице нет подходящих строк, поля из неё равны NULL. Это нормальное поведение. Чтобы получить нули, оберните поле в функцию ЕСТЬNULL(Поле, 0).

Можно ли через запрос изменить данные в базе?

Нет, язык запросов 1С предназначен только для чтения данных. Изменение выполняется средствами встроенного языка через объектную модель (запись документов, наборы записей регистров). Поэтому чтение запросами относительно безопасно, но тренироваться всё равно лучше на копии из-за риска блокировок тяжёлыми запросами.

Сколько времени занимает освоение языка запросов?

Базовый уровень — выборки, условия, простые соединения, виртуальные таблицы — обычно осваивается за несколько недель регулярной практики по 30–60 минут в день. Уверенное владение временными таблицами, пакетными запросами и оптимизацией приходит с опытом решения реальных задач.

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

Логичный следующий шаг — система компоновки данных (СКД), поскольку отчёты в современных конфигурациях строятся на ней, а запрос является её основой. Далее — встроенный язык 1С для обработки результатов запроса в коде.

Итог

Что важно запомнить

Учитесь на копии базы через конструктор запросов, освойте пять базовых приёмов (соединения, группировки, параметры, объединения, временные таблицы), всегда сверяйте итоги с типовыми отчётами и передавайте отборы в параметры виртуальных таблиц, а не в ГДЕ.