Имя: Пароль:
1C
1C 7.7
v7: Как определить вид справочника в прямом запросе.
,
0 Adecvator
 
16.11.12
15:36
Как определить вид справочника в прямом запросе. Что-то вроде:
(Атребут.Вид() = "Контрагенты") И (ТипЗначенияСтр(Атребут)="Справочник")
1 Груздь
 
16.11.12
15:45
Атребут - это глагол?
2 qw12er
 
16.11.12
15:46
Вот даже интересно, употребление мата так сильно оказывает влияние на ошибки?=)
3 viktor_vv
 
16.11.12
15:50
Откуда выбираешь ссылку на элемент справочника ?
Из реквизита с типом значения "Справочник" общего вида ?
Тогда

Left(ПолеСсылки,4) = $ВидСправочника36.Контраегнты
4 Adecvator
 
16.11.12
15:56
(3)ссылку на справочник выбираю из документа, тип реквизита "Справочник"
5 viktor_vv
 
16.11.12
15:59
(4) Ну тогда (3).
6 ПиН
 
16.11.12
16:00
это колонка в таблице, что сложного-то?
7 antoneus
 
16.11.12
16:09
select
$Док.Атрибут [Атрибут $Справочник]
8 Adecvator
 
16.11.12
17:02
кто знает, substring работает для реквизитов документов типа справочник. Типа: substring($Таб.АналитикаДт3,1,4) = '10.6'???
9 Mikeware
 
16.11.12
17:05
(8) а что такое у тебя $Таб.АналитикаДт3 ?
если строка, то сработает
10 Adecvator
 
16.11.12
17:05
есть предположение, что в функцию substring возвращается не типизированное поле и поэтому обрезать проверять на что-то нельзя
11 Adecvator
 
16.11.12
17:06
(9) реквизит типа "Справочник".
12 viktor_vv
 
16.11.12
17:31
(8) (10) Внутри запроса там ничего не типизируется.
Типизация идет уже постобработкой результатов полученных из запроса.
(8) Судя по результату, у тебя в реквизите совсем не тип Справочник.
13 Mikeware
 
16.11.12
17:35
(10)а счего оно должно типизироваться? и как ты себе это представляешь - субстринг от элемента справочника?
(11) джойни с этим справочником, и субстринг от его наименования
(12) "судя по", ошибка у него там же, где и всегда.
14 viktor_vv
 
16.11.12
17:40
И уже б не стеснялся, выложил бы текст запроса и что ты от него хочешь полуить.
15 Adecvator
 
16.11.12
17:53
Код:
case when substring($Таб.АналитикаДт3,1,6) = '10.6.2'
then 1 else 0 end
16 Adecvator
 
16.11.12
17:54
$Таб.АналитикаДт3 - справочник, субстрингом я хочу вытащить первые 6-ть символов из наименования.
17 viktor_vv
 
16.11.12
17:56
А '10.6.2' - это что ? Кусок наименования ? Тогда (13) второй пункт.
Так как у тебя в базе в поле $Таб.АналитикаДт3 ссылка на справочник типа CHAR(13).
18 viktor_vv
 
16.11.12
17:57
(17) Джойнить по Right($Таб.АналитикаДт3,9) .
19 Mikeware
 
16.11.12
17:58
(18) ему тип надо знать.
а у него нетипизированный...
20 viktor_vv
 
16.11.12
18:01
(19) А, точно. Придется джойнить все возможные справочники.
Хотя может ему не по всем справочникам проверять надо, а по конкреному виду, тогда прилепить необходимый только.
21 viktor_vv
 
16.11.12
18:02
Правда ТС продолжает играть в партизана :).
22 Adecvator
 
16.11.12
18:04
(21) почему продолжаю, тебе выложить код на 2 листа со всеми кейсами и условиями, зачем?
23 Mikeware
 
16.11.12
18:07
(22) НЕ НАДО!!!!
я его уже заранее боюсь...
24 Adecvator
 
16.11.12
18:08
(23) издеваешься :)
25 Mikeware
 
16.11.12
18:08
(24) не без того...
26 Mikeware
 
16.11.12
18:09
+(25) но при этом стараюсь пнуть в нужном направлении...
27 viktor_vv
 
16.11.12
18:09
(22) Весь не надо, можно человеческим языком изложить, цель манипуляций.
Например, по всем ли возможным справочникам в $Таб.АналитикаДт3 надо условие проверять ?
28 Adecvator
 
16.11.12
18:12
(27) да в том то и дело что не типизированный и проблема что надо джойнить все справочники что бы сабстрингом обрубить наименование или код
29 Mikeware
 
16.11.12
18:13
(28) ну и джойни. Ты думаещь, 1с по-другому делает?
30 Adecvator
 
16.11.12
18:15
а просто
select
case when substring($Док.Аналитика2)='10' then 1 else 0 end
from
$ДокументСтроки.ПриходнаяНакладная as Док
нельзя?
31 Adecvator
 
16.11.12
18:15
к сожалению :(
32 Ёпрст
 
16.11.12
18:16
Аналитика2 - у тя че, строка ? или это реквизит агрегатного типа ?
33 Adecvator
 
16.11.12
18:17
Аналитика2 - реквизит типа "Справочник"
34 Mikeware
 
16.11.12
18:17
(30) тебе неожнократно советовали сменить ник...
35 Ёпрст
 
16.11.12
18:18
(33) а чего ты тогда хотел получить этим кодом ?

>>>case when substring($Док.Аналитика2)='10' then
36 Mikeware
 
16.11.12
18:19
(35) ну, вдруг он идентификаторы генерил в нужной последователности :-)
37 Adecvator
 
16.11.12
18:19
(35) есть условие по которому документ с контрактом начинающимся на код 10.6.1 не должен попадать :(
38 Ёпрст
 
16.11.12
18:22
>>> начинающимся на код 10.6.1

код , это что ? Наименование поди справочника ?

Тебе придё1тся либо лефт джоин все возможные виды справочника + coalesce, либо подзапросом через юнион алл их собрать и уже с ним лефт джоин или селект топ 1
39 Adecvator
 
16.11.12
18:22
(35) этим кодом я пытаюсь отсеет элементы справочников, у которых наименование начинается на 10 или код без разницы
40 Adecvator
 
16.11.12
18:24
(38) код, но наименование так же начинается как и код
41 Adecvator
 
16.11.12
18:30
о Аллах я спасен, кто-то дублирует реквизиты документа в строковом виде :)))
42 Adecvator
 
16.11.12
18:31
т.е. для каждого реквизита в документе создан его двойник только с типом значения Строка :)
43 viktor_vv
 
16.11.12
18:33
(42) Это кто-то SAP'а или NAV насмотрелся :).
Не помню где про такое читал.
44 Mikeware
 
16.11.12
18:33
(41) видимо, это кто-то с тем ником, на который тебе советовали сменить твой...
45 viktor_vv
 
16.11.12
18:36
(37) Я так подозреваю Контракт, это какой-то один справочник, достаточно было его приджойнить по твоей Аналитика2.
46 Adecvator
 
16.11.12
18:38
(45)ага, я как начал типизировать поля, он мне такое выдал, бред :)
47 Mikeware
 
16.11.12
18:40
(45) максимум - пара-тройка... Не больше.
48 viktor_vv
 
16.11.12
18:41
(46) Ну в поле-то у тебя там могут быть и другие значения, но условие

case when substring($Док.Аналитика2)='10' then

тебе ж надо проверять только если в док $Док.Аналитика2 значение из справочника Контракты (или какой он там у вас) ?
49 Adecvator
 
16.11.12
18:51
(48) ну так это условие можно добавить как ты подсказал (3)
50 viktor_vv
 
16.11.12
18:54
(49) Так и я о том же, приджойнил один справочник и

case when substring(ISNULL($Спр.Descr,''))='10' then

и без проверки вида. Это в случае если он один будет.
51 viktor_vv
 
16.11.12
19:27
(50)+ Хотя вид лучше проверить, а то ID могут совпасть у разных справочников.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.