Имя: Пароль:
1C
1С v8
Как объединить три таблицы в одну с добавлением колонок всех трех
0 PCcomCat
 
17.08.15
17:04
Доброго времени, уважаемые!

Есть три запроса:

|ВЫБРАТЬ
| Док1.Ссылка.Док КАК Ссылка,
| Док1.Контрагент КАК Контрагент,
| Док1.ЗаявкаНаЗамер //Ссылка на документ
|ИЗ
| Документ.Док1 КАК Док1

;

|ВЫБРАТЬ
| Док2.Ссылка.Док КАК Ссылка,
| Док2.Контрагент КАК Контрагент,
| Док2.ЗаявкаНаДоставку //Ссылка на документ
|ИЗ
| Документ.Док2 КАК Док2

;

|ВЫБРАТЬ
| Док3.Ссылка.Док КАК Ссылка,
| Док3.Контрагент КАК Контрагент,
| Док3.ЗаявкаНаМонтаж //Ссылка на документ
|ИЗ
| Документ.Док3 КАК Док3

Хочу получить таблицу вида: "Ссылка, Контрагент, ЗаявкаНаЗамер, ЗаявкаНаДоставку, ЗаявкаНаМонтаж" с объединением по "Ссылка, Контрагент", но не могу - туплю.

Подскажите, возможно ли такое, и если да, то как?
1 ДенисЧ
 
17.08.15
17:05
полное соединение
2 18_plus
 
17.08.15
17:07
левое соединение
3 PCcomCat
 
17.08.15
17:21
Кого с кем соединять?
4 ДенисЧ
 
17.08.15
17:21
(3) Вопрос прямо из бронхов....
А не таблицы ли надо соединять?
5 PCcomCat
 
17.08.15
17:25
(4) Про таблицы, как ни странно, я догадалась. Только хрень получается, почему-то.

ПОЛНОЕ СОЕДИНЕНИЕ Док1 и Док2 по Ссылка И Контрагент
ПОЛНОЕ СОЕДИНЕНИЕ Док1 и Док3 по Ссылка И Контрагент
6 ДенисЧ
 
17.08.15
17:26
(5) и что не получается?
7 zak555
 
17.08.15
17:26
(5) зачем тебе контрагент ?
8 18_plus
 
17.08.15
17:29
(5) хрень потому, что по ссылке на док ничего не соединится. лепить надо только по контрагенту
9 PCcomCat
 
17.08.15
17:30
(7) Контрагент может быть как разным, так и одинаковым. И если контрагент одинаков, то нужно собрать все данные в одну строку.
10 18_plus
 
17.08.15
17:30
походу я не прав, а что за документ скрывается под Док3.Ссылка.Док
11 PCcomCat
 
17.08.15
17:31
(8) Чего это? Ссылка может быть на один и тот же документ заказа покупателя.
12 PCcomCat
 
17.08.15
17:34
(6) Получаю строки с пустыми Ссылка и Контрагент для второй и третьей таблицы и заполненные строки для первой. Но ничего не сворачивается. Что-то делаю не так, но не пойму что.
13 18_plus
 
17.08.15
17:34
(11) тогда должно работать. а что не так с результатом? ну и текст запроса надо бы показать.
14 Nuobu
 
17.08.15
17:37
(0) Ничего не получится.
15 Nuobu
 
17.08.15
17:37
(0) Нужно в каждой таблице сделать номер строки и соединять по нему.
16 Nuobu
 
17.08.15
17:38
Что-то типа:

Док1.Ссылка.Док КАК Ссылка,
Док1.Контрагент КАК Контрагент,
Док1.ЗаявкаНаЗамер//Ссылка на документ
Количество( Док1.ЗаявкаНаЗамер) КАК Номер Строки
17 18_plus
 
17.08.15
17:38
(16) ты несёшь что-то типа херни.
18 Nuobu
 
17.08.15
17:38
А в результирующем запросе написать в номере строки
ЕстьNull(Табл1.НомерСтроки, ЕстьNull(Табл2.НомерСтроки, Табл3.НомерСтроки)) КАК НомерСтроки
19 Nuobu
 
17.08.15
17:40
(17) Я знаю, что ТС хочет получить и сам писал такие запросы. Поверь, это не простой запросик.
20 18_plus
 
17.08.15
17:43
(19) не убедил. вижу простую задачу и непонимание того, как работают запросы.
21 PCcomCat
 
17.08.15
17:49
Как понимаете выше был макет запроса. Вот мой запрос:

    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ЗаказПокупателяДокумент.Ссылка КАК Заказ,
    |    ЗаказПокупателяДокумент.Ссылка.Номер,
    |    ЗаказПокупателяДокумент.Ссылка.Дата КАК Дата,
    |    ЗаказПокупателяДокумент.Ссылка.Контрагент,
    |    ЗаказПокупателяДокумент.Ссылка.ДокументОснование КАК ЗаявкаРасчет,
    |    ЗаказПокупателяДокумент.Ссылка.ДокументОснование.Основание.Замерщик КАК МонтажнаяБригада,
    |    ЗаказПокупателяДокумент.Ссылка.ДокументОснование.Основание КАК ДокументЗаякаНаЗамер,
    |    ЗаказПокупателяДокумент.Ссылка.ДокументОснование.Основание.ДатаЗамера КАК ДатаЗамера
    |ПОМЕСТИТЬ ТаблицаЗамеров
    |ИЗ
    |    Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяДокумент
    |ГДЕ
    |    ЗаказПокупателяДокумент.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |    И ЗаказПокупателяДокумент.Ссылка.Организация В(&СписокОрганизаций)
    |    И ЗаказПокупателяДокумент.Номенклатура В ИЕРАРХИИ(&ГруппаРаботПоМонтажу)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ЗаказПокупателяДокумент.Ссылка КАК Заказ,
    |    ЗаказПокупателяДокумент.Ссылка.Номер,
    |    ЗаказПокупателяДокумент.Ссылка.Дата,
    |    ЗаказПокупателяДокумент.Ссылка.Контрагент,
    |    ЗаказПокупателяДокумент.Ссылка.ДокументОснование КАК ЗаявкаРасчет,
    |    ЗаданиеНаМонтажТовары.Ссылка.МонтажнаяБригада,
    |    ЗаданиеНаМонтажТовары.Ссылка КАК ДокументЗаданиеНаМонтаж,
    |    ЗаданиеНаМонтажТовары.Ссылка.ДатаМонтажа КАК ДатаМонтажаЗапланировано
    |ПОМЕСТИТЬ ТаблицаЗаданийНаМонтаж
    |ИЗ
    |    Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяДокумент
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаданиеНаМонтаж.Товары КАК ЗаданиеНаМонтажТовары
    |        ПО (ЗаданиеНаМонтажТовары.Заказ = ЗаказПокупателяДокумент.Ссылка)
    |            И (ЗаданиеНаМонтажТовары.Ссылка.Проведен = ИСТИНА)
    |ГДЕ
    |    ЗаказПокупателяДокумент.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |    И ЗаказПокупателяДокумент.Ссылка.Организация В(&СписокОрганизаций)
    |    И ЗаказПокупателяДокумент.Номенклатура В ИЕРАРХИИ(&ГруппаРаботПоМонтажу)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ЗаказПокупателяДокумент.Ссылка КАК Заказ,
    |    ЗаказПокупателяДокумент.Ссылка.Номер,
    |    ЗаказПокупателяДокумент.Ссылка.Дата,
    |    ЗаказПокупателяДокумент.Ссылка.Контрагент,
    |    ЗаказПокупателяДокумент.Ссылка.ДокументОснование КАК ЗаявкаРасчет,
    |    ОтчетОМонтажеТовары.Ссылка.МонтажнаяБригада,
    |    ОтчетОМонтажеТовары.Ссылка КАК ДокументОтчетОМонтаже,
    |    ОтчетОМонтажеТовары.Ссылка.Дата КАК ДатаМонтажаВыполнено
    |ПОМЕСТИТЬ ТаблицаОтчетовОМонтаже
    |ИЗ
    |    Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяДокумент
    |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОМонтаже.Товары КАК ОтчетОМонтажеТовары
    |        ПО ЗаказПокупателяДокумент.Ссылка = ОтчетОМонтажеТовары.Заказ
    |            И (ОтчетОМонтажеТовары.Ссылка.Проведен = ИСТИНА)
    |ГДЕ
    |    ЗаказПокупателяДокумент.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
    |    И ЗаказПокупателяДокумент.Ссылка.Организация В(&СписокОрганизаций)
    |    И ЗаказПокупателяДокумент.Номенклатура В ИЕРАРХИИ(&ГруппаРаботПоМонтажу)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ТаблицаЗамеров.Заказ КАК Заказ,
    |    ТаблицаЗамеров.Номер,
    |    ТаблицаЗамеров.Дата КАК Дата,
    |    ТаблицаЗамеров.Контрагент,
    |    ТаблицаЗамеров.ЗаявкаРасчет,
    |    ТаблицаСуммыДокумента.СуммаСУчетомСкидки КАК СтоимостьМонтажа,
    |    СтатусыЗаказовСрезПоследних.Статус,
    |    ТаблицаЗамеров.МонтажнаяБригада КАК МонтажнаяБригада,
    |    ТаблицаЗамеров.ДокументЗаякаНаЗамер,
    |    ТаблицаЗамеров.ДатаЗамера,
    |    ТаблицаЗаданийНаМонтаж.ДокументЗаданиеНаМонтаж,
    |    ТаблицаЗаданийНаМонтаж.ДатаМонтажаЗапланировано,
    |    ТаблицаОтчетовОМонтаже.ДокументОтчетОМонтаже,
    |    ТаблицаОтчетовОМонтаже.ДатаМонтажаВыполнено
    |ИЗ
    |    ТаблицаЗамеров КАК ТаблицаЗамеров
    |        ПОЛНОЕ СОЕДИНЕНИЕ ТаблицаЗаданийНаМонтаж КАК ТаблицаЗаданийНаМонтаж
    |        ПО ТаблицаЗамеров.Заказ = ТаблицаЗаданийНаМонтаж.Заказ
    |            И ТаблицаЗамеров.ЗаявкаРасчет = ТаблицаЗаданийНаМонтаж.ЗаявкаРасчет
    |            И ТаблицаЗамеров.МонтажнаяБригада = ТаблицаЗаданийНаМонтаж.МонтажнаяБригада
    |        ПОЛНОЕ СОЕДИНЕНИЕ ТаблицаОтчетовОМонтаже КАК ТаблицаОтчетовОМонтаже
    |        ПО ТаблицаЗамеров.Заказ = ТаблицаОтчетовОМонтаже.Заказ
    |            И ТаблицаЗамеров.ЗаявкаРасчет = ТаблицаОтчетовОМонтаже.ЗаявкаРасчет
    |            И ТаблицаЗамеров.МонтажнаяБригада = ТаблицаОтчетовОМонтаже.МонтажнаяБригада
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ЗаявкаРасчетУслуги.Ссылка КАК ЗаявкаРасчет,
    |            СУММА(ЗаявкаРасчетУслуги.СуммаСУчетомСкидки) КАК СуммаСУчетомСкидки
    |        ИЗ
    |            Документ.ЗаявкаРасчет.Услуги КАК ЗаявкаРасчетУслуги
    |        
    |        СГРУППИРОВАТЬ ПО
    |            ЗаявкаРасчетУслуги.Ссылка) КАК ТаблицаСуммыДокумента
    |        ПО ТаблицаЗамеров.ЗаявкаРасчет = ТаблицаСуммыДокумента.ЗаявкаРасчет
    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыЗаказов.СрезПоследних(&ДатаОкончания, ) КАК СтатусыЗаказовСрезПоследних
    |        ПО ТаблицаЗамеров.Заказ = СтатусыЗаказовСрезПоследних.ЗаказПокупателя
    |
    |УПОРЯДОЧИТЬ ПО
    |    Дата,
    |    Заказ,
    |    МонтажнаяБригада";
22 Мимохожий Однако
 
17.08.15
17:55
(21)Не работает?
23 PCcomCat
 
17.08.15
17:56
(22) Ну почему же, работает :), только совсем криво!
24 PCcomCat
 
17.08.15
17:57
Если я создаю одинаковое количество полей и объединяю через ОБЪЕДИНИТЬ ВСЕ, то получаю 18 строк : по три строки для шести заказов.

Для запроса, выложенного выше, получаю все те же 18 строк, только заказы заполнены в трех строках из первой таблицы, а в остальных пусто, ну кроме нужных колонок, которые хочется в одну строку объединить.
25 PCcomCat
 
17.08.15
17:59
+(24) Не для трех, а для шести.
26 roman52
 
17.08.15
19:31
(20) Nuobu дело говорит, нужно нумеровать и по номеру строки соединять

т.к. может быть различное количество документов разного типа, например документов 1-го типа 3 штуки, 2-го - 2 штуки, 3-го - 10 штук
27 mogul
 
17.08.15
19:37
|ВЫБРАТЬ
| Док1.Ссылка.Док КАК Ссылка,
| Док1.Контрагент КАК Контрагент
|поместить т
|ИЗ
| Документ.Док1 КАК Док1
|объединить
|ВЫБРАТЬ
| Док2.Ссылка.Док КАК Ссылка,
| Док2.Контрагент КАК Контрагент
|объединить
|ВЫБРАТЬ
| Док3.Ссылка.Док КАК Ссылка,
| Док3.Контрагент КАК Контрагент;

|ВЫБРАТЬ
| т.Ссылка,
| т.Контрагент,
| Док1.ЗаявкаНаЗамер,
| Док2.ЗаявкаНаДоставку,
| Док3.ЗаявкаНаМонтаж
|ИЗ
| т
| левое соедение Документ.Док1 КАК Док1 по т.контрагент = док1.контрагент и т.ссылка = Док1.Ссылка.Док
| левое соедение Документ.Док2 КАК Док2 по т.контрагент = док2.контрагент и т.ссылка = Док2.Ссылка.Док
| левое соедение Документ.Док3 КАК Док3 по т.контрагент = док3.контрагент и т.ссылка = Док3.Ссылка.Док
28 EvgeniuXP
 
17.08.15
21:06
7 лет на форуме - не знают соединения... прямая дорога в http://www.spec8.ru
29 PCcomCat
 
17.08.15
21:23
(28) Знаете? Так подскажите!
30 Абыр
 
17.08.15
22:10
(0) с учетом того, что Ссылка из Док1, Док2, Док3 - это всегда будут разные  значения, то задача, видимо, сформулирована неверно
31 roman52
 
17.08.15
22:20