Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Получить дерево категорий запросом по товару

Получить дерево категорий запросом по товару
Я
   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/
   apdate by
 
4 - 13.07.21 - 10:40
РодительТовара = Товар.Родитель;

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

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

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

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

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

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


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

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

Какую сортировку ты тут ожидал увидеть? Сначала по группе, а внутри её по её же уровню?
   ДенисЧ
 
29 - 13.07.21 - 11:11
(27) Чо??
   dubolom
 
30 - 13.07.21 - 11:12
(29) Копчо. Код невнимательно читал.
 
 
   acht
 
31 - 13.07.21 - 11:15
(28) Ты слишком многого хочешь от человека, у которого интересы - читать новости сидя на унитазе.
   apdate by
 
32 - 13.07.21 - 11:17
(28) Спасибо все работает
Родитель_ = Товар.родитель;
               ОписаниеУровеньГруппы = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(12,0));
               ДеревоГрупп = Новый ТаблицаЗначений;
               ДеревоГрупп.Колонки.Добавить("ГруппаТовара");
               ДеревоГрупп.Колонки.Добавить("УровеньГруппы",ОписаниеУровеньГруппы);
               Пока Родитель_ <> Справочники.Номенклатура.ПустаяСсылка() Цикл
                   СтрДерева         = ДеревоГрупп.Добавить();
                   СтрДерева.ГруппаТовара  = Родитель_;
                   СтрДерева.УровеньГруппы = Родитель_.Уровень();
                   Родитель_               = Родитель_.Родитель;
               КонецЦикла;
               ДеревоГрупп.Сортировать("УровеньГруппы Возр");

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

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

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

но попробую

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

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

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

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

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

имеется код 

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

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

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

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

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

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

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

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


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.