Создание запроса в 1С для получения остатков товаров
Ключевые тезисы:
- Запрос — это инструкция на специальном языке для получения данных из базы 1С.
- Разработку удобно вести в Консоли запросов (внешняя обработка).
- Основные этапы: выбор таблиц, настройка полей, фильтрация, сортировка и соединение таблиц.
- Результат запроса можно использовать как в консоли, так и в программном коде для заполнения форм или отчётов.
Что такое запрос и зачем он нужен?
Все данные приложения (товары, клиенты, заказы) хранятся в базе данных в виде таблиц. Запрос — это возможность получить эти данные для отображения в отчётах или дальнейшей обработки. Это инструкция, которая выполняется и возвращает таблицу с результатами.
Инструмент: Консоль запросов
- Внешняя обработка для написания и тестирования запросов без конфигуратора.
- Открывается в режиме предприятия (Файл → Открыть).
- Основной интерфейс: поле для текста запроса и кнопка «Выполнить».
Конструктор запросов
Визуальный помощник для формирования текста запроса без ручного написания.
- Закладка «Таблицы и поля»: слева — все таблицы базы, в центре — выбранные таблицы, справа — выбранные поля.
- Пример: выбор таблицы Справочник.Партнеры и полей Код, Наименование.
Практика: Получаем остатки товаров на складе
Шаг 1: Получаем список товаров (номенклатуры)
- В конструкторе выбираем таблицу Справочник.Номенклатура.
- Выбираем нужные поля:
Код,Наименование,ЕдиницаИзмерения,Артикул,СтавкаНДС,ТипНоменклатуры. - В тексте запроса появляются секции:
ВЫБРАТЬ— перечисление выбранных полей.ИЗ— указание таблицы-источника.- Используются псевдонимы для таблиц (для краткости) и полей (для имён колонок в результате).
Шаг 2: Фильтрация — убираем группы из результата
В результат попадают не только элементы, но и группы справочника. Чтобы оставить только элементы:
- В конструкторе переходим на закладку «Условия».
- Выбираем поле
ЭтоГруппа. - Устанавливаем условие:
ЭтоГруппа = Ложь. - В запросе добавляется секция
ГДЕс указанным условием.
Шаг 3: Сортировка результата
Для удобства чтения сортируем данные по наименованию:
- В конструкторе переходим на закладку «Порядок».
- Выбираем поле
Наименованиеи направление сортировки (по возрастанию). - В запросе добавляется секция
УПОРЯДОЧИТЬ ПО.
Шаг 4: Соединение таблиц — добавляем остатки
Данные об остатках хранятся в другой таблице — РегистрНакопления.ТоварыНаСкладах.Остатки.
- В конструкторе добавляем эту таблицу к уже выбранной.
- Выбираем поле
ВНаличииОстаток. - Важно: возникает конфликт имён (поле
Номенклатурав обеих таблицах). Меняем псевдоним первой таблицы наСписокНоменклатуры. - Переходим на закладку «Связи» (становится доступной при выборе двух таблиц).
Типы соединения таблиц:
Левое соединение (ЛЕВОЕ СОЕДИНЕНИЕ): в результат попадают ВСЕ строки из главной (левой) таблицы. Если в правой таблице нет соответствия, в колонке будетNULL. (Используется в нашем случае).- Внутреннее соединение (
ВНУТРЕННЕЕ СОЕДИНЕНИЕ): в результат попадают только те строки, для которых есть соответствие в ОБЕИХ таблицах.
- Настраиваем условие связи:
СписокНоменклатуры.Ссылка = ТоварыНаСкладахОстатки.Номенклатура.
Шаг 5: Замена NULL на 0
Если остатка нет, в колонке отображается NULL (пусто). Чаще нужен 0.
- В конструкторе для поля
ВНаличииОстатокоткрываем «Произвольное выражение». - Используем функцию
ЕСТЬNULL(Поле, 0). - Первый параметр — наше поле, второй — значение для замены
NULL(0).
Про удобство настройки связей
- В режиме Тонкого клиента закладка «Связи» может быть неудобна.
- Для комфортной работы перезапустите сеанс в режиме Толстого клиента (в конфигураторе: Сервис → Параметры → Толстый клиент).
Использование запроса в программном коде
Запросы часто используются не только в консоли, но и в коде обработок/отчётов.
Алгоритм:
- В Консоли запросов: Инструменты → Код на встроенном языке.
- Копируем сгенерированный фрагмент кода.
- В конфигураторе, в обработчике команды на сервере:
- Создаём объект
Запрос. - Устанавливаем его текст.
- Выполняем метод
Выполнить(). - Получаем
Результати обходим его в цикле черезВыборку. - Данные из выборки переносим в табличную часть формы (предварительно её очистив).
- Создаём объект
Пример фрагмента кода:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ..."; // Ваш текст запроса
Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
Объект.Товары.Очистить(); // Очищаем табличную часть
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
КонецЦикла;
КонецЕсли;
Итоги
За 20 минут мы разобрали базовый цикл разработки запроса в 1С:
Выбор данных из таблицы через конструктор.
Фильтрация с помощью секции ГДЕ.
Сортировка через УПОРЯДОЧИТЬ ПО.
Соединение таблиц (ЛЕВОЕилиВНУТРЕННЕЕсоединение) с настройкой условий связи.
Обработка NULLс помощью функцииЕСТЬNULL.
Использование запроса в коде для заполнения форм и отчётов.
Этих знаний достаточно для решения первых практических задач по извлечению и комбинированию данных в 1С.