Имя: Пароль:
1C
1C 7.7
v7: SQL Like по ссылке
,
0 Lacoster
 
18.04.13
07:46
Всем привет! Есть иерархический справочник контрагенты.
В нём есть папка Кредит. Мне необходимо выбрать все контрагентов которые
находятся в этой папке. Вот собственно запрос
   |SELECT $Реализация.СуммаВзаиморасчетов СуммаВзаиморасчетов
   |, Журнал.IDDOC [Документ $Документ]
   |, Журнал.IDDOCDEF Документ_вид
   |, Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) Документ_дата
   |, Реализация.IDDOC [Ссылка $Документ.Реализация]
   |, $Реализация.Контрагент [Контрагент $Справочник.Контрагенты]
   |, Контрагенты.PARENTID [Родитель $Справочник.Контрагенты]
   |, Контрагенты.ISFOLDER ЭтоГруппа
   |FROM _1SJOURN AS Журнал
   |    INNER JOIN $Документ.Реализация AS Реализация With (NOLOCK) ON Журнал.IDDOC = Реализация.IDDOC
   |    INNER JOIN $Справочник.Контрагенты AS Контрагенты With (NOLOCK) ON $Реализация.Контрагент = Контрагенты.ID
   |WHERE (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) <= :кондата)
   |    AND (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) >= :начдата)
   |    AND ($Реализация.Склад = :склад)
   |    AND ((Контрагенты.PARENTID like '%кредит%')
Он работает без ошибок, но не выводит то что мне нужно. А именно по тому что Контрагенты.PARENTID имеет вид типо BA0324 и в нём я лайкаю КРЕДИТ. А теперь вопрос. Как мне объяснить СКуЛю что нужно лайкать по нормальному представлению как я описал в селекте?
1 Mikeware
 
18.04.13
07:48
А ты вообще понимаешь, что такое идентификатор?
2 Wobland
 
18.04.13
07:48
ты в descr хочешь искать что ли?
3 Mikeware
 
18.04.13
07:49
(2) в descr'е parent'а :-)
4 Mikeware
 
18.04.13
07:50
плять. постмотрел на г.р.
долбаный чернобыль...
5 Wobland
 
18.04.13
07:50
имхается мне, лайк тут ни при чём
Контрагенты.PARENTID=:НужныйРодитель
6 Lacoster
 
18.04.13
07:51
(1) понимаю. Вот я и говорю что мне нужно как-то сделать нормальный вид.
Хочу искать в нормальном виде
7 Wobland
 
18.04.13
07:51
(4) годовщина скоро
8 ЧеловекДуши
 
18.04.13
07:52
(0)Организуй связь с таблицей справочника и лайкай на здоровье.

Left outer JOIN $Справочник.ДляЛайкования AS Лайк (NOLOCK) ON Контрагенты.PARENTID = Лайк .ID

И уже в условии "WHERE"

AND (( $Лайк.КакойУгодноУеквизит like '%кредит%')
9 Mikeware
 
18.04.13
07:52
(7) по идее, он даже зачат через пол-года от событий. а все равно эффект чувствуется....
10 Mikeware
 
18.04.13
07:53
(8) КакойУгодноУеквизит на самом деле не совсем "какой угодно"
11 Lacoster
 
18.04.13
07:53
создать справочник НУжныйРодитель и сравнить с родителем?
Фишка в том что контрагенты делятся сначала на склады, потом могут делиться на манагеров и там уже есть кредитные контрагенты. В каждом складе, в каждом манагере родитель КРЕДИТ под разными кодами.
12 Lacoster
 
18.04.13
07:53
вот и беда в этом
13 ЧеловекДуши
 
18.04.13
07:54
(10) Опечатолси, но вроде взлетит :)
14 ЧеловекДуши
 
18.04.13
07:54
(11) Мне побоку, что куда делится.
Я тебе привет как лайкать :)
15 ЧеловекДуши
 
18.04.13
07:55
+(11) Ты про "деление" - это ты так Группы справочников называешь?
16 ЧеловекДуши
 
18.04.13
07:55
(14) >>> привет
Привел
17 Mikeware
 
18.04.13
07:55
(5) ну, задача  выбрать контрагентов из папок, имеющих в названии, скажем, слово "злостный должник" - вполне реальна.
18 Lacoster
 
18.04.13
07:56
(15) да, про группы
19 Wobland
 
18.04.13
07:56
(11) (17) уговорили ;)
20 ЧеловекДуши
 
18.04.13
07:57
(18) Дак и присобачь тогда еще одну связь со справочником Контрагенты :)
Что тебя смущает?
Это SQL, а не 1С, тут все дело в связях ;)
21 Lacoster
 
18.04.13
08:00
а если сделать так
select * from (мой запрос) where Родитель like 'Кредит'
выйдет?
22 Wobland
 
18.04.13
08:04
(21) сначала выберёшь всё, а потом выкинешь ненужное. вместо того, чтобы сразу взять только нужное
23 viktor_vv
 
18.04.13
08:05
Я только не пойму, а УложитьСписокОбъектов() уже немодно пользовать ?
24 Lacoster
 
18.04.13
08:09
не модно. Пытаюсь как можно больше на скуле делать
25 Mikeware
 
18.04.13
08:13
(21) нет. Типизация происходит при получении результатов запроса.
прочитай что такое идентиыфикатор, и что такое "соединение по ключу"
26 Lacoster
 
18.04.13
08:18
короче пересекая кнотрагентов с контрагентами это просто ППЦ! Он очень долго задумывается. А это только 3% отчета. Мб есть более быстрый способ?
27 МихаилМ
 
18.04.13
08:20
|WHERE (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) <= :кондата)
   |    AND (Cast(Left(Журнал.DATE_TIME_IDDOC, 8) AS datetime) >= :начдата)


замените на

Журнал.DATE_TIME_IDDOC >< строковое представление даты.
иначе не работает отбор по индексу
28 viktor_vv
 
18.04.13
08:20
Так я про УложитьСписокОбъектов() для скуля и говорю, для 1С++.
29 viktor_vv
 
18.04.13
08:25
А хотя, учитывая (11) не пойдеть.
30 orefkov
 
18.04.13
08:26
(26)
Гонишь.
Напиши тогда так:
and Контрагенты.parentid in (select id from $Справочник.Контрагенты (nolock) where descr like '%кредит%'

Хотя - показанный тобой в (0) запрос совершенно не соответствует заявленной цели:
"есть папка Кредит. Мне необходимо выбрать все контрагентов которые находятся в этой папке."
Если необходима именно эта цель, то надо либо "УложитьСписокОбъектов", если вложенность более 2 уровней, либо "Контрагенты.parentid=:ВыбГруппа" + "УстановитьТекстовыйПараметр".
А все твое "Пытаюсь как можно больше на скуле делать" - это от того, что ты еще новичек в SQL.
31 orefkov
 
18.04.13
08:28
(11)
Опа, выясняется,  что в (0) - совершенно другая постановка задачи. Умываю руки.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс