Тип документа в параметр (ССЫЛКА)

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

Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОстаткиНоменклатуры.Период КАК Период,
		|	ОстаткиНоменклатуры.Регистратор КАК Регистратор,
		|	ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
		|	ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
		|	ОстаткиНоменклатуры.Количество КАК Количество,
		|	ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
		|ИЗ
		|	РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
		|ГДЕ
		|	ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.";
	
	Если ТипЗнч(Накладная) = Тип("ДокументСсылка.ПриходнаяНакладная") Тогда
		Запрос.Текст = Запрос.Текст + "ПриходнаяНакладная";
	Иначе
		Запрос.Текст = Запрос.Текст + "РасходнаяНакладная";
	КонецЕсли;
Показать
По теме из базы знаний
Найденные решения
6. spacecraft 15.04.19 17:10 Сейчас в теме
(1) тип данных 1С и тип данных sql это совсем разные типы. Какой тип собираетесь передавать через параметр?
Приведенный код вполне корректный для данной ситуации. Но лучше не дописывать текст запроса в условии Если, а в текст запроса использовать подстановочное слово, для дальнейшей замены:
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОстаткиНоменклатуры.Период КАК Период,
        |    ОстаткиНоменклатуры.Регистратор КАК Регистратор,
        |    ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
        |    ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
        |    ОстаткиНоменклатуры.Количество КАК Количество,
        |    ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
        |ИЗ
        |    РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
        |ГДЕ
        |    ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.%1;";
    
    Если ТипЗнч(Накладная) = Тип("ДокументСсылка.ПриходнаяНакладная") Тогда
        Запрос.Текст = СтрШаблон(Запрос.Текст, "ПриходнаяНакладная");
    Иначе
        Запрос.Текст = СтрШаблон(Запрос.Текст, "РасходнаяНакладная");
    КонецЕсли;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. independ 1520 15.04.19 16:58 Сейчас в теме
(1) не уверен, но можно попробовать
ГДЕ ТИПЗНАЧЕНИЯ(ОстаткиНоменклатуры.Регистратор) = &Регистратор
4. zgs.asy 15.04.19 17:04 Сейчас в теме
(3) ТИПЗНАЧЕНИЯ пробовал. Не работает.
8. independ 1520 15.04.19 17:11 Сейчас в теме
(4) в свое время задавался этим вопросом, остановился на варианте Регистратор ССЫЛКА Документ.НекийДокумент, с последующей заменой строки НекийДокумент на имя документа из Метаданных.
6. spacecraft 15.04.19 17:10 Сейчас в теме
(1) тип данных 1С и тип данных sql это совсем разные типы. Какой тип собираетесь передавать через параметр?
Приведенный код вполне корректный для данной ситуации. Но лучше не дописывать текст запроса в условии Если, а в текст запроса использовать подстановочное слово, для дальнейшей замены:
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОстаткиНоменклатуры.Период КАК Период,
        |    ОстаткиНоменклатуры.Регистратор КАК Регистратор,
        |    ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
        |    ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
        |    ОстаткиНоменклатуры.Количество КАК Количество,
        |    ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
        |ИЗ
        |    РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
        |ГДЕ
        |    ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.%1;";
    
    Если ТипЗнч(Накладная) = Тип("ДокументСсылка.ПриходнаяНакладная") Тогда
        Запрос.Текст = СтрШаблон(Запрос.Текст, "ПриходнаяНакладная");
    Иначе
        Запрос.Текст = СтрШаблон(Запрос.Текст, "РасходнаяНакладная");
    КонецЕсли;
Показать
10. zgs.asy 15.04.19 17:34 Сейчас в теме
(6) Согласен. Так будет грамотнее. Спасибо!
11. tusv 211 15.04.19 17:41 Сейчас в теме
(6)Мона через временную таблицу
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    Выбрать ТипЗначения(&Накладная) как Тип поместить Типы;
        |    ОстаткиНоменклатуры.Период КАК Период,
        |    ОстаткиНоменклатуры.Регистратор КАК Регистратор,
        |    ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
        |    ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
        |    ОстаткиНоменклатуры.Количество КАК Количество,
        |    ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
        |ИЗ
        |    РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
        |ГДЕ
        |    ТипЗначения(ОстаткиНоменклатуры.Регистратор) в ( Выбрать тип из типы)";
    
   Запрос.УстановитьПараметр("Накладная",Накладная;
Показать
12. spacecraft 15.04.19 18:21 Сейчас в теме
(11) мона что?
Это не передача типа через параметр, а получение типа из ссылки во временной таблице. Хотя работать будет, только зачем sql нагружать?
13. DrZombi 290 17.04.19 09:57 Сейчас в теме
(6) Спасибо, замечательное решение.

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


 Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОстаткиНоменклатуры.Период КАК Период,
        |    ОстаткиНоменклатуры.Регистратор КАК Регистратор,
        |    ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
        |    ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
        |    ОстаткиНоменклатуры.Количество КАК Количество,
        |    ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
        |ИЗ
        |    РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
        |ГДЕ
        |    &ВариантЗапроса = 1 и ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.ПриходнаяНакладная
        |    или &ВариантЗапроса = 2 и  ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.РасходнаяНакладная";
    
Показать
14. VovkaPutin 31 13.01.22 20:23 Сейчас в теме
(6)
Документ.%1
,
добрый день. так конструктор слетает, лучше

"ВЫБРАТЬ
| ТаблицаСправочника.Наименование  КАК Наименование,
| ТаблицаСправочника.Код  КАК Код
|ИЗ
| &ТаблицаСправочника КАК ТаблицаСправочника";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса , "&ТаблицаСправочника", "Справочник." + ИмяСправочника);
15. DrDrewAvenue 26.09.22 11:36 Сейчас в теме
(14) Спасибо, помогло. Только нужно положить данные сначала во временную таблицу, и потом из неё уже забирать данные.
Как было предложено в варианте (6) - более лаконично. Короче кому как нравится.
2. user-z99999 67 15.04.19 16:47 Сейчас в теме
Так получится?
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ОстаткиНоменклатуры.Период КАК Период,
        |    ОстаткиНоменклатуры.Регистратор КАК Регистратор,
        |    ОстаткиНоменклатуры.ВидДвижения КАК ВидДвижения,
        |    ОстаткиНоменклатуры.Номенклатура КАК Номенклатура,
        |    ОстаткиНоменклатуры.Количество КАК Количество,
        |    ОстаткиНоменклатуры.МоментВремени КАК МоментВремени
        |ИЗ
        |    РегистрНакопления.ОстаткиНоменклатуры КАК ОстаткиНоменклатуры
        |ГДЕ  ";
    
    Если ТипЗнч(Накладная) = Тип("ДокументСсылка.ПриходнаяНакладная") Тогда
        Запрос.Текст = Запрос.Текст + "ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.ПриходнаяНакладная";
    Иначе
        Запрос.Текст = Запрос.Текст + "ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.РасходнаяНакладная";
    КонецЕсли;
Показать


Нужно в конце формирования запроса поставить точку останова и посмотреть текст запроса.
5. zgs.asy 15.04.19 17:06 Сейчас в теме
(2) В настоящий момент так и сделал (см. выше). Но хотелось бы параметром.
7. user-z99999 67 15.04.19 17:11 Сейчас в теме
(5)
Так получится?
|ГДЕ
|    ОстаткиНоменклатуры.Регистратор ССЫЛКА Документ.&Регистратор";

Запрос.УстановитьПараметр("Регистратор", "ПриходнаяНакладная"); 
9. zgs.asy 15.04.19 17:19 Сейчас в теме
(7)
Запрос.УстановитьПараметр("Регистратор", "ПриходнаяНакладная");

(7) Нет, конечно! :-)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот