Соответствие конструкций и 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 (живая сборка, служебные комментарии вырезаны):
// >>> SPEC1C_EMIT_BLANK_BEGIN
Процедура Сформировать(Кнопка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КлиентскиеДоговора.Ссылка КАК Ссылка,
| КлиентскиеДоговора.Код КАК Код
|ИЗ
| Справочник.КлиентскиеДоговора КАК КлиентскиеДоговора
|";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
н = 0;
Пока Выборка.Следующий() Цикл
н = н + 1;
КонецЦикла;
Сообщить("… строк " + Строка(н));
КонецПроцедуры
// <<< SPEC1C_EMIT_BLANK_ENDПроцедуру Сформировать(Кнопка) вызывает обработчик кнопки формы, который Studio создаёт в новом файле вне зоны генерации. Текст сообщения в собранном файле начинается со служебной пометки; здесь она заменена многоточием.
С двумя источниками, соединением и периодом (target: ordinary) меняется только текст запроса и добавляется установка параметров:
"ВЫБРАТЬ
| КлиентскиеДоговора.Ссылка КАК Ссылка,
| КлиентскиеДоговора.Код КАК Код,
| КлиентскиеДоговора.ДатаДоговора КАК ДатаДоговора,
| КлиентскиеДоговора.ВидДоговора КАК ВидДоговора,
| ДокументыИзменяющиеУсловияДоговора.Договор КАК Договор,
| ДокументыИзменяющиеУсловияДоговора.Период КАК Период,
| ДокументыИзменяющиеУсловияДоговора.АвторЗаписи КАК АвторЗаписи,
| ДокументыИзменяющиеУсловияДоговора.ДатаДокумента КАК ДатаДокумента
|ИЗ
| Справочник.КлиентскиеДоговора КАК КлиентскиеДоговора
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыИзменяющиеУсловияДоговора КАК ДокументыИзменяющиеУсловияДоговора
| ПО ДокументыИзменяющиеУсловияДоговора.Договор = КлиентскиеДоговора.Ссылка
|ГДЕ
| КлиентскиеДоговора.ДатаДоговора МЕЖДУ &ДатаНачПериода И &ДатаКонПериода
|";
Запрос.УстановитьПараметр("ДатаНачПериода", ДатаНачПериода);
Запрос.УстановитьПараметр("ДатаКонПериода", ДатаКонПериода);
РезультатЗапроса = Запрос.Выполнить();Вариант управляемой формы#
Та же спецификация с соединением и периодом, но target: managed (живая сборка; текст запроса совпадает с предыдущим и здесь сокращён):
// >>> 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код не дают.
Полный список — Ограничения реализации.
См. также
- Генерация BSL и зоны генерации Понятие
- Матрица поддержки конструкций Справочник
- Соединения: left_join, inner_join, right_join Справочник
- where и filter period Справочник
- Ограничения реализации Справочник
Сверено с продуктом: 27.10.2026