Но качество отчета напрямую зависит от того, как написан запрос.
Если запрос составлен неаккуратно, отчет может работать медленно, возвращать лишние данные или быть сложным в поддержке.
В этой статье разберем:
• как строить запросы для СКД;
• какие ошибки встречаются чаще всего;
• как писать запросы быстрее и понятнее;
• приведем примеры и схемы.
________________________________________
Что важно понимать перед написанием запроса для СКД
СКД не просто “выполняет запрос”. Она:
1. получает данные из источника;
2. группирует, отбирает и сортирует их;
3. применяет настройки пользователя;
4. формирует итоговый отчет.
Поэтому запрос для СКД должен быть:
• чистым;
• понятным;
• оптимизированным;
• не перегруженным лишней логикой.
________________________________________
Основные принципы написания запросов для СКД
1. Выбирайте только нужные поля
Не стоит писать:
ВЫБРАТЬ *
Лучше явно перечислить нужные реквизиты.
Плохо:
1c
ВЫБРАТЬ
*
ИЗ
Справочник.Номенклатура КАК Номенклатура
Хорошо:
1c
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Код,
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
Почему это важно:
• меньше лишних данных;
• выше производительность;
• проще поддержка.
________________________________________
2. Используйте понятные псевдонимы
Псевдонимы должны быть короткими, но понятными.
Плохо:
1c
ВЫБРАТЬ
Т1.Ссылка,
Т2.Наименование
ИЗ
...
Лучше:
1c
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
________________________________________
3. Фильтруйте данные как можно раньше
Если можно отобрать данные в запросе — делайте это в запросе, а не в СКД на этапе вывода.
Пример:
1c
ВЫБРАТЬ
Продажи.Период,
Продажи.Номенклатура,
Продажи.Количество,
Продажи.Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаКонца, , ) КАК Продажи
ГДЕ
Продажи.Количество > 0
Это уменьшает объем данных и ускоряет отчет.
________________________________________
4. Старайтесь использовать группировки осознанно
Если отчет строится по итогам, лучше сразу делать агрегацию в запросе.
Пример запроса с группировкой:
1c
ВЫБРАТЬ
Продажи.Номенклатура,
СУММА(Продажи.Количество) КАК Количество,
СУММА(Продажи.Сумма) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаКонца, , ) КАК Продажи
СГРУППИРОВАТЬ ПО
Продажи.Номенклатура
Такой подход помогает СКД сразу получить готовые итоги.
________________________________________
5. Не усложняйте запрос без необходимости
Иногда разработчики пытаются сделать в одном запросе всё сразу:
• фильтры;
• вычисления;
• подзапросы;
• соединения;
• дополнительные итоги.
В результате запрос становится:
• медленным;
• трудно читаемым;
• сложным в сопровождении.
Лучше разбить логику на несколько понятных шагов.
________________________________________
Пример правильного запроса для СКД
Ниже — базовый пример запроса для отчета по продажам.
1c
ВЫБРАТЬ
Продажи.Период КАК Период,
Продажи.Номенклатура КАК Номенклатура,
Продажи.Количество КАК Количество,
Продажи.Сумма КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаКонца, , ) КАК Продажи
ГДЕ
Продажи.Количество > 0
УПОРЯДОЧИТЬ ПО
Продажи.Период,
Продажи.Номенклатура
Что здесь хорошо:
• используются только нужные поля;
• есть фильтр по количеству;
• результат отсортирован;
• запрос легко использовать в СКД.
________________________________________
Как строить запросы для СКД: пошаговый подход
Шаг 1. Определите цель отчета
Сначала ответьте на вопрос:
• что именно должен показать отчет?
Например:
• продажи по номенклатуре;
• остатки по складам;
• выручка по менеджерам;
• движение товаров по периодам.
________________________________________
Шаг 2. Определите источник данных
Источником могут быть:
• справочники;
• документы;
• регистры накопления;
• регистры сведений;
• виртуальные таблицы.
Для отчета по оборотам чаще всего используют регистры накопления.
________________________________________
Шаг 3. Определите поля
Поля должны соответствовать логике отчета:
• измерения;
• ресурсы;
• реквизиты;
• дополнительные вычисляемые значения.
________________________________________
Шаг 4. Добавьте фильтры
Фильтры лучше задавать в запросе, если они одинаковы для всех вариантов отчета.
Например:
• только проведенные документы;
• только не пустые значения;
• только определенный период.
________________________________________
Шаг 5. Проверьте группировки и итоги
Если нужен итог по группе, продумайте:
• по чему группировать;
• какие поля суммировать;
• какие поля выводить как детализацию.
________________________________________
Картинки-примеры для статьи
Ниже — простые схемы, которые можно использовать как иллюстрации в статье.
Иллюстрация 1. Как запрос проходит через СКД
Частые ошибки при написании запросов для СКД
1. Слишком много полей
Если в запросе десятки полей, а в отчете нужны только 3–5, это лишняя нагрузка.
2. Отсутствие фильтрации
Запрос может возвращать слишком большой объем данных, что замедляет отчет.
3. Неправильные соединения
Лишние ЛЕВОЕ СОЕДИНЕНИЕ или ВНУТРЕННЕЕ СОЕДИНЕНИЕ могут значительно ухудшить производительность.
4. Дублирование логики
Когда один и тот же расчет повторяется в нескольких местах, поддержка становится сложной.
5. Нечитаемые псевдонимы
Т1, Т2, Q1 — это удобно только в коротком черновике, но не в рабочем проекте.
________________________________________
Советы по оптимизации запросов для СКД
• используйте только необходимые поля;
• фильтруйте данные в запросе;
• избегайте лишних подзапросов;
• проверяйте план выполнения;
• по возможности используйте виртуальные таблицы;
• не выносите в СКД то, что можно посчитать в запросе;
• тестируйте отчет на больших объемах данных.
________________________________________
Пример более сложного запроса
Если нужен отчет по продажам с итогами по менеджерам:
1c
ВЫБРАТЬ
Продажи.Менеджер КАК Менеджер,
СУММА(Продажи.Количество) КАК Количество,
СУММА(Продажи.Сумма) КАК Сумма
ИЗ
РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаКонца, , ) КАК Продажи
ГДЕ
Продажи.Количество > 0
СГРУППИРОВАТЬ ПО
Продажи.Менеджер
УПОРЯДОЧИТЬ ПО
Сумма УБЫВ
Что здесь происходит:
• данные отбираются за период;
• отбрасываются нулевые строки;
• считается сумма по каждому менеджеру;
• результат сортируется по убыванию суммы.
________________________________________
Когда лучше не усложнять запрос
Иногда проще:
• взять более простой запрос;
• а всю дополнительную логику настроить в самой СКД.
Это полезно, если:
• отчет часто меняется;
• пользователю нужны разные варианты группировок;
• логика отчета еще не окончательно определена.
________________________________________
Итог
Правильный запрос для СКД — это запрос, который:
• решает задачу отчета;
• не содержит лишних данных;
• быстро работает;
• легко читается;
• удобно поддерживается.
Если следовать простым правилам:
• выбирать только нужные поля,
• фильтровать данные заранее,
• использовать понятные псевдонимы,
• делать группировки осознанно,
то отчеты в 1С будут работать быстрее и стабильнее.
Как правильно писать запросы для СКД (1C)
Система компоновки данных (СКД) в 1С — это один из самых удобных инструментов для создания отчетов.
- Комментарии
Загрузка комментариев...
Категории
Это интересно
