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


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Выбрать элементы справочника на основе другого
26. Ноября 2008 :: 14:25
Печать  
Есть два справочника
1. Контрагенты
2. Долги
В справочнике долги поле Контрагент имеет тип Справочник.Контрагенты
Нужно выбрать определенные элементы справочника Контрагенты и те элементы справочника Долги, которые совпадают с выбранными элементами справочника Контрагенты

Попробовал так - не получилось
|SELECT
|SprK.Id AS [Kontr  $Справочник.Контрагенты]
|,SprD.Id AS [Kontr1  $Справочник.Долги]
|FROM
| $Справочник.Контрагенты AS SprK

|LEFT JOIN  $Справочник.Долги AS SprD  ON (SprK.Id=$SprD.Контрагент)
|WHERE
|(SprK.IsFolder=2) AND
|(SprK.IsMark=0)   AND
|(SprK.ParentID=:gr)

В выборке в поле Kontr1 <Объект не найден>
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: Выбрать элементы справочника на основе другого
Ответ #1 - 26. Ноября 2008 :: 14:30
Печать  
а если вязать Inner join, тогда должны будут все быть контрагенты с долгами
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Выбрать элементы справочника на основе другого
Ответ #2 - 26. Ноября 2008 :: 14:37
Печать  
RuporAbsurda писал(а) 26. Ноября 2008 :: 14:25:
Есть два справочника
1. Контрагенты
2. Долги
В справочнике долги поле Контрагент имеет тип Справочник.Контрагенты
Нужно выбрать определенные элементы справочника Контрагенты и те элементы справочника Долги, которые совпадают с выбранными элементами справочника Контрагенты

Попробовал так - не получилось
|SELECT
|SprK.Id AS [Kontr  $Справочник.Контрагенты]
|,SprD.Id AS [Kontr1  $Справочник.Долги]
|FROM
| $Справочник.Контрагенты AS SprK
|  
|LEFT JOIN  $Справочник.Долги AS SprD  ON (SprK.Id=$SprD.Контрагент)
|WHERE
|(SprK.IsFolder=2) AND
|(SprK.IsMark=0)   AND
|(SprK.ParentID=:gr)  | 


В выборке в поле Kontr1 <Объект не найден>


Код
Выбрать все
 |SELECT
 | SprD.ID as [Kontr1  $Справочник.Долги]
 |,$SprD.Контрагент as [Kontr  $Справочник.Контрагенты]
 |FROM
 | $Справочник.Долги AS SprD
 |  
 |INNER JOIN  $Справочник.Контрагенты AS SprK  ON (SprK.Id=$SprD.Контрагент)
 |WHERE
 |(SprK.IsFolder=2) AND
 |(SprK.IsMark=0)   AND
 |(SprK.ParentID=:gr) 

  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выбрать элементы справочника на основе другого
Ответ #3 - 26. Ноября 2008 :: 15:02
Печать  
Но только наверное надо еще учесть что дерево клиентов может и вниз расти ( а может это и невозможно по ограничениям задачи). код писать не хочеться.
Если справочник клиентов небольшой то сделать через
gr  уложитьСписокОбъектов.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Выбрать элементы справочника на основе другого
Ответ #4 - 26. Ноября 2008 :: 22:17
Печать  
Хм... люди долги даже и в справочниках держат  Озадачен
А почему интересно NULL получается?
Элемент спр-ка удаляется когда долг списывается? Или вообще не было движений никогда по нему?
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Выбрать элементы справочника на основе другого
Ответ #5 - 27. Ноября 2008 :: 07:05
Печать  
Что характерно и INNER JOIN и RIGHT JOIN дают анологичный вариант. Видимо текст запроса неверный. А как написать правильно не соображу. Помогите.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Выбрать элементы справочника на основе другого
Ответ #6 - 27. Ноября 2008 :: 07:37
Печать  
RuporAbsurda писал(а) 27. Ноября 2008 :: 07:05:
Что характерно и INNER JOIN и RIGHT JOIN дают анологичный вариант. Видимо текст запроса неверный. А как написать правильно не соображу. Помогите.

Приведи пожалуйста текст запроса который выполняешь и текст ошибки которая выскакивает.
  
Наверх
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Выбрать элементы справочника на основе другого
Ответ #7 - 27. Ноября 2008 :: 08:02
Печать  
Я бы сделал что-то типа такого:
Код
Выбрать все
 |SELECT
 | SprK.ID as [Kontr  $Справочник.Контрагенты]
 |,SprD.ID as [Kontr1  $Справочник.Долги]
 |FROM
 | $Справочник.Контрагенты AS SprK
 |  
 |LEFT JOIN  $Справочник.Долги AS SprD  ON (SprK.Id=$SprD.Контрагент)
 |WHERE
 |(SprK.IsFolder=2) AND
 |(SprK.IsMark=0)   AND
 |(SprK.ID=:gr)  

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


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Выбрать элементы справочника на основе другого
Ответ #8 - 27. Ноября 2008 :: 08:17
Печать  
А в чем отличеи от моего запроса?
  
Наверх
 
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выбрать элементы справочника на основе другого
Ответ #9 - 27. Ноября 2008 :: 08:25
Печать  
RuporAbsurda писал(а) 27. Ноября 2008 :: 08:17:
А в чем отличеи от моего запроса?

Вроде все правда
поставь
Запрос.Отладка(1);
После выполни запрос в qa - он тебе точнее укажет где ошибка
и по мему нужен inner внутренее соеденение
  
Наверх
 
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Выбрать элементы справочника на основе другого
Ответ #10 - 27. Ноября 2008 :: 08:36
Печать  
Нашел!
Вместо
SprD.ID as [Kontr1  $Справочник.Долги]
Нужно было
$SprD.Контрагент as [Kontr1  $Справочник.Долги]

Собственная невнимательность.
Спасибо всем ответившим.
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Выбрать элементы справочника на основе другого
Ответ #11 - 27. Ноября 2008 :: 08:41
Печать  
Цитата:
$SprD.Контрагент as [Kontr1  $Справочник.Долги]

афигеть в имени поля Контрагент хранить тип Справочник.Долги
Телепаты отдыхают
  
Наверх
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Выбрать элементы справочника на основе другого
Ответ #12 - 27. Ноября 2008 :: 08:41
Печать  
RuporAbsurda писал(а) 27. Ноября 2008 :: 08:36:
Нашел!
Вместо
SprD.ID as [Kontr1  $Справочник.Долги]
Нужно было
$SprD.Контрагент as [Kontr1  $Справочник.Долги]

Собственная невнимательность.
Спасибо всем ответившим.

Подожди принципиальный вопрос
на мой взгляд тебе нужен именно inner join
просто у тебя идет совпадение из-за условия на папку gr
и во вторых inner гораздо быстрее работает
тебе же не нужны все контагенты а только те у кого есть долги.
также если в папке gr есть подпапки и тебя
интересуют клиенты из подпапок то надо переписать запрос.
  
Наверх
 
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Выбрать элементы справочника на основе другого
Ответ #13 - 27. Ноября 2008 :: 08:50
Печать  
В данном случае задача стоит несколько иная, а именно
показать всех клиентов, которые находятся в папке gr (не имеет вложенных папок) внезависимости есть у них долги или нет и определить процент должников.
То есть
Справочник.Контрагенты           Справочник.Долги
Папка gr                                     <без группировок>
Контр1                                         Контр1                   долг 9
Контр2                                         Контр3                  долг 0
Контр3                                         Контр5                  долг 11

В результируещем запросе должно быть
Контр1 долг 9
Контр2 долг неопределен
Контр3 долг 0

Для такого случая подходит LEFT JOIN?
  
Наверх
 
IP записан
 
RuporAbsurda
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 413
Зарегистрирован: 29. Июня 2006
Re: Выбрать элементы справочника на основе другого
Ответ #14 - 27. Ноября 2008 :: 08:55
Печать  
leshik писал(а) 27. Ноября 2008 :: 08:41:
Цитата:
$SprD.Контрагент as [Kontr1  $Справочник.Долги]

афигеть в имени поля Контрагент хранить тип Справочник.Долги
Телепаты отдыхают


Это просто описка не придерайтесь. Естественно там Справочник.Контрагенты
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать