Имя: Пароль:
1C
 
Магия 1с для КомпановщикаНастроекКомпановкиДанных
,
0 raytan
 
07.12.15
16:10
Есть отчет написанный на СКД. В нем присутствует 2 предопределенных варианта настройки. Одно из отличий: в одном варианте выводится на 2 поля больше.
В модуле формы самостоятельно реализован механизм работы в вариантами отчета, в том числе и с предопределенными. Вот код для предопределенных:

&НаКлиенте
Процедура КомандаПредопределенныеВарианты(Команда)
    ПараметрыОткрытияФормы = Новый Структура;
    ПараметрыОткрытияФормы.Вставить("ПредопределенныеВарианты", ПредопределенныеВарианты);
    ФормаВыбораПредопределенного = ПолучитьФорму("ОбщаяФорма.ФормаВыбораПредопределеногоВарианта", ПараметрыОткрытияФормы, ЭтаФорма);
    РезультатОткрытия = ФормаВыбораПредопределенного.ОткрытьМодально();
    Если РезультатОткрытия <> Неопределено Тогда
        ПолученныеНастройки = ПолучитьНастройкиПоУмолчанию(РезультатОткрытия);
        Если ПолученныеНастройки <> Неопределено Тогда
            Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(ПолученныеНастройки);
            СохранятьАвтоматически = Ложь;
            ИспользоватьПриОткрытии = Ложь;
            ВариантМодифицирован = Ложь;
            ПользовательскиеНастройкиМодифицированы = Ложь;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ПолучитьНастройкиПоУмолчанию(ПредопределенныйВариант = Неопределено)
    МойОтчет = РеквизитФормыВЗначение("Отчет");
    Если ПредопределенныйВариант = Неопределено Тогда
        НастройкиПоУмолчанию = МойОтчет.СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
        НаименованиеТекущегоВарианта = МойОтчет.СхемаКомпоновкиДанных.ВариантыНастроек[0].Представление;
    Иначе
        НайденныйВариант = МойОтчет.СхемаКомпоновкиДанных.ВариантыНастроек.Найти(ПредопределенныйВариант);
        Если НайденныйВариант <> Неопределено Тогда
            НастройкиПоУмолчанию = НайденныйВариант.Настройки;
            НаименованиеТекущегоВарианта = НайденныйВариант.Представление;
        Иначе
            НастройкиПоУмолчанию = Неопределено;
        КонецЕсли;
    КонецЕсли;
    ЗначениеВРеквизитФормы(МойОтчет, "Отчет");
    Возврат НастройкиПоУмолчанию;
КонецФункции

Проблема: после того, как загружаем один из двух предопределенных вариантов и жмем сформировать, то эти 2 поля (не появляются когда должны, и не пропадают в нужный момент). НО открыв настройка КомпоновщикаНастрок мы увидим, что там поля включенны правильно и после выхода из настройки все заработает как надо.

Магия :) Ставлю точку остановы после загрузки предопределенного варианта. В отладчике смотрю, что находится в Отчет.КомпановщикНастроекКомпановкиДанных -- там конечно вижу, что загрузилось все правильно. И вот жму продолжить, потом сформировать и отчет отрабатывает правильно !! без захода в настройки.

Была мысль, что возможно поможет обращение к серверу. Ставил после загрузки настроек липовую серверную функцию и уже на сервере обращался к компановщику. Пробовал использовать его метод Востановить() -- ничего не помогает.
Скорее всего -- это какая то фича, а не баг. Но как действовать в данной ситуации непонятно, т.к. заставлять пользователя каждый раз после загрузки предопределенного вариянта открывать/закрывать настройки не хочется..
Есть какие мысли почему так ? Возможное решение ?
1 DmitrO
 
07.12.15
16:36
ставлю на то, что выбранные поля объявлены пользовательскими настройками
2 raytan
 
08.12.15
09:13
(1) Когда я захожу в Отчет.КомпоновщикНастроек.Настройки.Выбор.Элементы во время отладки у меня все показывает верно. Также у меня вынесено в пользовательские настройки "Состав полей" отчета. соответственно в Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Элементы могу посмотреть их -- также у всех полей использование включено правильно.
Но повторюсь в этом то и волшебство, что после того как я в отладчике гляну на Компоновщик все работает как надо.
Закон Брукера: Даже маленькая практика стоит большой теории.