Имя: Пароль:
1C
1С v8
СКД для выборки с отбором
0 OnePrg
 
11.03.21
13:12
УФ

Сделал обработку, в которой в макете разместил СКД.
Один из реквизитов обработки - компоновщик данных.
На форме обработки разместил таблицу отбора компоновщика данных. При создании на сервере инициализирую компоновщик.

Теперь нужно при нажатии по кнопке "Прочитать" выполнить СКД с заданным отбором и загрузить значение в табличную часть обработки.
Подскажите как это сделать.
1 Kassern
 
11.03.21
13:18
ДанныеРасшифровки=Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(
    СКД,
    Настройки,
    ДанныеРасшифровки,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ТаблицаЗначений = Новый ТаблицаЗначений;
    ПроцессорВывода.УстановитьОбъект(ТаблицаЗначений);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
2 OnePrg
 
11.03.21
13:43
(1) Спасибо.
3 OnePrg
 
11.03.21
13:43
Вот мой код.

&НаСервере
Процедура ПрочитатьНаСервере()

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


В ТЗ пустая таблица, ни колонок ни строк. Что не так?
4 OnePrg
 
11.03.21
14:00
5 Вафель
 
11.03.21
14:06
6 Вафель
 
11.03.21
14:07
тз = процессор. вывести
7 OnePrg
 
11.03.21
14:09
(6) Тоже пусто.
8 youalex
 
11.03.21
14:18
Структура заполнена в настройках? Выбор?
9 toypaul
 
гуру
11.03.21
14:19
(7) прежде чем в ТЗ выводить, надо убедиться что аналогичный отчет что-то выводит
10 OnePrg
 
11.03.21
14:25
Заменил компоновщик из реквизита на новый компоновщик, всё заработало

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


Теперь буду в новый компоновщик тащить отборы из компоновщика на форме.

Всем спасибо!
11 Почему 1С
 
11.03.21
15:00
Обработка = РеквизитФормыВЗначение("Объект");
ВыбранныеДокументы = Обработка.ВыбранныеДокументы;
ВыбранныеДокументы.Очистить();

если уж делать так, то нужно и
ЗначениеВРеквизитФормы после вызвать, не?
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший