Передача нескольких параметров в один запрос

1. Amper_San 10.02.24 13:27 Сейчас в теме
Есть запрос, в него надо передать параметры. При чем передать так, что при каждом вызове запроса количество параметров меняется при соблюдении разных условий. Если нет параметра, то отбор не должен производится. Есть идеи как реализовать корректно?
По теме из базы знаний
Найденные решения
3. Onwardv 67 10.02.24 16:48 Сейчас в теме
Условие всегда должно возвращать булево. Истина или Ложь.
Запрос понимает:
1) ПустуюСсылку. В примере см. отбор по Организации.
2) Неопределено. В примере см. отбор по Контрагенту

Ну и булево тоже понимает. смотрите третий пример. Тоже любопытный вариант. Отбор по коду. Там заведен вспомогательный параметр &ОтборПоКоду

Также, на всякий случай, в запросе добавил "ПЕРВЫЕ 5", т.к. если все отборы будут пусты - вернет всю таблицу.

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

Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Onwardv 67 10.02.24 16:48 Сейчас в теме
Условие всегда должно возвращать булево. Истина или Ложь.
Запрос понимает:
1) ПустуюСсылку. В примере см. отбор по Организации.
2) Неопределено. В примере см. отбор по Контрагенту

Ну и булево тоже понимает. смотрите третий пример. Тоже любопытный вариант. Отбор по коду. Там заведен вспомогательный параметр &ОтборПоКоду

Также, на всякий случай, в запросе добавил "ПЕРВЫЕ 5", т.к. если все отборы будут пусты - вернет всю таблицу.

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

Показать
4. Amper_San 12.02.24 12:34 Сейчас в теме
(3)Решил проблему расширением текста запроса, где при соблюдении условия добавляются необходимые условия. Как то вот так получилось:) Кст, подскажите как на форме код выкладывать с правильным форматированием

Запрос = Новый Запрос();
Если НЕ Субконто1Ссылка = NULL И НЕ Субконто1Ссылка = НЕОПРЕДЕЛЕНО И НЕ Субконто1Ссылка = "" Тогда
Условие = "ГДЕ
| (ХозрасчетныйСубконтоДт1.Значение.Ссылка = &Субконто1Ссылка ИЛИ ХозрасчетныйСубконтоКт1.Значение.Ссылка = &Субконто1Ссылка) ";
Запрос.УстановитьПараметр("Субконто1Ссылка", Субконто1Ссылка);
Если НЕ Субконто2Ссылка = NULL И НЕ Субконто2Ссылка = НЕОПРЕДЕЛЕНО И НЕ Субконто2Ссылка = "" Тогда
Условие = Условие + "
| И (ХозрасчетныйСубконтоДт2.Значение.Ссылка = &Субконто2Ссылка ИЛИ ХозрасчетныйСубконтоКт2.Значение.Ссылка = &Субконто2Ссылка) ";
Запрос.УстановитьПараметр("Субконто2Ссылка", Субконто2Ссылка);
Если НЕ Субконто3Ссылка = NULL И НЕ Субконто3Ссылка = НЕОПРЕДЕЛЕНО И НЕ Субконто3Ссылка = "" Тогда
Условие = Условие + "
| И (ХозрасчетныйСубконтоДт3.Значение.Ссылка = &Субконто3Ссылка ИЛИ ХозрасчетныйСубконтоКт3.Значение.Ссылка = &Субконто3Ссылка) ";
Запрос.УстановитьПараметр("Субконто3Ссылка", Субконто3Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Запрос.Текст = "ВЫБРАТЬ
| ХозрасчетныйОсновная.Период КАК Период,
| ХозрасчетныйОсновная.Регистратор КАК Регистратор,
| ХозрасчетныйОсновная.НомерСтроки КАК НомерСтроки,
| ХозрасчетныйОсновная.Активность КАК Активность,
| ХозрасчетныйОсновная.СчетДт КАК СчетДт,
| ХозрасчетныйВидыСубконтоДт1.ВидСубконто КАК ВидСубконтоДт1,
| ХозрасчетныйВидыСубконтоДт2.ВидСубконто КАК ВидСубконтоДт2,
| ХозрасчетныйВидыСубконтоДт3.ВидСубконто КАК ВидСубконтоДт3,
| ХозрасчетныйОсновная.СчетКт КАК СчетКт,
| ХозрасчетныйВидыСубконтоКт1.ВидСубконто КАК ВидСубконтоКт1,
| ХозрасчетныйВидыСубконтоКт2.ВидСубконто КАК ВидСубконтоКт2,
| ХозрасчетныйВидыСубконтоКт3.ВидСубконто КАК ВидСубконтоКт3,
| ХозрасчетныйОсновная.Организация КАК Организация,
| ХозрасчетныйОсновная.ВалютаДт КАК ВалютаДт,
| ХозрасчетныйОсновная.ВалютаКт КАК ВалютаКт,
| ХозрасчетныйОсновная.ПодразделениеДт КАК ПодразделениеДт,
| ХозрасчетныйОсновная.ПодразделениеКт КАК ПодразделениеКт,
| ХозрасчетныйОсновная.Сумма КАК Сумма,
| ХозрасчетныйОсновная.ВалютнаяСуммаДт КАК ВалютнаяСуммаДт,
| ХозрасчетныйОсновная.ВалютнаяСуммаКт КАК ВалютнаяСуммаКт,
| ХозрасчетныйОсновная.КоличествоДт КАК КоличествоДт,
| ХозрасчетныйОсновная.КоличествоКт КАК КоличествоКт,
| ХозрасчетныйОсновная.СуммаНУДт КАК СуммаНУДт,
| ХозрасчетныйОсновная.СуммаНУКт КАК СуммаНУКт,
| ХозрасчетныйОсновная.СуммаПРДт КАК СуммаПРДт,
| ХозрасчетныйОсновная.СуммаПРКт КАК СуммаПРКт,
| ХозрасчетныйОсновная.СуммаВРДт КАК СуммаВРДт,
| ХозрасчетныйОсновная.СуммаВРКт КАК СуммаВРКт,
| ХозрасчетныйОсновная.Содержание КАК Содержание,
| ХозрасчетныйОсновная.НеКорректироватьСтоимостьАвтоматически КАК НеКорректироватьСтоимостьАвтоматически,
| ХозрасчетныйОсновная.МоментВремени КАК МоментВремени
|ПОМЕСТИТЬ ВТ_ОсновнаяТаблица
|ИЗ
| РегистрБухгалтерии.Хозрасчетный КАК ХозрасчетныйОсновная
| ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт1
| ПО ХозрасчетныйОсновная.СчетДт = ХозрасчетныйВидыСубконтоДт1.Ссылка
| И (ХозрасчетныйВидыСубконтоДт1.НомерСтроки = 1)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт1
| ПО ХозрасчетныйОсновная.СчетКт = ХозрасчетныйВидыСубконтоКт1.Ссылка
| И (ХозрасчетныйВидыСубконтоКт1.НомерСтроки = 1)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт2
| ПО ХозрасчетныйОсновная.СчетДт = ХозрасчетныйВидыСубконтоДт2.Ссылка
| И (ХозрасчетныйВидыСубконтоДт2.НомерСтроки = 2)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт2
| ПО ХозрасчетныйОсновная.СчетКт = ХозрасчетныйВидыСубконтоКт2.Ссылка
| И (ХозрасчетныйВидыСубконтоКт2.НомерСтроки = 2)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоДт3
| ПО ХозрасчетныйОсновная.СчетДт = ХозрасчетныйВидыСубконтоДт3.Ссылка
| И (ХозрасчетныйВидыСубконтоДт3.НомерСтроки = 3)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный.ВидыСубконто КАК ХозрасчетныйВидыСубконтоКт3
| ПО ХозрасчетныйОсновная.СчетКт = ХозрасчетныйВидыСубконтоКт3.Ссылка
| И (ХозрасчетныйВидыСубконтоКт3.НомерСтроки = 3)
|ГДЕ
| ХозрасчетныйОсновная.Организация = &Организация
| И ХозрасчетныйОсновная.Период МЕЖДУ &НачалоПериода И &КонецПериода
| И (ХозрасчетныйОсновная.СчетДт В ИЕРАРХИИ (&Счет)
| ИЛИ ХозрасчетныйОсновная.СчетКт В ИЕРАРХИИ (&Счет))
|
|ИНДЕКСИРОВАТЬ ПО
| Регистратор,
| НомерСтроки
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| ВТ_ОсновнаяТаблица.Период КАК Период,
| ВТ_ОсновнаяТаблица.Регистратор КАК Регистратор,
| ВТ_ОсновнаяТаблица.НомерСтроки КАК НомерСтроки,
| ВТ_ОсновнаяТаблица.Активность КАК Активность,
| ВТ_ОсновнаяТаблица.СчетДт КАК СчетДт,
| ХозрасчетныйСубконтоДт1.Значение КАК СубконтоДт1,
| ВТ_ОсновнаяТаблица.ВидСубконтоДт1 КАК ВидСубконтоДт1,
| ХозрасчетныйСубконтоДт2.Значение КАК СубконтоДт2,
| ВТ_ОсновнаяТаблица.ВидСубконтоДт2 КАК ВидСубконтоДт2,
| ХозрасчетныйСубконтоДт3.Значение КАК СубконтоДт3,
| ВТ_ОсновнаяТаблица.ВидСубконтоДт3 КАК ВидСубконтоДт3,
| ВТ_ОсновнаяТаблица.СчетКт КАК СчетКт,
| ХозрасчетныйСубконтоКт1.Значение КАК СубконтоКт1,
| ВТ_ОсновнаяТаблица.ВидСубконтоКт1 КАК ВидСубконтоКт1,
| ХозрасчетныйСубконтоКт2.Значение КАК СубконтоКт2,
| ВТ_ОсновнаяТаблица.ВидСубконтоКт2 КАК ВидСубконтоКт2,
| ХозрасчетныйСубконтоКт3.Значение КАК СубконтоКт3,
| ВТ_ОсновнаяТаблица.ВидСубконтоКт3 КАК ВидСубконтоКт3,
| ВТ_ОсновнаяТаблица.Организация КАК Организация,
| ВТ_ОсновнаяТаблица.ВалютаДт КАК ВалютаДт,
| ВТ_ОсновнаяТаблица.ВалютаКт КАК ВалютаКт,
| ВТ_ОсновнаяТаблица.ПодразделениеДт КАК ПодразделениеДт,
| ВТ_ОсновнаяТаблица.ПодразделениеКт КАК ПодразделениеКт,
| ВТ_ОсновнаяТаблица.Сумма КАК Сумма,
| ВТ_ОсновнаяТаблица.ВалютнаяСуммаДт КАК ВалютнаяСуммаДт,
| ВТ_ОсновнаяТаблица.ВалютнаяСуммаКт КАК ВалютнаяСуммаКт,
| ВТ_ОсновнаяТаблица.КоличествоДт КАК КоличествоДт,
| ВТ_ОсновнаяТаблица.КоличествоКт КАК КоличествоКт,
| ВТ_ОсновнаяТаблица.СуммаНУДт КАК СуммаНУДт,
| ВТ_ОсновнаяТаблица.СуммаНУКт КАК СуммаНУКт,
| ВТ_ОсновнаяТаблица.СуммаПРДт КАК СуммаПРДт,
| ВТ_ОсновнаяТаблица.СуммаПРКт КАК СуммаПРКт,
| ВТ_ОсновнаяТаблица.СуммаВРДт КАК СуммаВРДт,
| ВТ_ОсновнаяТаблица.СуммаВРКт КАК СуммаВРКт,
| ВТ_ОсновнаяТаблица.Содержание КАК Содержание,
| ВТ_ОсновнаяТаблица.НеКорректироватьСтоимостьАвтоматически КАК НеКорректироватьСтоимостьАвтоматически,
| ВТ_ОсновнаяТаблица.МоментВремени КАК МоментВремени
|ИЗ
| ВТ_ОсновнаяТаблица КАК ВТ_ОсновнаяТаблица
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоДт1
| ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоДт1.Регистратор
| И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоДт1.НомерСтроки
| И ВТ_ОсновнаяТаблица.ВидСубконтоДт1 = ХозрасчетныйСубконтоДт1.Вид
| И (ХозрасчетныйСубконтоДт1.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоДт2
| ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоДт2.Регистратор
| И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоДт2.НомерСтроки
| И ВТ_ОсновнаяТаблица.ВидСубконтоДт2 = ХозрасчетныйСубконтоДт2.Вид
| И (ХозрасчетныйСубконтоДт2.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоДт3
| ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоДт3.Регистратор
| И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоДт3.НомерСтроки
| И ВТ_ОсновнаяТаблица.ВидСубконтоДт3 = ХозрасчетныйСубконтоДт3.Вид
| И (ХозрасчетныйСубконтоДт3.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Дебет))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоКт1
| ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоКт1.Регистратор
| И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоКт1.НомерСтроки
| И ВТ_ОсновнаяТаблица.ВидСубконтоКт1 = ХозрасчетныйСубконтоКт1.Вид
| И (ХозрасчетныйСубконтоКт1.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоКт2
| ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоКт2.Регистратор
| И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоКт2.НомерСтроки
| И ВТ_ОсновнаяТаблица.ВидСубконтоКт2 = ХозрасчетныйСубконтоКт2.Вид
| И (ХозрасчетныйСубконтоКт2.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Субконто КАК ХозрасчетныйСубконтоКт3
| ПО ВТ_ОсновнаяТаблица.Регистратор = ХозрасчетныйСубконтоКт3.Регистратор
| И ВТ_ОсновнаяТаблица.НомерСтроки = ХозрасчетныйСубконтоКт3.НомерСтроки
| И ВТ_ОсновнаяТаблица.ВидСубконтоКт3 = ХозрасчетныйСубконтоКт3.Вид
| И (ХозрасчетныйСубконтоКт3.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияБухгалтерии.Кредит))
|"+ Условие ;

Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Запрос.УстановитьПараметр("Счет",Счет);
Запрос.УстановитьПараметр("Организация", Организация);
Выборка = Запрос.Выполнить().Выгрузить();
Оставьте свое сообщение

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