Имя: Пароль:
1C
1С v8
Что не так в этом запросе?
, , ,
0 tochki
 
05.12.14
11:16
1. Автор дурак 75% (3)
2. Автор всё правильно сделал 25% (1)
3. Сойдёт 0% (0)
4. Возьму на вооружение 0% (0)
Всего мнений: 4

Очень хочу узнать в какой Большой папке сидит товар. Пишу запрос:

ВЫБОР
  КОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель ССЫЛКА Справочник.Номенклатура
    ТОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель
  ИНАЧЕ ВЫБОР
      КОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель ССЫЛКА Справочник.Номенклатура
        ТОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель
      ИНАЧЕ ВЫБОР
          КОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель ССЫЛКА Справочник.Номенклатура
            ТОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель
          ИНАЧЕ ВЫБОР
              КОГДА Номенклатура.Родитель.Родитель.Родитель ССЫЛКА Справочник.Номенклатура
                ТОГДА Номенклатура.Родитель.Родитель.Родитель
              ИНАЧЕ ВЫБОР
                  КОГДА Номенклатура.Родитель.Родитель ССЫЛКА Справочник.Номенклатура
                    ТОГДА Номенклатура.Родитель.Родитель
                  ИНАЧЕ ВЫБОР
                      КОГДА Номенклатура.Родитель ССЫЛКА Справочник.Номенклатура
                        ТОГДА Номенклатура.Родитель
                      ИНАЧЕ ЛОЖЬ
                    КОНЕЦ
                КОНЕЦ
            КОНЕЦ
        КОНЕЦ
    КОНЕЦ
КОНЕЦ

Есть варианты покрасивее?
1 Легат
 
05.12.14
11:17
может можно было зациклить?..
2 Alex S D
 
05.12.14
11:18
Всегда так пишу

Автор всё правильно сделал
3 Любопытная
 
05.12.14
11:19
ПОлноеНаименование() Пробовали?
4 Ёпрст
 
05.12.14
11:19
ВЫБРАТЬ
    Номенклатура.Ссылка,
    ВЫБОР
        КОГДА Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
            ТОГДА Номенклатура.Родитель
        КОГДА Номенклатура.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
            ТОГДА Номенклатура.Родитель
        КОГДА Номенклатура.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
            ТОГДА Номенклатура.Родитель.Родитель
        КОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
            ТОГДА Номенклатура.Родитель.Родитель.Родитель
        КОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
            ТОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель
        КОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
            ТОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель
        КОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
            ТОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель
        КОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
            ТОГДА Номенклатура.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель.Родитель
    КОНЕЦ КАК РодительВерхнегоУровня
ИЗ
    Справочник.Номенклатура КАК Номенклатура

Автор дурак
5 Alex S D
 
05.12.14
11:19
(3) в запросе?
6 Любопытная
 
05.12.14
11:19
(5) Обязательно прям в запросе?
7 DirecTwiX
 
05.12.14
11:19
(4) Опередил)

Автор дурак
8 Maxus43
 
05.12.14
11:20
1. Родитель.Родитель.Родитель ССЫЛКА Справочник.Номенклатура - тупое условие, надо проверять на ПустаяСсылка.

2. обязательно в запросе? нет возможности промежуточной обработки? в коде верхний родитель просто узнаётся
9 DCKiller
 
05.12.14
11:20
(4) И сколько таких уровней иерархии в справочнике может быть? :)
10 Maxus43
 
05.12.14
11:20
ах, да

Автор дурак
11 pessok
 
05.12.14
11:21
а не проще через Ссылка.ПолныйКод()?
12 Alex S D
 
05.12.14
11:23
(11) в запросе?
13 Ёпрст
 
05.12.14
11:23
(9) ну, запрос можно динамически лепить, по количеству уровней справочника.
14 Alex S D
 
05.12.14
11:24
(13) в скд?
15 Легат
 
05.12.14
11:24
(9) Например в БП 3.0 всего 2..
16 DmitriyDI
 
05.12.14
11:24
(14) в скд можно просто вывести первый уровень иерархии и не запариваться, с ними в запросе
17 tochki
 
05.12.14
11:25
Как быстро пишете. Вобщем, мне без разницы как это сделать, через Запрос или через цикл. Только учусь, поэтому и возникают такие вопросы. Максимальная глубина папок взята с запасом. Что такое Ссылка.ПолныйКод() или ПОлноеНаименование() не знаю, сейчас поищу.

А то что проверяю через ССЫЛКА - тоже издержки обучения. Для чего-то же этот оператор существует?

PS Всех с пятницей!
18 pessok
 
05.12.14
11:25
(14) в (0) что-то есть про скд?
19 DmitriyDI
 
05.12.14
11:26
(17) допустим отбор по виду документа
20 tochki
 
05.12.14
11:26
Что интересно, ни у кого не возник вопрос "А что такое Большая папка". Для меня это еще недавно было загадкой :)
21 Alex S D
 
05.12.14
11:26
(18) в (0) есть запрос.
22 pessok
 
05.12.14
11:26
(17) не надо цикл, делай через
КодРодителя = Справочники.Номенклатура.НайтиПоКоду(Лев(Номенклатура.ПолныйКод(), Найти(Номенклатура.Полный(), "/");
23 Ёпрст
 
05.12.14
11:26
(17) >>>Для чего-то же этот оператор существует?

Открой наконец, СП (или справку по F1) и ознакомься.
24 Alex S D
 
05.12.14
11:26
(20) да всем понятно как бы.. самая верхняя папка
25 pessok
 
05.12.14
11:27
(21) если запрос есть, это не всегда значит, что он _нужен_
26 Alex S D
 
05.12.14
11:28
(25) Нужен нужен. Остальное некошерно
27 pessok
 
05.12.14
11:28
(26) ну запросом - только динамическое построение, т.к. количество родителей может быть бесконечным
28 DCKiller
 
05.12.14
11:30
(0) Сделай в запросе

ИТОГИ ПО
Номенклатура ИЕРАРХИЯ

и будет тебе на самом верхнем уровне выборке та самая БП, которая тебе так нужна...
29 dmpl
 
05.12.14
11:30
(4) Гарантированное непопадание в индекс, будет искаться тупым перебором. Если справочник большой - будет долго.
30 Alex S D
 
05.12.14
11:30
(27) ближе к реальности надо быть. 10 уровней хватит
31 dmpl
 
05.12.14
11:31
(0) Делай регистр сведений РодителиЭлемента.
32 pessok
 
05.12.14
11:31
(28) все равно потом выборку обходить же
33 pessok
 
05.12.14
11:32
(30) это уже называется "делать на отвали" :)
34 DCKiller
 
05.12.14
11:32
(35) ну а как без этого-то? Если ты намекаешь на СКД, то там такое и не замутить... да и речи опять же про нее в сабже не было.
35 Alex S D
 
05.12.14
11:33
(33) вот и "отвали" ))
36 pessok
 
05.12.14
11:34
(34) просто в случае, когда все равно обходить результат запроса - проще от запроса отказаться вовсе
37 Ёпрст
 
05.12.14
11:35
(29) это понятно. В клюшках, по совету Алексея Диркса, заведена отдельная табличка с родителями, обновляемая триггером.
Там, всё мгновенно ищется потом.
38 wertyu
 
05.12.14
11:36
(32) нет, только первое значение надо получить, будет или папка нулевого уровня или пустая ссылка
39 Ёпрст
 
05.12.14
11:36
(31) придётся всегда учитывать его актуальность, особенно, если элементы будут двигать обработками по разным группам
40 DCKiller
 
05.12.14
11:36
(36) Ну что за ересь... Запрос, который не в СКД, в подавляющем большинстве случаев выполняется для того, чтобы его результат обходить, а не в ТЗ или дерево выгружать.
41 Ёпрст
 
05.12.14
11:37
ну или, есть банальное создание новых элементов переносом с другой базы, к примеру.
42 dmpl
 
05.12.14
11:37
(37) Ну а в 8-ке - РС с подпиской на обновление при записи нового элемента.
43 Alex S D
 
05.12.14
11:37
(39) (41) вы шутите надеюсь?
44 DCKiller
 
05.12.14
11:38
(42) При групповой обработке элементов будут дикие тормоза.
45 dmpl
 
05.12.14
11:38
(39) Обработчик при записи в случае изменения родителя. Кстати, в РС можно ввести измерение Уровень - и знать родителя на произвольном уровне иерархии.
46 dmpl
 
05.12.14
11:38
(44) Загрузка = Истина + запуск обработки построения регистра после.
47 pessok
 
05.12.14
11:40
(43)у одноэсников пяяяяяятница :)
48 Alex S D
 
05.12.14
11:41
(47) а точно.. отдельной ветки то нет)
49 Ёпрст
 
05.12.14
11:42
(43) нет. Можно же пихать элементы не только средствами 1с, а напрямую в таблички.
Ну или менять родителя.
50 dmpl
 
05.12.14
11:43
(49) Ну знаешь же, что поменял - запусти перестроение РС.
51 Ёпрст
 
05.12.14
11:44
ладно, уговорил.

Тока мне всё это не нужно.
У меня нет алгоритмов, завязанных на иерархии справочника.
52 Ёпрст
 
05.12.14
11:44
:)
53 tochki
 
05.12.14
11:52
Спасибо за совет по ПолномуНаименованию(). Это то что надо! Если бы знал что есть такой реквизит, то и заморачиваться с запросом не стал бы.
54 Любопытная
 
05.12.14
11:56
(53) А-ха-ха! Всем, кто вопил, что "если запрос есть, значит от нужен" большой привет :)
55 antoneus
 
05.12.14
11:57
(14) запросто
56 Гёдза
 
05.12.14
11:58
можно через замыкание делать
http://infostart.ru/public/158512/
57 pessok
 
05.12.14
12:24
(53) я победил! :p
58 pessok
 
05.12.14
12:25
а не, не я, Любопытная была раньше
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn