Имею в СКД НаборДанныхЗапрос, в котором есть параметр &Валюта:
"
...

```1c
    ИЗ
    ...
    РегистрСведений.КурсыВалют.СрезПоследних(&ДатаОкончания, Валюта = &Валюта) КАК КурсыВалютСрезПоследних
```

..."

В конструкторе СКД, на закладке Параметры заполняется по умолчанию:

```1c
    Имя = "Валюта"
    Значение = "Валюта"
    Доступные типы = "СправочникСсылка.Валюты"
    Значение = "Справочник.Валюты.ПустаяСсылка"
```

Хочу в поле "Выражение" поместить выражение, которое бы при незаполненной валюте считала бы валютой рубли (чтобы отчет что-то показал, если пользователь его открыл и сразу нажал "Сформировать", ничего не заполняя).

Не очень понятна логика проверок.

Что я перепробовал:

1. Игрался дополнительно в конструкторе СКД, на закладке "Настройки" вариантами заполнения параметра "Валюта" с целью получить ПустуюСсылку или Неопределено.
2. Пробовал разные выражения...

.. Нашел, что если в поле "Выражение" поместить "Справочники.Валюты.НайтиПоКоду("810")", то отчет считает все в рублях. Всегда. Игнорируя пользователя :)
.. Нашел, что конструкция "Если .. КонецЕсли" не работает, нашел, что работает конструкция "Выбор Когда Тогда Конец" :)

А вот с условием беда...
1. "Выбор Когда &Валюта=Справочники.Валюты.ПустаяСсылка() Тогда Справочники.Валюты.НайтиПоКоду("810") Конец" - не работает никак (ошибок не выдает, рубли не подхватывает)
2. "Выбор Когда &Валюта=Значение(Справочник.Валюты.ПустаяСсылка) Тогда Справочники.Валюты.НайтиПоКоду("810") Конец" - не работает никак
3. "Выбор Когда &Валюта Есть Null Тогда Справочники.Валюты.НайтиПоКоду("810") Конец" - не работает никак
4. "Выбор Когда НЕ ЗначениеЗаполнено(&Валюта) Тогда Справочники.Валюты.НайтиПоКоду("810") Конец" - работает всегда на рубли, даже когда параметр выбран (другой валютой)

Судя по последней, складывается такое впечатление, что я выбираю одно, а проверяю другое...

Как бы поставить правильное условие?
Может быть как-то надо обращаться не к &Валюта, а как-нибудь, типа, СКД.Параметры.Валюта?
---
Процедура ПриОткрытии()

    ЭлементПараметраДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Валюта");
    ЭлементПараметраДанных.Значение = Справочники.Валюты.НайтиПоКоду("810");

КонецПроцедуры
---
Открываем в консоле отчётов твою схему скд.
Задаём значение параметра (выбираем рубли).
Сохраняем схему.
в режиме конфигуратора открываем сохранённую схему (заместо старой). В параметре ты увидишь ГУИД твоей валюты вместо наименования.
Вот такой отчёт теоретически будет иметь предустановленный параметр.
---
Доброго времени суток, коллеги! Апну тему, видимо в последних версиях платформы (у меня 8.3.14.1565, БП 3.0.67.67) поменяли это поведение... ТС хотел поинтересоваться как добились того, чтобы отрабатывало выражение НайтиПоКоду?
По аналогии с Вашей ситуацией - имею СКД с параметром &Счет, пытаюсь делать значение = ПланСчетов.Хозрасчетный.ПустаяСсылка, Выражение = "ПланыСчетов.Хозрасчетный.НайтиПоКоду(""НФП.90.2"")" - эрреакции - 0 :-(
Попытался сделать как рекомендовал коллега в (2) - не работает, т.к. в значение параметра устанавливается ГУИД (не преобразуется в значение счёта..).
Также попытался сделать как рекомендовали в (4), но видимо не до конца понял где выбор писать - в выражении параметра или в тексте запроса? Пытался в выражении - ругается что параметр не задан.. Писал в запросе - не ругается, но и не работает :-)
Возможно это нюанс, связанный именно со счетами, но в принципе различия план счетов/справочник не должно быть поиск по коду, он и в Африке поиск по коду :-).
ЗЫ. Про вариант (3) знаю, но опять-таки целых 3 минуса:
1) Выражения
ЭлементПараметраДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Валюта");
ЭлементПараметраДанных.Значение = Справочники.Валюты.НайтиПоКоду("810");
не заполнят параметр, если хочется сделать "красиво" - оставить возможность пользователю поменять предзаполненный параметр, надо будет добавить ветку про идентификацию пользовательской настройки (в принципе самый малокритичный минус, но тем не менее имеет место быть);
2) недостаточно сделать только форму отчёта, необходимо создавать еще форму настроек, т.к. иначе при нажатии кнопки "Настройки" будет ошибка - Не передан служебный параметр "Настройка" (нюанс платформы, не может автоматически сама сгенерировать форму, хотя если подсунуть автоматом сгенерированную - ест..);
3) Самый серьёзный минус - даже если не заходить в настройки и не менять ничего - система считает вариант отчёта изменённым и при закрытии формы пытается сохранить его.. Костыль от этого конечно есть - поставить флаг стандартной обработки в ложь перед закрытием, но тем самым теряется смысл СКД - сохранение последних выбранных значений...
Если кто нашел более приемлемый вариант решения - поделитесь пожалуйста
ЗЫЫ. Пытался помещать заполнение параметров в другие обработчики (ПриСозданииНаСервере, ПередЗагрузкойДанныхНастройки) - тоже эффекта 0..
---
Процедура ПриОткрытии()

    ЭлементПараметраДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Валюта");
    ЭлементПараметраДанных.Значение = Справочники.Валюты.НайтиПоКоду("810");

КонецПроцедуры
---
Только не "ПриОткрытии" а в модуле объекта "ПриКомпоновкеРезультата".
---
Попробуй так - заведи второй параметр &ВалютаПоумолчанию, установи для нее нужное значение
А для &Валюта напиши:

```1c
    ВЫБОР КОГДА &Валюта=Справочники.Валюты.ПустаяСсылка()
    Тогда &ВалютаПоумолчанию
    ИНАЧЕ &Валюта
    КОНЕЦ
```
---
В параметрах надо выставить ссылку пустую на справочник, иначе туда прихожит непонятное значение.
У меня работает определение пустых параметров без проблем.
---
Вопрос не стоит в том как присвоить параметру значение конкретной валюты - он нормально устанавливается кодом "Справочники.Валюты.НайтиПоКоду("810")".
Вопрос в том, что он реагирует ни на условие
"Выбор Когда &Валюта=Справочники.Валюты.ПустаяСсылка() Тогда Справочники.Валюты.НайтиПоКоду("810") Конец"
---
Спасибо!
---
Ну вот сам спросил - сам ответил) Оставлю - мб кому сгодится, в ПриОткрытии() на клиенте добавить:
 ЭтаФорма.ПользовательскиеНастройкиМодифицированы = Ложь;
 ЭтотОбъект.ВариантМодифицирован = Ложь;
---
А если попробовать "ВЫБОР КОГДА &Валюта = ЗНАЧЕНИЕ(Справокник.Валюта.ПустаяСсылка) ТОГДА ..." ?