Имя: Пароль:
1C
1C 7.7
v7: 1с 77 + SQL
, ,
0 Lugano
 
24.09.15
10:10
Добрый день!
Суть запроса: вытащить остатки номенклатуры на определенном складе (место хранения - ячейка на стелаже). При таком тексте (указан ниже) Пишет "Syntax error". Без РегистрОстатки.ОстаткиТМЦ запрос отрабатывает отлично.

|SELECT
| СпрМХН.ID as [МХН $Справочник.МестаХраненияНоменклатуры],
| СпрНом.CODE as Код,
| RTrim($СпрНом.Артикул) as Артикул,
| RTrim(СпрНом.DESCR) as Наименование,
| РегИтоги.КоличествоОстаток as Остатки,
| СпрНом.ID as [Номенклатура $Справочник.Номенклатура]
|FROM
| $Справочник.Номенклатура as СпрНом (NOLOCK)
|INNER JOIN
| $Справочник.МестаХраненияНоменклатуры as СпрМХН (NOLOCK) ON СпрНом.ID=СпрМХН.ParentExt (NOLOCK)
|left JOIN
| $РегистрОстатки.ОстаткиТМЦ(,,,(Номенклатура),(Количество)) as РегИтоги ON РегИтоги.Номенклатура=СпрНом.ID
|WHERE
| $СпрМХН.МестоХранения=:МХ
|ORDER BY СпрНом.CODE
|"

Если все параметры в РегистрОстатки.НазваниеРегистра() не обязательны, то в чем же тогда проблема?
Буду благодарен за любую подсказку.
1 Злопчинский
 
24.09.15
10:14
Я не спец по этому вопросу
Но такой синтаксис по моему вообще неприемлем в прямом запросе
Могу ошибаться
2 ДенисЧ
 
24.09.15
10:17
| $РегистрОстатки.ОстаткиТМЦ(,,,(Номенклатура),(Количество)) as РегИтоги ON $РегИтоги.Номенклатура=СпрНом.ID

Не?
3 Lugano
 
24.09.15
10:20
ДенисЧ, нет... ругается .." неизвестное метаимя или алиас "$РегИтоги""
4 akaBrr
 
24.09.15
10:21
$Справочник.МестаХраненияНоменклатуры as СпрМХН (NOLOCK) ON СпрНом.ID=СпрМХН.ParentExt (NOLOCK)

второй nolock лишний
5 Lugano
 
24.09.15
10:24
akaBrr, тоже самое... "Syntax error".
6 patapum
 
24.09.15
10:24
(3) если ты делаешь виртуальную таблицу, то обращаться к ее полям надо без $.
только непонятно, к тебя в запросе нет ни одного $РегИтоги, а ругается на это? или я не проснулся с утра?
7 Lugano
 
24.09.15
10:27
(6) Проверил то что написал ДенисЧ... 4 комент с его исправлением
8 patapum
 
24.09.15
10:31
(7) да, теперь похоже проснулся ))).
а так вообще error без объяснений?
я в таких случаях начинаю упрощать до работающего, смотрю, на чем перестает работать.
а если nolock-и вообще убрать, работает?
9 Lugano
 
24.09.15
10:34
Вот что пишет
"FAILED! ICommandText::Execute(): Syntax error."

Без nolock тоже самое
10 ДенисЧ
 
24.09.15
10:36
А если сказать Отладка(1)?
11 akaBrr
 
24.09.15
10:36
(9) отладку включи
12 patapum
 
24.09.15
10:38
то есть ломает запрос добавления left join $РегистрОстатки.ОстаткиТМЦ? или выбор поля из него?
вроде таблица остатков написана правильно, но попробуй выбор только из нее сделать, будет работать?
13 Lugano
 
24.09.15
10:41
(12) ломает запрос добавления left join $РегистрОстатки.ОстаткиТМЦ
14 akaBrr
 
24.09.15
10:41
(13) с отладкой что показывает?
15 PiterPrg
 
24.09.15
10:46
По-моему, когда 1 измерение или 1 ресурс скобки не нужны, т.е.

$РегистрОстатки.ОстаткиТМЦ(,,, Номенклатура, Количество)
16 patapum
 
24.09.15
10:51
(13) а просто выбор работает?
SELECT TOP 20 * from $РегистрОстатки.ОстаткиТМЦ(,,,(Номенклатура),(Количество)) as РегИтоги
17 Lugano
 
24.09.15
10:55
(16) тоже самое "Syntax error"
18 Lugano
 
24.09.15
11:05
|SELECT
    |    РегИтоги.КоличествоОстаток as Остаток
    |FROM
    |    $Справочник.Номенклатура as Спр (nolock)
    |LEFT JOIN
    |    $РегистрОстатки.ОстаткиТМЦ(,,
    |        Номенклатура=:Номенклатура,(Номенклатура),(Количество)) as РегИтоги ON РегИтоги.Номенклатура=Спр.ID

Вот так отработал... не уж то все же условие обязательно
19 patapum
 
24.09.15
11:10
(18) не должно быть обязательным. у меня работает без него. на крайняк напиши 1=1 )))
20 kudlach
 
24.09.15
14:02
|INNER JOIN
| $Справочник.МестаХраненияНоменклатуры as СпрМХН (NOLOCK) ON СпрНом.ID=СпрМХН.ParentExt (NOLOCK)

Только меня смущает, что идет попытка прямого соединения Номенклатуры со Складами ?
Теплого с мягким....
Ошибки это , может, и не выдаст, но точно пустую таблицу покажет....
21 ДенисЧ
 
24.09.15
14:06
(20) ParentExt - это владелец. У него скорее всего склады эти подчинены номенклатуре
22 Boroda
 
24.09.15
14:22
В параметрах регистра можно сразу задать соединение, а после второй запятой использовать в условии.
Я бы написал так:
|SELECT
|    РегИтоги.КоличествоОстаток as Остаток
|FROM $РегистрОстатки.ОстаткиТМЦ(,
|    INNER JOIN $Справочник.МестаХраненияНоменклатуры as СпрМХН (NOLOCK) ON Номенклатура = СпрМХН.ParentExt (NOLOCK),
|    Номенклатура=:Номенклатура AND СпрМХН.ID = :ВыбМестоХранения,
|    (Номенклатура),(Количество)) as РегИтоги
23 Boroda
 
24.09.15
14:26
к (22) в запросе, в соединении один (NOLOCK) лишний - брал копированием из (20)
24 Boroda
 
24.09.15
14:27
из-за этого и синт.ошибка наверное...
25 Ёпрст
 
24.09.15
14:35
(0) запрос к дбф, да ?
:)
26 kudlach
 
24.09.15
15:06
(21) представляешь себе гемор - на каждую номенклатуру заводить пачку подчиненных складов!.....
Руки бы поотрывал автору такой конфы.
27 ДенисЧ
 
24.09.15
15:07
(26) почему пачку?
Справочник склады - там 3 элемента... А номенклатуру разбрасывать программно по разным признакам
28 akaBrr
 
24.09.15
15:31
(25) это будет финиш, предлагаю забанить в таком случае ТСа
29 trad
 
25.09.15
08:48
(25) не, не дбф, см (18)
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.