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

Соответствие конструкций и BSL

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

Перед чтением

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

Эта страница отвечает на вопрос «что появится в коде 1С, если я напишу эту конструкцию». Коротко: из спецификации генерируется запрос по источникам данных; всё остальное либо влияет на вид процедуры вокруг запроса, либо не попадает в код вовсе.

Назначение#

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

Где появляется сгенерированный код#

  • Код генерируется только при «Собрать .epf» (или «Собрать .erf») и только если в модели есть хотя бы один источник данных из блока data { }. Без источников собирается текущий код из Source без изменений.
  • Код вставляется в модуль формы между маркерами // >>> SPEC1C_EMIT_BLANK_BEGIN и // <<< SPEC1C_EMIT_BLANK_END. Всё между маркерами при каждой сборке заменяется; код вне маркеров не трогается. Подробнее — Генерация BSL и зоны генерации.
  • Сгенерированный код попадает только в собранный файл. В исходниках проекта (этап Source) зона остаётся шаблонной. Увидеть результат можно после скачивания: Конфигуратор → открыть обработку → модуль формы.
  • В начале зоны стоят служебные комментарии; в них есть внутренние пометки и прежнее название продукта. На работу кода они не влияют.

Как выбирается вариант кода#

Вид процедуры определяет только строка target в заголовке report:

targetЧто генерируетсяПроверено
ordinaryпроцедура Сформировать(Кнопка): запрос, цикл подсчёта строк, сообщение с числом строк. Макет, табличный документ и вывод на экран не генерируютсяживая сборка
managed&НаКлиенте Процедура Сформировать(Команда) и &НаСервере Процедура СформироватьНаСервере(): запрос, получение макета, вывод областей «Шапка» и «Строка» в ТабличныйДокументживая сборка
не указансчитается managedпо коду

section в облачной сборке на вид кода не влияет: контрольная сборка с target: ordinary и section: 1 дала тот же простой вариант, что и section: 0.

Таблица соответствия#

КонструкцияЧто появляется в BSL
spec1c { }, комментарии //ничего
report <имя>ничего
title: "…"только служебный комментарий в начале зоны
target: ordinary / managedвид процедуры — см. выше
section: Nничего (в облачной сборке)
params { … }ничего, в том числе для известных имён и КаталогВыгрузки
id = Вид.Имя в data { }таблица в ИЗ: первый источник — основная таблица, псевдоним — последняя часть пути (Справочник.КлиентскиеДоговора → КлиентскиеДоговора)
fields: A, Bстроки <Таблица>.A КАК A в ВЫБРАТЬ; поля основного источника идут первыми. В варианте managed — ещё присвоения ОбластьСтрокаМакет.Параметры.A = Выборка.A
rows = …ничего
|> left_join / inner_join / right_joinЛЕВОЕ СОЕДИНЕНИЕ <Таблица> КАК <Псевдоним> ПО … — всегда левое, см. Соединения: left_join, inner_join, right_join
where Поле between …, filter period on ПолеГДЕ <Таблица>.Поле МЕЖДУ &ДатаНачПериода И &ДатаКонПериода и две строки Запрос.УстановитьПараметр(…), см. where и filter period
layout: maket "Имя"при managed: ПолучитьМакет("Имя"); без layout — ПолучитьМакет("Макет"). При ordinary — ничего
format: xlsxничего
view { … }ничего (внутри ищутся только layout и format)
show attributes / show structureничего
include list … in form … as …ничего в собранном файле
balance, turnoversв облачной сборке код не появляется: сборка останавливается на проверке измерений, см. Сообщения об ошибках и предупреждения

Вариант обычной формы#

Спецификация с одним источником и двумя полями, target: ordinary (живая сборка, служебные комментарии вырезаны):

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

Процедуру Сформировать(Кнопка) вызывает обработчик кнопки формы, который Studio создаёт в новом файле вне зоны генерации. Текст сообщения в собранном файле начинается со служебной пометки; здесь она заменена многоточием.

С двумя источниками, соединением и периодом (target: ordinary) меняется только текст запроса и добавляется установка параметров:

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

Вариант управляемой формы#

Та же спецификация с соединением и периодом, но target: managed (живая сборка; текст запроса совпадает с предыдущим и здесь сокращён):

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

&НаСервере
Процедура СформироватьНаСервере()
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	…
	|";
	Запрос.УстановитьПараметр("ДатаНачПериода", ДатаНачПериода);
	Запрос.УстановитьПараметр("ДатаКонПериода", ДатаКонПериода);
	РезультатЗапроса = Запрос.Выполнить();

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

Что важно в этом фрагменте:

  • Две строки &НаКлиенте подряд — так выглядит собранный файл; вторую строку нужно удалить вручную.
  • Для каждого поля из fields генерируется присвоение параметру области «Строка» с тем же именем. Параметры с такими именами должны быть в макете.
  • ТабДок заполняется, но никуда не выводится: в конце процедуры стоит служебный комментарий о том, что вывод на поле формы не подключён.
  • С layout: maket "м_Раздел_1_Договоры" (живая сборка) меняется только строка ПолучитьМакет("м_Раздел_1_Договоры"); format: xlsx в той же спецификации кода не добавил.

Чего нет в собранном файле#

Сгенерированный код ссылается на объекты, которые Studio в новый файл не добавляет (проверено распаковкой собранных файлов):

Код ссылается наВ новом файлеЧто сделать в Конфигураторе
ДатаНачПериода, ДатаКонПериода (при where / filter period)реквизитов нетдобавить реквизиты типа «Дата» или убрать условие периода
макет "Макет" или имя из layout (вариант managed)макета нетдобавить макет с областями «Шапка» и «Строка»
объекты конфигурации из data { }не проверяютсяубедиться, что справочники, регистры и поля есть в вашей базе

Работа в 1С#

Ни один собранный по спецификации файл в 1С не открывался. Текст запроса синтаксически соответствует языку запросов 1С; выполнится ли он, зависит от наличия объектов и полей в вашей конфигурации. Вариант ordinary без периода ожидаемо работает как черновик запроса: выполняет запрос и сообщает число строк. Вариант managed для нового файла ожидаемо не скомпилируется (повторённая директива, код управляемой формы на обычной форме). Как проверить файл в 1С — Проверить результат в 1С.

Ограничения#

  • Генерируется только запрос по источникам и обвязка вокруг него; бизнес-логика, оформление и вывод на форму — ручная доработка.
  • Соединение в коде всегда левое; одноимённые поля разных источников попадают в выборку один раз — из источника, объявленного первым (по коду генератора).
  • Если у источников не указаны поля, в выборку попадает только Ссылка основного источника (по коду генератора).
  • Удаление блока из спецификации не всегда убирает его из генерации: модель при «Применить без сборки» не очищается. Наблюдалось живьём: условие ГДЕ … МЕЖДУ … осталось после удаления where. Надёжнее заменить спецификацию целиком или создать новый файл.
  • format: xlsx, params, show, include list, rows, section код не дают.

Полный список — Ограничения реализации.

См. также

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

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

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