Имя: Пароль:
1C
1С v8
Скажите как выгрузить товары в произвольной иерархии?
0 rikodroo
 
26.07.13
07:46
Что-то все не получается. Есть справочник Номенклатура, есть справочник ГруппыПрайсЛиста. Во втором расположены в иерархии группы - так группы должны быть расположены в выходном файле.
Когда выполняю запрос вида:

ВЫБРАТЬ
    Номенклатура.ГруппаПрайсЛиста КАК ГруппаПрайсЛиста,
    Номенклатура.Ссылка КАК Товар
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    НЕ Номенклатура.ГруппаПрайсЛиста = ЗНАЧЕНИЕ(Справочник.ГруппыПрайсЛиста.ПустаяСсылка)
ИТОГИ ПО
    ГруппаПрайсЛиста ИЕРАРХИЯ


Выводится результат содержащий дубли некоторых строк:

Запчасти    <NULL>
    Глушители    <NULL>
              Глушители    Глушак-1
              Глушители    Глушак-2
       Двигатели    <NULL>
              Двигатели    Двиган-1
              Двигатели    Двиган-2
    Запчасти    <NULL>
        Запчасти    Колесо-1
              Запчасти    Колесо-2

Ну, а необходимо получить так:

Запчасти    <NULL>
    Глушители    <NULL>
              Глушители    Глушак-1
              Глушители    Глушак-2
       Двигатели    <NULL>
              Двигатели    Двиган-1
              Двигатели    Двиган-2
    Запчасти    Колесо-1
          Запчасти    Колесо-2

Что-то так и не смог найти как такое сделать. Нашел как такую задачу решить с использованием СКД и хранением иерархии в регистре сведений (пара измерений - Элемент и Родитель). Правда там сначала приходится выводить результат в дерево значений, а уже только потом еще раз его обходить и формировать колонки отчета. Хочется же делать все за один проход - сразу получать результат - выборку.
1 rikodroo
 
26.07.13
07:48
(0) блин, форматирование что-то опять неочень..
Строки:
Глушители    <NULL>
Двигатели    <NULL>
Запчасти    Колесо-1
Запчасти    Колесо-2

на одном уровне
2 cw014
 
26.07.13
07:49
(1) Что то не понятно что ты хочешь. Правильно он все выводит - группа и иерархия
3 cw014
 
26.07.13
07:50
(1) Если надо, как у тебя, тогда отключай итоги и выводи по порядку
4 rikodroo
 
26.07.13
07:52
(3) не понял, а иерархию как получить?
5 rikodroo
 
26.07.13
07:53
+ (4) группы тоже нужно выводить
6 cw014
 
26.07.13
07:58
У тебя в (1) нету иерархии. У тебя два столбца - Группа и номенклатура
7 rikodroo
 
26.07.13
08:00
(6) Ок, а как в иерархическом порядке данные получить?
8 rikodroo
 
26.07.13
08:00
+ (6) в (1) это комментарий к (0), т.к. форматирование неочень ровное
9 Афоня
 
26.07.13
08:05
(1) То ли я не проснулся, то ли автор)))) найди 10 отличий в том что хочу получить и что выходит
10 rikodroo
 
26.07.13
08:07
(9) дублируется строка:  Запчасти    <NULL>
11 rikodroo
 
26.07.13
08:09
+ (10) а ее поидее вообще ненадо. Притом, все элементы и группы одного уровня должны располагаться так - сначала группы, потом элементы. Если делать как в (0) то оно так располагаться тоже не всегда будет.
12 Афоня
 
26.07.13
08:23
(10) так это самая верхняя твоя группа
13 rikodroo
 
26.07.13
08:32
(12) ага, это она. Но ее нужно убрать. В (0) последняя табличка - это как нужно.
14 Афоня
 
26.07.13
08:55
ну напиши доп условие Где родитель не пустой
15 cw014
 
26.07.13
08:57
Сдается мне, что в группе "Запчасти" есть еще одна группа "Запчасти"
16 rikodroo
 
26.07.13
09:00
(14) не ну это же относится не только к самому верхнему уровню, а на более глубоких уровнях проблема остананется, но родитель буден непустым.
17 rikodroo
 
26.07.13
09:01
(15) нет. Попробуйте сделать реквизит как в (0) описано и увидите.
18 cw014
 
26.07.13
09:03
(17) Ты хоть структуру групп дай что ли
19 rikodroo
 
26.07.13
09:03
Еще вот есть вариант, но он дикий и медленный. Выгрузить все товары (где реквизит ГруппаПрайса непустой) в табличку вида (Товар, ГруппаПрйса). Затем обходя по иерархии - дергать товары из этой таблички.
20 Мимохожий Однако
 
26.07.13
09:04
Покажи как обрабатываешь результат запроса
21 rikodroo
 
26.07.13
09:05
(18)
Структура групп имеет вид (вложенность - неограниченная):

Запчасти
       Глушители
              Брак
              Глючные
       Двигатели
              Роторные двигатели
Прочее
       Краска
       Свечи
22 rikodroo
 
26.07.13
09:08
(20) да пока никак не обрабатываю. Но поидее стандартно -Выборка.Следующий() и т.п. Ну может с обходом по группировкам.
23 cw014
 
26.07.13
09:17
(22) Сейчас присмотрелся, так то правильно выводит по идее
24 cw014
 
26.07.13
09:22
(22) У тебя поле не является непосредственным родителем, поэтому верхний уровень показывает все, что у тебя находится в иерархии верхней группы, далее группировка идет по группам, в которых находятся элементы непосредственно
25 rikodroo
 
26.07.13
09:26
(24) угу.
26 cw014
 
26.07.13
09:28
(25) Переноси на СКД, там можно свою иерархию замутить. Или программно обрабатывай результат
27 rikodroo
 
26.07.13
09:37
(26) попробавал на СКД, но там выводом как таковым я не понял как управлять. Приходится сначала все выгрузить в ТЗ или ДеревоЗначений, а уже потом снова проходить по дереву и заполнять остальные колонки.


У меня там так:

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    мДЕрево = Новый ДеревоЗначений;
        
    ПроцессорВывода.УстановитьОбъект(мДЕрево);
    
    ПроцессорВывода.НачатьВывод();
    Пока Истина Цикл
        ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновки.Следующий();
        Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда
            Прервать;
        КонецЕсли;
        ПроцессорВывода.ВывестиЭлемент(ЭлементРезультатаКомпоновкиДанных);
    КонецЦикла;
    ПроцессорВывода.ЗакончитьВывод();


По моему, с СКД не лучше чем в (19) или чем например так (чтобы без отборов как в 19):
Формируем дерево значений из нужных групп, затем за одну выборку из таблицы товаров - дозаполняем ветви дерева и прочие колонки. Только после этого выгружаем дерево в файл..
Хз. А у вас есть на СКД примеры подобных реализаций посмотреть?
28 rikodroo
 
26.07.13
14:20
прьрьп
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn