Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Иерархическая загрузка из EXCEL

Иерархическая загрузка из EXCEL
Я
   _stay true_
 
22.09.16 - 16:39
Здравствуйте. Прошу помощи, ибо мозга немного перегрета и четверг.

Есть у нас таблица значений вида
Код    Иерархия    Классификатор
4195    4.1    A00-В99 КЛАСС I Некоторые инфекционные и паразитарные болезни
4196    4.1.1    A00-A09 Кишечные инфекции
4197    4.1.1.1    A00 Холера
4264    4.1.1.10    A09 Диарея и гастроэнтерит предположительно инфекционного происхождения (дизентерия)
4201    4.1.1.2    A01 Тиф и паратиф
4202    4.1.1.2.1    A01.0 Брюшной тиф
4206    4.1.1.2.2    A01.4 Паратиф неуточненный
4207    4.1.1.3    A02 Другие сальмонеллезные инфекции
4208    4.1.1.3.1    A02.0 Сальмонеллезный энтерит
4212    4.1.1.3.2    A02.9 Сальмонеллезная инфекция неуточненная
4213    4.1.1.4    A03 Шигеллез
4220    4.1.1.5    A04 Другие бактериальные кишечные инфекции




Нужно загрузить в таблицу значений типа

Родитель1    Родитель2  Родитель3   Родититель4
4.1.1.2.1     4.1.1.2      4.1.1        4.1
4.1.1.2.1     4.1.1.2      4.1.1
Т.е. Самый "глубокий" элемент - это первый родитель, самый "мелкий" - это самый последний. Максимально возможная "глубина" известна - 6.

Знаю, что нужно смотреть в сторону рекурсии, читал несколько статей. Но ничего толком не понял. Если у кого есть похожий пример кода, подскажите, как иерархический "столбик" конвертнуть в "строку".
Заранее спасибо.
 
 
   Garykom
 
1 - 22.09.16 - 16:46
Ты куда МКБ10 засовываешь?
   _stay true_
 
2 - 22.09.16 - 16:48
(1) В ERP))
Но пока что просто в таблицу значений.
   Garykom
 
3 - 22.09.16 - 16:51
Да рекурсивно самое простое через ПолучитьРодителя() где внутри берется родитель или ничего если достигли корня.

2 цикла, 1-й по всем элементам и выбираем только те которые без детей-потомков.

Затем 2-й цикл (можно рекурсивный цикл но не обязательно так как уровень ребенка известен) внутри каждого конечного для восстановления цепочки родителей до самого корня.
   Garykom
 
4 - 22.09.16 - 16:54
Или можно запросами, вот http://its.1c.ru/db/metod8dev/content/2659/hdoc и т.д.

смотри "Проверка наличия подчиненных элементов у элемента справочника"
   Garykom
 
5 - 22.09.16 - 16:55
(4)+ Но это будет тормоза с классически осуждаемым "запрос в цикле"
   _stay true_
 
6 - 22.09.16 - 16:56
(3) 2 цикла, 1-й по всем элементам и выбираем только те которые без детей-потомков.

Проверить, входит ли более "короткий"(по длине строки) в следующий более "Длинный"(по длине строки)? Если входит - идем мимо, если не входит - добавляем, к примеру, в массив. Я верно понял?

По второму вообще не понял если честно. Можно какой-нибудь простой наглядный пример. Правда не могу никак понять суть явления.
   МихаилМ
 
7 - 22.09.16 - 16:57
   ovrfox
 
8 - 22.09.16 - 16:58
Не нужна рекурсия. Просто упорядочиваешь список, полученный из EXCEL  по колонке Иерархия.
Первый элемент записываешь
Какждый следующий элемент перед записью ищешь родителя по сокращенному на один уровень полю ИЕРАРХИЯ и записываешь , если нашел. Если не нашел - значит что-то сделал не так или этот элемент и есть самого высокого уровня.
   Garykom
 
9 - 22.09.16 - 16:58
Найди МКБ10 в нормальном dbf виде и заюзай если задачка реальная а не учебная
   ovrfox
 
10 - 22.09.16 - 16:59
(8) Конечно поле иерархия должно быть записано в справочник. Зато без вложенных циклов и/или рекурсии
 
 Рекламное место пустует
   _stay true_
 
11 - 22.09.16 - 17:03
(10) Попробую. По результатам отпиишусь.
Только мне никуда ничего пока что записывать не нужно, просто таблицу получить с нужной структурой строк
   ovrfox
 
12 - 22.09.16 - 17:04
(8) Ага, херню спорол. Нужно ТЗ, а не справочник.
Тогда тот же алгоритм, но пихаем в ДеревоЗначений.
Когда запихнули - тогда определям максимальный уровень. Добавляем соотвествующее количество родителей в колонки и рекурсией заполняем родителей сверху вниз (или снизу вверх, смотря как надо)
В таблицу значений переносим строки , не имеющие подчиненных элементов - готово.
   _stay true_
 
13 - 22.09.16 - 17:11
(12) Попробую. Но завтра. Сейчас котелок уже как-то не соображает.

Спасибо тебе:)
   Garykom
 
14 - 22.09.16 - 17:22
ipv6 хосты и подсетки ))
   Garykom
 
15 - 22.09.16 - 17:37
Берем колонку иерархию, заменяем на стандартное 004.001.001.010 и далее простыми методами типа сортировки, определение "потомков" через есть ли еще рядом записи 004.001.001.010.XXX и т.д.
   _stay true_
 
16 - 23.09.16 - 15:24
Получилось! Ура, товарищи! Спасибо большое!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует