Имя: Пароль:
1C
 
Отчет СКД программно (динамический список)
0 ferret
 
05.02.24
08:54
Здравствуйте. Стоит следующая задача: наложить на динамический список отбор (с помощью компоновщика настроек), обновить и вывести на экран. Столкнулась с проблемой того, что при наличие в коде данного куска:

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

выходит ошибка "Коллекция значений параметров не может изменять свой состав, так как она связана с доступными параметрами." Без этого куска (код приложу ниже) таблица значений оказывается пустой. Я вообще не понимаю, что происходит. Помогите, пожалуйста, что не так?

ХранилищеОбщихНастроек.Сохранить("Список", "Пользовательские настройки", КомпоновщикНастроекКД.Настройки, , ТекущийПользователь);
    
    СКД = Элементы.Список.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
    
    Таб = Новый ТаблицаЗначений;    
    ПроцессорВыводаВТЗ = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;    
    ПроцессорВыводаВТЗ.УстановитьОбъект(Таб);
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, КомпоновщикНастроекКД.Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;    
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
    
    Таб = ПроцессорВыводаВТЗ.Вывести(ПроцессорКомпоновкиДанных);        
    
    СписокДокументов.Очистить();
    
    Для каждого СтрокаТЗ Из Таб Цикл
      
      НовСтр = СписокДокументов.Добавить();
      ЗаполнитьЗначенияСвойств(НовСтр,СтрокаТЗ);                    
      
    КонецЦикла;
1 mikecool
 
05.02.24
08:56
смотри типовые, достаточно отбора