Необязательный параметр в запросе 1С 8.3
Добрый день. Обычный отчет БЕЗ СКД. Ставлю необязательный параметр в фигурные скобки {(Контрагент = &Контрагент)} и не срабатывает. Почему?
"ВЫБРАТЬ
| ОборотыСБ.СтатьяОборотов КАК СтатьяОбр,
| ОборотыСБ.СуммаОборот КАК СуммаОбр,
| ОборотыСБ.Контрагент КАК Контрагент
|ИЗ
| РегистрНакопления.ОборотыСБ.Обороты(&НачалоПериода, &КонецПериода, Регистратор, {(Контрагент = &Контрагент)}) КАК ОборотыСБОбороты";
Запрос.УстановитьПараметр("НачалоПериода" , Отчет.НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода" , КонецДня(Отчет.КонецПериода));
Запрос.УстановитьПараметр("Контрагент" , Отчет.Контрагент);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ОбластьТакая_то.Параметры.Заполнить (Выборка);
ТабличныйДокумент.Вывести(ОбластьТакая_то);
КонецЦикла;
ПоказатьПо теме из базы знаний
Найденные решения
Сработала вот такая конструкция
;
"ВЫБРАТЬ
| ОборотыСБ.СтатьяОборотов КАК СтатьяОбр,
| ОборотыСБ.СуммаОборот КАК СуммаОбр,
| ОборотыСБ.Контрагент КАК Контрагент
|ИЗ
| РегистрНакопления.ОборотыСБ.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ОборотыСБОбороты
|ГДЕ
| (&НеПроверятьКонтрагента ИЛИ ОборотыСБ.Контрагент = &Контрагент)"; |
Запрос.УстановитьПараметр("НачалоПериода" , Отчет.НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода" , КонецДня(Отчет.КонецПериода));
Запрос.УстановитьПараметр("Контрагент" , Отчет.Контрагент);
Если Не ЗначениеЗаполнено (Отчет.Контрагент) Тогда
Запрос.УстановитьПараметр("НеПроверятьКонтрагента", Истина);
Иначе
Запрос.УстановитьПараметр("НеПроверятьКонтрагента", Ложь);
КонецЕсли;
;
ПоказатьОстальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Запрос.Текст = "ВЫБРАТЬ
| ОборотыСБ.СтатьяОборотов КАК СтатьяОбр,
| ОборотыСБ.СуммаОборот КАК СуммаОбр,
| ОборотыСБ.Контрагент КАК Контрагент
|ИЗ
| РегистрНакопления.ОборотыСБ.Обороты(&НачалоПериода, &КонецПериода, Регистратор";
Если ЗначениеЗаполнено(Отчет.Контрагент) Тогда
Запрос.Текст = Запрос.Текст + ", Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", Отчет.Контрагент);
КонецЕсли;
Запрос.Текст = Запрос.Текст + ") КАК ОборотыСБОбороты";
Запрос.УстановитьПараметр("НачалоПериода" , Отчет.НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода" , КонецДня(Отчет.КонецПериода));
Показать
Нет понятия "необязательных параметров" в запросе. В СКД фигурные скобки используются для ручных настроек СКД в тексте запроса. Сам запрос про них ничего не знает. Да и в СКД то что вы хотите обычно делается через отборы СКД (это более универсальный инструмент).
Если я правильно понял вашу потребность, то можно выкрутиться через условие
Если я правильно понял вашу потребность, то можно выкрутиться через условие
&Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) ИЛИ Контрагент = &Контрагент
Сработала вот такая конструкция
;
"ВЫБРАТЬ
| ОборотыСБ.СтатьяОборотов КАК СтатьяОбр,
| ОборотыСБ.СуммаОборот КАК СуммаОбр,
| ОборотыСБ.Контрагент КАК Контрагент
|ИЗ
| РегистрНакопления.ОборотыСБ.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ОборотыСБОбороты
|ГДЕ
| (&НеПроверятьКонтрагента ИЛИ ОборотыСБ.Контрагент = &Контрагент)"; |
Запрос.УстановитьПараметр("НачалоПериода" , Отчет.НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода" , КонецДня(Отчет.КонецПериода));
Запрос.УстановитьПараметр("Контрагент" , Отчет.Контрагент);
Если Не ЗначениеЗаполнено (Отчет.Контрагент) Тогда
Запрос.УстановитьПараметр("НеПроверятьКонтрагента", Истина);
Иначе
Запрос.УстановитьПараметр("НеПроверятьКонтрагента", Ложь);
КонецЕсли;
;
Показать
в типовой встречал такой вариант:
"ВЫБРАТЬ
| ОборотыСБ.СтатьяОборотов КАК СтатьяОбр,
| ОборотыСБ.СуммаОборот КАК СуммаОбр,
| ОборотыСБ.Контрагент КАК Контрагент
|ИЗ
| РегистрНакопления.ОборотыСБ.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ОборотыСБОбороты
|ГДЕ
| %допУсловие";
Запрос.УстановитьПараметр("НачалоПериода" , Отчет.НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода" , КонецДня(Отчет.КонецПериода));
Если Не ЗначениеЗаполнено (Отчет.Контрагент) Тогда
Запрос.Текст=СтрЗаменить(Запрос.текст, "%допУсловие", "");
Иначе
Запрос.Текст=СтрЗаменить(Запрос.текст, "%допУсловие", "");
Запрос.УстановитьПараметр("Контрагент" , Отчет.Контрагент);
КонецЕсли;
Показать
Как то так:
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.Текст = "ВЫБРАТЬ
| ОборотыСБ.СтатьяОборотов КАК СтатьяОбр,
| ОборотыСБ.СуммаОборот КАК СуммаОбр,
| ОборотыСБ.Контрагент КАК Контрагент
|ИЗ
| РегистрНакопления.ОборотыСБ.Обороты(&НачалоПериода, &КонецПериода, Регистратор, {(Контрагент) КАК Контрагент} ) КАК ОборотыСБОбороты
|{ГДЕ
| ОборотыСБ.Контрагент КАК Контрагент}";
Если ЗначениеЗаполнено(Отчет.Контрагент) Тогда
ПостроительЗапроса.Отбор.Добавить("Контрагент");
ПостроительЗапроса.Отбор.Контрагент.Значение = Отчет.Контрагент;
ПостроительЗапроса.Отбор.Контрагент.ВидСравнения = ВидСравнения.Равно;
ПостроительЗапроса.Отбор.Контрагент.Использование = Истина;
КонецЕсли;
ПостроительЗапроса.Выполнить();
РезультатЗапроса = ПостроительЗапроса.Результат;
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
ОбластьТакая_то.Параметры.Заполнить (Выборка);
ТабличныйДокумент.Вывести(ОбластьТакая_то);
КонецЦикла;
Показать
Я так понимаю, что вопрос задавался для того, чтобы самому на него ответить. Чужие ответы были не нужны.
Правильный ответ в (4), (7). В (11) рабочий, но не правильный ответ. Правильно задавать контрагента в параметрах виртуальной таблицы,а не в предложении ГДЕ.
Правильный ответ в (4), (7). В (11) рабочий, но не правильный ответ. Правильно задавать контрагента в параметрах виртуальной таблицы,а не в предложении ГДЕ.
Я пользуюсь такой конструкцией, работает и в параметрах виртуальных таблиц
ВЫБОР
КОГДА &НоменклатураОтбор = ЛОЖЬ
ТОГДА ИСТИНА // просто ничего не делаем с этим условием. ИСТИНА - значит всё хорошо )
ИНАЧЕ
Номенклатура = &Номенклатура
КОНЕЦ
Запрос.УстановитьПараметр("Номенклатура", Объект.Номенклатура);
Запрос.УстановитьПараметр("НоменклатураОтбор", ?(ЗначениеЗаполнено(Объект.Номенклатура),Истина,Ложь));
Показать
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)