Как использовать конструктор запросов для условий с агрегатными функциями и когда лучше писать код вручную?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Многие разработчики 1С сталкиваются с вопросом: обязательно ли писать текст запроса целиком вручную, если требуется использовать условия с агрегатными функциями, такими как СУММА(), КОЛИЧЕСТВО() или МАКСИМУМ()? Часто кажется, что конструктор «не умеет» правильно расставлять секции ИМЕЮЩИЕ. Давайте разберемся, как эффективно использовать этот инструмент и в каких ситуациях стоит отдать предпочтение ручному написанию кода.

Использование агрегатных функций в конструкторе запросов

На самом деле, конструктор запросов платформы 1С достаточно гибкий. Чтобы не писать весь текст запроса «с нуля» в блокноте, воспользуйтесь следующими приемами при работе с условиями:

  1. Режим произвольного условия: В конструкторе запросов перейдите на вкладку «Условия». Там, где вы обычно добавляете параметры фильтрации, найдите возможность переключения в режим «Произвольный». Это позволит вам вручную вписать условие, содержащее агрегатную функцию. Например, вместо выбора конкретного поля из списка, вы можете написать выражение: Сумма(Реализация.Количество) > 100.
  2. Редактирование строки условия: Если конструктор не предлагает выпадающий список для нужного вам агрегата, просто введите его в поле условия напрямую. Система корректно воспримет такой ввод и при генерации итогового текста запроса автоматически поместит его в блок ИМЕЮЩИЕ (HAVING).

Когда стоит писать запрос вручную?

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

Практические советы по работе с запросами

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

Комбинированный подход:

Используйте конструктор для создания «скелета» запроса. Это самый быстрый способ соединить таблицы (LEFT JOIN, INNER JOIN), выбрать базовые поля из регистров и прописать связи. После того как основа готова, выгрузите текст в редактор и доработайте сложные условия, параметры виртуальных таблиц или математические вычисления в коде. Это быстрее, чем пытаться «уложить» многоэтажную логику в узкие поля конструктора.

Работа с пакетами запросов:

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

Оптимизация условий с В():

Часто разработчики тратят много времени на ручной ввод условий ГДЕ Поле В (&Список). Помните, что в конструкторе запросов для этого также существуют специальные инструменты: выделите нужное выражение или добавьте пустое условие, затем вызовите контекстное меню для настройки параметров виртуальной таблицы или списка значений.

Резюме

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

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

← На главную