Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Не могу получить группы справочника (число прочтений - 2579 )
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Не могу получить группы справочника
25. Января 2012 :: 05:42
Печать  
Есть справочник нормы расходов, элементом которого является Справочник (любой), в т.ч. и Справочник материалы.
Сравнение $СпрН.Элемент = СпрМ.Id  не работает.
А как можно сравнить эти два объекта?

ТекстЗапроса3 = "
     |SELECT       
     |$СпрН.Элемент as [Материал $Справочник],
     |СпрМ.PARENTID
     |FROM
     |$Справочник.НормыРасходов  as  СпрН,
     |$Справочник.Материалы as СпрМ
     |WHERE
     |$СпрН.Элемент = СпрМ.Id 
     |";
  
Наверх
 
IP записан
 
antoneus
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 16. Марта 2009
Пол: Мужской
Re: Не могу получить группы справочника
Ответ #1 - 25. Января 2012 :: 05:56
Печать  
SELECT        
     |left($СпрН.Элемент, 9) as [Материал $Справочник],
     |СпрМ.PARENTID
     |FROM
     |$Справочник.НормыРасходов  as  СпрН,
     |$Справочник.Материалы as СпрМ
     |WHERE
     |left($СпрН.Элемент, 9) = СпрМ.Id  
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Не могу получить группы справочника
Ответ #2 - 25. Января 2012 :: 05:56
Печать  
RuporAbsurda писал(а) 25. Января 2012 :: 05:42:
Есть справочник нормы расходов, элементом которого является Справочник (любой), в т.ч. и Справочник материалы.
Сравнение $СпрН.Элемент = СпрМ.Id  не работает.
А как можно сравнить эти два объекта?

ИМХО, правильнее как-то так:
Код
Выбрать все
ТекстЗапроса3 = "
     |SELECT
     |$СпрН.Элемент as [Материал $Справочник],
     |СпрМ.PARENTID
     |FROM
     |$Справочник.НормыРасходов  as  СпрН LEFT JOIN
     |$Справочник.Материалы as СпрМ
     |ON
     |$СпрН.Элемент = $ВидСправочника.Материалы+СпрМ.Id
     |";  


  
Наверх
ICQ  
IP записан
 
antoneus
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 54
Зарегистрирован: 16. Марта 2009
Пол: Мужской
Re: Не могу получить группы справочника
Ответ #3 - 25. Января 2012 :: 05:56
Печать  
тьфу ты, right(, конечно же
  
Наверх
 
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не могу получить группы справочника
Ответ #4 - 25. Января 2012 :: 06:02
Печать  
А вы уверены. У меня возникает ошибка

"Meta name parser error: неизвестное метаимя или алиас "$ВидСправочника""
  
Наверх
 
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не могу получить группы справочника
Ответ #5 - 25. Января 2012 :: 06:56
Печать  
c right сработало. Спасибо.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Не могу получить группы справочника
Ответ #6 - 25. Января 2012 :: 07:10
Печать  
C right можешь получить очень большие проблемы... Если вкратце, то выкидывая вид справочника, ты можешь получить ИД-шник справочника "Номенклатура" (в документе), но посчитать его из-за Right за элемент Материалов.
Попробуй
Код
Выбрать все
$СпрН.Элемент = ($ВидСправочника36.Материалы+СпрМ.Id) 

  
Наверх
ICQ  
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не могу получить группы справочника
Ответ #7 - 25. Января 2012 :: 07:50
Печать  
$ВидСправочника36.Материалы+СпрМ.Id
Вот это сработало. Спасибо.
  
Наверх
 
IP записан
 
Satans Claws
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 721
Зарегистрирован: 29. Ноября 2010
Re: Не могу получить группы справочника
Ответ #8 - 25. Января 2012 :: 10:27
Печать  
RuporAbsurda

Надеюсь, вместо декартова произведения левый джойн используешь в конечном итоге?
  
Наверх
 
IP записан
 
Eprst
God Member
*****
Отсутствует



Сообщений: 3397
Зарегистрирован: 08. Октября 2007
Re: Не могу получить группы справочника
Ответ #9 - 25. Января 2012 :: 10:37
Печать  
Satans Claws писал(а) 25. Января 2012 :: 10:27:
RuporAbsurda

Надеюсь, вместо декартова произведения левый джойн используешь в конечном итоге?


какая то бессмыслица - левое соединение это тоже декартово произведение + фильтрация + добавление внешних строк.
  
Наверх
 
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Не могу получить группы справочника
Ответ #10 - 26. Января 2012 :: 05:54
Печать  
Satans Claws писал(а) 25. Января 2012 :: 10:27:
RuporAbsurda

Надеюсь, вместо декартова произведения левый джойн используешь в конечном итоге?


А в чем конечный смысл этого соединения. Работает более быстро или в первом случае не верная выборка?
В моем случае выбирает и так и так верно. По скорости не тестировал.
  
Наверх
 
IP записан
 
Dmitry The Wing
God Member
*****
Отсутствует


1C++ rocks!

Сообщений: 839
Местоположение: Где-то в Сибири
Зарегистрирован: 18. Августа 2009
Пол: Мужской
Re: Не могу получить группы справочника
Ответ #11 - 26. Января 2012 :: 07:01
Печать  
RuporAbsurda писал(а) 26. Января 2012 :: 05:54:
А в чем конечный смысл этого соединения. Работает более быстро или в первом случае не верная выборка?
В моем случае выбирает и так и так верно. По скорости не тестировал.

Самое простое различие: При выборке через запятую берутся все значения из обеих таблиц, а при левом соединении берутся все записи из первой и только соответствующие им из второй, т.е. по смыслу:
SELECT t1.*, t2.*
FROM t1,t2
WHERE t1.id IS NOT NULL AND <1> AND <2>
= SELECT t1.*, t2.*
FROM t1
LEFT JOIN t2 ON <1>
WHERE <2>
Но это только внешние различия, а в реализации там еще уменьшается количество чтений для подключаемой таблицы.

Скорость же работы больше зависит от оптимальности построения запроса, а не от того, каким способом он составлен.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать