8.х Вывод иерархического справочника рекурсивно

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Yury, 27 ноя 2014.

  1. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Здравствуйте,

    Есть необходимость выгрузить иерархический справочник (иерахрия элементов) в xml-файл. Делаю так:
    Код:
    Процедура ВыгрузитьВXML (Знач ИмяФайла) Экспорт
       
        ВыгрузкаXML = Новый ЗаписьXML;
        ВыгрузкаXML.ОткрытьФайл(ИмяФайла);
        ВыгрузкаXML.ЗаписатьОбъявлениеXML();
       
        ВыборкаПоИерархии = ПолучитьВыборкуПоИерархии ();
       
        ЗаписатьВыборкуВФайл (ВыгрузкаXML, ВыборкаПоИерархии);
       
        //
        ВыгрузкаXML.Закрыть();
    
    КонецПроцедуры
    
    
    Функция ПолучитьВыборкуПоИерархии ()
       
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ПримерИерархии.Ссылка КАК Ссылка
            |ИЗ
            |    Справочник.ПримерИерархии КАК ПримерИерархии
            |ИТОГИ ПО
            |    Ссылка ТОЛЬКО ИЕРАРХИЯ
            |АВТОУПОРЯДОЧИВАНИЕ";
       
        РезультатЗапроса = Запрос.Выполнить();
       
        Возврат РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)
    
    КонецФункции   
    
    Процедура ЗаписатьВыборкуВФайл (ОткрытаяВыгрузкаXML, Выборка)
       
        Если Выборка.Количество () <> 0 Тогда
            ОткрытаяВыгрузкаXML.ЗаписатьНачалоЭлемента("Элементы");
            //
            Пока Выборка.Следующий () Цикл
                ОткрытаяВыгрузкаXML.ЗаписатьНачалоЭлемента("Элемент");
                ОткрытаяВыгрузкаXML.ЗаписатьТекст(Выборка.Ссылка.Наименование);
                ОткрытаяВыгрузкаXML.ЗаписатьКонецЭлемента();
                //
                ДетальнаяВыборка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
                ЗаписатьВыборкуВФайл (ОткрытаяВыгрузкаXML, ДетальнаяВыборка);
            КонецЦикла;   
            //
            ОткрытаяВыгрузкаXML.ЗаписатьКонецЭлемента();
        КонецЕсли;   
       
    КонецПроцедуры    
    Получаю лишние записи в файле. Какие именно, лучше видно по картинке:
    upload_2014-11-27_10-49-41.png
    как "подавить" вывод лишних записей???
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Сделайте просто
    ОбходРезультатаЗапроса.ПоГруппировкам, а в итогах включите

    |ИТОГИ ПО
    | Ссылка ИЕРАРХИЯ
  3. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Не вообще фигня получилась:
    upload_2014-11-27_10-57-8.png
    --- Объединение сообщений, 27 ноя 2014 ---
    Сделал dt-шник под этот пример. Выложить?
  4. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Я выгрузил на всякий случай, чтоб понятнее было

    Вложения:

  5. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Детальную запись обходи по группировкам без иерархии
    ДетальнаяВыборка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    вместо
    ДетальнаяВыборка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
  6. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Тоже самое как в первом случае -- ничего не поменялось.
  7. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Я решил задачу. Кому интересно как - спрашивайте :)
  8. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.735
    Симпатии:
    508
    Баллы:
    204
    Напишите ответ, меня интересует:D
  9. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Вот так работает как мне надо:

    Код:
    Функция ПолучитьВыборкуПоИерархии ()
       
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ПримерИерархии.Ссылка КАК Ссылка
            |ИЗ
            |    Справочник.ПримерИерархии КАК ПримерИерархии
            |
            |УПОРЯДОЧИТЬ ПО
            |    Ссылка ИЕРАРХИЯ";
       
        РезультатЗапроса = Запрос.Выполнить();
       
        Возврат РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)
    
    КонецФункции   
    
    Процедура ЗаписатьВыборкуВФайл (ОткрытаяВыгрузкаXML, Выборка)
       
        Если Выборка.Количество () <> 0 Тогда
            ОткрытаяВыгрузкаXML.ЗаписатьНачалоЭлемента("Элементы");
            //
            Пока Выборка.Следующий () Цикл
                //
                ОткрытаяВыгрузкаXML.ЗаписатьНачалоЭлемента("Элемент");
                ОткрытаяВыгрузкаXML.ЗаписатьТекст(Выборка.Ссылка.Наименование);
                ОткрытаяВыгрузкаXML.ЗаписатьКонецЭлемента();
                //
                ДетальнаяВыборка = Выборка.Выбрать();   
                ЗаписатьВыборкуВФайл (ОткрытаяВыгрузкаXML, ДетальнаяВыборка);
            КонецЦикла;   
            //
            ОткрытаяВыгрузкаXML.ЗаписатьКонецЭлемента();
        КонецЕсли;   
       
    КонецПроцедуры    
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Вот и замечательно. Level UP :)
  11. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Кстати, тоже не совсем правильно, я поторопился с выводом.............
  12. TerANik
    Offline

    TerANik Профессионал в 1С

    Регистрация:
    19 ноя 2014
    Сообщения:
    997
    Симпатии:
    70
    Баллы:
    54
    Level DOWN)) что теперь показывает?
  13. TopicStarter Overlay
    Yury
    Offline

    Yury Опытный в 1С

    Регистрация:
    22 дек 2011
    Сообщения:
    355
    Симпатии:
    4
    Баллы:
    29
    Я все-таки добился нужного результата. Вот так работает как надо:
    Код:
    ДетальнаяВыборка = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, Выборка.Группировка());    

Поделиться этой страницей