Перейти к основному содержимому

Предложение ПОРОДИТЬ

Предложение ПОРОДИТЬ задает имя типа, порождаемого литералом запроса типа.

Синтаксис

Предложение имеет следующий синтаксис:

[ПОРОДИТЬ
имя-типа-структуры]

Если вы хотите обрабатывать результат типизированного запроса в другом методе, то вам понадобится заранее знать тип строки результата запроса, чтобы написать вызов другого метода. Однако по умолчанию у тип-строки-результата-запроса нет имени.

ДругойМетод(РезультатЗапроса<тип-строки-результата-запроса>)

Вы можете решить эту проблему с помощью явного указания имени типа строки результата запроса. Используйте для этого синтаксис ПОРОДИТЬ, в котором укажите нужное имя.

примечание

Вы также можете использовать существующий тип в качестве типа строки результата запроса. Для этого в запросе укажите предложение ЗАПОЛНИТЬ (подробнее).

// Задаем текст запроса
знч Запрос = Запрос{ВЫБРАТЬ
Сотрудники.Ссылка КАК Ссылка,
Сотрудники.ФИО КАК ФИО
ПОРОДИТЬ
Сотрудник
ИЗ
Сотрудники КАК Сотрудники}

// Передаем результат запроса в другой метод
ДругойМетод(Запрос.Выполнить())

метод ДругойМетод(РезультатЗапроса: РезультатЗапроса<Сотрудник>)
;

В этом примере явно задается имя типа строки результата запроса — Сотрудник. И это же имя типа используется для параметризации обобщенного типа в параметре метода ДругойМетод().

Результирующее имя типа формируется как имя типа, владеющего модулем (в котором литерал запроса, в данном случае — Приложение), и, через точку, имя типа строки результата, указанное в запросе (Приложение.Сотрудник). В рамках того же модуля, в котором написан запрос, можно обращаться к типу по локальному имени — без имени типа, владеющего модулем (Сотрудник).

примечание

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

Область видимости порождаемой запросом структуры

Вы можете явно задать область видимости для порождаемой запросом структуры. Для этого добавьте необходимую аннотацию видимости перед ключевым словом ПОРОДИТЬ, например:

знч Запрос = Запрос{ВЫБРАТЬ 
Сотрудники.Ссылка КАК Ссылка,
Сотрудники.ФИО КАК ФИО
ИЗ
Сотрудники КАК Сотрудники
@ВПроекте
ПОРОДИТЬ Сотрудник}

Если область видимости не указана, она совпадает с областью видимости метода или константы, в которой объявлен литерал запроса.

Особенности и ограничения использования аннотаций видимости

  • Каждая аннотация относится только к следующему за ней выражению запроса.
  • Аннотации можно указывать только в запросах выборки данных (ВЫБРАТЬ).
  • Аннотации не влияют на область видимости временных таблиц, в том числе порожденных с помощью запроса ВЫБРАТЬ ... ПОМЕСТИТЬ.