Имя: Пароль:
1C
1C 7.7
v7: 1cpp, запрос, ВТ, синтаксис
0 Eeakie
 
02.10.19
13:15
Добрый день.
Какой-то косяк с соединением в последнем джоине. Не врубаюсь. Ткните пальцем что не так.

|select
    |    Заявка.iddoc as [Заявка $Документ.Заявка],
    |    isnull(Бухгалтерия.РезервТовараОстаток, 0) as Бухгалтерия,
    |    isnull(Склад.КоличествоОстаток, 0) as Склад,
    |    isnull(Шайба.ОстатокТовараОстаток, 0) as Шайба,
    |    isnull(Развоз.КоличествоОстаток, 0) as Развоз
    |from $Документ.Заявка as Заявка
    |left join _1sjourn as Журнал on Журнал.iddoc = Заявка.iddoc
    |left join $РегистрОстатки.Заявки() as Бухгалтерия on Бухгалтерия.ПоСчету = Заявка.iddoc
    |left join $РегистрОстатки.Ожидания() as Склад on Склад.Заявка = $ВидДокумента36.Заявка + Заявка.iddoc
    |left join $РегистрОстатки.ОстаткиТоваровОбщ() as Шайба on Шайба.Заявка = Заявка.iddoc
    |left join $РегистрОстатки.Развоз(,
    |    inner join $Документ.НакладнаяВнПерем as НВП on НВП.iddoc = ДокументДвижения and $НВП.Заявка = Заявка.iddoc) as Развоз
1 Admin_Net_1C
 
02.10.19
13:17
(0) :ДокументДвижения - если я правильно помню, как описываются параметры в запросе на 1С++
2 Eeakie
 
02.10.19
13:20
(1) ДокументДвижения это измерение в регистре Развоз.
3 Eeakie
 
02.10.19
13:22
(0) Забыл написать. Ругается так: Неправильный синтаксис около конструкции "Развоз". Без последнего джойна всё прекрасно работает.
4 Admin_Net_1C
 
02.10.19
13:24
т.е. ты в виртуальной таблице остатков накладываешь ограничение с помощью запроса (inner join $Документ.НакладнаяВнПерем), я правильно понял?
А так можно вообще? (я подзабыл уже 1cpp)
5 Ёпрст
 
02.10.19
13:27
(3) не видно on после Развоз, он там есть ?
(4) можно
6 Eeakie
 
02.10.19
13:28
(4) Всё верно :) Пример ниже отрабатывает без проблем.

select Развоз.ДокументДвижения
from
   $РегистрОстатки.Развоз(,
      inner join $Документ.НакладнаяВнПерем as НВП on НВП.iddoc = ДокументДвижения and $НВП.Заявка in (select val from #Заявки)) as Развоз
7 leshikkam
 
02.10.19
13:29
Дык таблицы с алиасом
НакладнаяВнПерем
нет же в запросе. Для внутреннего соединения внутри ВТ в последнем джоине.
8 Ёпрст
 
02.10.19
13:29
9 Ёпрст
 
02.10.19
13:31
После as Развоз .. где ON ?
10 Eeakie
 
02.10.19
13:32
(9) Пытаюсь сообразить что можно после ON написать.
11 Ёпрст
 
02.10.19
13:33
(10) Т.е его нет ? Нафига тогда inner join с этой табличкой остатков ?
12 Ёпрст
 
02.10.19
13:33
по каким полям иннер то будет, их и перечисляй в on
13 Admin_Net_1C
 
02.10.19
13:34
(10) попробуй после on 1=1 (аналог True)
14 Eeakie
 
02.10.19
13:39
(12) Возможно я занимаюсь какой-то херней. В 3 регистрах есть измерение "Заявка", по которому без проблем забираются данные из ВТ. В четвертом регистре нет измерения "Заявка", но есть измерение "ДокументДвижения", у которого есть реквизит "Заявка", по которому мне и нужно их связать. Похоже, я что-то не так делаю.
(13) Не работает.
15 Eeakie
 
02.10.19
13:41
+(12) То есть должно быть что-то типа:
left join $РегистрОстатки.Развоз() as Развоз on Развоз.ДокументДвижения.Заявка = Заявка.iddoc
Но такое, к сожалению, не работает :)
16 Eeakie
 
02.10.19
13:54
Походу придётся делать через union.
17 Eeakie
 
02.10.19
14:09
Решилось следующим образом:

select
    Бухгалтерия.ПоСчету as [Заявка $Документ.Заявка],
    isnull(Бухгалтерия.РезервТовараОстаток, 0) as Бухгалтерия,
    0 as Склад,
    0 as Шайба,
    0 as Развоз
from $РегистрОстатки.Заявки() as Бухгалтерия
union all
select
    Заявка.iddoc as [Заявка $Документ.Заявка],
    0 as Бухгалтерия,
    isnull(Склад.КоличествоОстаток, 0) as Склад,
    0 as Шайба,
    0 as Развоз
from $РегистрОстатки.Ожидания() as Склад
inner join $Документ.Заявка as Заявка on $ВидДокумента36.Заявка + Заявка.iddoc = Склад.Заявка
union all
select
    Шайба.Заявка as [Заявка $Документ.Заявка],
    0 as Бухгалтерия,
    0 as Склад,
    isnull(Шайба.ОстатокТовараОстаток, 0) as Шайба,
    0 as Развоз
from $РегистрОстатки.ОстаткиТоваровОбщ() as Шайба
union all
select
    $НВП.Заявка as [Заявка $Документ.Заявка],
    0 as Бухгалтерия,
    0 as Склад,
    0 as Шайба,
    isnull(Развоз.КоличествоОстаток, 0) as Развоз
from $РегистрОстатки.Развоз() as Развоз
inner join $Документ.НакладнаяВнПерем as НВП on НВП.iddoc = Развоз.ДокументДвижения

Похоже, не самое оптимальное решение, но рабочее.