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

Разрешение имён

Как Studio сопоставляет имена в спецификации — идентификаторы источников, поля, ссылки в соединениях, измерения и реквизиты — и что получается в запросе.

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

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

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

Назначение#

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

Сводка правил#

ИмяГде пишетсяНа что ссылаетсяПроверяется ли
Идентификатор источникаслева в привязке id = Путьлокальное имя внутри спецификациинет
Ссылка id.Поле в onсоединение |>источник из data и его поленет; соединение с неизвестным id пропускается при генерации
Имя поля в fieldsпод привязкойполе объекта конфигурациинет (в облачной среде)
Поле периодаwhere, filter period onполе одного из источниковнет
Измерение в bybalance, turnoversизмерение регистрада, только с загруженной конфигурацией
epf.Имяat, intoреквизит или таблица значений обработкинет
Идентификатор отчётаreportимя моделинет

Правило 1. Идентификаторы источников — локальные имена#

Идентификатор слева от = в блоке data (contracts, amendments) существует только внутри спецификации. Он нужен, чтобы соединения могли сослаться на источник.

  • Пишется латиницей (см. Лексическая структура).
  • В запрос не попадает: псевдоним таблицы в запросе — последняя часть пути метаданных. contracts = Справочник.КлиентскиеДоговора даёт … КАК КлиентскиеДоговора.
  • Основной источник — первый в блоке data. Он стоит в запросе после ИЗ, остальные присоединяются к нему.
  • Если два источника ссылаются на объекты с одинаковым последним именем (например, Справочник.Валюты и РегистрСведений.Валюты), в запросе у них будет один и тот же псевдоним. Избегайте таких сочетаний или исправьте запрос в Конфигураторе.

Правило 2. Ссылки в соединениях#

В строке |> left_join B on B.Поле1 == A.Поле2:

  • A и B — идентификаторы источников из data, Поле1 и Поле2 — поля этих источников.
  • Какой источник присоединяется, Studio определяет по условию on: присоединяется тот из двух, который не является основным. Имя после вида соединения (B сразу после left_join) не используется.
  • Если A или B не совпадает ни с одним идентификатором источника, соединение сохраняется в модели, но при генерации кода пропускается без сообщения.
  • Порядок сторон в on не важен: условие в запросе всегда записывается от присоединяемого источника к основному.
Spec1C
report contracts
data {
  contracts = Справочник.КлиентскиеДоговора
    fields: Ссылка, Код
  amendments = РегистрСведений.ДокументыИзменяющиеУсловияДоговора
    fields: Договор, Период
  rows = contracts
    |> left_join amendments on contracts.Ссылка == amendments.Договор
}

В коде получится то же условие, что и при записи amendments.Договор == contracts.Ссылка:

BSL
	|	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыИзменяющиеУсловияДоговора КАК ДокументыИзменяющиеУсловияДоговора
	|	ПО ДокументыИзменяющиеУсловияДоговора.Договор = КлиентскиеДоговора.Ссылка

Правило 3. Поля принадлежат первому источнику, где они перечислены#

Studio собирает общий список полей из строк fields всех источников, без повторов. Каждое поле в запросе берётся из первого источника, в fields которого оно встречается.

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

Правило 4. Поле периода#

  • Префикс в where contracts.ДатаДоговора отбрасывается — запоминается только имя поля ДатаДоговора.
  • В запросе поле периода берётся из первого источника, в fields которого оно есть; если ни в одном — из основного источника.
  • Условие всегда сравнивает поле с параметрами &ДатаНачПериода и &ДатаКонПериода.

Правило 5. Измерения в by#

Имена после by в balance и turnovers — имена измерений регистра, без пути: by Договор, Портфель, а не by РегистрНакопления.Активы.Договор. Studio проверяет, что каждое имя — измерение регистра, но только при загруженной конфигурации. В облачной среде проверка невозможна, и сборка с такими командами останавливается.

Правило 6. Реквизиты обработки#

epf.Имя в at и into — реквизит или таблица значений обработки. При генерации префикс epf. снимается. Существование реквизита не проверяется (см. Ссылки на метаданные).

Правило 7. Наложение на модель заменяет списки целиком#

При применении источники, соединения, команды show, include list, balance/turnovers заменяют соответствующие списки модели целиком — но только если в тексте есть хотя бы один элемент такого списка. Если список в тексте пустой, в модели остаётся прежний. Идентификатор отчёта записывается в модель, только если в ней ещё нет идентификатора. Подробно — Модель спецификации.

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

  • Ни одно имя, кроме измерений при загруженной конфигурации, не проверяется.
  • Соединение с неизвестным идентификатором молча пропускается при генерации.
  • Поля с одинаковыми именами в разных источниках попадают в запрос один раз — из первого источника.
  • Одинаковые последние части путей дают одинаковые псевдонимы.
  • Полный список ограничений — Ограничения реализации.

См. также

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

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

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