Имя: Пароль:
1C
1С v8
Объединить два запроса
0 evgen2020
 
09.07.14
12:50
Всем привет!Нужна помощь,сделал отчет который формирует доходы за введеный год и за предыдущий год ,но нужно что бы на выходе в одном столбце были данные за введенный год а во втором столбце за предыдущий год

    Если ВидГраждан = Перечисления.РЦ_ВидГраждан.дляГражданРБ Тогда
        Валюта=Константы.РЦ_НациональнаяВалюта.Получить();
        
        //Выбор макета
        ТД = Новый ТабличныйДокумент;
        Макет = Отчеты.АнализДоходов.ПолучитьМакет("АнализДоходов");
        ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
        ТД.Вывести(ОбластьШапка);
        
        ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
        ОбластьЗаголовок.Параметры.Вид = ЭтаФорма.ВидГраждан;
        ОбластьЗаголовок.Параметры.Валюта = Валюта;
        ОбластьЗаголовок.Параметры.Год = Формат(ЭтаФорма.Год, " ДФ=yyyy");
        ОбластьЗаголовок.Параметры.Год2 =  Формат(ЭтаФорма.Год-1, " ДФ=yyyy");
        ТД.Вывести(ОбластьЗаголовок);
        
        ОбластьГруппа = Макет.ПолучитьОбласть("Группа");
        ОбластьИтого = Макет.ПолучитьОбласть("Итого");
        
        //Заполнение табличной части
        ЗапросТаблица = Новый Запрос();
        ЗапросТаблица.Текст =
        "ВЫБРАТЬ
        |  ВложенныйЗапрос.Отделение,
        |    СУММА(ВложенныйЗапрос.СуммаОборот) КАК СуммаОборот
        | ИЗ
        |  (ВЫБРАТЬ
        |    РЦ_ОказанныеУслугиОбороты.Отделение КАК Отделение,
        |    ЕСТЬNULL(РЦ_ОказанныеУслугиОбороты.СуммаОборот, 0)КАК СуммаОборот
        | ИЗ
        |    РегистрНакопления.РЦ_ОказанныеУслуги.Обороты(&ДатаС, &ДатаПо,, ВидГраждан = &ВидГраждан) КАК РЦ_ОказанныеУслугиОбороты
        |
        | ОБЪЕДИНИТЬ ВСЕ
        |ВЫБРАТЬ
        |    РЦ_ИспользованныеДопМатериалыОбороты.Отделение,
        |    ЕСТЬNULL(РЦ_ИспользованныеДопМатериалыОбороты.СуммаОборот, 0)
        | ИЗ
        |    РегистрНакопления.РЦ_ИспользованныеДопМатериалы.Обороты(&ДатаС,&ДатаПо , , ВидГраждан = &ВидГраждан) КАК РЦ_ИспользованныеДопМатериалыОбороты) КАК ВложенныйЗапрос
        |СГРУППИРОВАТЬ ПО
        |    ВложенныйЗапрос.Отделение";
        
            ЗапросТаблица.УстановитьПараметр("ДатаС",НачалоГода(Год));
            ЗапросТаблица.УстановитьПараметр("ДатаПо",КонецГода(Год));
        
        Если ВидГраждан=Перечисления.РЦ_ВидГраждан.дляГражданРБ тогда
            ЗапросТаблица.УстановитьПараметр("ВидГраждан",Перечисления.РЦ_ВидГраждан.дляГражданРБ);
        КонецЕсли;
        //
        РезультатТаблица = ЗапросТаблица.Выполнить().Выгрузить();  
        Для каждого СтрокаТаблица Из РезультатТаблица Цикл
            ОбластьГруппа.Параметры.Наименование = СтрокаТаблица.Отделение;
            ОбластьГруппа.Параметры.Сумма = СтрокаТаблица.СуммаОборот;
            ТД.Вывести(ОбластьГруппа);
            
        КонецЦикла;    


////ВТОРОЙ ЗАПРОС
1 Maxus43
 
09.07.14
12:51
в чем проблем то?
2 evgen2020
 
09.07.14
12:52
Всем привет!Нужна помощь,сделал отчет который формирует доходы за введеный год и за предыдущий год ,но нужно что бы на выходе в одном столбце были данные за введенный год а во втором столбце за предыдущий год

    Если ВидГраждан = Перечисления.РЦ_ВидГраждан.дляГражданРБ Тогда
        Валюта=Константы.РЦ_НациональнаяВалюта.Получить();
        
        //Выбор макета
        ТД = Новый ТабличныйДокумент;
        Макет = Отчеты.АнализДоходов.ПолучитьМакет("АнализДоходов");
        ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
        ТД.Вывести(ОбластьШапка);
        
        ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
        ОбластьЗаголовок.Параметры.Вид = ЭтаФорма.ВидГраждан;
        ОбластьЗаголовок.Параметры.Валюта = Валюта;
        ОбластьЗаголовок.Параметры.Год = Формат(ЭтаФорма.Год, " ДФ=yyyy");
        ОбластьЗаголовок.Параметры.Год2 =  Формат(ЭтаФорма.Год-1, " ДФ=yyyy");
        ТД.Вывести(ОбластьЗаголовок);
        
        ОбластьГруппа = Макет.ПолучитьОбласть("Группа");
        ОбластьИтого = Макет.ПолучитьОбласть("Итого");
        
        //Заполнение табличной части
        ЗапросТаблица = Новый Запрос();
        ЗапросТаблица.Текст =
        "ВЫБРАТЬ
        |  ВложенныйЗапрос.Отделение,
        |    СУММА(ВложенныйЗапрос.СуммаОборот) КАК СуммаОборот
        | ИЗ
        |  (ВЫБРАТЬ
        |    РЦ_ОказанныеУслугиОбороты.Отделение КАК Отделение,
        |    ЕСТЬNULL(РЦ_ОказанныеУслугиОбороты.СуммаОборот, 0)КАК СуммаОборот
        | ИЗ
        |    РегистрНакопления.РЦ_ОказанныеУслуги.Обороты(&ДатаС, &ДатаПо,, ВидГраждан = &ВидГраждан) КАК РЦ_ОказанныеУслугиОбороты
        |
        | ОБЪЕДИНИТЬ ВСЕ
        |ВЫБРАТЬ
        |    РЦ_ИспользованныеДопМатериалыОбороты.Отделение,
        |    ЕСТЬNULL(РЦ_ИспользованныеДопМатериалыОбороты.СуммаОборот, 0)
        | ИЗ
        |    РегистрНакопления.РЦ_ИспользованныеДопМатериалы.Обороты(&ДатаС,&ДатаПо , , ВидГраждан = &ВидГраждан) КАК РЦ_ИспользованныеДопМатериалыОбороты) КАК ВложенныйЗапрос
        |СГРУППИРОВАТЬ ПО
        |    ВложенныйЗапрос.Отделение";
        
            ЗапросТаблица.УстановитьПараметр("ДатаС",НачалоГода(Год));
            ЗапросТаблица.УстановитьПараметр("ДатаПо",КонецГода(Год));
        
        Если ВидГраждан=Перечисления.РЦ_ВидГраждан.дляГражданРБ тогда
            ЗапросТаблица.УстановитьПараметр("ВидГраждан",Перечисления.РЦ_ВидГраждан.дляГражданРБ);
        КонецЕсли;
        //
        РезультатТаблица = ЗапросТаблица.Выполнить().Выгрузить();  
        Для каждого СтрокаТаблица Из РезультатТаблица Цикл
            ОбластьГруппа.Параметры.Наименование = СтрокаТаблица.Отделение;
            ОбластьГруппа.Параметры.Сумма = СтрокаТаблица.СуммаОборот;
            ТД.Вывести(ОбластьГруппа);
            
        КонецЦикла;    


////ВТОРОЙ ЗАПРОС

        ЗапросТаблица = Новый Запрос();
        ЗапросТаблица.Текст =
        "ВЫБРАТЬ
        |  ВложенныйЗапрос.Отделение,
        |    СУММА(ВложенныйЗапрос.СуммаОборот) КАК СуммаОборот
        | ИЗ
        |  (ВЫБРАТЬ
        |    РЦ_ОказанныеУслугиОбороты.Отделение КАК Отделение,
        |    ЕСТЬNULL(РЦ_ОказанныеУслугиОбороты.СуммаОборот, 0)КАК СуммаОборот
        | ИЗ
        |    РегистрНакопления.РЦ_ОказанныеУслуги.Обороты(&ДатаС, &ДатаПо,, ВидГраждан = &ВидГраждан) КАК РЦ_ОказанныеУслугиОбороты
        |
        | ОБЪЕДИНИТЬ ВСЕ
        |ВЫБРАТЬ
        |    РЦ_ИспользованныеДопМатериалыОбороты.Отделение,
        |    ЕСТЬNULL(РЦ_ИспользованныеДопМатериалыОбороты.СуммаОборот, 0)
        | ИЗ
        |    РегистрНакопления.РЦ_ИспользованныеДопМатериалы.Обороты(&ДатаС,&ДатаПо , , ВидГраждан = &ВидГраждан) КАК РЦ_ИспользованныеДопМатериалыОбороты) КАК ВложенныйЗапрос
        |СГРУППИРОВАТЬ ПО
        |    ВложенныйЗапрос.Отделение";
        ЗапросТаблица.УстановитьПараметр("ДатаС",НачалоГода(Год-1));
        ЗапросТаблица.УстановитьПараметр("ДатаПо",КонецГода(Год-1));
        
        Если ВидГраждан=Перечисления.РЦ_ВидГраждан.дляГражданРБ тогда
            ЗапросТаблица.УстановитьПараметр("ВидГраждан",Перечисления.РЦ_ВидГраждан.дляГражданРБ);
        КонецЕсли;
        РезультатТаблица = ЗапросТаблица.Выполнить().Выгрузить();  
        Для каждого СтрокаТаблица Из РезультатТаблица Цикл
            ОбластьГруппа.Параметры.Наименование = СтрокаТаблица.Отделение;
            ОбластьГруппа.Параметры.Сумма2 = СтрокаТаблица.СуммаОборот;
            
            ТД.Вывести(ОбластьГруппа);
            
        КонецЦикла;
3 evgen2020
 
09.07.14
12:58
я новичок в1с ,надо чтобы обединилось без повторов. если надо могу скинуть как внешнюю с макетом и формой чтобы понятнее было
4 Maxus43
 
09.07.14
12:59
Один запрос делай, просто суммы по периодам выводи в разные поля запроса
5 Maxus43
 
09.07.14
13:03
переделывать твой не буду, а как пример:
ВЫБРАТЬ
    ВложенныйЗапрос.БанковскийСчетКасса,
    СУММА(ВложенныйЗапрос.СуммаСегодня) КАК СуммаСегодня,
    СУММА(ВложенныйЗапрос.СуммаЗавтра) КАК СуммаЗавтра
ИЗ
    (ВЫБРАТЬ
        ДенежныеСредстваОбороты.БанковскийСчетКасса КАК БанковскийСчетКасса,
        ДенежныеСредстваОбороты.СуммаОборот КАК СуммаСегодня,
        0 КАК СуммаЗавтра
    ИЗ
        РегистрНакопления.ДенежныеСредства.Обороты(&НачСегодня, &КонСегодня, , ) КАК ДенежныеСредстваОбороты
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        ДенежныеСредстваОбороты.БанковскийСчетКасса,
        0,
        ДенежныеСредстваОбороты.СуммаОборот
    ИЗ
        РегистрНакопления.ДенежныеСредства.Обороты(&НачЗавтра, &КонЗавтра, , ) КАК ДенежныеСредстваОбороты) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос.БанковскийСчетКасса
6 Ненавижу 1С
 
гуру
09.07.14
13:06
(5) дарю проще

ВЫБРАТЬ
    ПродажиОбороты.Контрагент,
    СУММА(ВЫБОР
            КОГДА ПродажиОбороты.Период = &ПрошлыйГод
                ТОГДА ПродажиОбороты.СтоимостьОборот
            ИНАЧЕ 0
        КОНЕЦ) КАК ПрошлаяПродажа,
    СУММА(ВЫБОР
            КОГДА ПродажиОбороты.Период = &ТекущийГод
                ТОГДА ПродажиОбороты.СтоимостьОборот
            ИНАЧЕ 0
        КОНЕЦ) КАК ТекущаяПродажа
ИЗ
    РегистрНакопления.Продажи.Обороты(, , Год, ) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Контрагент
7 evgen2020
 
09.07.14
13:17
у меня в каждом запросе по два регистра. Я чтото совсем запутался
8 evgen2020
 
