Имя: Пароль:
1C
1С v8
Как сложить две ТЗ в запросе
0 SeregaMW
 
02.11.15
10:43
Есть две одинаковых ТЗ как их сложить запросом.
1 butterbean
 
02.11.15
10:44
через ОБЪЕДИНИТЬ ВСЕ
2 Господин ПЖ
 
02.11.15
10:45
в запросе можно сложить запросом
3 Тoлько_
Просмотр
 
02.11.15
10:50
(0) Помести их во временные таблицы и далее (1)
4 SeregaMW
 
02.11.15
10:52
пример можно
5 ДенисЧ
 
02.11.15
10:57
(4) 100 евро
6 SeregaMW
 
02.11.15
11:00
(5) А добрые люди есть тут?
7 butterbean
 
02.11.15
11:00
(6) недобрые возьмут 500
8 rs_trade
 
02.11.15
11:01
(6) Добрые уже сказали. Отчеты читаем вообще?
9 MiniMuk
 
02.11.15
11:03
(0)
1. как получить 1 ТЗ в запросе знаешь?
2. как объединить 2 запроса знаешь?
10 ДенисЧ
 
02.11.15
11:04
(6) Как раз добрые и предлагают со скидкой...
11 MiniMuk
 
02.11.15
11:06
(6) 300$ подключусь сейчас. расскажу, покажу.
12 su_mai
 
02.11.15
11:15
(0) А я добренький :)
    // Строгая типизация колонок таблицы обязательна
    Таблица1 = Новый ТаблицаЗначений;
    Таблица1.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка");
    Таблица1.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число");
    
    // Заполнение данных Таблица1
    
    // Строгая типизация колонок таблицы обязательна
    Таблица2 = Новый ТаблицаЗначений;
    Таблица2.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка");
    Таблица2.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число");
    
    // Заполнение данных Таблица2
    
    // Запрос объединения таблиц
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    внТаблица1.Номенклатура,
        |    внТаблица1.Сумма
        |ПОМЕСТИТЬ Таблица1
        |ИЗ
        |    внТаблица1 КАК внТаблица1
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    внТаблица2.Номенклатура,
        |    внТаблица2.Сумма
        |ПОМЕСТИТЬ Таблица2
        |ИЗ
        |    внТаблица2 КАК внТаблица2
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Таблица1.Номенклатура КАК Номенклатура,
        |    Таблица1.Сумма КАК Сумма
        |ИЗ
        |    Таблица1 КАК Таблица1
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    Таблица2.Номенклатура,
        |    Таблица2.Сумма
        |ИЗ
        |    Таблица2 КАК Таблица2";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
13 Mirnin
 
02.11.15
11:16
Справка тоже добренькая. Справка - Поиск по справке - Объединить все.
14 su_mai
 
02.11.15
11:16
(12)

В строках

Таблица1.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка");

и

Таблица2.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка");

Заменить "Наименование" на "Номенклатура"
15 su_mai
 
02.11.15
11:19
(13) А про это: "// Строгая типизация колонок таблицы обязательна", в справке явно не написано...
16 D_E_S_131
 
02.11.15
11:48
(15) Нет ничего более отвратительного чем альтруизм...
17 su_mai
 
02.11.15
11:57
(16) Не переживай, всего лишь - тщеславие... :)
18 forforumandspam
 
03.11.15
07:11
(12) А где параметры запроса? Добренький он....
19 Sammo
 
03.11.15
07:38
А потом окажется, что под двумя одинаковыми понимаются одинаковые не только по структуре, но и по содержанию.
Или то что сложить - это сложить значения какой-то колонки.
20 cw014
 
03.11.15
07:40
(12) Жук ты, а не добренький. Вообще то мы живем в мире, где все платно
21 forforumandspam
 
03.11.15
07:55
Добренький, блин.
1) Во всех строках вида:
Таблица1.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка");

забыл одну скобку.
2)Надо так:
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("внТаблица1", Таблица1);
    Запрос.УстановитьПараметр("внТаблица2", Таблица2);
3)И так:
    |ИЗ
    |    &внТаблица1 КАК внТаблица1

    |ИЗ
    |    &внТаблица2 КАК внТаблица2
22 su_mai
 
03.11.15
08:18
(21) Все правильно говорите. Поторопился "запостить", не проверил... Сори.
23 User_Agronom
 
03.11.15
08:25
А циклом добавить строки не проще?
24 su_mai
 
03.11.15
08:31
(23) На самом деле все зависит от ситуации. Запросы не самоцель.
25 User_Agronom
 
03.11.15
08:31
(24) Я и говорю, что в этой ситуации циклом бы решить нужно.
26 su_mai
 
03.11.15
09:05
(25) Дело в том, что если задача просто добавить данные, то это можно сделать как с помощью объектной модели таблицы значений, так и с помощью запроса.
Другое дело, если данные внешних таблиц надо потом сгруппировать (с подсчетом суммы или нахождением максимума), тогда удобнее запросом.
27 su_mai
 
03.11.15
09:08
(0) Работающий пример:

    //Особенности:
    // 1. Строгая типизация колонок "внешних" таблиц обязательна.
    // 2. Каждая внешняя таблица передается в отдельный пакетный запрос как параметр:  |    &внТаблица1 КАК внТаблица1. Имя параметра и псевдоним таблицы не играют роли.
    //    При этом из неё выбираются все необходимые поля (могут не все), причем псевдонимы полей могут отличаться от имен колонок (это надо учитывать при объединениии).
    //    Выборка помещается во временную таблицу (в данном примере таких запросов два, для Таблица1 и Таблица2).
    // 3. В последствии можно оперировать в запросе данными этих временныхтаблиц по своему усмотрению.
    //    В данном примере происходит объединение данных таблиц и групировка с суммированием.
    
    Таблица1 = Новый ТаблицаЗначений;
    Таблица1.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", ,
                                              Новый КвалификаторыСтроки(250, ДопустимаяДлина.Переменная)));
    Таблица1.Колонки.Добавить("Артикул", Новый ОписаниеТипов("Строка", ,
                                         Новый КвалификаторыСтроки(25, ДопустимаяДлина.Переменная)));
    Таблица1.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
    
    Для инд = 1 По 10 Цикл
        НоваяСтрока = Таблица1.Добавить();
        НоваяСтрока.Наименование = "Наименование " + инд;
        НоваяСтрока.Артикул = "Артикул " + инд;
        НоваяСтрока.Сумма = инд;
    КонецЦикла;

    Таблица2 = Новый ТаблицаЗначений;
    Таблица2.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка", ,
                                              Новый КвалификаторыСтроки(250, ДопустимаяДлина.Переменная)));
    Таблица2.Колонки.Добавить("Сумма", Новый ОписаниеТипов("Число"));
    
    Для инд = 1 По 10 Цикл
        НоваяСтрока = Таблица2.Добавить();
        НоваяСтрока.Наименование = "Наименование " + инд;
        НоваяСтрока.Сумма = инд;
    КонецЦикла;
    
    // Запрос объединения таблиц
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    внТаблица1.Наименование КАК Номенклатура,
        |    внТаблица1.Сумма
        |ПОМЕСТИТЬ Таблица1
        |ИЗ
        |    &внТаблица1 КАК внТаблица1
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    внТаблица2.Наименование,
        |    внТаблица2.Сумма
        |ПОМЕСТИТЬ Таблица2
        |ИЗ
        |    &внТаблица2 КАК внТаблица2
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВложенныйЗапрос.Наименование КАК Наименование,
        |    СУММА(ВложенныйЗапрос.Сумма) КАК Сумма
        |ИЗ
        |    (ВЫБРАТЬ
        |        Таблица1.Номенклатура КАК Наименование,
        |        Таблица1.Сумма КАК Сумма
        |    ИЗ
        |        Таблица1 КАК Таблица1
        |    
        |    ОБЪЕДИНИТЬ ВСЕ
        |    
        |    ВЫБРАТЬ
        |        Таблица2.Наименование,
        |        Таблица2.Сумма
        |    ИЗ
        |        Таблица2 КАК Таблица2) КАК ВложенныйЗапрос
        |
        |СГРУППИРОВАТЬ ПО
        |    ВложенныйЗапрос.Наименование
        |
        |УПОРЯДОЧИТЬ ПО
        |    Наименование";
        
    Запрос.УстановитьПараметр("внТаблица1", Таблица1);
    Запрос.УстановитьПараметр("внТаблица2", Таблица2);
    
    Таблица3 = Новый ТаблицаЗначений;
    
    РезультатЗапроса = Запрос.Выполнить();
    Если Не РезультатЗапроса.Пустой() Тогда
        
        Таблица3 = РезультатЗапроса.Выгрузить();
        
    КонецЕсли;
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.