Имя: Пароль:
1C
 
1С. СхемаЗапроса. Помогите построить запрос с многими объединениями
,
0 SeiOkami
 
26.05.16
11:12
Строю запрос при помощи схемы запрос по такому типу:

ВЫБРАТЬ
   Тип(Справочник.Валюты) КАК Тип,
   "Справочник.Валюты" КАК ИмяТипа
ОБЪЕДИНИТЬ
ВЫБРАТЬ
   Тип(Справочник.Контрагенты) КАК Тип,
   "Справочник.Контрагенты" КАК ИмяТипа

...

Добавляю в цикле на каждый справочник новый Оператор и в него два Выбираемых поля.

Но когда получаю текст запроса из схемы, то выходит так, что каждое добавленное поле добавляется отдельно и у меня выходит кукуева туча полей в запросе. Как заставить схему объединять поля?
1 RomanYS
 
26.05.16
11:27
код покажи
2 Cyberhawk
 
26.05.16
11:28
Обери "КАК" из всех кусков, кроме первого
3 Cyberhawk
 
26.05.16
11:28
*/Убери
4 SeiOkami
 
26.05.16
12:35
ТаблицаТипов    = Новый ТаблицаЗначений;
    ТаблицаТипов.Колонки.Добавить("Тип"        , Новый ОписаниеТипов("Тип"));
    ТаблицаТипов.Колонки.Добавить("ИмяТипа"    , Новый ОписаниеТипов("Строка"));
    
    КоллекцииМетаданных    = Новый Массив;
    Если ПолучатьТипыСправочников Тогда
        КоллекцииМетаданных.Добавить(Метаданные.Справочники);
    КонецЕсли;
    Если ПолучатьТипыДокументов Тогда
        КоллекцииМетаданных.Добавить(Метаданные.Документы);
    КонецЕсли;
    
    Для Каждого КоллекцияМетаданных Из КоллекцииМетаданных Цикл
        
        Для Каждого ТекущиеМетаданные Из КоллекцияМетаданных Цикл
            
            НоваяСтрока    = ТаблицаТипов.Добавить();
            НоваяСтрока.Тип        = ТекущиеМетаданные.СтандартныеРеквизиты.Ссылка.Тип.Типы().Получить(0);
            НоваяСтрока.ИмяТипа    = ТекущиеМетаданные.ПолноеИмя();
            
        КонецЦикла;
        
    КонецЦикла;
    
    СхемаЗапроса    = Новый СхемаЗапроса;
    ПакетЗапроса    = СхемаЗапроса.ПакетЗапросов.Получить(0);
    
    Для Каждого СтрТаблицаТипов Из ТаблицаТипов Цикл
        
        Если ПакетЗапроса.Операторы.Количество() = 1 Тогда
            Оператор    = ПакетЗапроса.Операторы.Получить(0);
        Иначе
            Оператор    = ПакетЗапроса.Операторы.Добавить();
        КонецЕсли;
        
        Оператор.ВыбираемыеПоля.Добавить("Тип(" + СтрТаблицаТипов.ИмяТипа + ")");
        
        Оператор.ВыбираемыеПоля.Добавить("""" + СтрТаблицаТипов.ИмяТипа + """");
        
    КонецЦикла;
5 SeiOkami
 
26.05.16
12:37
Проблема в том, что когда выполняется
" Оператор.ВыбираемыеПоля.Добавить("
То на каждое добавляемое поле добавляется своя колонка в результате запроса
6 SeiOkami
 
26.05.16
12:38
А нужно, чтобы они объединялись
7 RomanYS
 
26.05.16
13:03
(6) Засунул в схему простенький запрос и посмотрел схему отладчиком. Там такая внутренняя структура - лучше бы не смотрел ).
По твоей теме у оператора есть поле "ТипОбъединения".

Проще текст запроса собрать как строку ИМХО. Или ищи нормальные примеры.
8 Карупян
 
26.05.16
13:05
Геморно через схему делать,
Лучше строку собирай
9 Тролль главный
 
26.05.16
13:06
а зачем это всё?
10 Карупян
 
26.05.16
13:06
Ее еще можно юзать, когда нужно поле в типовой запрос добавить или условие, но дальше не стоит
11 SeiOkami
 
26.05.16
13:21
Блин, это мой косяк. Тупанул.
Каждый раз поля добавлялись в один и тот же оператор из-за условия:

    
        Если ПакетЗапроса.Операторы.Количество() = 1 Тогда
            Оператор    = ПакетЗапроса.Операторы.Получить(0);
        Иначе
            Оператор    = ПакетЗапроса.Операторы.Добавить();
        КонецЕсли;

Заменил на


        Если Счетчик = 1 Тогда    //Первый оператор
            Оператор    = ПакетЗапроса.Операторы.Получить(0);
        Иначе
            Оператор    = ПакетЗапроса.Операторы.Добавить();
        КонецЕсли;
        
И всё заработало
Основная теорема систематики: Новые системы плодят новые проблемы.