09.07.14
15:23
Сделал как сказали но на выходе пустая таблица
     "ВЫБРАТЬ
    | РЦ_ОказанныеУслугиОбороты.Отделение КАК Отделение  ,
    | СУММА(ВЫБОР
    |  КОГДА РЦ_ОказанныеУслугиОбороты.Период = &ПрошлыйГод
    |   ТОГДА ЕСТЬNULL(РЦ_ОказанныеУслугиОбороты.СуммаОборот, 0)
    | ИНАЧЕ 0
    | КОНЕЦ) КАК СтарыеОбороты,
    | СУММА(ВЫБОР
    |    КОГДА  РЦ_ОказанныеУслугиОбороты.Период = &ТекущийГод
    |        ТОГДА  ЕСТЬNULL(РЦ_ОказанныеУслугиОбороты.СуммаОборот, 0)
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК НовыеОбороты
    |ИЗ
    |     РегистрНакопления.РЦ_ОказанныеУслуги.Обороты(, ,Год, ВидГраждан = &ВидГраждан) КАК РЦ_ОказанныеУслугиОбороты

    |СГРУППИРОВАТЬ ПО
    |  РЦ_ОказанныеУслугиОбороты.Отделение ";
    
            ЗапросТаблица.УстановитьПараметр("ТекущийГод",Год(Год));
            ЗапросТаблица.УстановитьПараметр("ПрошлыйГод",Год(Год)-1);
9 evgen2020
 
09.07.14
15:24
таблица отчета
10 Maxus43
 
09.07.14
15:34
параметры неправильные.
тогда уж пиши так
КОГДА  ГОД(РЦ_ОказанныеУслугиОбороты.Период) = &ТекущийГод
11 evgen2020
 
09.07.14
15:49
Спасибо большое работает,но надо добавить еще один регистр.
В запросе должно участвовать два регистра. сумма из одного и второго должна складываться а отделения не дублироваться

РЦ_ОказанныеУслугиОбороты.Отделение КАК Отделение
ЕСТЬNULL(РЦ_ОказанныеУслугиОбороты.СуммаОборот, 0)

РЦ_ИспользованныеДопМатериалыОбороты.Отделение
ЕСТЬNULL(РЦ_ИспользованныеДопМатериалыОбороты.СуммаОборот, 0)
12 Maxus43
 
09.07.14
15:55
Добавить ещё регистр - точно так же, подцепляй к этому через ОБЪЕДЕНИТЬ ВСЁ.

чтоб не дублировалось - всё это суй во вложенный запрос, потом группируй.
13 evgen2020
 
09.07.14
16:24
Сделал вот так ругается

{Отчет.АнализДоходов.Форма.ФормаОтчета.Форма(90)}: Ошибка при вызове метода контекста (Выполнить)
        РезультатТаблица = ЗапросТаблица.Выполнить().Выгрузить();  
по причине:
{(7, 2)}: Поле не входит в группу "РЦ_ОказанныеУслугиОбороты.Отделение"
<<?>>РЦ_ОказанныеУслугиОбороты.Отделение КАК Отделение  ,


     "ВЫБРАТЬ
    |  ВложенныйЗапрос.Отделение,
    |    СУММА(ВложенныйЗапрос.СуммаОборот) КАК СтарыеОбороты,
    |    СУММА(ВложенныйЗапрос.СуммаОборот) КАК НовыеОбороты
    |    ИЗ
    |( ВЫБРАТЬ
    | РЦ_ОказанныеУслугиОбороты.Отделение КАК Отделение  ,
    | СУММА(ВЫБОР
    |  КОГДА  ГОД(РЦ_ОказанныеУслугиОбороты.Период) = &ПрошлыйГод
    |   ТОГДА ЕСТЬNULL(РЦ_ОказанныеУслугиОбороты.СуммаОборот, 0)
    | ИНАЧЕ 0
    | КОНЕЦ) КАК СтарыеОбороты,
    | СУММА(ВЫБОР
    |    КОГДА ГОД( РЦ_ОказанныеУслугиОбороты.Период) = &ТекущийГод
    |        ТОГДА  ЕСТЬNULL(РЦ_ОказанныеУслугиОбороты.СуммаОборот, 0)
    |   ИНАЧЕ 0
    |  КОНЕЦ) КАК НовыеОбороты
    |ИЗ
    |     РегистрНакопления.РЦ_ОказанныеУслуги.Обороты(, ,Год, ВидГраждан = &ВидГраждан) КАК РЦ_ОказанныеУслугиОбороты
    | ОБЪЕДИНИТЬ ВСЕ
    |
    |  ВЫБРАТЬ
    |
    | РЦ_ИспользованныеДопМатериалыОбороты.Отделение,
    | СУММА(ВЫБОР
    | КОГДА  ГОД(РЦ_ИспользованныеДопМатериалыОбороты.Период) = &ПрошлыйГод
    |     ТОГДА ЕСТЬNULL(РЦ_ИспользованныеДопМатериалыОбороты.СуммаОборот, 0)
    |  ИНАЧЕ 0
    |  КОНЕЦ) КАК СтарыеОбороты,
    |  СУММА(ВЫБОР
    |   КОГДА ГОД(РЦ_ИспользованныеДопМатериалыОбороты.Период) = &ТекущийГод
    |         ТОГДА ЕСТЬNULL(РЦ_ИспользованныеДопМатериалыОбороты.СуммаОборот, 0)
    |   ИНАЧЕ 0
    |    КОНЕЦ) КАК НовыеОбороты
    |   ИЗ
    |  РегистрНакопления.РЦ_ИспользованныеДопМатериалы.Обороты(, ,Год , ВидГраждан = &ВидГраждан) КАК РЦ_ИспользованныеДопМатериалыОбороты ) КАК ВложенныйЗапрос
    |
    |СГРУППИРОВАТЬ ПО
    |    ВложенныйЗапрос.Отделение";
14 Maxus43
 
09.07.14
16:27
конструктором делай, чото где-то ошибся
15 evgen2020
 
09.07.14
18:28
Всем спасибо.Сделал все работает