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

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

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

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

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

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

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

Какие конструкторы есть в 1С и для чего каждый нужен

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

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

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

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

Выбор таблиц, полей, отборов, итогов и сортировки

Конструктор печатиПроцедура печати

Макет печатной формы и код вывода данных

Конструктор движенийКод проведения

Записи в регистры по данным документа

Конструктор форматной строкиСтрока формата

Правила отображения чисел, дат и булевых значений

Как открыть конструктор в конфигураторе

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

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

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

Как вызвать конструктор запроса
  1. 1
    Откройте модуль, куда нужно вставить запрос, и поставьте курсор в нужное место
  2. 2
    Нажмите правую кнопку мыши и выберите «Конструкторы» → «Конструктор запроса»
  3. 3
    Согласитесь на создание нового запроса, если платформа предложит выбор
  4. 4
    Выберите таблицы, перетащите нужные поля, задайте условия и порядок
  5. 5
    Нажмите «ОК» — текст запроса появится в модуле

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

Конструктор запроса открывается в виде окна с несколькими закладками. На закладке «Таблицы и поля» слева отображается дерево доступных объектов базы данных: таблицы документов, справочников, регистров, виртуальные таблицы остатков и оборотов. Выбранные таблицы переносятся в среднюю колонку, а из них — нужные поля в правую.

На закладке «Связи» настраиваются соединения таблиц: внутренние, левые, правые и полные. Закладка «Условия» позволяет задать отбор, причём вместо конкретных значений удобно использовать параметры через символ «&» — так запрос станет универсальным. Закладки «Группировка», «Итоги» и «Порядок» отвечают за агрегирование и сортировку результата.

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

bsl
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Номенклатура.Ссылка ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ Номенклатура.Родитель = &Родитель";
Запрос.УстановитьПараметр("Родитель", ВыбраннаяГруппа);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
	// обработка строки
КонецЦикла;

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

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

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

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

Когда конструктор помогает, а когда лучше писать вручную

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

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

Конструктор или ручное написание

Конструктор

Подходит для типовых запросов, печатных форм и движений; быстро и без синтаксических ошибок, но код требует доработки

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

Подходит для сложных запросов, оптимизации и нестандартной логики; требует знания языка, но даёт полный контроль

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

Подходит для отладки и подбора текста запроса на реальных данных перед переносом в модуль

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

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

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

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

Как проверить, что сгенерированный код работает

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

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

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

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

Выполнение запроса
Норма

Выборка возвращает ожидаемые строки без ошибок

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

Ошибка «Поле не найдено» или пустой результат при наличии данных

Печатная форма
Норма

Все реквизиты выведены, итоги совпадают с документом

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

Пустые ячейки, обрезанный текст, расхождение сумм

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

Записи в регистрах соответствуют табличной части

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

Движения отсутствуют или суммы с неверным знаком

Частые вопросы о конструкторах в 1С

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

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

Почему конструктор движений не запускается для моего документа?

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

Удалит ли конструктор мои правки, если запустить его снова?

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

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

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

Работают ли конструкторы в режиме «Предприятие»?

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

Поддерживает ли конструктор запроса временные таблицы и пакетные запросы?

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

Итог

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

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