Загрузка из Excel в УТ10. с иерархией #725867


#0 by LYuri
Доброго времени суток. Пытаюсь реализовать загрузку номенклатуры посредством внешней обработки. Исходные данные: ИБ - УТ 10.3.29.1 типовая, базовая. Файл экселя с группировками, т.е. иерархический. С чтением из фалы проблем нет. Уровень иерархии - проблем нет, получаю через свойство ExcelЛист.Rows(ТекСтр).OutlineLevel Проблема в следующем. Нужно реализовать правильную загрузку с учетом иерархии. Сам код не интересует, нужна блок-схема или примерный алгоритм. Может у кого есть рабочий пример. Заранее спасибо.
#1 by pessok
А в чем проблема? При обходе записывай к текущей номенклатуре код родителя, а потом в 1С его и устанавливай
#2 by Looser-1c
читаем элемент, ищем для него родителя, не находим - см. пункт первый, находим - записываем
#3 by Fish
Сколько уровней иерархии, заранее известно или может быть разным?
#4 by LYuri
Сижу уже 2 часа, понлый "затык" )) Давайте подробнее. по шагам
#5 by LYuri
Уровни динамические: 1---- -2--- --3-- ---4- ----5 ----5 ---4- ---4- ---4- --3-- ---4- ---4- -2--- -2--- -2--- Примерно так может быть. число вложений не ограничено
#6 by LYuri
Может быть и 10
#7 by Looser-1c
Рекурсия божественна, циклы - для людей (с) один из классиков
#8 by LYuri
Пытаюсь реализовать при помощи Дерева. 1 этап. создаю родителькую ветку
#9 by Fish
Тогда только рекурсия спасёт.
#10 by LYuri
С рекурсией знаком, но на практике мало реализовывал
#11 by Looser-1c
Вот и повод будет попрактиковаться
#12 by LYuri
Обязательно, этим щас и занят. Но нужно быстрое решение. Времени нет на теорию,нужен практический пример
#13 by Looser-1c
быстрые решения или неправильны, или платны ))
#14 by Fish
Поиском не пробовал пользоваться? Иногда помогает:
#15 by LYuri
Спасибо. Поиском пользовался, эта статья в закладках есть, но пока разобрать ход мысли автора не получилось до конца. Сижу ковыряю.
#16 by LYuri
Цена вопроса?
#17 by Looser-1c
Я не хочу в пятницу работать. Поэтому - стотыщьмильонов (с гарантией, чтобы не хватило ))
#18 by LYuri
Кто хочет поработать?
#19 by LYuri
2 этап - вызываю процедуру, которая перебирает строки экселя и вызывает рекурсивно сама себя.
#20 by Fish
И этого в принципе должно быть достаточно.
#21 by dk
самый простой вариант - запись в 2 цикла 1. первый цикл пробегаешься эксель и дорисовываешь недостающих родителей 2. все родители уже есть - просто присваиваешь родителей элементам -------- или проблема в поиске родителя? у тебя группы по наименованию или коду дублируются?
#22 by LYuri
да именно проблема в поиске родителя. кодов нет. есть только наименования. могут дублироваться
#23 by Fish
А в чём проблема? Ищешь по наименованию только внутри определённого родителя. Или у тебя внутри одного родителя могут быть одинаковые элементы/папки?
#24 by LYuri
Да чот не хочется в цикле. Чую, что 50000 наименований в цикле "опупеют" ))
#25 by dk
я обычно из Экселя гружу в ТЗ и уже потом с ТЗ работаю прочитал в тз добавил колонку родитель с ссылкой на группу в 1с заполнил родителя записал элементы
#26 by Maniac
Короче не трахай мозг. Заведи в 1С все папки. С иерархией. Не думаю что там у тебя их миллионы. Ну 50 штук. А потом грузи прайс ища только папку нижнего уровня, в которую непосредственно входит товар.
#27 by Maniac
Илои можно всю иерарзхию загрузить в корень, в нее номенгклатуру. Потом просто поперекидывать папки в папки и все. 5 минут дел. Ты программировать будешь в мллиярд раз долше.
#28 by LYuri
Спасибо, наверное так и сделаю.
#29 by LYuri
Но в итоге нужно будет все таки вопрос решить
#30 by Maniac
Группы в одной колонке?
#31 by Maniac
с товарами?
#32 by Maniac
1) все загонял в ТЗ 2) В цикле бегу по ТЗ. Определяю если строка группа. Запихиваю в переменную (которая объявлена до цикла) Если определеил ее, то назначаю в продолжении цикла всем строкам товаров. Как только дошел до следующего определения группы. Опять в переменную и опять назначение всем слудующим строкам.
#33 by Maniac
Определить группу достаточно легко. У групп в прайсах всегда отсутствует одно из трех правил: если есть колонка артикул но пусто - группа. Если есть колонка цена - но пусто, тоже группа. Если есть единица и пуста - тоже группа. При выполнении хоть одного из этизх условий мы попадаем на группу в ТЗ, и ее с помощью запоминания в переменную распихиваем по строкам. Дальше простое дело техники. Итого всего навсего 1 пробежка чтобы по всем строкам группу определить и далее туда грузить.
#34 by Maniac
#35 by Управление торговлей
заведи список значений, при увеличении OutlineLevel кидай туда группу, при уменьшении OutlineLevel получай группу из списка, используя OutlineLevel как индекс
#36 by МишельЛагранж
Выгружаем номенклатуру вместе с привязкой к папкам в виде "каталог/каталог1/каталог2/каталго3". При загрузке - парсим привязку, ищем цепочки (начиная сверху с корня), если нашли всех потомков - пишем туда, нет - создаем на нужном уровне потомков до конца и пишем туда. Это единственный верный путь - и автоматически, и все будет правильно. Остальное - рекурсии, "заведи папки", OutlineLevel - не дадут точности и глубины, а следовавтельно - неправильный результат получишь. Все это рассчитано на 1-2 уровня вложенности.
#37 by МишельЛагранж
>>Или у тебя внутри одного родителя могут быть одинаковые элементы/папки? - внутри разных родителей могут быть одинаковые наименования. Это как у вас - зовут Сергей, а рядом - еще целая лестничная клетка Сергеев. Но вы же все разные. Да еще и по поколениям.
#38 by МишельЛагранж
пиши мне, но два дня - слишком жесткий срок за небольшие деньги.
#39 by Сияющий Асинхраль
Есть процедурка в 20 строчек на 7.7, которая расставляет предков и потпков в тз где указаны уровни. Если надо могу сбросить
#40 by Сияющий Асинхраль
+ Вот так разбирается ТЗ, которая имеет колонку "Уровень", заполненная как в и пару доп колонок "ЭлтТекУр" следующий в данной папке элемент текущего уровня (если они еще есть), "ЭлтВниз" - первый элемент входящий в текущую папку:
#41 by LYuri
Методом рекурсии получилось организовать загрузку с неограниченным уровнем вложенности. Воспользовался статьёй Правда пришлось кардинально переработать алгоритм. Теперь всё работает. Доделываю, навожу лоск. Позже выложу на инфостарте.
#42 by LYuri
А пока если кому надо, пишите в личку
#43 by LYuri
Может есть у кого информация дайте ссылку на информацию подобной функции на OpenOffice. Хочу сделать возможность работать через свободный офис.
#44 by LYuri
функцию имел ввиду как ExcelЛист.Rows(ТекСтр).OutlineLevel
#45 by LYuri
Почти доделал обработку. получилась универсальная. Тестировал на основной прайсе от 1С. Загрузка всего прайса занимает не более 5 минут
#46 by LYuri
Пришлось повоевать с рекурсиями )) 2 дня тренировок и 5 минут полёта
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С