Имя: Пароль:
1C
1С v8
Скд программный выбор настроек
0 JuliaT99
 
28.12.16
16:32
На форме имеем переключатель ВариантОтчета

Процедура ВариантОтчетаПриИзменении(Элемент)
    СтруктураВариантов = Новый Структура;
    пВарианты = СхемаКомпоновкиДанных.ВариантыНастроек;
    Для Каждого пЭл ИЗ пВарианты Цикл
        СтруктураВариантов.Вставить(пЭл.Имя,пЭл.Настройки);
    КонецЦикла;
    
// потом выбираем нужную настройку
    
    Если ВариантОтчета=1 Тогда
        пНастройки = СтруктураВариантов.Настройка1
    Иначе
        пНастройки = СтруктураВариантов.Насчтройка2
    КонецЕсли;    
   КомпоновщикНастроек.ЗагрузитьНастройки(пНастройки);
КонецПроцедуры

Проблема в том, что выполняется только первый вариант по умолчанию, после выполнения вышенаписанной процедуры отчет зависает и потом вываливается по ошибке "Не хватает памяти". Настройка в обоих вариантах нормальные. Порядок вариантов меняла. Первый выполняется, а потом никак.
1 Franchiser
 
гуру
29.12.16
00:30
Насчтройка2 - опечатка?
2 JuliaT99
 
29.12.16
08:09
1- да опечатка, конечно.
3 Лохматые Уши
 
29.12.16
09:15
(0)
Более толковая реализация:

Процедура ПриОткрытии()
УстановитьВариантыНастроек();
КонецПроцедуры

Процедура УстановитьВариантыНастроек()
    КП = ЭлементыФормы.ДействияФормы;
    НоваяКнопка = КП.Кнопки.Вставить(1,"_ВариантыОтчетов", ТипКнопкиКоманднойПанели.Подменю, "Варианты отчетов", );
    НовоеДействие = Новый Действие("СменаВариантаНастройки");
    ч = 1;
    Для каждого Настройка Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл
        НоваяКнопка = КП.Кнопки._ВариантыОтчетов.Кнопки.Добавить("Вариант"+Строка(ч), ТипКнопкиКоманднойПанели.Действие, Настройка.Представление, НовоеДействие);
        ч = ч + 1
    КонецЦикла
КонецПроцедуры

Процедура СменаВариантаНастройки (Элемент)
    Для каждого Настройка Из СхемаКомпоновкиДанных.ВариантыНастроек Цикл
        Если Элемент.Текст = Настройка.Представление Тогда
            КомпоновщикНастроек.ЗагрузитьНастройки(Настройка.Настройки);
            Прервать
        КонецЕсли
    КонецЦикла;
    
    ЭтаФорма.Заголовок = "Траляля";
    
    //Восстановление параметров
    КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаНачала").Значение = ПараметрНачалоПериода.Значение;
    КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаОкончания").Значение = ПараметрКонецПериода.Значение;
    //
    КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаНачала").Использование = Истина;
    КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаОкончания").Использование = Истина;
КонецПроцедуры
4 JuliaT99
 
29.12.16
10:25
3 - так тоже пробовала. Воз и ныне там - при переключении настроек отчет висит.
5 LeReve
 
29.12.16
10:57
(0) Процедура ВариантОтчетаПриИзменении(Элемент)
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек.Найти(Элемент.Значение).Настройки);
        
    ПараметрыКомпановки = ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода"));
    ПараметрыКомпановки.Использование = Истина;
    ПараметрыКомпановки.Значение = НачалоДня(НачалоПериода);
    
    ПараметрыКомпановки = ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("КонецПериода"));
    ПараметрыКомпановки.Использование = Истина;
    ПараметрыКомпановки.Значение = КонецДня(КонецПериода);

КонецПроцедуры
6 Allexe
 
29.12.16
11:00
(0) А если вручную протестить эти настройки? Отчет работает не зависает?
7 JuliaT99
 
29.12.16
11:19
6 - вручную не зависает. Да и местами их меняла, по умолчанию же первый выполняется,если ничего не переключать
8 Allexe
 
29.12.16
11:21
Может на свежей платформе протестить?
9 JuliaT99
 
29.12.16
11:29
5 - спасибо. Оказывается надо было переопределить параметры начало и конец периода. Есть еще проблемы, но это уже совсем другая история. Спасибо еще раз.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший