Можно ли передать в параметр тип документа?
Запрос.УстановитьПараметр("Регистратор", Тип("Документ.ПриходнаяНакладная"));
не работает.
В итоге сделал так:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОстаткиНоменклатуры.Период КАК Период,
    | ОстаткиНоменклатуры.Регистратор КАК Регистратор,
    | ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
    | ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
    | ОстаткиНоменклатуры.Количество КАК Количество,
    | ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
    |ИЗ
    | РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
    |ГДЕ
    | ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.";

    Если ТипЗнч(Накладная) = Тип("ДокументСсылка.ПриходнаяНакладная") Тогда
    Запрос.Текст = Запрос.Текст + "ПриходнаяНакладная";
    Иначе
    Запрос.Текст = Запрос.Текст + "РасходнаяНакладная";
    КонецЕсли;
```
---
тип данных 1С и тип данных sql это совсем разные типы. Какой тип собираетесь передавать через параметр?
Приведенный код вполне корректный для данной ситуации. Но лучше не дописывать текст запроса в условии Если, а в текст запроса использовать подстановочное слово, для дальнейшей замены:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОстаткиНоменклатуры.Период КАК Период,
    | ОстаткиНоменклатуры.Регистратор КАК Регистратор,
    | ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
    | ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
    | ОстаткиНоменклатуры.Количество КАК Количество,
    | ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
    |ИЗ
    | РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
    |ГДЕ
    | ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.%1;";

    Если ТипЗнч(Накладная) = Тип("ДокументСсылка.ПриходнаяНакладная") Тогда
    Запрос.Текст = СтрШаблон(Запрос.Текст, "ПриходнаяНакладная");
    Иначе
    Запрос.Текст = СтрШаблон(Запрос.Текст, "РасходнаяНакладная");
    КонецЕсли;
```
---
не уверен, но можно попробовать

```1c
    ГДЕ ТИПЗНАЧЕНИЯ(ОстаткиНоменклатуры.Регистратор) = &Регистратор
```
---
ТИПЗНАЧЕНИЯ пробовал. Не работает.
---
в свое время задавался этим вопросом, остановился на варианте Регистратор ССЫЛКА Документ.НекийДокумент, с последующей заменой строки НекийДокумент на имя документа из Метаданных.
---
тип данных 1С и тип данных sql это совсем разные типы. Какой тип собираетесь передавать через параметр?
Приведенный код вполне корректный для данной ситуации. Но лучше не дописывать текст запроса в условии Если, а в текст запроса использовать подстановочное слово, для дальнейшей замены:

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОстаткиНоменклатуры.Период КАК Период,
    | ОстаткиНоменклатуры.Регистратор КАК Регистратор,
    | ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
    | ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
    | ОстаткиНоменклатуры.Количество КАК Количество,
    | ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
    |ИЗ
    | РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
    |ГДЕ
    | ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.%1;";

    Если ТипЗнч(Накладная) = Тип("ДокументСсылка.ПриходнаяНакладная") Тогда
    Запрос.Текст = СтрШаблон(Запрос.Текст, "ПриходнаяНакладная");
    Иначе
    Запрос.Текст = СтрШаблон(Запрос.Текст, "РасходнаяНакладная");
    КонецЕсли;
```
---
Согласен. Так будет грамотнее. Спасибо!
---
Мона через временную таблицу

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Выбрать ТипЗначения(&Накладная) как Тип поместить Типы;
    | ОстаткиНоменклатуры.Период КАК Период,
    | ОстаткиНоменклатуры.Регистратор КАК Регистратор,
    | ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
    | ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
    | ОстаткиНоменклатуры.Количество КАК Количество,
    | ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
    |ИЗ
    | РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
    |ГДЕ
    | ТипЗначения(ОстаткиНоменклатуры.Регистратор) в ( Выбрать тип из типы)";

    Запрос.УстановитьПараметр("Накладная",Накладная;
```
---
мона что?
Это не передача типа через параметр, а получение типа из ссылки во временной таблице. Хотя работать будет, только зачем sql нагружать?
---
Спасибо, замечательное решение.

(1) Зачем так заморачиваться?
Тип, как и объект известны, пропиши все в запросе, простым текстом, раз и до следующей правки.

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОстаткиНоменклатуры.Период КАК Период,
    | ОстаткиНоменклатуры.Регистратор КАК Регистратор,
    | ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
    | ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
    | ОстаткиНоменклатуры.Количество КАК Количество,
    | ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
    |ИЗ
    | РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
    |ГДЕ
    | &ВариантЗапроса = 1 и ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.ПриходнаяНакладная
    | или &ВариантЗапроса = 2 и ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.РасходнаяНакладная";
```
---
Документ.%1,
добрый день. так конструктор слетает, лучше

```1c
    "ВЫБРАТЬ
    | ТаблицаСправочника.Наименование КАК Наименование,
    | ТаблицаСправочника.Код КАК Код
    |ИЗ
    | &ТаблицаСправочника КАК ТаблицаСправочника";
    ТекстЗапроса = СтрЗаменить(ТекстЗапроса , "&ТаблицаСправочника", "Справочник." + ИмяСправочника);
```
---
Спасибо, помогло. Только нужно положить данные сначала во временную таблицу, и потом из неё уже забирать данные.
Как было предложено в варианте (6) - более лаконично. Короче кому как нравится.
---
, не нужно, этот текст заменяется ниже
---
Так получится?

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОстаткиНоменклатуры.Период КАК Период,
    | ОстаткиНоменклатуры.Регистратор КАК Регистратор,
    | ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
    | ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
    | ОстаткиНоменклатуры.Количество КАК Количество,
    | ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
    |ИЗ
    | РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
    |ГДЕ ";

    Если ТипЗнч(Накладная) = Тип("ДокументСсылка.ПриходнаяНакладная") Тогда
    Запрос.Текст = Запрос.Текст + "ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.ПриходнаяНакладная";
    Иначе
    Запрос.Текст = Запрос.Текст + "ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.РасходнаяНакладная";
    КонецЕсли;
```

Нужно в конце формирования запроса поставить точку останова и посмотреть текст запроса.
---
В настоящий момент так и сделал (см. выше). Но хотелось бы параметром.
---
Так получится?

```1c
    |ГДЕ
    | ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.&Регистратор";

    Запрос.УстановитьПараметр("Регистратор", "ПриходнаяНакладная");
```
---
Запрос.УстановитьПараметр("Регистратор", "ПриходнаяНакладная");
(7) Нет, конечно! :-)