1. zgs.asy 15.04.19 16:33 Сейчас в теме

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

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

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

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


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


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

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

(7) Нет, конечно! :-)
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

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

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

Руководитель отдела внедрения 1С
Новосибирск
зарплата от 60 000 руб. до 160 000 руб.
Полный день

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