Разрешение имён
Как Studio сопоставляет имена в спецификации — идентификаторы источников, поля, ссылки в соединениях, измерения и реквизиты — и что получается в запросе.
Перед чтением
- Ссылки на метаданные Справочник
На этой странице
- Назначение
- Сводка правил
- Правило 1. Идентификаторы источников — локальные имена
- Правило 2. Ссылки в соединениях
- Правило 3. Поля принадлежат первому источнику, где они перечислены
- Правило 4. Поле периода
- Правило 5. Измерения в by
- Правило 6. Реквизиты обработки
- Правило 7. Наложение на модель заменяет списки целиком
- Ограничения
В спецификации встречаются имена разного рода: идентификаторы источников, имена полей, измерений и реквизитов. Studio сопоставляет их по простым правилам и почти никогда не сообщает, если сопоставить не удалось.
Назначение#
Страница объясняет, на что ссылается каждое имя и как оно превращается в имя в запросе. Это помогает понять, почему поле оказалось не у того источника или почему соединение пропало из кода.
Сводка правил#
| Имя | Где пишется | На что ссылается | Проверяется ли |
|---|---|---|---|
| Идентификатор источника | слева в привязке id = Путь | локальное имя внутри спецификации | нет |
Ссылка id.Поле в on | соединение |> | источник из data и его поле | нет; соединение с неизвестным id пропускается при генерации |
Имя поля в fields | под привязкой | поле объекта конфигурации | нет (в облачной среде) |
| Поле периода | where, filter period on | поле одного из источников | нет |
Измерение в by | balance, 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не важен: условие в запросе всегда записывается от присоединяемого источника к основному.
report contracts
data {
contracts = Справочник.КлиентскиеДоговора
fields: Ссылка, Код
amendments = РегистрСведений.ДокументыИзменяющиеУсловияДоговора
fields: Договор, Период
rows = contracts
|> left_join amendments on contracts.Ссылка == amendments.Договор
}В коде получится то же условие, что и при записи amendments.Договор == contracts.Ссылка:
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДокументыИзменяющиеУсловияДоговора КАК ДокументыИзменяющиеУсловияДоговора
| ПО ДокументыИзменяющиеУсловияДоговора.Договор = КлиентскиеДоговора.СсылкаПравило 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 заменяют соответствующие списки модели целиком — но только если в тексте есть хотя бы один элемент такого списка. Если список в тексте пустой, в модели остаётся прежний. Идентификатор отчёта записывается в модель, только если в ней ещё нет идентификатора. Подробно — Модель спецификации.
Ограничения#
- Ни одно имя, кроме измерений при загруженной конфигурации, не проверяется.
- Соединение с неизвестным идентификатором молча пропускается при генерации.
- Поля с одинаковыми именами в разных источниках попадают в запрос один раз — из первого источника.
- Одинаковые последние части путей дают одинаковые псевдонимы.
- Полный список ограничений — Ограничения реализации.
См. также
- Модель спецификации Справочник
- Соединения: left_join, inner_join, right_join Справочник
- fields Справочник
- where и filter period Справочник
- Структура файла и вложенность Справочник
Сверено с продуктом: 27.10.2026