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

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

Конструктор 1С: что это и как с ним работать

Что такое конструкторы в 1С: конструктор запроса, движений документа, форматной строки и макета. Как открыть, когда использовать и каких ошибок избегать.

Конструктор в 1С — это встроенный визуальный помощник, который позволяет создавать программный код, запросы, макеты и движения документов без ручного написания текста. Разработчик заполняет поля диалогового окна, выбирает объекты из списков, а платформа сама генерирует готовый синтаксически корректный фрагмент. Это снижает количество опечаток и ускоряет работу, особенно у начинающих программистов.

Под словом «конструктор» в контексте 1С чаще всего понимают конструктор запроса — самый массовый инструмент. Но в конфигураторе существует целое семейство конструкторов: движений документа, форматной строки, макета печатной формы, настроек СКД и другие. Все они работают по одному принципу: диалоговое окно → выбор параметров → автоматически сгенерированный код.

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

Какие конструкторы есть в 1С

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

Основные конструкторы, с которыми сталкивается разработчик:

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

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

Конструктор запроса: главный инструмент разработчика

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

Работа строится по вкладкам. На вкладке «Таблицы и поля» выбираются источники данных и нужные реквизиты. На вкладке «Связи» настраиваются соединения таблиц (левое, внутреннее и другие). Вкладки «Условия», «Объединения», «Порядок», «Итоги» отвечают за отбор, сортировку и группировку. После нажатия «ОК» платформа вставляет готовый текст запроса в модуль.

Отдельно стоит упомянуть конструктор запроса с обработкой результата. Он не только формирует текст запроса, но и генерирует код его выполнения: создание объекта Запрос, установку параметров, обход выборки. Это заметно экономит время при написании типовых процедур.

Как открыть и собрать запрос
  1. 1
    Откройте модуль объекта или формы в конфигураторе и поставьте курсор в нужное место кода
  2. 2
    Нажмите правую кнопку мыши и выберите «Конструктор запроса» (или «Конструктор запроса с обработкой результата»)
  3. 3
    На вкладке «Таблицы и поля» перетащите нужную таблицу и отметьте требуемые поля
  4. 4
    Задайте условия отбора через параметры (знак &) и порядок сортировки
  5. 5
    Нажмите «ОК» и проверьте сгенерированный текст запроса в модуле
  6. 6
    Заполните параметры запроса в коде и выполните отладку в режиме предприятия

Конструктор движений документа

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

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

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

Конструкторы макетов и форматной строки

Конструктор макета вызывается при создании макета объекта (команда «Конструкторы → Конструктор макета» в палитре свойств или при создании макета). Он предлагает автоматически сформировать печатную форму: шапку с реквизитами документа, табличную часть и подвал. Результат — готовый табличный документ с именованными областями и параметрами, который затем заполняется из кода.

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

Оба инструмента экономят время на рутине, но итоговый вид печатной формы почти всегда дорабатывается: меняются ширины колонок, добавляются логотипы, итоги и условное оформление.

Когда конструктор помогает, а когда мешает

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

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

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

Сравнение подходов

Конструктор запроса

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

Ручное написание

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

Консоль запросов

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

Типичные ошибки при работе с конструкторами

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

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

Третья группа ошибок связана с конструктором движений: не выставлен вид движения, не установлено значение периода, табличная часть обходится без запроса при больших объёмах. Каждый сгенерированный блок проведения нужно прогнать в отладчике на тестовом документе и проверить записи в регистрах.

Типичные ошибки
01
Соединение таблиц без полного условия связи — итог: размножение строк и неверные суммы в отчётах
02
Подстановка значений прямо в текст запроса вместо параметров — итог: риск ошибок и проблемы с производительностью
03
Использование сгенерированного проведения без теста на копии базы — итог: некорректные движения в рабочих регистрах
04
Правка сложного пакетного запроса в конструкторе — итог: потеря времени, конструктор неудобен для временных таблиц

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

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

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

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

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

Результат запроса в консоли
Норма

Число строк и суммы совпадают с контрольными данными

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

Строки дублируются или пропадают — проверяйте условия соединений

Движения документа в регистре
Норма

Записи с верными измерениями, вид движения соответствует логике

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

Нет записей, неверный приход/расход, пустые измерения

Параметры запроса
Норма

Все переменные значения переданы через УстановитьПараметр

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

Значения вписаны в текст запроса конкатенацией строк

FAQ: частые вопросы о конструкторах 1С

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

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

Можно ли работать в 1С, не зная язык запросов, только через конструктор?

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

Почему конструктор запроса не открывается в модуле?

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

Можно ли отредактировать существующий запрос через конструктор?

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

Есть ли конструктор запроса в режиме «Предприятие»?

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

Замедляет ли сгенерированный код работу системы?

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