|
Как вложить ТЗ в ТЗ в запросе | ☑ | ||
---|---|---|---|---|
0
MaiorovYury
13.11.14
✎
10:34
|
Извиняюсь за непонятный сабж, но не знаю как иначе кратко объяснить.
Задача следующая - есть самописная конфигурация, в ней 2 документа - ГТД и Инвойс. В ГТД есть ТЧ - Инвойсы, в ней ссылка на инвойс и суммы сборов и прочего. Примерно так ВЫБРАТЬ РаспределениеДополнительныхСуммГТД.Ссылка, РаспределениеДополнительныхСуммГТД.Инвойсы.( Ссылка, Инвойсы, ) ИЗ Документ.РаспределениеДополнительныхСуммГТД КАК РаспределениеДополнительныхСуммГТД В Инвойсах есть ТЧ Товары. Хочется в запросе в ТЗ Инвойсы еще добавить ТЗ Инвойсы.Товары, чтобы выглядело так ВЫБРАТЬ РаспределениеДополнительныхСуммГТД.Ссылка, РаспределениеДополнительныхСуммГТД.Инвойсы.( Ссылка, Инвойсы, Инвойсы.Товары, ) ИЗ Документ.РаспределениеДополнительныхСуммГТД КАК РаспределениеДополнительныхСуммГТД Но если делать так вываливается с ошибкой "Поля из различных вложенных таблиц используются в одном результирующем поле". Сделать соединениями тоже не получается Так вообще 1С падает с таким сообщением Ошибка SDBL: VT8505 не является именем поля ВЫБРАТЬ РаспределениеДополнительныхСуммГТД.Ссылка, РаспределениеДополнительныхСуммГТД.Инвойсы.( Ссылка, Инвойсы, ИнвойсыПоставщиков.Товары ) ИЗ Документ.РаспределениеДополнительныхСуммГТД КАК РаспределениеДополнительныхСуммГТД ЛЕВОЕ СОЕДИНЕНИЕ Документ.ИнвойсыПоставщиков КАК ИнвойсыПоставщиков ПО ИнвойсыПоставщиков.Ссылка = РаспределениеДополнительныхСуммГТД.Инвойсы.Инвойсы; Конечно можно сделать так ВЫБРАТЬ РаспределениеДополнительныхСуммГТД.Ссылка, РаспределениеДополнительныхСуммГТД.Инвойсы.( Ссылка, Инвойсы, ), ИнвойсыПоставщиков.Товары ИЗ Документ.РаспределениеДополнительныхСуммГТД КАК РаспределениеДополнительныхСуммГТД ЛЕВОЕ СОЕДИНЕНИЕ Документ.ИнвойсыПоставщиков КАК ИнвойсыПоставщиков ПО ИнвойсыПоставщиков.Ссылка = РаспределениеДополнительныхСуммГТД.Инвойсы.Инвойсы; Но если несколько инвойсов в одном ГТД то буду получать повторяющиеся строки. А вообще мне это надо для обмена через COM, так что хочется как можно меньше ненужно информации возвращать |
|||
1
vicof
13.11.14
✎
10:35
|
Левое соединение
|
|||
2
MaiorovYury
13.11.14
✎
10:37
|
(1) А дальше?
Я пытался левым соединение сделать, но именно вложить в ТЗ не получается |
|||
3
MaiorovYury
13.11.14
✎
10:39
|
Такой вариант тоже двоит строки
ВЫБРАТЬ РаспределениеДополнительныхСуммГТД.Ссылка, РаспределениеДополнительныхСуммГТД.Инвойсы, ИнвойсыПоставщиков.Товары ИЗ Документ.РаспределениеДополнительныхСуммГТД.Инвойсы КАК РаспределениеДополнительныхСуммГТД ЛЕВОЕ СОЕДИНЕНИЕ Документ.ИнвойсыПоставщиков КАК ИнвойсыПоставщиков ПО ИнвойсыПоставщиков.Ссылка = РаспределениеДополнительныхСуммГТД.Инвойсы; |
|||
4
vicof
13.11.14
✎
10:42
|
не надо вкладывать. Чтобы не двоил, есть агрегатные функции.
|
|||
5
MaiorovYury
13.11.14
✎
10:47
|
(4) Например?
Если брать РАЗЛИЧНЫЕ - вот ошибка В запросе с предложениями РАЗЛИЧНЫЕ или ОБЪЕДИНИТЬ нельзя использовать вложенные таблицы Какую еще агрегатную функцию можно тут использовать? |
|||
6
MaiorovYury
13.11.14
✎
10:48
|
(5) Да и если бы РАЗЛИЧНЫЕ сработало - ничего не изменилось бы
Пытался так сделать, но это тоже самое что и без группировки ВЫБРАТЬ РаспределениеДополнительныхСуммГТД.Ссылка, РАЗЛИЧНЫЕ(ИнвойсыПоставщиков.Товары) ИЗ Документ.РаспределениеДополнительныхСуммГТД.Инвойсы КАК РаспределениеДополнительныхСуммГТД ЛЕВОЕ СОЕДИНЕНИЕ Документ.ИнвойсыПоставщиков КАК ИнвойсыПоставщиков ПО ИнвойсыПоставщиков.Ссылка = РаспределениеДополнительныхСуммГТД.Инвойсы СГРУППИРОВАТЬ ПО РаспределениеДополнительныхСуммГТД.Ссылка |
|||
7
vicof
13.11.14
✎
10:53
|
(5) МАКСИМУМ(), например. Будет больше строк в запросе. Но одну ГТД несколько инвойсов, на один инвойс - несколько товаров.
|
|||
8
Drac0
13.11.14
✎
10:54
|
(6) РАЗЛИЧНЫЕ суешь не туда. Надо: ВЫБРАТЬ РАЗЛИЧНЫЕ и дальше по тексту.
|
|||
9
MaiorovYury
13.11.14
✎
11:05
|
(7)(8) Эти варианты ничем не будут отличаться от того, что я уже писал
ВЫБРАТЬ РаспределениеДополнительныхСуммГТД.Ссылка, РаспределениеДополнительныхСуммГТД.Инвойсы, ИнвойсыПоставщиков.Товары ИЗ Документ.РаспределениеДополнительныхСуммГТД.Инвойсы КАК РаспределениеДополнительныхСуммГТД ЛЕВОЕ СОЕДИНЕНИЕ Документ.ИнвойсыПоставщиков КАК ИнвойсыПоставщиков ПО ИнвойсыПоставщиков.Ссылка = РаспределениеДополнительныхСуммГТД.Инвойсы; |
|||
10
Иоканаан
13.11.14
✎
11:09
|
(0)Честно говоря мало что понял из обсуждения. Но кабы мне нужно было объединить данные из табличных частей двух разных документов, я бы сделал это запросом с ОБЪЕДИНИТЬ ВСЕ. Быть может, в Вашем случае это тоже подойдёт?
|
|||
11
MaiorovYury
13.11.14
✎
11:18
|
(10) тут нужно не объединить, а вложить
Хочется как можно меньше повторяющихся данных - поэтому надо вложить в одну строку еще одну ТЗ |
|||
12
К_Дач
13.11.14
✎
11:44
|
вложить = левое соединение Тз1 с Тз2 + группировать по всем полям Тз1 при выводе
|
|||
13
hhhh
13.11.14
✎
11:54
|
(11) новые плюшкины? Чето вы там сэкономите 10 мегабайт. А в скорости потеряете в 2 раза.
|
|||
14
MaiorovYury
13.11.14
✎
14:01
|
(13) учитывая что соединение по com идет из Питера в Москву и скорость получения данных оттуда сильно страдает, думаю, что оптимизировать нужно именно на уровне передачи данных
|
|||
15
MaiorovYury
13.11.14
✎
14:03
|
(12) не понимаю как это сделать.
Если группировать по всем полям Тз1 - то что делать с полями Тз2 ? Разве запрос заработает, если не группировать по ним и не использовать агрегатную функцию? Если использовать агрегатную функцию, то какую? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |