Имя: Пароль:
1C
 
2 таблицы значений в одном запросе.
0 yyyuuu
 
23.01.19
07:39
Здравствуйте Друзья.
Хочу поместить две таблицы значений в 1 запрос. Ну а там обработать так как мне надо. Подскажите пожалуйста что не так. Потому что, делая любое соеденение оно не работает вообще. То есть. В 1 таблице 22 значения во второй 5, Я их хочу соеденить по левой. То есть с лева все, в шо справа не подошло по Нул. Но почему то Нулов вообще нету, и значений стало 27. В чем дело не понимаю.


    //
    Таблица = Новый ТаблицаЗначений;
    //
    Таблица.Колонки.Добавить("Паспорт",   Новый ОписаниеТипов("Число",,,   Новый КвалификаторыЧисла(10,0)));
    Таблица.Колонки.Добавить("Резервуар", Новый ОписаниеТипов("Число",,,   Новый КвалификаторыЧисла(10,0)));
    Таблица.Колонки.Добавить("Товар",     Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200)));
    //
    Таблица1 = Новый ТаблицаЗначений;
    Таблица1.Колонки.Добавить("Грузополучатель", Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200)));
    Таблица1.Колонки.Добавить("Груз",            Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200)));
    //
    ВыбранныйДок = Налив;
    //**
    НомерДокумента = Налив.Номер;
    Попытка
        //**
            НужныйДокумент = Документы.Налив.НайтиПоНомеру(НомерДокумента);
            Сообщить("Найеден");
        //**
    Исключение
        //**
        Сообщить(ОписаниеОшибки());
        //**
    КонецПопытки;    
    //**Из табличной части " Вагоны" Документ "Налив"
    Для Каждого Строка Из НужныйДокумент.Вагоны Цикл//Налив.Вагоны Цикл
        //
        //Пишем строку
        Стр = Таблица.Добавить();
        Стр.Товар     = Строка.ВидТоплива;
        Стр.Паспорт   = Строка.Паспорт;
        Стр.Резервуар = Строка.Резервуар;
        //
    КонецЦикла;
    //
    Для Каждого Строка1 Из НужныйДокумент.Накладные Цикл
        //
        Стр1 = Таблица1.Добавить();
        Стр1.Грузополучатель = Строка1.Грузополучатель;
        Стр1.Груз            = Строка1.Груз;
        //
    КонецЦикла;
    //
    //СтрокаБезГрузополучателя = Таблица.НайтиСтроки(Новый Структура("Грузополучатель", ""));
    //Для Каждого СтрокаТаблицы Из СтрокаБезГрузополучателя Цикл
    //    Таблица.Удалить(СтрокаТаблицы);
    //КонецЦикла;
    Сообщить("Конец");
    //**
    //==============================================================================
    Запрос                             = Новый Запрос;
    МенеджерВременныхТаблиц         = Новый МенеджерВременныхТаблиц;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    //
    Запрос.УстановитьПараметр("Налив",      Таблица );
    Запрос.УстановитьПараметр("Накладные",  Таблица1);
    //    
    
    //==============================================================
    //**
    Запрос.Текст =
        "ВЫБРАТЬ
        |    Налив.Паспорт,
        |    Налив.Резервуар,
        |    Налив.Товар
        |ПОМЕСТИТЬ ВремТаб
        |ИЗ
        |    &Налив КАК Налив
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    Накладные.Груз,
        |    Накладные.Грузополучатель
        |ПОМЕСТИТЬ ВремТаб2
        |ИЗ
        |    &Накладные КАК Накладные
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВремТаб.Паспорт,
        |    ВремТаб.Резервуар,
        |    ВремТаб.Товар КАК Товар,
        |    ВремТаб2.Груз,
        |    ВремТаб2.Грузополучатель
        |ИЗ
        |    ВремТаб КАК ВремТаб
        |        ЛЕВОЕ СОЕДИНЕНИЕ ВремТаб2 КАК ВремТаб2
        |        ПО ВремТаб.Товар = ВремТаб2.Груз";
    
    РезультатЗапроса = Запрос.Выполнить();
    ТабЗн              = РезультатЗапроса.Выгрузить();    
    
    //===================================================================
1 yyyuuu
 
23.01.19
07:42
Может Я как то не так делаю
2 Ordnung
 
23.01.19
07:44
Ессно, не так, у тебя вместо объединения идёт выборка разных полей из таблиц.
3 yyyuuu
 
23.01.19
07:46
Тогда как мне сделать правильно, Я прям запутался что то. Вроде все как по учебнику, а оказывается выборка разных полей идет)
4 Ordnung
 
23.01.19
07:46
Убери из финального запроса ВремТаб2.Груз
5 yyyuuu
 
23.01.19
07:50
(4) Все ровно не оно, так и отработало
6 catena
 
23.01.19
07:50
В какой из времтаб 5, в какой 22?
7 yyyuuu
 
23.01.19
07:51
Как и до этого
8 yyyuuu
 
23.01.19
07:51
Запрос.УстановитьПараметр("Налив",      Таблица ); = 22
Запрос.УстановитьПараметр("Накладные",  Таблица1); = 5
9 yyyuuu
 
23.01.19
07:52
В итоге получаю 27 почему, вообще не понимаю
10 Ordnung
 
23.01.19
07:52
У тебя точно груз и товар одного типа значений?
11 Альбатрос
 
23.01.19
07:53
(9) Покажи таблицы скрином. И первую и вторую
12 Ordnung
 
23.01.19
07:53
+(10) А, это строки. Пробелов никаких там нет лишних в этих строках?
13 catena
 
23.01.19
07:53
(8)Правая таблица идет целиком. Поменяйте в соединении их местами.
14 yyyuuu
 
23.01.19
07:54
Таблица1.Колонки.Добавить("Груз",            Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200)));

Таблица.Колонки.Добавить("Товар",     Новый ОписаниеТипов("Строка",,,, Новый КвалификаторыСтроки(200)));
15 Альбатрос
 
23.01.19
07:54
Сдается мне у тебя во второй что-то типа:
Груз1 - грузополучатель1
Груз1 - Грузополучатель2
16 yyyuuu
 
23.01.19
07:57
17 yyyuuu
 
23.01.19
07:59
(13) не уверен что поможет но попробовал, и не помогло)
18 arsik
 
гуру
23.01.19
07:59
(16) ну все правильно. У тебя "Регулярка чтьот там" - 2 раза соединяется. Итого + 5 строк, т.к. в первой ТЗ у тебя их по этому товару 5
19 yyyuuu
 
23.01.19
07:59
(12) не пробелов ничего, как будто не соеденяет а просто обьеденил, и подставил соотвествия сам)
20 yyyuuu
 
23.01.19
08:01
(18) так в чем все дело)
21 arsik
 
гуру
23.01.19
08:03
(20) Тебе нужно почитать про соединения в запросах
https://helpme1c.ru/yazyk-zaprosov-1s-8-3-dlya-nachinayushhix-programmistov-soedineniya
22 yyyuuu
 
23.01.19
08:06
Все спасибо, сейчас гляну.
Только Я понять не могу какое соединение не делал, результат один и тоже всегда
23 arsik
 
гуру
23.01.19
08:09
(22) Для примера попробуй во второй таблице оставить строку только "БГС-Л". Все понятно станет.
24 yyyuuu
 
24.01.19
01:59
Друзья, Я думал соеденения работаю так. Пример левое. Все с левой с правой только по условию. Но Я понять не могу, почему появляются лишние записи еще 5. Я думал в 22 моих  поставит соотвествие и все. Запутался немного
25 yyyuuu
 
24.01.19
02:00
(23) попробую) Думаю натолкнет на мысли)
26 Fram
 
24.01.19
02:01
(24) а если справился по условию более одной записи соответствует?
27 Fram
 
24.01.19
02:02
*справился=справа
28 yyyuuu
 
24.01.19
02:04
(26) У меня все подходят по условию, Я понять не могу откуда еще 5 добавились. Вот тут прям сижу и понять не могу. Сейчас рисовать буду)
29 yyyuuu
 
24.01.19
02:13
(23)Заменил во второй на "бгс-л"

Получилось 44 записи.

[url=https://radikal.ru/big/kvjnlbwxa1nax][img]https://c.radikal.ru/c30/1901/a0/c474f1cade4ft.jpg[/img][/url]

Ну и соотвествие подставил только по найденой то есть все одинаковое вышло. Если записи 22 откуда взялись еще 22?) Что то сам дойти не могу)
30 Fram
 
24.01.19
02:17
Ещё раз (26) прочитай
31 yyyuuu
 
24.01.19
02:20
Понял, для кажлдой записи из первой таблицы делает 5 запсей из второй потому что подошло
32 Fram
 
24.01.19
02:30
(31) держи конфетку )
33 yyyuuu
 
25.01.19
02:26
В общем немного по думал, по копался. В итоге сделал все одним запросом а дальше нужное только загрузил в таблицу значений и с соеденением разобрался, нарисовал карнтинку по ней посмотрел все и понял - Да действительно разобрался)
34 yyyuuu
 
25.01.19
02:26
Всем спасибо, помогли ребят)
2 + 2 = 3.9999999999999999999999999999999...