Имя: Пароль:
1C
1С v8
Как Соединить ВыборкиИзРезультатаЗапроса через МенеджерВременныхТаблиц
,
0 Cоляпсус
 
30.05.18
10:35
Доброе утро, вчера искал как соединить две выборкиизрезультазапроса и натыкался на способы через менеджера временных таблиц. А сегодня никак не найду.
Подскажите пожалуйста направление. Спасибо.
Так же пробовал два результата запроса выгрузить в ТЗ и дополнить стандартной процедурой ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(РезультатЗапроса,ВыборкаСтрокТовары);
, но та тоже отказалась работать сославшись на отсутствие метода Добавить(). Вот решил сделать через соединение, но не найду как.
Заранее благодарен.
1 Cоляпсус
 
30.05.18
10:36
* ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ТаблицаИсточник,ТаблицаПриемник);
2 Гипервизор
 
30.05.18
10:41
(0) ТаблицаИсточник,ТаблицаПриемник - таблицы значений.
РезультатЗапроса, ВыборкаСтрокТовары - не таблицы значений.
Так откуда там возьмется метод Добавить()?
3 Cоляпсус
 
30.05.18
10:58
(2) Спасибо, согласен, ВыборкаСтрокТовары - забыл превратить в ТЗ, но всё же этот способ не подходит. Мне нужно соединить две выборки, а это наверное только через менеджера временных таблиц.
4 Cоляпсус
 
30.05.18
11:06
Кто-то может подсказать, как соединить два выборки из результата запроса, через менеджер временных таблиц.
5 Mort
 
30.05.18
11:07
Попробуйте сделать так: Выборка = Выборка1 + Выборка2
6 Cоляпсус
 
30.05.18
11:18
(5) А какой будет результат? Это же выборки. Ругнётся на что-нибудь.
Мне же нужно соединить. В Выборки 1 у меня есть цена и неправильная сумма, в выборке 2 нет цены, но есть правильная сумма. Мне необходимо, чтобы получилась выборка 3 с ценой и правильной суммой. Как-то так
7 DrShad
 
30.05.18
11:20
(4)
http://SSMaker.ru/70564332/

как-то так
8 Cоляпсус
 
30.05.18
11:22
Теоритически можно было бы и может правильнее сделать через присоединение внешней ТЗ, как параметра и далее делать что хочешь, но вот тоже не получается, не понимает запрос внешнюю ТЗ. Вчера читал, что нужно типизировать, пробовал, но почему-то всёравно не получалось. Вот ищу выходы, как же это правильнее реализовать.
9 Cоляпсус
 
30.05.18
11:24
(7) А ВЫБРАТЬ 1 - это мои результаты запросов? Ссори за такие вопросы
10 Cоляпсус
 
30.05.18
11:26
(7) Не понимаю что есть моя ВыборкаИзРезультатаЗапроса
11 DrShad
 
30.05.18
11:26
(9) вообще-то это твои выборки из временных таблиц, которые в менеджере сидят
12 Cоляпсус
 
30.05.18
11:48
(11)Можете пояснить? все менеджеры = МТ, как понять что есть выборка1 или выборка2 и тем более где запрос 3 как понимает что выбрать поля выборки1, выборки2?
Предположим Выборка 1 - с полями Цена,  Сумма, Номенклатура. Выборка 2 - Сумма, Номенклатура.
Как менеджер поймёт, что я ему напишу.
я конечно сейчас попробую, но сам механизм не могу понять.
13 МихаилМ
 
30.05.18
11:54
если Вам нужен обязательно результат запроса

то выгрузите в тз 2 результата
соедините (в инете море примеров)

соединенную тз  пропустите через ПостроительЗапроса.
14 DrShad
 
30.05.18
12:00
(12) я тебе для чего на коленке целый модуль написал? чтобы ты понял принцип, но видимо тебе еще рано

вызывайте специалиста
15 Cоляпсус
 
30.05.18
12:08
(14) Ну понять я всёравно должен. Не понимаю МТ понимает мои выборки. Подскажите если не сложно
16 Cоляпсус
 
30.05.18
12:09
* как
17 DrShad
 
30.05.18
12:10
МТ = Новый МенеджерВременныхТаблиц;

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МТ;
Запрос.Текст = "ВЫБРАТЬ 1 как Поле1 ПОМЕСТИТЬ ВТ1";
Запрос.Выполнить();

Запрос1 = Новый Запрос;
Запрос1.МенеджерВременныхТаблиц = МТ;
Запрос1.Текст = "ВЫБРАТЬ 1 как Поле1, 2 КАК Поле2 ПОМЕСТИТЬ ВТ2";
Запрос1.Выполнить();

Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МТ;
Запрос2.Текст = "Выбрать ВТ1.Поле1, ВТ2.Поле2 ИЗ ВТ1 КАК ВТ1 Левое Соединение ВТ2 КАК ВТ2 ПО ВТ1.Поле1 = ВТ2.Поле1";
Результат = Запрос2.Выполнить();
18 DrShad
 
30.05.18
12:10
что из этого тебе не понятно?
19 Cоляпсус
 
30.05.18
12:18
(17) Попробую объяснить. Из этого мне не понятно, запрос.текст = выбрать 1. Один это что - откуда запрос понимает, что такое поле 1? Откуда он его берёт? вот что главное я не понимаю. Спасибо, что пытаешься донести
20 Так мало знающий
 
30.05.18
12:18
(18) Не понятно зачем плодить столько менеджеров запросов. 1 запрос, 1 менеджер временных таблиц, 3 текста запроса
21 Так мало знающий
 
30.05.18
12:19
(19) 1, в данном примере, это фиксированное значение выборки
22 Sayan_mi
 
30.05.18
12:21
А вставить таблицы в запрос и там связать не проще ли?

"ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    ИсТаблица.ФИО,
        |    ИсТаблица.ДатаРождения,
        |    ИсТаблица.ВидРасчета,
        |    ИсТаблица.НачалоПериода КАК Х_НачалоПериода,
        |    ИсТаблица.КонецПериода КАК Х_КонецПериода,
        |    ИсТаблица.Начисление КАК Х_Начисление,
        |    ИсТаблица.ПериодРегистрации КАК ПериодРасчета
        |ПОМЕСТИТЬ втИсхТаб
        |ИЗ
        |    &ВнешняяТЗ КАК ИсТаблица

    Запрос.УстановитьПараметр("ВнешняяТЗ", ТЗ);


Что-то типа вот этого?
23 Cоляпсус
 
30.05.18
12:22
(21) Это я как раз понимаю, я не могу понять, как он понимает, что это выборка? Где её присвоить нужно МТ?
Выбор1 = Новый МенеджерВременныхТаблиц ИЛИ Запрос.МенеджерВременныхТаблиц = Выборка1 ?
24 Cоляпсус
 
30.05.18
12:23
(22) да я с самого начала так и пробовал сделать, запрос не понимал ТЗ. Что-то не выходило. читал что типизировать надо, написал типы. Но не помогло
25 Так мало знающий
 
30.05.18
12:25
(23) Результаты выборки он хранит во временных таблицах. Из примера результаты первой выборки это ВТ1, результаты второй - ВТ2. МенеджерВременныхТаблиц хранит данные временных таблиц пока ты прыгаешь между запросами.
26 Так мало знающий
 
30.05.18
12:33
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;//Хранилище для данных временных таблиц, живет пока существует переменная "Запрос", позволяет помнить данные вр. таблиц ВТ1 и ВТ2 пока прыгаешь между запросами
Запрос.Текст = "ВЫБРАТЬ 1 как Поле1 ПОМЕСТИТЬ ВТ1";
Запрос.Выполнить();

Запрос.Текст = "ВЫБРАТЬ 1 как Поле1, 2 КАК Поле2 ПОМЕСТИТЬ ВТ2";
Запрос.Выполнить();

Запрос.Текст = "Выбрать ВТ1.Поле1, ВТ2.Поле2 ИЗ ВТ1 КАК ВТ1 Левое Соединение ВТ2 КАК ВТ2 ПО ВТ1.Поле1 = ВТ2.Поле1";
Результат = Запрос.Выполнить();
27 Sayan_mi
 
30.05.18
12:41
(24) ну да у меня в ТЗ строки (например не ссылка на физ лицо а наименование. Если приведете к подобному варианту - возьмет.
28 Cоляпсус
 
30.05.18
12:44
(26) Спасибо. Понял. Хочу уточнить, а как мне понять, какая выборка первая, а какая вторая. Хранилище их хранит так же по порядку выполнения этих запросов? Имею в виду, первый запрос был который содержит цену и неправильную сумму. я создал запрос который содержит правильную сумму и у него отсутствует цена. ВТ1 и ВТ2 какой порядок должен быть?
29 Cоляпсус
 
30.05.18
12:45
(27) Да я вроде как через выразить делал, и упираюсь в пустоту. Попробую ещё конечно. Мне так казалось даже правильнее, но никак не мог побороть запрос
30 Cоляпсус
 
30.05.18
12:47
(27)     ВЫБРАТЬ
    ВыборкаЦен.ВидЦены КАК ВидЦены,
    ВыборкаЦен.ДатаПолученияЦены КАК ДатаПолученияЦены,
    ВыборкаЦен.Документ КАК Документ,
    ВыборкаЦен.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    ВыборкаЦен.Затребовано КАК Затребовано,
    ВыборкаЦен.ИсточникИнформацииОЦенах КАК ИсточникИнформацииОЦенах,
    ВыборкаЦен.ИсточникФинансирования КАК ИсточникФинансирования,
    ВыборкаЦен.КодПоОКЕИ КАК КодПоОКЕИ,
    ВыборкаЦен.Количество КАК Количество,
    ВыборкаЦен.КоличествоБазовых КАК КоличествоБазовых,
    ВыборкаЦен.Коэффициент КАК Коэффициент,
    ВыборкаЦен.Номенклатура КАК Номенклатура,
    ВыборкаЦен.НомерСтроки КАК НомерСтроки,
    ВыборкаЦен.Организация КАК Организация,
    ВыборкаЦен.Отменено КАК Отменено,
    ВыборкаЦен.Отпущено КАК Отпущено,
    ВыборкаЦен.Партия КАК Партия,
    ВыборкаЦен.ПартияДляСебестоимости КАК ПартияДляСебестоимости,
    ВыборкаЦен.ПредварительныйРасчет КАК ПредварительныйРасчет,
    ВыборкаЦен.РазделУчета КАК РазделУчета,
    ВыборкаЦен.СерияНоменклатуры КАК СерияНоменклатуры,
    ВыборкаЦен.СерияНоменклатурыДляСебестоимости КАК СерияНоменклатурыДляСебестоимости,
    ВыборкаЦен.Склад КАК Склад,
    ВыборкаЦен.Сумма КАК Сумма,
    ВыборкаЦен.ТоварКод КАК ТоварКод,
    ВыборкаЦен.ТоварНаименование КАК ТоварНаименование,
    ВыборкаЦен.Цена КАК Цена
ПОМЕСТИТЬ ВТВыборкаЦены
ИЗ
    &ВыборкаЦен КАК ВыборкаЦен
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ОтпускТоваровВОтделениеТовары.Ссылка КАК Ссылка,
    ОтпускТоваровВОтделениеТовары.НомерСтроки КАК НомерСтроки,
    ВЫРАЗИТЬ(ОтпускТоваровВОтделениеТовары.Номенклатура.Наименование КАК СТРОКА(150)) КАК Номенклатура,
    ОтпускТоваровВОтделениеТовары.СерияНоменклатуры КАК СерияНоменклатуры,
    ОтпускТоваровВОтделениеТовары.Партия КАК Партия,
    ОтпускТоваровВОтделениеТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    ОтпускТоваровВОтделениеТовары.Коэффициент КАК Коэффициент,
    ОтпускТоваровВОтделениеТовары.КоличествоВЕдиницахИзмерения КАК КоличествоВЕдиницахИзмерения,
    ОтпускТоваровВОтделениеТовары.МестоХранения КАК МестоХранения,
    ОтпускТоваровВОтделениеТовары.ИсточникФинансирования КАК ИсточникФинансирования,
    ОтпускТоваровВОтделениеТовары.Количество КАК Количество,
    ОтпускТоваровВОтделениеТовары.КодСтроки КАК КодСтроки,
    ОтпускТоваровВОтделениеТовары.НоменклатураЗаказа КАК НоменклатураЗаказа,
    ОтпускТоваровВОтделениеТовары.ЕдиницаИзмеренияЗаказа КАК ЕдиницаИзмеренияЗаказа,
    ОтпускТоваровВОтделениеТовары.КоэффициентЕдиницыЗаказа КАК КоэффициентЕдиницыЗаказа,
    ОтпускТоваровВОтделениеТовары.КоличествоВЕдиницахЗаказа КАК КоличествоВЕдиницахЗаказа,
    ОтпускТоваровВОтделениеТовары.Штрихкод КАК Штрихкод,
    ОтпускТоваровВОтделениеТовары.СтатусУказанияСерий КАК СтатусУказанияСерий,
    ОтпускТоваровВОтделениеТовары.СтатусУказанияСерийОтправитель КАК СтатусУказанияСерийОтправитель,
    ОтпускТоваровВОтделениеТовары.СтатусУказанияСерийПолучатель КАК СтатусУказанияСерийПолучатель,
    ОтпускТоваровВОтделениеТовары.СтатусУказанияПартий КАК СтатусУказанияПартий,
    ОтпускТоваровВОтделениеТовары.СтатусУказанияПартийОтправитель КАК СтатусУказанияПартийОтправитель,
    ОтпускТоваровВОтделениеТовары.СтатусУказанияПартийПолучатель КАК СтатусУказанияПартийПолучатель,
    ОтпускТоваровВОтделениеТовары.СтатьяРасходов КАК СтатьяРасходов,
    ОтпускТоваровВОтделениеТовары.АналитикаРасходов КАК АналитикаРасходов
ПОМЕСТИТЬ ВТТОвары
ИЗ
    Документ.ОтпускТоваровВОтделение.Товары КАК ОтпускТоваровВОтделениеТовары
ГДЕ
    ОтпускТоваровВОтделениеТовары.Ссылка = &Ссылка
;

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТТОвары.Ссылка КАК Ссылка,
    ВТТОвары.НомерСтроки КАК НомерСтроки,
    ВТТОвары.Номенклатура КАК Номенклатура,
    ВТРегНакопления.АналитикаУчетаНоменклатурыНоменклатура КАК АналитикаУчетаНоменклатурыНоменклатура,
    ЕСТЬNULL(ВТРегНакопления.Стоимость, 0) КАК Сумма,
    ВТТОвары.СерияНоменклатуры КАК СерияНоменклатуры,
    ВТТОвары.Партия КАК Партия,
    ВТТОвары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    ВТТОвары.Коэффициент КАК Коэффициент,
    ВТТОвары.КоличествоВЕдиницахИзмерения КАК КоличествоВЕдиницахИзмерения,
    ВТТОвары.МестоХранения КАК МестоХранения,
    ВТТОвары.ИсточникФинансирования КАК ИсточникФинансирования,
    ВТТОвары.Количество КАК Количество,
    ВТТОвары.КодСтроки КАК КодСтроки,
    ВТТОвары.НоменклатураЗаказа КАК НоменклатураЗаказа,
    ВТТОвары.ЕдиницаИзмеренияЗаказа КАК ЕдиницаИзмеренияЗаказа,
    ВТТОвары.КоэффициентЕдиницыЗаказа КАК КоэффициентЕдиницыЗаказа,
    ВТТОвары.КоличествоВЕдиницахЗаказа КАК КоличествоВЕдиницахЗаказа,
    ВТТОвары.Штрихкод КАК Штрихкод,
    ВТТОвары.СтатусУказанияСерий КАК СтатусУказанияСерий,
    ВТТОвары.СтатусУказанияСерийОтправитель КАК СтатусУказанияСерийОтправитель,
    ВТТОвары.СтатусУказанияСерийПолучатель КАК СтатусУказанияСерийПолучатель,
    ВТТОвары.СтатусУказанияПартий КАК СтатусУказанияПартий,
    ВТТОвары.СтатусУказанияПартийОтправитель КАК СтатусУказанияПартийОтправитель,
    ВТТОвары.СтатусУказанияПартийПолучатель КАК СтатусУказанияПартийПолучатель,
    ВТТОвары.СтатьяРасходов КАК СтатьяРасходов,
    ВТТОвары.АналитикаРасходов КАК АналитикаРасходов,
    ВТРегНакопления.Регистратор КАК Регистратор,
    ВТРегНакопления.ВидДвижения КАК ВидДвижения,
    ВТРегНакопления.Количество КАК Количество1,
    ВТРегНакопления.РасчетСебестоимости КАК РасчетСебестоимости,
    ВТТОвары.ЕдиницаИзмерения.КодОКЕИ КАК КодПоОКЕИ,
    ВТТОвары.КоличествоВЕдиницахИзмерения КАК Затребовано,
    ВТТОвары.КоличествоВЕдиницахИзмерения КАК Отпущено,
    ВТВыборкаЦен.Цена КАК Цена
ИЗ
    ВТТОвары КАК ВТТОвары
        ЛЕВОЕ СОЕДИНЕНИЕ ВТРегНакопления КАК ВТРегНакопления
        ПО ВТТОвары.Номенклатура = ВТРегНакопления.АналитикаУчетаНоменклатурыНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ ВТВыборкаЦены КАК ВТВыборкаЦен
        ПО ВТТОвары.Номенклатура = ВТВыборкаЦен.Номенклатура
31 Cоляпсус
 
30.05.18
12:48
Вот как мне кажется построил правильно. Но не работало.
32 mistеr
 
30.05.18
12:48
(23) Временные таблицы существуют только внутри скуля (даже не сервера 1С). Выюбрка же существует только на сервере 1С или на клиенте (толстом). А МВТ это всего лишь связь с ВТ, оставшимися от предыдущего запроса, чтобы их можно было использовать в последующих.

Я думаю, ты неправильно понимаешь фразу "соединить два выборки из результата запроса, через менеджер временных таблиц". Там, где ты это прочитал, скорее всего имелось в виду следующее: вместо выборок на клиенте использовать ВТ для соединения наборов данных в запросе. То есть: сдедали выборку1, записали в ВТ1; сделали выборку 2, записали в ВТ2. Затем соединили ВТ1 и ВТ2 и получили конечный результат. То, что показано в (17).
33 Cоляпсус
 
30.05.18
12:59
(32) Спасибо большое, правда спасибо, теперь понимаю. Сейчас попробую.
Я действительно не правильно понял или даже не знал об этом, пытался в мировом мозге почитать, но ничего похожего не было.