Здравствуйте форумчане. Дано: платформа 8.3.20.1674. Самописный отчет. В консоли СКД все работает как надо. Когда добавил отчет в расширение то появилась одна странность. Расшифровка не формируется при открытии, крутит значок "Отчет формируется" и все. При этом если нажать на "Сформировать" то все работает штатно. В чем может быть причина?
---
Более радикально.
1. Создайте любой другой простенький отчет и проверьте работу расшифровки в нем.
2. Сохраните любой имеющийся в конфигурации отчет как внешний проверьте работу расшифровки в нем.
3. Проверьте работу расшифровки в любом встроенном в конфигурацию отчете.
---
В ходе тестов выяснил, что проблема в этом куске кода, который устанавливает параметры. Теперь надо понять что с ним делать

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    УстанавливаемПараметрОтчета(Счет, "Счет");
    УстанавливаемПараметрОтчета(Организация, "Организация");
    КонецПроцедуры

    Процедура УстанавливаемПараметрОтчета(Параметр, ИмяПараметра)
    ПараметрОтчета = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
    ПараметрОтчета.Использование = Истина;
    ПараметрОтчета.Значение = Параметр;
    КонецПроцедуры
```
---
Сейчас экстрасенсы подтянутся и все разъяснят.
Хотя бы, а как внешний - расшифровка работает? Что-то подсказывает, что нет, но все же...
---
Во внешнем работает так же как и в расширении. Крутит ожидание и не формирует, но если нажать на сформировать то формируется.
---
Было ожидаемо.
Поэтому я написал про экстрасенсов с такими вводными - нужно видеть ваш отчет или хотя бы код обработчика расшифровки, если она сложная, или данные расшифровки в соответствующем поле, если простая.
---
У меня нет кода в обработчике расшифровки.
---
1. Попробуйте взять параметры в квадратные скобки:

```1c
    РегистрБухгалтерии.Хозрасчетный.Остатки(, {(Счет В ИЕРАРХИИ (&Счет))}, , {(Организация = &Организация)}) КАК ХозрасчетныйОстатки
```

2. Попробуйте сделать вариант (копию) отчета без второго набора данных, с минимумом полей и т.д. и проверить работу расшифровки на внешнем отчете.
---
Не помогло, ни один ни два.
---
Более радикально.
1. Создайте любой другой простенький отчет и проверьте работу расшифровки в нем.
2. Сохраните любой имеющийся в конфигурации отчет как внешний проверьте работу расшифровки в нем.
3. Проверьте работу расшифровки в любом встроенном в конфигурацию отчете.
---
В ходе тестов выяснил, что проблема в этом куске кода, который устанавливает параметры. Теперь надо понять что с ним делать

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    УстанавливаемПараметрОтчета(Счет, "Счет");
    УстанавливаемПараметрОтчета(Организация, "Организация");
    КонецПроцедуры

    Процедура УстанавливаемПараметрОтчета(Параметр, ИмяПараметра)
    ПараметрОтчета = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
    ПараметрОтчета.Использование = Истина;
    ПараметрОтчета.Значение = Параметр;
    КонецПроцедуры
```
---
На текущий момент поправил вот так. Выглядит как костыль, но пока других идей нет

```1c
    Процедура УстанавливаемПараметрОтчета(Параметр, ИмяПараметра, ИзменениеПараметра)

    ПараметрОтчета = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);

    Если ИзменениеПараметра Тогда
    ПараметрОтчета.Значение = Параметр
    ИначеЕсли Истина
    И Не ЗначениеЗаполнено(ПараметрОтчета.Значение) // принимает ложь при первом открытии отчета
    И Не ИзменениеПараметра
    Тогда
    ПараметрОтчета.Использование = Истина;
    ПараметрОтчета.Значение = Параметр;
    КонецЕсли;

    КонецПроцедуры
```
---
Как по мне, так и есть костыль.
Может проще было добавить проверку перед установкой значений параметров?

```1c
    Процедура ПриОткрытии(Отказ)
    Если ЗначениеЗаполнено(Счет) Тогда
    УстанавливаемПараметрОтчета(Счет, "Счет");
    КонецЕсли;

    Если ЗначениеЗаполнено(Организация) Тогда
    УстанавливаемПараметрОтчета(Организация, "Организация");
    КонецЕсли;
    КонецПроцедуры
```
---
Это почти то же самое. Здесь по хорошему надо отслеживать когда открывается расшифровка, а когда основная форма отчета, но я не знаю как это отследить.
---
Нужно отслеживать заполненные значения, а не открытие формы.
Чем это:

```1c
    Если ИзменениеПараметра Тогда
    ПараметрОтчета.Значение = Параметр
    ИначеЕсли Истина
    И Не ЗначениеЗаполнено(ПараметрОтчета.Значение) // принимает ложь при первом открытии отчета
    И Не ИзменениеПараметра
    Тогда
    ПараметрОтчета.Использование = Истина;
    ПараметрОтчета.Значение = Параметр;
    КонецЕсли;
```

отличается от этого:

```1c
    ПараметрОтчета.Использование = Истина;
    ПараметрОтчета.Значение = Параметр;
```

Только тем что, проверяется уже заполненность значения перед его установкой.
А заполнено оно бывает изначально только для расшифровки, не считая изменения.
---
отличается от этого:

Так я и не говорю, что это правильно. Вот так сделаю

```1c
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)

    Если Не ЭтаФорма.ПредставлениеТекущегоВарианта = "Расшифровка" Тогда
    УстанавливаемПараметрОтчета(Счет, "Счет");
    УстанавливаемПараметрОтчета(Организация, "Организация");
    КонецЕсли;

    КонецПроцедуры
```
---
Ну или так, но не условиями на заполненность значения параметра при его установке.
---
Спасибо за помощь.
---
Мне понравилось от и до.