Имя: Пароль:
1C
1С v8
Передача Объект.Компоновщик.Настройки.Отбор в СКД и формирование результирующего запроса
,
0 Xsander
 
05.12.19
16:19
Добавлен реквизит "Компоновщик" (тип - КомпоновщикНастроекКомпоновкиДанных)

На форму выведен элемент "КомпоновщикНастройкиОтбор" (ПутьКДанным - Объект.Компоновщик.Настройки.Отбор)

При создании:

ЗапросСКД = Новый Запрос;
ЗапросСКД.Текст = Объект.РеквизитТекстЗапроса;    

СКД = СоздатьСхемуКомпоновкиДанных(ЗапросСКД, , , "МакетОформления");        

ИсточникДоступныхНастроек  = Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД);

Объект.АдресКомпоновки = ПоместитьВоВременноеХранилище(СКД, Новый УникальныйИдентификатор);    
Объект.Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Объект.АдресКомпоновки));


Вопрос:
Как насройки отбора с формы передать в СКД и считать новый результирующий текст запроса?

Перепробовал всё от сюда v8: СКД: Как получить реальный запрос и результат запроса из СКД?
1 runoff_runoff
 
05.12.19
16:23
а как настройки отбора компоновщика связаны с результирующим текстом запроса СКД?
2 runoff_runoff
 
05.12.19
16:25
may be СКД.НаборыДанных.ИмяНабора.Запрос
3 Xsander
 
05.12.19
17:07
2(1): както так примерно (ПолучитьРезультатКомпоновки - этот процедура из предпоследнего ответа ссылки из (0)

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

    //СхемаКомпоновкиДанных.НаборыДанных[0].Запрос = ТекстЗапроса;    
    
    ////КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    //МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиСКД);
    ////МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиСКД,,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ХЗ= ПолучитьРезультатКомпоновки(Ложь,,СхемаКомпоновкиДанных,НастройкиСКД,,,истина);
4 toypaul
 
гуру
06.12.19
08:46
у тебя вся инфа есть для реализации. настройки грузить в макет компоновки, макет компоновки выполняешь, из макета компоновки забираешь набор из него запрос и значения параметров
5 TormozIT
 
гуру
06.12.19
08:57
Пример универсальной реализации можно посмотреть в ИР - ирОбщий.ПолучитьЗапросИзКомпоновкиЛкс()
6 yalex
 
06.12.19
09:34
http://catalog.mista.ru/public/658410/

Ещё можно добавить, что текст запроса СКД можно менять:

ТекстЗапроса = СКД.НаборыДанных[НаименованиеНабора].Запрос;
СКД.НаборыДанных[НаименованиеНабора].Запрос = СтрЗаменить(ТекстЗапроса, "ПЕРВЫЕ 100", "ПЕРВЫЕ 10")
7 Xsander
 
06.12.19
11:40
2(4):

Пишу так:

   СхемаКомпоновкиДанных = ПолучитьИзВременногоХранилища(Объект.АдресКомпоновки);
   НастройкиСКД = Объект.Компоновщик.ПолучитьНастройки();

   1) настройки грузить в макет компоновки и 2)  макет компоновки выполняешь:

   КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
   МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,НастройкиСКД);

   2) из макета компоновки забираешь набор из него запрос и значения параметров

   =>> МакетКомпоновки.НаборыДанных.Количество()=0 - ?
8 toypaul
 
гуру
06.12.19
12:04
если схема настроена правильно, все будет работать. ты же не предлагаешь нам отлаживать твой код телепатически?
9 toypaul
 
гуру
06.12.19
12:05
вот сделай все как тут https://wiki.programstore.ru/1s-skd-programmnoe-sozdanie-skd/

и должно наступить счастье
10 Xsander
 
06.12.19
14:41
2(9):

Согласно ссылки делаю так:

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

Выражение    Значение    Тип
ДобавленноеПоле.ТипЗначения        ОписаниеТипов
МакетКомпоновки    МакетКомпоновкиДанных    МакетКомпоновкиДанных
ЗначенияПараметров    ЗначенияПараметровМакетаКомпоновкиДанных    ЗначенияПараметровМакетаКомпоновкиДанных
П    ЗначениеПараметраМакетаКомпоновкиДанных    ЗначениеПараметраМакетаКомпоновкиДанных
Значение    "89753"    Строка
Имя    "П"    Строка
ИсточникиДанных    ИсточникиДанныхМакетаКомпоновкиДанных    ИсточникиДанныхМакетаКомпоновкиДанных
Макеты    ОписанияМакетовОбластейМакетаКомпоновкиДанных    ОписанияМакетовОбластейМакетаКомпоновкиДанных
Макет1    ОписаниеМакетаОбластиМакетаКомпоновкиДанных    ОписаниеМакетаОбластиМакетаКомпоновкиДанных
Имя    "Макет1"    Строка
Макет    МакетОбластиКомпоновкиДанных    МакетОбластиКомпоновкиДанных
Параметры    ПараметрыОбластиКомпоновкиДанных    ПараметрыОбластиКомпоновкиДанных
Макет2    ОписаниеМакетаОбластиМакетаКомпоновкиДанных    ОписаниеМакетаОбластиМакетаКомпоновкиДанных
Имя    "Макет2"    Строка
Макет    МакетОбластиКомпоновкиДанных    МакетОбластиКомпоновкиДанных
Параметры    ПараметрыОбластиКомпоновкиДанных    ПараметрыОбластиКомпоновкиДанных
НаборыДанных    НаборыДанныхМакетаКомпоновкиДанных    НаборыДанныхМакетаКомпоновкиДанных
СвязиНаборовДанных    СвязиНаборовДанныхМакетаКомпоновкиДанных    СвязиНаборовДанныхМакетаКомпоновкиДанных
Тело    ТелоМакетаКомпоновкиДанных    ТелоМакетаКомпоновкиДанных
12 Xsander
 
06.12.19
14:44
Как от сюда вытащить текст результирующего запроса?