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

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

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

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день