Приветствую.

Подскажите такой вопрос
Есть запрос

```1c
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | Регистр.Регистратор
    |ИЗ
    | РегистрНакопления.ОстаткиАлкогольнойПродукцииЕГАИС КАК Регистр
    |ГДЕ
    | Регистр.Регистратор.Дата < &КонПериода";
```

Как можно вместо названия регистра вставить значение из параметра?

```1c
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | Регистр.Регистратор
    |ИЗ
    | РегистрНакопления.(ИмяРегистра) КАК Регистр
    |ГДЕ
    | Регистр.Регистратор.Дата<&КонПериода";
    Запрос.УстановитьПараметр("ИмяРегистра", Объект.ИмяРегистра);
```

Заранее спасибо.
---
Вот так вот:

```1c
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | Регистр.Регистратор
    |ИЗ
    | РегистрНакопления." + ПеременнаяСТекстомИмениРегистра + " КАК Регистр
    |ГДЕ
    | Регистр.Регистратор.Дата < &КонПериода";
```
---
| РегистрНакопления.[ИмяРегистра] КАК Регистр
---
Так не прокатит :-)
---
Да точно все перепутал. Извиняюсь((.
---
```1c
    Запрос.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | Регистр.Регистратор
    |ИЗ
    | РегистрНакопления.%ИмяТребуемогоРегистра% КАК Регистр
    |ГДЕ
    | Регистр.Регистратор.Дата<&КонПериода";

    Запрос.Текст = СтрЗаменить(Запрос.Текст, "%ИмяТребуемогоРегистра%", НужноеИмя);
```
---
Используй СхемуЗапроса.
---
```1c
    СтрЗаменить (Запрос.Текст,"(ИмяРегистра)",Объект.ИмяРегистра);
```
---
Замена строк в запросе сильно ухудшает его читаемость и понимание. Это зло, в общем :-)
---
Разбиение текста запроса не меньшее зло. В рамках поставленной задачи это равнозначные злы.
---
Смиренно соглашусь! О:-)
Но всё же, на мой взгляд, лучше разбить, чем заменять подстроку.
---
Это уже вопрос религии))
---
Вот так вот:

```1c
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    | Регистр.Регистратор
    |ИЗ
    | РегистрНакопления." + ПеременнаяСТекстомИмениРегистра + " КАК Регистр
    |ГДЕ
    | Регистр.Регистратор.Дата < &КонПериода";
```
---
Да, так работает.

Всем большое спасибо :)
---
С целью попадания в конструктор запросов не поможет ни то ни другое.
Вариант в запросе оставить конструкторочитабельное:
РегистрНакопления.Остатки КАК Регистр
А строка замены

```1c
    СтрЗаменить (Запрос.Текст,"РегистрНакопления.Остатки КАК Регистр","РегистрНакопления."+Объект.ИмяРегистра+" КАК Регистр");
```
---
В типовых видел что-то вроде

```1c
    &Таблица Как Таблица
```

А потом после запроса

```1c
    Запрос.УстановитьПараметр("Таблица", НужныйРегистр);
```

Но в таком случае в конструкторе, естественно, поля не буду видны и придётся писать наощупь в самом запросе
---
Я не пойму какие проблемы с заменой?
Насчет читабельности - ты ведь и так не можешь точно предвидеть что за регистр будет в запросе использоваться, если они у тебя разные могут быть. А соответственно о какой читабельности может идти речь.

Вставляй коммент после строки

```1c
    | РегистрНакопления.ОстаткиАлкогольнойПродукцииЕГАИС КАК Регистр //Для подмены
```

потом ищи в тексте и меняй на тот объект, что нужен:

```1c
    СтрЗаменить (Запрос.Текст, "РегистрНакопления.ОстаткиАлкогольнойПродукцииЕГАИС КАК Регистр //Для подмены",
    "РегистрНакопления." + Объект.ИмяРегистра + " КАК Регистр");
```

Так и в конструкторе можно будет открыть и текст понятен будет.
Только после закрытия конструктора не забудь комментарий на место вернуть.
---
Если уже прямо из параметра хотите и никак иначе, то можно объединить все таблицы регистров, но по условию тянуть данные только из выбранных.
---
```1c
    ВЫБРАТЬ РАЗЛИЧНЫЕ
    Регистр1.Регистратор
    "Регистр 1" как ИмяРегистра
    ИЗ
    РегистрНакопления.Регистр1 КАК Регистр1
    ГДЕ
    Регистр1.Регистратор.Дата<&КонПериода
    Объединить Все

    ВЫБРАТЬ РАЗЛИЧНЫЕ
    Регистр2.Регистратор
    "Регистр 2" как ИмяРегистра
    ИЗ
    РегистрНакопления.Регистр2 КАК Регистр2
    ГДЕ
    Регистр2.Регистратор.Дата<&КонПериода

    Поместить ВТ_Все

    Выбрать ВТ_Все.Регистратор,
    Выбрать ВТ_Все.ИмяРегистра,
    ГДЕ
    ВТ_Все.ИмяРегистра=&ИмяРегистра
```