Имя: Пароль:
1C
1С v8
Заполнение тч документа из 2х объединенных запросов
0 JuixyJes
 
22.04.19
22:01
Имеется код, который заполняет табличную часть документа данными запроса. НО! Цикл проходится 4 раза и заполняет сначала строчки первого запроса, а второй запрос записывается в новые строчки. Каким образом мне выводить все в одну строчку?


Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    КосякСотрудника.Наряд КАК Наряд,
    |    КосякСотрудника.Сотрудник КАК Сотрудник,
    |    КосякСотрудника.Ссылка КАК Косяк,
    |    КосякСотрудника.СуммаК КАК СуммаК,
    |    КосякСотрудника.Продукция КАК Продукция,
    |    КосякСотрудника.Технология КАК Технология,
    |    КосякСотрудника.Сотрудник.Должность.Процент КАК СотрудникДолжностьПроцент,
    |    NULL КАК Сумма
    |ИЗ
    |    Документ.КосякСотрудника КАК КосякСотрудника
    |ГДЕ
    |    КосякСотрудника.Наряд.Заявка = &Заявка
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    NULL,
    |    NULL,
    |    NULL,
    |    NULL,
    |    NULL,
    |    NULL,
    |    NULL,
    |    НарядТехнологии.Сумма
    |ИЗ
    |    Документ.Наряд.Технологии КАК НарядТехнологии
    |ГДЕ
    |    НарядТехнологии.Ссылка.Заявка = &Заявка";
    
    Запрос.УстановитьПараметр("Заявка", Заявка);
    
    РезультатЗапроса = Запрос.Выполнить();
    ТЧЗП.Очистить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        
        НоваяСтрока = ТЧЗП.Добавить();
        НоваяСтрока.Наряд = ВыборкаДетальныеЗаписи.Наряд;
        НоваяСтрока.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
        НоваяСтрока.Продукция = ВыборкаДетальныеЗаписи.Продукция;
        НоваяСтрока.Технология = ВыборкаДетальныеЗаписи.Технология;
        НоваяСтрока.Процент = ВыборкаДетальныеЗаписи.СотрудникДолжностьПроцент;
        
        НоваяСтрока.Косяк = ВыборкаДетальныеЗаписи.Косяк;
        НоваяСтрока.СуммаКосяка = ВыборкаДетальныеЗаписи.СуммаК;
        НоваяСтрока.КТУ = "1.0";
        НоваяСтрока.Сумма = ВыборкаДетальныеЗаписи.Сумма;
    КонецЦикла;
1 lodger
 
22.04.19
22:12
(0) надо осилить разницу между объединением и соединением.
2 lodger
 
22.04.19
22:13
а зачем ветку повторять?
3 JuixyJes
 
22.04.19
22:26
(2) а не могли бы вы обьяснить мне разницу, и что мне сделать чтобы оно заработало так, как задумано?
4 hhhh
 
22.04.19
22:38
(3) ну может у вас в наряде 4 строчки. Тогда правильно она работает, выбирает 4 суммы из наряда.
5 JuixyJes
 
22.04.19
22:44
у меня в наряде 2 строчки, значения в цикле в СУММУ попадают на 3 и 4 проход
6 catena
 
23.04.19
05:14
Секция ОБЪЕДИНИТЬ [ВСЕ](Объединение запросов)
В языке запросов имеется возможность объединять несколько запросов. При этом записи, полученные с помощью каждого из объединяемых запросов, будут собраны в один результат запроса.

При объединении каждый запрос собирает данные независимо, а такие операции, как упорядочивание результатов и расчет итогов выполняются уже над результатом объединения запросов.

Поля результата запроса будут называться так, как описано в списке полей выборки первого из объединяемых запросов. Поля выборки остальных запросов сопоставляются с полями результата в соответствии с порядком их следования в списке полей выборки. Объединяемые запросы должны иметь одинаковое количество полей в списке полей выборки.

Если поля выборки объединяемых запросов имеют разный тип, то поля результата запроса будут иметь составной тип.

Объединение запросов описывается по следующему правилу:


<Объединение запросов>
      |
  ОБЪЕДИНИТЬ [ВСЕ] <Описание запроса> [<Объединение запросов>]

Объединение запросов начинается с обязательного ключевого слова ОБЪЕДИНИТЬ, после которого следует описание присоединяемого запроса. Далее может присоединяться еще один запрос и т. д.

По умолчанию при объединении запросов полностью одинаковые строки в результате запроса, сформированные разными запросами, заменяются одной. Если требуется, чтобы были оставлены разные строки, необходимо указать ключевое слово ВСЕ.

Пример:




ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отличие от внутреннего соединения, в результат запроса надо включить также еще и записи из первого (указанного слева от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из второго источника.

Таким образом, в результат запроса будут включены все записи из первого источника; они будут соединены с записями из второго источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из второго источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

Ключевое слова ВНЕШНЕЕ можно не указывать вообще, оно повышает наглядность и удобочитаемость текста запроса.

Пример:
// В отчет необходимо вывести всех контрагентов, а для тех,
// кто является также банком – указать ссылку на банк.

ВЫБРАТЬ
   Контрагенты.Ссылка КАК Контрагент,
   Банки.Ссылка КАК Банк

ИЗ
   Справочник.Контрагенты КАК Контрагенты

ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
   Справочник.Банки КАК Банки

ПО
   Контрагенты.Наименование = Банки.Наименование
2 + 2 = 3.9999999999999999999999999999999...