Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Объединение 2 виртуальных таблиц (число прочтений - 1758 )
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Объединение 2 виртуальных таблиц
18. Сентября 2009 :: 06:48
Печать  
С помощью конструктора запросов 1С++ получаю:
|SELECT
     |        ЖесткийРезервОстатки.Клиент [Клиент $Справочник.Контрагенты]
     |      , НомерУбытка.PARENTEXT [Авто $Справочник.Автомобили]
     |      , ЖесткийРезервОстатки.НомерУбытка [НомерУбытка $Справочник.НомерУбытка]
     |      , ЖесткийРезервОстатки.РезервТовараОстаток Наличие
     |      , РезервыТоваровОстатки.РезервТовараОстаток Резерв
     |FROM $РегистрОстатки.ЖесткийРезерв(:КонДата~,
     |      INNER JOIN $Справочник.НомерУбытка AS НомерУбытка ON НомерУбытка = НомерУбытка.ID,,,) AS ЖесткийРезервОстатки
     |      FULL OUTER JOIN $РегистрОстатки.РезервыТоваров(:КонДата~,,,
     |            (Товар, Клиент, НомерУбытка),) AS РезервыТоваровОстатки
     |            ON ЖесткийРезервОстатки.Клиент = РезервыТоваровОстатки.Клиент AND ЖесткийРезервОстатки.Товар = РезервыТоваровОстатки.Товар AND ЖесткийРезервОстатки.НомерУбытка = РезервыТоваровОстатки.НомерУбытка
     |      INNER JOIN $Справочник.НомерУбытка AS НомерУбытка ON ЖесткийРезервОстатки.НомерУбытка = НомерУбытка.ID";

Выдает:
{D:\BASE77NEW\РЕЗЕРВЫЗАПЧАСТЕЙ.ERT(25)}: State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 14: Incorrect syntax near '.'.

Отладка выдает:
SELECT
       ЖесткийРезервОстатки.Клиент [Клиент $Справочник.Контрагенты]
     , НомерУбытка.PARENTEXT [Авто $Справочник.Автомобили]
     , ЖесткийРезервОстатки.НомерУбытка [НомерУбытка $Справочник.НомерУбытка]
     , ЖесткийРезервОстатки.РезервТовараОстаток Наличие
     , РезервыТоваровОстатки.РезервТовараОстаток Резерв
FROM (
select
rg6860_vt.sp6863 as Клиент,
rg6860_vt.sp6861 as Товар,
rg6860_vt.sp6864 as НомерУбытка,
rg6860_vt.sp6865 as РезервТовараОстаток
from rg6860 as rg6860_vt (nolock)
INNER JOIN sc6849 AS rg6860_vt.sp6864 ON rg6860_vt.sp6864 = rg6860_vt.sp6864.ID
where rg6860_vt.period={d '2009-09-01'}
and (
rg6860_vt.sp6865 <> 0
)
) as ЖесткийРезервОстатки
     FULL OUTER JOIN (
select
rg620_vt.sp621 as Товар,
rg620_vt.sp5565 as Клиент,
rg620_vt.sp6787 as НомерУбытка,
sum(rg620_vt.sp623) as РезервТовараОстаток
from rg620 as rg620_vt (nolock)
where rg620_vt.period={d '2009-09-01'}
group by
rg620_vt.sp621,
rg620_vt.sp5565,
rg620_vt.sp6787
having
sum(rg620_vt.sp623) <> 0
) as РезервыТоваровОстатки
           ON ЖесткийРезервОстатки.Клиент = РезервыТоваровОстатки.Клиент AND ЖесткийРезервОстатки.Товар = РезервыТоваровОстатки.Товар AND ЖесткийРезервОстатки.НомерУбытка = РезервыТоваровОстатки.НомерУбытка
     INNER JOIN sc6849 AS НомерУбытка ON ЖесткийРезервОстатки.НомерУбытка = НомерУбытка.ID

Есть подозрение что ругается в INNER JOIN на двойные точки, но это преобразование (или все же моя ошибка в соединении запросов?)
Помогите кто сталкивался...
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Объединение 2 виртуальных таблиц
Ответ #1 - 18. Сентября 2009 :: 07:01
Печать  
Попробовал обойти:
      |SELECT Подзапрос.Клиент [Клиент $Справочник.Контрагенты]
     |      , Подзапрос.Владелец [Авто $Справочник.Автомобили]
     |      , Подзапрос.НомерУбытка [НомерУбытка $Справочник.НомерУбытка]
     |      , Подзапрос.РезервТовараОстаток Наличие
     |      , Подзапрос1.РезервТовараОстаток Резерв
     |FROM (SELECT ЖесткийРезервОстатки.Клиент
     |                  , НомерУбытка.PARENTEXT Владелец
     |                  , ЖесткийРезервОстатки.НомерУбытка
     |                  , ЖесткийРезервОстатки.Товар
     |                  , ЖесткийРезервОстатки.РезервТовараОстаток
     |            FROM $РегистрОстатки.ЖесткийРезерв(:КонДата,
     |                        INNER JOIN $Справочник.НомерУбытка AS НомерУбытка With (NOLOCK) ON НомерУбытка = НомерУбытка.ID,,,) AS ЖесткийРезервОстатки
     |                  INNER JOIN $Справочник.НомерУбытка AS НомерУбытка With (NOLOCK) ON ЖесткийРезервОстатки.НомерУбытка = НомерУбытка.ID) AS Подзапрос
     |      FULL OUTER JOIN (
     |                  SELECT
     |                    РезервыТоваровОстатки.Клиент
     |                  , РезервыТоваровОстатки.Товар
     |                  , РезервыТоваровОстатки.НомерУбытка
     |                  , РезервыТоваровОстатки.РезервТовараОстаток
     |            FROM $РегистрОстатки.РезервыТоваров(,,,
     |                        (Клиент, Товар, НомерУбытка),) AS РезервыТоваровОстатки
     |      ) AS Подзапрос1 ON Подзапрос.Клиент = Подзапрос1.Клиент AND Подзапрос.Товар = Подзапрос1.Товар AND Подзапрос.НомерУбытка = Подзапрос1.НомерУбытка";

Выдает:
State 42000, native 170, message [Microsoft][ODBC SQL Server Driver][SQL Server]Line 19: Incorrect syntax near '.'.

По строке:
INNER JOIN sc6849 AS rg6860_vt.sp6864 With (NOLOCK) ON rg6860_vt.sp6864 = rg6860_vt.sp6864.ID

Подскажите, как бороться с этим
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Объединение 2 виртуальных таблиц
Ответ #2 - 18. Сентября 2009 :: 07:03
Печать  
Это баг 1С++. Поменяй алиас справочника НомерУбытка.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Объединение 2 виртуальных таблиц
Ответ #3 - 18. Сентября 2009 :: 07:07
Печать  
berezdetsky писал(а) 18. Сентября 2009 :: 07:03:
Это баг 1С++. Поменяй алиас справочника НомерУбытка.

Подробнее плиз...
Только что проверил, без INNER JOIN проходит, что значит поменять алиас?
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Объединение 2 виртуальных таблиц
Ответ #4 - 18. Сентября 2009 :: 07:10
Печать  
Если в конструкторе, то стать на справочник в списке таблиц, нажать сверху кнопку "Изменить алиас" (или как она там ?) и набрать что-то, не совпадающее ни с одним из атрибутов регистра.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Объединение 2 виртуальных таблиц
Ответ #5 - 18. Сентября 2009 :: 07:12
Печать  
berezdetsky писал(а) 18. Сентября 2009 :: 07:10:
Если в конструкторе, то стать на справочник в списке таблиц, нажать сверху кнопку "Изменить алиас" (или как она там ?) и набрать что-то, не совпадающее ни с одним из атрибутов регистра.

т.е. насколько понял, нужно следить, чтобы присоединяемые таблицы имели имена, отличные от имен атрубутов?
  
Наверх
 
IP записан
 
mov68
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 180
Зарегистрирован: 21. Декабря 2007
Re: Объединение 2 виртуальных таблиц
Ответ #6 - 18. Сентября 2009 :: 07:16
Печать  
Проверил, проходит

ОГРОМНОЕ СПАСИБО!
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать