Имя: Пароль:
1C
1С v8
Запрос в СКД. Выбор Источника
0 raytan
 
26.01.15
13:40
Есть работающий запрос в СКД. Данные берутся из регистра ПланыПроизводства1. Хотелось бы по галочке менять источник данных. Имеется ввиду брать информацию уже из регистраПланыПроизводства2. Возможно ли сделать что то типо такого:

Выбрать
   *
Из
   Выбор
      Когда &Флаг
         Тогда РегистрыСведений.ПланыПроизводства1 как ПланыПроизводства
         Иначе РегистрыСведений.ПланыПроизводства2 как ПланыПроизводства
   Конец

или

Выбрать
   *
Из
   Выбор
      Когда &Флаг
         Тогда РегистрыСведений.ПланыПроизводства1
         Иначе РегистрыСведений.ПланыПроизводства2
   Конец  как ПланыПроизводства

Просто в тексте программы было бы просто реализовать нечто подобное. Но как это сделать в СКД ?

Есть такой работающий вариант:

Выбрать
   Выбор
      Когда &Флаг
         Тогда ПланыПроизводства1.Номенклатура
         Иначе ПланыПроизводства2.Номенклатура
   Конец  как Номенклатура
Из
   РегистрыСведений.ПланыПроизводства1 как ПланыПроизводства1,
   РегистрыСведений.ПланыПроизводства2 как ПланыПроизводства2

Но отчет начинает работать раза 3-4 медленнее, что уже неприемлимо.
1 raytan
 
26.01.15
13:43
Возможна реализация за счет разных НаборовДанных и соответственно разных вариантов настроек. Но это решение некрасиво и в случае дополнительных настроек пользователем, ему придется их дублировать два раза. Да и вообще плохой вариант ((
2 raytan
 
26.01.15
14:14
Ни у кого нет никаких мыслей ?
3 Garykom
 
гуру
26.01.15
14:38
(2) разные СКД с синхронизацией настроек?
4 Mankubus
 
26.01.15
14:40
поменять текст запроса при компоновке не подходит?
5 raytan
 
26.01.15
14:57
(4) Подходит, но я надеялся услышать ответ, что можно реализовать за счет конструкции типа "Если... Тогда" :)) А менять текст запроса, достаточно сложно, так как он ОЧЕНЬ большой и не все поля совпадают в этих регистрах (((

(3) Я так еще не делала ни разу, так что мне не совсем ясно как это реализовать.
6 raytan
 
26.01.15
15:00
(4) Наверное пока лучшее решение.
7 raytan
 
27.01.15
11:00
Может кому то пригодится. Реализовал изменением запроса в событии ПриКомпоновкеРезультата

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

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

    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

    ПроцессорВывода.НачатьВывод();
    ЭлементРезультата = ПроцессорКомпоновки.Следующий();
    Пока ЭлементРезультата <> Неопределено Цикл
            ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
            ЭлементРезультата = ПроцессорКомпоновки.Следующий();        
    КонецЦикла;
    ПроцессорВывода.ЗакончитьВывод();
    
КонецПроцедуры


Параметр "ФлагУтвержденные" меняю по чекбоксу на форме.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.