Smart1Spec Документация
Studio
ПонятиеРазработчик 1СИзучающий Spec1C

Генерация BSL и зоны генерации

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

На этой странице

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

Коротко#

  • Генерация выполняется при «Собрать», если в модели есть хотя бы один источник данных. «Применить без сборки» код не генерирует.
  • Код записывается в модуль формы с именем «Форма» между строками // >>> SPEC1C_EMIT_BLANK_BEGIN и // <<< SPEC1C_EMIT_BLANK_END.
  • Содержимое зоны при каждой сборке заменяется целиком. Код вне зоны сохраняется.
  • Генерация идёт в копию исходников на стороне сервиса сборки: на этапе Source зона остаётся шаблонной, сгенерированный код есть только в скачанном файле.
  • Вид кода зависит от target: ordinary или managed.

Зона генерации#

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

BSL
Процедура ПриОткрытии()
КонецПроцедуры

Процедура КнопкаОткрытьПультНажатие(Кнопка)
	Сформировать(Кнопка);
КонецПроцедуры

// >>> SPEC1C_EMIT_BLANK_BEGIN
// (служебные комментарии)
Процедура Сформировать(Кнопка)
	Сообщить("…: Сформировать");
КонецПроцедуры
// <<< SPEC1C_EMIT_BLANK_END

Правила работы с зоной:

  • Внутри маркеров всё заменяется сгенерированным кодом при каждой сборке со спецификацией, где есть источники. Ваши правки внутри зоны в собранный файл не попадут.
  • Вне маркеров код переносится в собранный файл без изменений. Здесь можно писать свои процедуры и обработчики — например, КнопкаОткрытьПультНажатие, которая вызывает Сформировать.
  • Маркеры не удаляйте и не меняйте. Если их в модуле нет, Studio добавит новую зону в конец модуля. Если в модуле уже есть своя процедура Сформировать, вместе с зоной их окажется две.
  • Без источников данных генерация не выполняется: собранный файл содержит модуль формы ровно в том виде, в каком он сохранён на этапе Source, включая зону.

В начале зоны генерация пишет служебные комментарии; в них встречаются внутренние пометки и прежнее название продукта. Они не влияют на работу кода.

Почему кода нет на этапе Source#

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

  • на этапе Source между маркерами вы увидите шаблонную процедуру, а не сгенерированный запрос;
  • чтобы увидеть результат, скачайте файл и откройте его в 1С: Конфигуратор → открыть обработку → модуль формы;
  • если вы хотите доработать сгенерированный код, делайте это в Конфигураторе в скачанном файле. Сама Studio сгенерированный код в исходники проекта не переносит. Если перенести его вручную на этапе Source, следующая сборка со спецификацией всё равно заменит содержимое зоны.

Вид кода: ordinary и managed#

target: ordinary даёт процедуру обычной формы. Фрагмент из живой сборки:

BSL
Процедура Сформировать(Кнопка)
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	КлиентскиеДоговора.Ссылка КАК Ссылка,
	|	КлиентскиеДоговора.Код КАК Код
	|ИЗ
	|	Справочник.КлиентскиеДоговора КАК КлиентскиеДоговора
	|";
	РезультатЗапроса = Запрос.Выполнить();
	Выборка = РезультатЗапроса.Выбрать();
	н = 0;
	Пока Выборка.Следующий() Цикл
		н = н + 1;
	КонецЦикла;
	Сообщить("…: строк " + Строка(н));
КонецПроцедуры

Запрос выполняется, результат — сообщение с числом строк. Макет, табличный документ и вывод на экран не генерируются, даже если в спецификации есть layout.

target: managed даёт пару процедур с директивами &НаКлиенте и &НаСервере, получение макета и заполнение табличного документа:

BSL
&НаКлиенте
&НаКлиенте
Процедура Сформировать(Команда)
	СформироватьНаСервере();
КонецПроцедуры

&НаСервере
Процедура СформироватьНаСервере()
	// ... запрос
	ТабДок = Новый ТабличныйДокумент;
	ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
	Макет = ОбработкаОбъект.ПолучитьМакет("Макет");
	ОбластьШапкаМакет = Макет.ПолучитьОбласть("Шапка");
	ОбластьСтрокаМакет = Макет.ПолучитьОбласть("Строка");
	// ... вывод областей в ТабДок
КонецПроцедуры

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

Что ещё нужно знать о сгенерированном запросе#

  • Соединение в тексте запроса всегда ЛЕВОЕ СОЕДИНЕНИЕ, какой бы вид ни был указан в спецификации.
  • Условие периода использует реквизиты ДатаНачПериода и ДатаКонПериода. В новом файле их нет — добавьте их на форму в Конфигураторе или не используйте where для нового файла.
  • format: xlsx код выгрузки в Excel не создаёт.
  • Имена объектов и полей Studio не проверяет: опечатка проявится в 1С при выполнении запроса.

Полная таблица «конструкция → код» — Соответствие конструкций и BSL.

Что из этого следует#

  • Пишите свой код вне маркеров; внутри зоны его заменит следующая сборка.
  • Ищите сгенерированный код в скачанном файле, а не на этапе Source.
  • Для нового файла выбирайте target: ordinary и дорабатывайте вывод в Конфигураторе: сгенерированный код — черновик запроса, а не готовый отчёт.
  • Для загруженного файла учтите: код пишется в форму с именем «Форма». Если такой формы в файле нет, генерация не выполнится и сборка остановится.
  • Проверяйте результат в 1С по шагам Проверить результат в 1С.

См. также

Сверено с продуктом: 27.10.2026

Нашли неточность? Напишите на [email protected] и укажите адрес страницы.

Smart1Spec · документация описывает текущую версию сервиса.