Имя: Пароль:
1C
1С v8
Отбор в СКД
0 Andrey2C
 
02.04.15
14:23
Здравствуйте. Делаю отчет в СКД. В отчете создал Табличную часть. Туда скомпоновал все нужные мне данные и вставил в СКД. Пишу так:
НаборДанных = Новый Структура;
    НаборДанных.Вставить("ВнешниеДанные", ВнешниеДанные);
    СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");    
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,  Настройки);
    
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, НаборДанных);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ЭлементыФормы.ТабДок);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    ЭлементыФормы.ТабДок.ПоказатьУровеньГруппировокСтрок(0);

Потом установил в настройках СКД Отбор по коду справочника. Если задаю в настройках СКД(Режим конфигуратора) значение то отбор срабатывает как нужно. А если тоже значение задаю в режиме 1С Предприятие отбор не срабатывает! В чем может быть дело?
1 Andrey2C
 
02.04.15
14:28
Т.е. работают только те настройки отбора, которые задал в Конфигураторе.
2 ЧеловекДуши
 
02.04.15
14:28
(0) Трудно сказать. Но вот тебе пример.

Пример использования внешнего набора данных
http://1cskd.ru/2010/07/vneshnie-nabori-dannyh/
3 ЧеловекДуши
 
02.04.15
14:29
(1) Фигня
4 ЧеловекДуши
 
02.04.15
14:32
+(2) Вот часть кода который добавлен по коду из ссылки

Если НастройкиКомпоновщика.ПараметрыДанных.Элементы.Количество()>0 ТОгда
Для каждого Элемент Из НастройкиКомпоновщика.ПараметрыДанных.Элементы Цикл
    
    Если Сокрлп(Элемент.Параметр)="ВариантЗапроса" тогда
        Элемент.Использование = Истина;
        
        //Отобразим для пользователя
        НайденЭлемент = ЭлемПользНастр.Найти(Элемент.ИдентификаторПользовательскойНастройки);
        Если НайденЭлемент <> Неопределено Тогда
            НайденЭлемент.Использование = Истина;
        КонецЕсли;
        
    //ВариантЗапроса2
    ИначеЕсли Сокрлп(Элемент.Параметр)="Период" тогда
        Элемент.Значение = ТекущаяДата();
        
        //Отобразим для пользователя
        НайденЭлемент = ЭлемПользНастр.Найти(Элемент.ИдентификаторПользовательскойНастройки);
        Если НайденЭлемент <> Неопределено Тогда
            НайденЭлемент.Значение = Элемент.Значение;
        КонецЕсли;
        
    ИначеЕсли Сокрлп(Элемент.Параметр)="Средний" тогда
        Если Элемент.Значение = 0 Тогда
            СреднийОбъемЗаказа = Константы.Средний.Получить();
            Если СреднийОбъемЗаказа = 0 Тогда
                СреднийОбъемЗаказа = 0.025; //м3 - метры кубические
            КонецЕсли;
            Элемент.Значение = СреднийОбъемЗаказа;
        КонецЕсли;
        
        Элемент.Использование = Истина;
        
        //Отобразим для пользователя
        НайденЭлемент = ЭлемПользНастр.Найти(Элемент.ИдентификаторПользовательскойНастройки);
        Если НайденЭлемент <> Неопределено Тогда
            НайденЭлемент.Значение = Элемент.Значение;
            НайденЭлемент.Использование = Элемент.Использование;
        КонецЕсли;
        
    КонецЕсли;
    
КонецЦикла;
КонецЕсли;
5 Andrey2C
 
02.04.15
14:40
(4) А где там этот код? Я такого не нашел там
6 Andrey2C
 
02.04.15
14:45
Где его использовать то этот код?
7 ЧеловекДуши
 
02.04.15
14:49
(5) Допиши, Между

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    //-------------------------
    НастройкиКомпоновщика = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
    
    ЭлемПользНастр = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
    

//НастройкиКомпоновщика - как раз и заполняется всем, чем ты пожелаешь

МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, НастройкиКомпоновщика, ДанныеРасшифровки);
8 ЧеловекДуши
 
02.04.15
14:50
(6) В модуле отчета "ПриКомпоновкеРезультата", это предопределенная процедура.

ТЗ можешь не передавать, т.е. вместо переменной ТЗ пишешь "Неопределено" и все ок.
9 Andrey2C
 
02.04.15
15:11
(8) Блин все дело в настройках. Я так и думал. Спасибо) Провозился времени кучу потерял! не там копал.
Вместо Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
Нужно: Настройки  = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан