|
Как соединить 3 таблицы в запросе 1с? | ☑ | ||
---|---|---|---|---|
0
maksyandra
23.03.17
✎
22:03
|
Как соединить 3 таблицы в запросе 1с???
Таблица 1: Контрагент | Возраст ------------+------- Иван | 12 Тарас | 34 Юра | 23 Таблица 2: Контрагент | НомерПаспорта ------------+------- Иван | 123 Тарас | 345 Юра | 023 Таблица 3: Контрагент | Адрес ------------+------- Иван | Ватутина Тарас | Пушкина Юра | Гагарина На выходе нужно получить таблицу 4. Таблица 4: Контрагент | Адрес Возраст НомерПаспорта ------------+------- Иван | Ватутина 12 123 Тарас | Пушкина 34 345 Юра | Гагарина 23 023 |
|||
1
XLife
23.03.17
✎
22:09
|
(0) Как соединить 3 таблицы в запросе 1с???
по контрагенту |
|||
2
maksyandra
23.03.17
✎
22:34
|
(1) Это понятно. Что в запросе делать??
|
|||
3
youalex
23.03.17
✎
22:40
|
(2) Соединение
|
|||
4
EvgeniuXP
23.03.17
✎
22:45
|
в твоем случае - внутреннее, чтоб не разбираться с левым и правым :)
|
|||
5
CepeLLlka
23.03.17
✎
22:46
|
||||
6
maksyandra
23.03.17
✎
22:46
|
(3) Выдает что-то типа этого
Иван | Ватутина 0 0 Иван | 0 12 0 Иван | 0 0 123 Тарас | Пушкина 0 0 Тарас | 0 34 0 Тарас | 0 0 345 Юра | Гагарина 0 0 Юра | 0 23 0 Юра | 0 0 023 |
|||
7
EvgeniuXP
23.03.17
✎
22:46
|
Возьми книжку волшебника - почитай там про соединения.
|
|||
8
EvgeniuXP
23.03.17
✎
22:47
|
(6) две галки поставь
|
|||
9
youalex
23.03.17
✎
22:47
|
(6) запрос покажи
|
|||
10
EvgeniuXP
23.03.17
✎
22:48
|
наоборот сними :)
|
|||
11
maksyandra
23.03.17
✎
22:49
|
(9)
ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент КАК Контрагент, ДанныеЧленовКооператива.Значение КАК Область, NULL КАК Район, NULL КАК НаселенныйПункт ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.Область) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент, NULL, ДанныеЧленовКооператива.Значение, NULL ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.Район) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент, NULL, NULL, ДанныеЧленовКооператива.Значение ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.НаселенныйПункт) |
|||
12
maksyandra
23.03.17
✎
22:51
|
(8) (9) Какие галки?
|
|||
13
youalex
23.03.17
✎
22:58
|
(11) Контрагент у тебя кто? Справочник.Контрагенты?
Вот к нему цепляй через ЛС Типа
|
|||
14
d546
23.03.17
✎
22:59
|
не показывай больше запросы :) не твое
|
|||
15
maksyandra
23.03.17
✎
23:01
|
(14) А что не так?
|
|||
16
d546
23.03.17
✎
23:03
|
(15) используй подсказки из постов 3 и 4
и ищи различие между словами "соединить" и "объединить" |
|||
17
maksyandra
23.03.17
✎
23:36
|
(16) И мне каждую таблицу нужно соединить с каждой???
|
|||
18
NorthWind
24.03.17
✎
07:15
|
(17) нет, каждую с каждой не надо. При написании запроса достаточно чтобы каждая таблица поучаствовала в соединении, а дальше уже движок для работы с запросами сам все поймёт.
|
|||
19
1dvd
24.03.17
✎
07:26
|
Разжёвано про соединения:
http://helpme1c.ru/yazyk-zaprosov-1s-8-3-dlya-nachinayushhix-programmistov-soedineniya |
|||
20
maksyandra
24.03.17
✎
11:44
|
(18) Вот запрос. В таком виде выводит пустые строки.
ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент КАК Контрагент, ДанныеЧленовКооператива.Значение КАК НаселенныйПункт, ДанныеЧленовКооператива.Значение.КодКОАТУУ КАК КодКОАТУУ ПОМЕСТИТЬ ТабНаселенныйПункт ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.НаселенныйПункт) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент, ДанныеЧленовКооператива.Значение КАК ДатаРождения ПОМЕСТИТЬ ТабДатаРождения ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.ДатаРождения) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент, ДанныеЧленовКооператива.Значение КАК СерияПаспорта ПОМЕСТИТЬ ТабСерияПаспорта ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.СерияПаспорта) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент, ДанныеЧленовКооператива.Значение КАК НомерПаспорта ПОМЕСТИТЬ ТабНомерПаспорта ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.НомерПаспорта) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТабНаселенныйПункт.Контрагент, ТабНаселенныйПункт.НаселенныйПункт, ТабДатаРождения.ДатаРождения, ТабНомерПаспорта.НомерПаспорта, ТабСерияПаспорта.СерияПаспорта ИЗ ТабНаселенныйПункт КАК ТабНаселенныйПункт ПОЛНОЕ СОЕДИНЕНИЕ ТабДатаРождения КАК ТабДатаРождения ПОЛНОЕ СОЕДИНЕНИЕ ТабСерияПаспорта КАК ТабСерияПаспорта ПОЛНОЕ СОЕДИНЕНИЕ ТабНомерПаспорта КАК ТабНомерПаспорта ПО ТабСерияПаспорта.Контрагент = ТабНомерПаспорта.Контрагент ПО ТабДатаРождения.Контрагент = ТабСерияПаспорта.Контрагент ПО ТабНаселенныйПункт.Контрагент = ТабДатаРождения.Контрагент |
|||
21
maksyandra
24.03.17
✎
11:51
|
Вот последний вариант, но все равно все строки не соединяет, что не так???
ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент КАК Контрагент, ДанныеЧленовКооператива.Значение КАК НаселенныйПункт, ДанныеЧленовКооператива.Значение.КодКОАТУУ КАК КодКОАТУУ ПОМЕСТИТЬ ТабНаселенныйПункт ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.НаселенныйПункт) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент, ДанныеЧленовКооператива.Значение КАК ДатаРождения ПОМЕСТИТЬ ТабДатаРождения ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.ДатаРождения) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент, ДанныеЧленовКооператива.Значение КАК СерияПаспорта ПОМЕСТИТЬ ТабСерияПаспорта ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.СерияПаспорта) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ДанныеЧленовКооператива.Контрагент, ДанныеЧленовКооператива.Значение КАК НомерПаспорта ПОМЕСТИТЬ ТабНомерПаспорта ИЗ РегистрСведений.ДанныеЧленовКооператива КАК ДанныеЧленовКооператива ГДЕ ДанныеЧленовКооператива.Реквизит = ЗНАЧЕНИЕ(ПланВидовХарактеристик.РеквизитыДаныхЧленовКооператива.НомерПаспорта) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЕСТЬNULL(ТабНаселенныйПункт.Контрагент, ЕСТЬNULL(ТабДатаРождения.Контрагент, ЕСТЬNULL(ТабНомерПаспорта.Контрагент, ТабСерияПаспорта.Контрагент))) КАК Поле1, ТабНаселенныйПункт.НаселенныйПункт, ТабДатаРождения.ДатаРождения, ТабНомерПаспорта.НомерПаспорта, ТабСерияПаспорта.СерияПаспорта ИЗ ТабНаселенныйПункт КАК ТабНаселенныйПункт ПОЛНОЕ СОЕДИНЕНИЕ ТабДатаРождения КАК ТабДатаРождения ПОЛНОЕ СОЕДИНЕНИЕ ТабСерияПаспорта КАК ТабСерияПаспорта ПОЛНОЕ СОЕДИНЕНИЕ ТабНомерПаспорта КАК ТабНомерПаспорта ПО ТабСерияПаспорта.Контрагент = ТабНомерПаспорта.Контрагент ПО ТабДатаРождения.Контрагент = ТабСерияПаспорта.Контрагент ПО ТабНаселенныйПункт.Контрагент = ТабДатаРождения.Контрагент |
|||
22
catena
24.03.17
✎
11:57
|
(21)Составь полную выборку контрагентов и к ней присоединяй паспорта и дни рождения.
|
|||
23
maksyandra
24.03.17
✎
12:00
|
(22) Мне не нужна полная выборка контрагентов. Только те который есть в регистре
|
|||
24
dezss
24.03.17
✎
12:05
|
чета вроде этого
Выбрать таблица1.Контрагент, таблица1.Возраст, таблица2.НомерПаспорта, таблица3.адрес Из таблица1 как таблица1 левое соединение таблица2 как таблица2 по таблица1.контрагент = таблица2.контрагент левое соединение таблица3 как таблица3 по таблица1.контрагент = таблица3.контрагент |
|||
25
maksyandra
24.03.17
✎
12:21
|
(24) А если в таблицах 2 и 3 есть записи с контрагентами которых нет в таблице 1 их не выведет при таком соединении.
|
|||
26
VladZ
24.03.17
✎
12:23
|
(0) Также, как соединить две.
|
|||
27
dezss
24.03.17
✎
12:23
|
(25) Ну тогда брать справочник контрагентов и к нему все цеплять
Как поставлена задача, так и решение написано. А если есть несколько адресов у одного контрагента и т.п.? |
|||
28
catena
24.03.17
✎
12:33
|
(23)Составь полную выборку контрагентов ИЗ ПЕРВЫХ ТРЕХ ЗАПРОСОВ и к ней присоединяй паспорта и дни рождения.
|
|||
29
HardBall
24.03.17
✎
13:14
|
(0) Самое интересное, что 4 таблица исходя из задачи и так находится как минимум в 3НФ, зачем такая декомпозиция.
|
|||
30
Maniac
24.03.17
✎
13:22
|
О тема интересная.
А как есть есть две таблицы значений (не регистры каки то) И в одной не дополнено несколько колонок которые есть в другой. Таблицы разного размера. В одной таблице есть много строк, в которой нужно допролнить значение из другой таблицы. Обе таблицы связывает одна колонка со значением которое есть и в одной и в другой. Ключ. В общем надо чтобы в одной ТЗ заполнить данные из другой ТЗ по связи ключа. Без циклов. Сейчас идет перебор с методом Найти (используется ключ) Но надо сделать чтобы это было в РАЗЫ быстрее. |
|||
31
Maniac
24.03.17
✎
13:25
|
Запрос не поможет - так как - эти таблицы являются обьектами.
Запросы потребуют выгрузки этих таблиц. А также даже если мы каким то образом получим запрос - еще надо будет и загружать. Таблицы огромные. И времени на выгрузки и загрузки обратно в 1С тоже как бы не пять секунд делается. Очень печально вто в 1С нет таких встроенных методов по какому то ключу-колонке заполнить значения из другой таблицы. |
|||
32
DrShad
24.03.17
✎
13:37
|
(31) [Запрос не поможет - так как - эти таблицы являются обьектами]
источником данных для запроса может быть и объект |
|||
33
DrShad
24.03.17
✎
13:37
|
а если их загнать как внешние источники данных то вообще все элементарно
|
|||
34
Maniac
24.03.17
✎
13:46
|
(33) слабо себе представляю что в внешние истоники можно загнать таблицы значений вшитые в обработку
|
|||
35
Maniac
24.03.17
✎
13:47
|
В общем то я попробовал вчера даже просто через выгрузку таблиц и передачу в запрос.
Но запрос ругается на вторую таблицу хоть тресни. и не понятно как сделать соединение. |
|||
36
DrShad
24.03.17
✎
13:48
|
(34) слабо себе представляю как можно вшить в обработку ТЗ
|
|||
37
DrShad
24.03.17
✎
13:48
|
(35) для того чтобы запрос съел таблицу значений в ней должны быть типизированы колонки
|
|||
38
Maniac
24.03.17
✎
13:55
|
(36) табличная часть обработки.
Обе. |
|||
39
Maniac
24.03.17
✎
13:55
|
Тапизированы естественно.
|
|||
40
Maniac
24.03.17
✎
13:57
|
о епс заработало!
|
|||
41
1dvd
24.03.17
✎
13:57
|
(35) >>Но запрос ругается на вторую таблицу хоть тресни. и не понятно как сделать соединение.
Как ругается-то? Маня, ты чо как маленький? |
|||
42
DrShad
24.03.17
✎
13:58
|
(40) с пятницей
|
|||
43
Maniac
24.03.17
✎
13:58
|
СвойстваНоменклатуры = Объект.СвойстваНоменклатуры.Выгрузить();
ТаблицаНоменклатуры = Объект.ТабличнаяЧасть.Выгрузить(); ТектЗапроса = "ВЫБРАТЬ | СвойстваНоменклатуры.КлючСтроки КАК КлючСтроки, | СвойстваНоменклатуры.ВидНоменклатуры КАК ВидНоменклатуры, | СвойстваНоменклатуры.НаборСвойств КАК НаборСвойств, | СвойстваНоменклатуры.Свойство КАК Свойство, | СвойстваНоменклатуры.Значение КАК Значение, | СвойстваНоменклатуры.Индивидуальные КАК Индивидуальные, | СвойстваНоменклатуры.ТипЗначенияТекст КАК ТипЗначенияТекст, | СвойстваНоменклатуры.БезСвойств КАК БезСвойств |ПОМЕСТИТЬ ВременнаяСвойстваНоменклатуры |ИЗ | &СвойстваНоменклатуры КАК СвойстваНоменклатуры | |ИНДЕКСИРОВАТЬ ПО | КлючСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаНоменклатуры.КлючСтроки КАК КлючСтроки, | ТаблицаНоменклатуры.Номенклатура КАК Номенклатура |ПОМЕСТИТЬ ВременнаяТаблицаНоменклатуры |ИЗ | &ТаблицаНоменклатуры КАК ТаблицаНоменклатуры | |ИНДЕКСИРОВАТЬ ПО | КлючСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВременнаяСвойстваНоменклатуры.КлючСтроки КАК КлючСтроки, | ВременнаяСвойстваНоменклатуры.ВидНоменклатуры КАК ВидНоменклатуры, | ВременнаяСвойстваНоменклатуры.НаборСвойств КАК НаборСвойств, | ВременнаяСвойстваНоменклатуры.Свойство КАК Свойство, | ВременнаяСвойстваНоменклатуры.Значение КАК Значение, | ВременнаяСвойстваНоменклатуры.Индивидуальные КАК Индивидуальные, | ВременнаяСвойстваНоменклатуры.ТипЗначенияТекст КАК ТипЗначенияТекст, | ВременнаяСвойстваНоменклатуры.БезСвойств КАК БезСвойств, | ВременнаяТаблицаНоменклатуры.Номенклатура КАК Номенклатура |ИЗ | ВременнаяСвойстваНоменклатуры КАК ВременнаяСвойстваНоменклатуры | ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаНоменклатуры КАК ВременнаяТаблицаНоменклатуры | ПО ВременнаяСвойстваНоменклатуры.КлючСтроки = ВременнаяТаблицаНоменклатуры.КлючСтроки"; Запрос = Новый Запрос(); Запрос.Текст = ТектЗапроса; Запрос.УстановитьПараметр("СвойстваНоменклатуры", СвойстваНоменклатуры); Запрос.УстановитьПараметр("ТаблицаНоменклатуры", ТаблицаНоменклатуры); РезультатЗапроса = Запрос.Выполнить(); Объект.СвойстваНоменклатуры.Загрузить(РезультатЗапроса.Выгрузить()); |
|||
44
Волшебник
модератор
24.03.17
✎
13:58
|
(40) Ждём новую версию Мегапрайса
|
|||
45
DrShad
24.03.17
✎
14:01
|
а когда он еще для себя откроет менеджер временных таблиц, не говоря про СКД, то ......
|
|||
46
Maniac
24.03.17
✎
14:04
|
(45) рассказывай секрет)
|
|||
47
DrShad
24.03.17
✎
14:06
|
(46) я понаблюдаю лучше )))
|
|||
48
Oftan_Idy
24.03.17
✎
14:07
|
(46) деньги давай, да
|
|||
49
Maniac
24.03.17
✎
14:08
|
(48) нивапрос. Подключайся разжую проблему. Заплачу за каждый час 2500
|
|||
50
1dvd
24.03.17
✎
14:08
|
Скопирую сюда описание менеджера временных таблиц из СП за 500 руб
|
|||
51
Oftan_Idy
24.03.17
✎
14:12
|
(49) Проблема то в чем?
Тебе уже выше написали все. Помещаешь в запрос параметр - табличную часть. Выбираешь во временную таблицу с обязательно типизацией. Соединяешь левым соединением, берешь колонку из второй таблицы. ерунда И быстро все будет |
|||
52
Maniac
24.03.17
✎
14:14
|
(51 - (43) уже заработало.
|
|||
53
DrShad
24.03.17
✎
14:18
|
(49) куда подключаться?
|
|||
54
Oftan_Idy
24.03.17
✎
14:20
|
эээ, а деньги ?
|
|||
55
DrShad
24.03.17
✎
14:22
|
(54) он о других проблемах
|
|||
56
Maniac
24.03.17
✎
14:27
|
(53) выходи на связь. тебя давно знаю. ты ж даже вроде из Ростова.
Поболтаем. Давно ищу себе помощника. Готов при нормальном раскладе мотивировать |
|||
57
DrShad
24.03.17
✎
14:28
|
(56) я не из Ростова )))
|
|||
58
Maniac
24.03.17
✎
14:31
|
Значения не имеет) помню общались.
В общем по теме (0) в (43) реальный пример Думаю задача закрыта у автора |
|||
59
maksyandra
24.03.17
✎
14:47
|
Всем спасибо. Проблему решил. Последовав совету (28)
|
|||
60
maksyandra
24.03.17
✎
14:48
|
(58) Да, задача закрыта.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |