Имя: Пароль:
1C
1С v8
Получить дерево категорий запросом по товару
,
0 apdate by
 
13.07.21
10:34
Подскажите текст запроса

имеем в итерации товар необходимо получить все группы начиная от нулевого уровня до родителя товара
1 ДенисЧ
 
13.07.21
10:37
В простом запросе - только
родитель, родитель.родитель... И так далее до максимального уровня вложенности
2 Йохохо
 
13.07.21
10:38
до максимального уровня вложенности - 1
же
3 Мультук
 
гуру
13.07.21
10:39
(0) Если нужен список именно ссылок на всех родителей, то нужно читать про транзитивные замыкания

https://infostart.ru/1c/articles/158512/
4 apdate by
 
13.07.21
10:40
РодительТовара = Товар.Родитель;

Пока РодительТовара <> Справочники.Номенклатура.ПустаяСсылка()  Цикл

куда то пишеу родителя

РодительТовара  = Родитель?    
КонецЦикла;

т ак верно будет?
5 mistеr
 
13.07.21
10:40
(0) ИТОГИ ПО Товар ИЕРАРХИЯ?
6 apdate by
 
13.07.21
10:41
(5) я уже в интерации
7 apdate by
 
13.07.21
10:41
+(6) ссылка на товар уже есть
8 apdate by
 
13.07.21
10:42
(4) простите набросал в уме ))) но суть думаю понятна? верно ли так будет?
9 apdate by
 
13.07.21
10:42
ааа блин а как получить родителя по номеру уровня? можно ли?
10 ДенисЧ
 
13.07.21
10:43
(9) нет
11 mistеr
 
13.07.21
10:45
(6) В чем ты? Не важно, вылезай оттуда и объясни толком, чего хочешь.
12 apdate by
 
13.07.21
10:46
(11)
хочу пример это

Родитель = Товар.родитель;
              
               Пока Родитель <> Справочники.Номенклатура.ПустаяСсылка() Цикл
                   //Пишу Родитель в ТЗ к примеру и ставлю число его уровня (дабы потом понимать кто папа а кто мама
                  
                   Родитель = Родитель.Родитель;
               КонецЦикла;
13 ДенисЧ
 
13.07.21
10:47
(12) Хоти.
14 apdate by
 
13.07.21
10:47
(12) по идеии здесь я получу список групп в обратном порядке верно? затем как в ТЗ перетусить список на обратный порядок?
15 ДенисЧ
 
13.07.21
10:49
Я ни слова не скажу про методы сортировки ТЗ....
16 dubolom
 
13.07.21
10:52
(12) ВЫБОР КОГДА
Родитель = ЗНАЧЕНИЕ(Справочник.ВашСправочник.ПустаяСсылка) ТОГДА ЗНАЧЕНИЕ(Справочник.ВашСправочник.ПустаяСсылка)
КОГДА Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.ВашСправочник.ПустаяСсылка) ТОГДА ЗНАЧЕНИЕ(Справочник.ВашСправочник.ПустаяСсылка) ТОГДА Родитель
...
Прописать для всех уровней иерархии, с запасом (вряд ли их больше 10)
17 dubolom
 
13.07.21
10:53
Там есть ещё нюанс, насколько я помню - в запросе родитель пустой ссылки не пустая ссылка, а null. Надо учитывать.
18 apdate by
 
13.07.21
11:01
Родитель = Товар.родитель;
               ДеревоГрупп = Новый ТаблицаЗначений;
               ДеревоГрупп.Колонки.Добавить("Группа");
               ДеревоГрупп.Колонки.Добавить("Уровень");
               Пока Родитель <> Справочники.Номенклатура.ПустаяСсылка() Цикл
                   СтрДерева         = ДеревоГрупп.Добавить();
                   СтрДерева.Группа  = Родитель;
                   СтрДерева.Уровень = Родитель.Уровень();
                   Родитель          = Родитель.Родитель;
               КонецЦикла;
               ДеревоГрупп.Сортировать("Группа,Уровень","Уровень Возр");

что то ругается у меня на ДеревоГрупп.Сортировать("Группа,Уровень","Уровень Возр");

кричит Ошибка при вызове метода контекста (Сортировать)
               ДеревоГрупп.Сортировать("Группа,Уровень","Уровень Возр");
по причине:
Несоответствие типов (параметр номер '2')
Несоответствие типов (параметр номер '2')
19 apdate by
 
13.07.21
11:01
+(18) что не так подскажите пожалуйста
20 dubolom
 
13.07.21
11:02
(19) Колонки типизировать надо для сортировки.
21 apdate by
 
13.07.21
11:03
(20) ДеревоГрупп.Колонки.Добавить("Уровень","Число");
так верно?
22 ДенисЧ
 
13.07.21
11:04
(19) А ты чаще называй переменные ключевыми словами 1с, дождёшься - она из монитора вылезет и начнёт рукоприкладствовать
(20) в данном случае не обязательно
23 apdate by
 
13.07.21
11:05
(22)+(19) Родитель? :-) ок переименовал


(22) (20) подскажите что сделать что не верно то?
24 ДенисЧ
 
13.07.21
11:07
О да. Родитель - это совершенно не ключевое 1сное слово...
25 acht
 
13.07.21
11:08
(23) Заглянуть в синтакс-помощник, например
26 apdate by
 
13.07.21
11:08
Родитель_ = Товар.родитель;
               ДеревоГрупп = Новый ТаблицаЗначений;
               ДеревоГрупп.Колонки.Добавить("ГруппаТовара");
               ДеревоГрупп.Колонки.Добавить("УровеньГруппы");
               Пока Родитель_ <> Справочники.Номенклатура.ПустаяСсылка() Цикл
                   СтрДерева         = ДеревоГрупп.Добавить();
                   СтрДерева.ГруппаТовара  = Родитель_;
                   СтрДерева.УровеньГруппы = Родитель_.Уровень();
                   Родитель_               = Родитель_.Родитель;
               КонецЦикла;
               ДеревоГрупп.Сортировать("ГруппаТовара,УровеньГруппы Возр");

Ругни нет и сортировки то-же (
27 dubolom
 
13.07.21
11:10
(26) Так у вас все значения колонки УровеньГруппы - единицы.
Цикл же доходит до самого верхнего уровня.
28 ДенисЧ
 
13.07.21
11:10
ДеревоГрупп.Сортировать("ГруппаТовара,УровеньГруппы Возр");

Какую сортировку ты тут ожидал увидеть? Сначала по группе, а внутри её по её же уровню?
29 ДенисЧ
 
13.07.21
11:11
(27) Чо??
30 dubolom
 
13.07.21
11:12
(29) Копчо. Код невнимательно читал.
31 acht
 
13.07.21
11:15
(28) Ты слишком многого хочешь от человека, у которого интересы - читать новости сидя на унитазе.
32 apdate by
 
13.07.21
11:17
(28) Спасибо все работает

Родитель_ = Товар.родитель;
               ОписаниеУровеньГруппы = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(12,0));
               ДеревоГрупп = Новый ТаблицаЗначений;
               ДеревоГрупп.Колонки.Добавить("ГруппаТовара");
               ДеревоГрупп.Колонки.Добавить("УровеньГруппы",ОписаниеУровеньГруппы);
               Пока Родитель_ <> Справочники.Номенклатура.ПустаяСсылка() Цикл
                   СтрДерева         = ДеревоГрупп.Добавить();
                   СтрДерева.ГруппаТовара  = Родитель_;
                   СтрДерева.УровеньГруппы = Родитель_.Уровень();
                   Родитель_               = Родитель_.Родитель;
               КонецЦикла;
               ДеревоГрупп.Сортировать("УровеньГруппы Возр");

Подскажите как сделать то-же но одним запросом?

(31) :-)
33 ДенисЧ
 
13.07.21
11:17
(31) А когда их ещё читать? За компом работать надо. В крайнем случае эти сайты рассматривать...
34 ДенисЧ
 
13.07.21
11:17
(32) "Подскажите как сделать то-же но одним запросом?"
Я уже ответил, в самом начале ветки.
35 apdate by
 
13.07.21
11:18
(28) думал что будет так же ка ки с методом Свернуть тогда если не указываю колонки то после свертки их не будет в цикле (
36 mistеr
 
13.07.21
11:19
(14) Если нужно в обратном порядке, сверх вниз, используй (5).
37 apdate by
 
13.07.21
11:20
(34) в (16) ? Прописать для всех уровней иерархии, с запасом (вряд ли их больше 10) (мне не подходит!)

я имел в виду так что бы не прописывать! иначе нафига мне тогда запрос?
38 dubolom
 
13.07.21
11:21
(37) Какая у вас вообще формулировка задачи?
39 apdate by
 
13.07.21
11:21
(5) я бы заюзал это но, я не очень хочу переписывать запрос ну или дописывать я ж написал ниже что мне нужно получить список групп уже в итерации (в цикле)
40 Йохохо
 
13.07.21
11:22
(37) из метаданных возьми уровень вложенности и собери текст запроса "в интерации"
41 ДенисЧ
 
13.07.21
11:23
(39) Ты уж определись. В итерации тебе надо или в запросе...
42 apdate by
 
13.07.21
11:23
(38) я ж даже код рабочий предоставил (так как не могу устно обьяснить что хочу)

но попробую

есть товар (ссылка)

он лежит в гурппе Ц но группа Ц лежит в группе Б а группа Б в группе А ну а  группа А нулевая

так вот мне нужно имея только ссылку на товар получить его группы с ноля по уровень товара

А
Б
Ц
Товар
43 mistеr
 
13.07.21
11:24
(39) Ну сделай отдельный запрос, в цикле. Тебя потом за это побьют, но если лень-матушка сильнее, что поделать.
44 apdate by
 
13.07.21
11:24
(43) ну так я не знаю как сделать этот запрос
45 dubolom
 
13.07.21
11:26
(42) ЕСТЬNULL(Родитель.Родитель...Родитель, ЗНАЧЕНИЕ(Справочник.ТвойСправочник.ПустаяСсылка)
Так n раз по убыванию вплоть до родителя первого уровня.
Потом из этой таблицы вырезаешь строки с непустым значением группы
46 apdate by
 
13.07.21
11:26
(41)

К пример есть результат выборки запроса лежит он в переменной Рез

имеется код

Для Каждого Товар из Рез Цикл
    Вот здесь уже лежит мой метод
    Родитель_ = Товар.родитель;
               ОписаниеУровеньГруппы = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(12,0));
               ДеревоГрупп = Новый ТаблицаЗначений;
               ДеревоГрупп.Колонки.Добавить("ГруппаТовара");
               ДеревоГрупп.Колонки.Добавить("УровеньГруппы",ОписаниеУровеньГруппы);
               Пока Родитель_ <> Справочники.Номенклатура.ПустаяСсылка() Цикл
                   СтрДерева         = ДеревоГрупп.Добавить();
                   СтрДерева.ГруппаТовара  = Родитель_;
                   СтрДерева.УровеньГруппы = Родитель_.Уровень();
                   Родитель_               = Родитель_.Родитель;
               КонецЦикла;
               ДеревоГрупп.Сортировать("УровеньГруппы Возр");

можно ли в место моего кода получения групп товара но запросом
КонецЦикла
47 apdate by
 
13.07.21
11:26
(45) судя по этому лучше оставить как я написал?
48 ДенисЧ
 
13.07.21
11:27
(47) Боги... Сколько же раз надо повторять... (((
Хуже только антиваксеры...
49 dubolom
 
13.07.21
11:28
(47) Так вы не объяснили, зачем вам именно запрос. Если надо, чтобы просто работало - оставляйте, конечно, а то ещё полдня с запросом прокопаетесь.
50 apdate by
 
13.07.21
11:30
(49) для того что бы поместить группы в XML и отправить в приложение На андроид да не важно куда отправить и все

мне нужно получить дерево категорий где лежит товар

и поместить это добро в XML файл вот и пошел на форму дабы узнать можно ли простой запрос напистаь что бы получить это долбаное дерево (

но судя по предложеным вариантам запрос даже сложнее получается чем то что я написал :-)
51 apdate by
 
13.07.21
11:31
что касаемо 950 я думал от этом но мне так лень лезть в тот запрос что получает товары

там запрос на большое кол-во строчек а я не люблю запросы (
52 dubolom
 
13.07.21
11:32
(50) Оставляйте, как есть, и не парьтесь, короче.
53 apdate by
 
13.07.21
11:32
+(51) 950 = (5)
54 apdate by
 
13.07.21
11:32
(52) ок спасибо
55 mistеr
 
13.07.21
11:38
(44)

    ВЫБРАТЬ
        Номенклатура.Ссылка КАК Ссылка
    ИЗ
        Справочник.Номенклатура КАК Номенклатура
    ГДЕ
        Номенклатура.Ссылка = &Ссылка
    ИТОГИ ПО
        Ссылка ТОЛЬКО ИЕРАРХИЯ
56 dubolom
 
13.07.21
11:39
(55) У человека только душевная гармония установилась. Не сбивайте, пожалуйста.
57 apdate by
 
13.07.21
11:40
(58) пипец )

Спасибо!
58 apdate by
 
13.07.21
11:42
тьфу слепой!  +(57) для (55) :-)