Имя: Пароль:
1C
 
Отборы в СКД набор данных объект
0 Zakella86
 
02.08.16
17:17
Добрый день. Есть вопрос к уважаемым ветеранам.
Сделал отчет СКД через набор данных объект. Обработал ТЗ и выгрузил в отчет. Все работает хорошо. Одна проблемка, это отбор. Отбор не работает. Именно с набором данных объект. Помогите пожалуйста . Вот код запроса. Есть подозрение что нужно еще что то в компоновщик прописать. Но что не могу понять. Т.е к примеру у меня в быстром отборе есть номенклатура, но отбора в таблице не делает. Спасибо

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
        
    
    СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    НачалоПериода=КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти("86c867de-73bc-4b8e-992a-77744461e8a7");
    КонецПериода=КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти("8b3b2d35-7494-4ebc-8d80-a50e2f35c6b5");
    Филиал=КомпоновщикНастроек.ФиксированныеНастройки.ПараметрыДанных.Элементы.найти("Филиал");    
    
    тзСписокРегистраторов=Новый ТаблицаЗначений;
    //тзСписокРегистраторов.Колонки.Добавить("Регистратор");
    тзСписокРегистраторов.Колонки.Добавить("СуммаСебестоимости",Новый ОписаниеТипов("Число"));
    тзСписокРегистраторов.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число"));
    тзСписокРегистраторов.Колонки.Добавить("Номенклатура",Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
    тзСписокРегистраторов.Колонки.Добавить("Склад",Новый ОписаниеТипов("СправочникСсылка.Склады"));
    
    
    //тзМатериалы=Новый ТаблицаЗначений;
    //тзМатериалы.Колонки.Добавить("Материал");
    //тзМатериалы.Колонки.Добавить("Продукция");
    //тзМатериалы.Колонки.Добавить("Сумма",Новый ОписаниеТипов("Число"));
    //тзМатериалы.Колонки.Добавить("Количество",Новый ОписаниеТипов("Число"));


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

КонецПроцедуры
1 ИсчадиеADO
 
02.08.16
17:29
1. да все там должно работать. а) посмотри в отладке Настройки.Отбор.Элементы. Причем у них "использование" должно быть в истину
2. ты сначала формируешь все-все, а потом отбираешь только, а это не правильно. Нужно попытаться все в 1 пакетный запрос запихать в СКД. Если с ценами проблема, то гугли темы "Срез последних на каждую дату"
2 Zakella86
 
02.08.16
17:32
да ты прав
в  Настройки.Отбор.Элементы отбор по номенклатуре стоит ложь, но в быстром отборе я поставил галочку и указал отбор. Как сделать что бы он стоял в положении истина?
3 ИсчадиеADO
 
02.08.16
17:35
(2) нужно уже реализацию смотреть
4 Zakella86
 
02.08.16
17:38
не, он  в самом начале до загрузки ТЗ не дает Использование =истина. Но когда ставлю галочку Использование не в быстром отборе а в настройках СКД , тогда стоит Использование истина
5 Zakella86
 
03.08.16
16:20
есть у кого то еще идеи?
6 Nuobu
 
03.08.16
16:22
(4) Быстрый отбор это не Настройки.Отбор...., это - ПользовательскиеНастройки.Отбор. Глянь там.
7 Zakella86
 
03.08.16
16:31
КомпоновщикНастроек.ПользовательскиеНастройки там только параметры, но отбора нет. или я не там ищу?
8 Zakella86
 
03.08.16
16:38
мне кажется дело в этой строке
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

в настройках отбор по Номенклатура стоит ЛОЖЬ, хотя на форме быстрого отбора стоит галочка
9 Zakella86
 
03.08.16
17:01
в общем нашел тут кое что
настройки быстрого отбора находятся в
КомпоновщикНастроек.ПользовательскиеНастройки.Элементы. Там стоит отбор. Но тип у них ПользовательскиеНастройкиКомпоновкиДанных.

когда выполняется строка
КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
дает ошибку, на второй параметр. Так как работает там только  
НастройкиКомпоновкиДанных .
Т.е когда я захожу изменить вариант и ставлю отбор то может работаеть, с быстрого отбора не работает. Что еще можно сделать?
10 Zakella86
 
03.08.16
17:36
все решил , пользовательские настройки получаются через код
Настройки=КомпоновщикНастроек.ПолучитьНастройки();
тема закрыта . спасибо