Загрузка номенклатуры из иерархического Excel #566936


#0 by Anderson
Знаю что обсуждений было куча, и перечитал много статей. Но все же вопрос остается открытым. Есть прайс номенклатуры вложенностью 7 или 8 уровней. Элементы можно отследить по артикулу, а вот с группами проблема. Знаю только уровень вложения, а вот определить родителя этого уровня не получается т.к. верхних уровней тоже может быть несколько штук. Собственно вопрос: возможно ли как-то из Excel вытащить кроме уровня еще и родителя и как это сделать. Может у кого-то есть альтернативные решения!
#1 by Anderson
ап
#2 by izekia
ждем Евгения))
#3 by izekia
формат в экселе какой, опиши примерно
#4 by Eugeneer
Есть конечно
#5 by Eugeneer
)))
#6 by Eugeneer
вес папки в одной колонке с номенклатурой?
#7 by Eugeneer
есть у меня определитель таких прайсов и групп в них. Алгоритм несложный. Но я пока делал три (можно сделать и 8).
#8 by Anderson
По виду это типовый прайс из УТ т.е.:  Группа1.2      Группа1.2.1.1       Элемент1...      Группа1.2.1.2       Элемент2...    Группа1.2.2     .....  Группа1.3    ..... Группа2 Группа2.1   ..... Группа2.2
#9 by Anderson
Можно по-подробней?
#10 by izekia
lol то есть у тебя отдельная обработка на каждый уровень?) у каждой отдельно взятой группы или элемента можно определить родителя?
#11 by Eugeneer
все понятно. короче у тебя в прайсе есть колонка с номенклатурой. в ней и товары и папки. ты хочешь загрузить все по иерархии. нормальная хотелка каждого))
#12 by Eugeneer
нет у меня обработка которая считывает три группы. пока максимум что встречалось у клиентов. но если надо 8 то можно и под 8 чделать. количество роли не играет. ну чуток кода будет больше.
#13 by Happy Bear
пару дней назад писал загрузку. Задал количество уровней иерархии, на каждый уровень прописал номер колонки. Родителя ищу в цикле по наименованию.
#14 by Eugeneer
если у тебя такая структура - вычисляй по количеству пробелов. ответ на лицо. У меня нет пробелов у меня прайсы попадаются где все идет сплошным списком. Пришлось писать модуль по определению групп и иеархии
#15 by Eugeneer
с отдельными колонками любой сделает)) а ты с одной сделал?)
#16 by mikecool
я делал загрузку - уровень группы отслеживался по размеру и жирности шрифта ))
#17 by Happy Bear
надо поставщиков нормальных иметь, которые прайс нормальный выкладывают  ;).
#18 by Anderson
Да но там количество пробелов может плясать -+4 символа
#19 by Eugeneer
Все гораздо проще. У групп в прайсах как правило нет какого то заполненного поля. Единицы, количества. При пробежке мы это можем получить. Потом все просто оказывается. Получили строку (нет единицы) аха - это группа. Бежим след строка - нет - аха это вторая группа. И т.д. Таким образорм получаем группы. Для связки (т.е. аха 1 группа, 2 группа и т.д.) Заводим переменные. То есть на первой группе - аха это группа - в переменную ПОлучили вторую группу - аха -0 в другую переменную. Потом у нас получится переменные которые друг другу родители. Как только вышли на товар. - аха это товар. Значит все переменные свыше - его группы. Бегим пока после товаров опять группа не попадется. Обунляем переменные. Опять считываем.
#20 by Anderson
как вариант
#21 by Eugeneer
надо иметь нормальную купленную разработку сделанную мной))) Чем больше таких поставщиков тем у меня больше заработок ))
#22 by Eugeneer
бывает одинаковым или вообще никак не выделено.
#23 by Eugeneer
и пробелов быть не может. надо отталкиватся от всех случаев.
#24 by mikecool
а иерархия - какая группа чему принадлежит ?
#25 by Eugeneer
так через временные переменный ты их все получаешь. Перем Родитель1, Родитель 2 и т.д.
#26 by Eugeneer
Могу продать разработку. 1Сникам скидка 20 процентов)))
#27 by izekia
ну если отступ больше, значит группа подчиненная и наоборот + проблема в том месте, где кончаются товары и появляется группа, сложно будет определить ее уровень
#28 by mikecool
не, это не мой путь, при неопределенной иерархии запаришься
#29 by mikecool
вот я про то же
#30 by Eugeneer
у тебя переменные строк. которые хранятся пока не будет определена строка с товаром и опять найдена очередная группа. Ясень пень что после строки с товаром если опять попалась группа. значит все переменные обнуляем. А до этого времени все переменные это группы. Просто проверяем заполненность переменных. Получается Родитель1 Родитель2 Родитель3 и т.д. Все они между собой связаны.
#31 by mikecool
короче - задача тривиальная, главное - оперделить признаки, остальное 50-70 строк кода
#32 by mikecool
т.е. ты бежишь по всему файлу, пытаясь определить группы? и формируешь дерево групп?
#33 by Eugeneer
никто не мешает тебе сделать ТЗ и показывать результат работы алгоритма перед тем как что то создавать в базе. Через интерактивную таблицу моджно проверить правильность работы и на логическом уровне все отладить как часики.
#34 by Eugeneer
конечно.
#35 by Anderson
А если какой-то идиот менеджер поставщика написал название группы или товара с пробелом в начале, то она получится в другом уровне. А если у меня на 40-м уровне есть 15 групп, то сколько мне надо переменных? Надо что-то более универсольное.
#36 by mikecool
не, у меня без дерева работала, нормально раскидывала
#37 by Eugeneer
ну тогда продолжай ипать себе мосх))) универсальных не бывает в таких вещах.
#38 by Eugeneer
я прайсов столько перевидал шопипец. каждый дрочит как хочет.
#39 by Anderson
40-м = 4-ом
#40 by Eugeneer
любой алгоритм может слететь если появится новыйчудо прайс. Там еще бывает что группы вообще влепливают в колонку с артикулом или даже номером строки. так вообще офигеешь такое считывать.
#41 by Anderson
Я не про универсальной загрузки всех прайсов, а про универсального алгоритма в плане обработки групп данного прайса.
#42 by Eugeneer
я ж и говорю. под один прайс настроишь, прийдет другой прайс и уже надо новый алгоритм и т.д. и т.п.
#43 by Anderson
А из самого Excel'я никак не получится вытащить?
#44 by Anderson
Получаем же уровень нахождения, может можно как-то и родителя уровня вытащить?
#45 by Eugeneer
все это не так просто. Если у тебя один прайс строгой формы то конечно тут смело можно делать один алгоритм не парясь. По пробелам - тебе самый подходящий вариант и самый простой. Проверку группы и товара легко определить по какой нить колонке типа единицы измерения или количества. В прайсах у группы эти колонки пустые.
#46 by Eugeneer
а эксель у тебя у всех стоит?
#47 by Anderson
Да.
#48 by izekia
кинь куда-нибудь пример?
#49 by izekia
прайса
#50 by mishmeister
Интересно стало, можно я присоединюсь? А можно ведь сделать более универсально, без переменных. Загружать прайс в дерево значений. Т.е. получится как у Eugeneer, но сначала создаем группы, как дошли до товаров(Судя по колонке количество) пишем товары,при этом проверяя количество пробелов слева, как встретили группу, по тем же пробелам находим родителя в этой группе, и т.п. В итоге получаем дерево, которое уже грузим в справочник после необходимых телодвижений.
#51 by mikecool
можно и без дерева, повторюсь - главное определить признаки, а закодить уже мелочи
#52 by Anderson
#53 by izekia
парни, ну накуй вам эти деревья или переменные, тут же линейная структура, все тупо сразу в справочник пишется и вообще присоединюсь к тут тонкости реализации - последнее дело
#54 by mishmeister
ИМХО, если что грузить от поставщика, то перед записью в БД нужно пользователю дать шанс проверить. А тут можно добавить колонки с найденными значениями в базе, дать возможность самостоятельно ввести корректировки, и т.п. Размечтался что-то я, сам все равно по другому и проще делал:) Но и задачи другие были.
#55 by izekia
черт, тут вообще все просто, строки уже сгруппированы, даже напрягаться не нужно
#56 by mishmeister
А его 1 раз загрузить надо, или периодически обновлять?
#57 by Anderson
Самая основная проблема сохранить иерархию. Допустим грузим группы 5-го уровня и тут группа 4-го уровня следовательно родителя надо искать 3-го уровня а их штук 5 и кто из них папочка?
#58 by Anderson
Обновлять конечно, если будут дополнения.
#59 by izekia
глупости, тут родитель явно определяется, так как существуют группировки
#60 by Anderson
Ты хотел сказать последняя группа из этого уровня т.к. загружаем последовательно?
#61 by Eugeneer
Чел не понимает как строками управлять)) предидущей и следующей))
#62 by mishmeister
запоминай группы отдельно, и как найдешь следующую группу, то ищи предыдущую по количеству пробелов слева.
#63 by Anderson
по ходу я не въехал в
#64 by izekia
ты файл смотрел? там строки сгруппированы
#65 by Eugeneer
делаешь ТЗ для заполнения Две колонки Считываем файл Пока Стр для Каждого ляляля Следующий Если Ляляля проблелов = 1 Тогда КонецЦИкла. Для Каждого Стр из ТЗ ЦИкл ляляля найтигруппа Не нашли создали ВерхняяГруппа = СОзданнаяИлиНайденнаяГруппа и т.д. и т.п.
#66 by mishmeister
Смотрел, он как раз как в
#67 by izekia
не обратил внимание на левое поле ... там типа плюсики и полоски какие-то
#68 by izekia
зачем нужна твоя промежуточная структура ? берешь все и пишешь в справочник в транзакции сразу, не надо ничего дополнительного
#69 by Eugeneer
я не привык делать алгоритмы без проверки предварительной. Хочешь делай сразу! что проще проверить и кнопку нажать или насоздавать а потом мосх ипать и чистить все если где то глюк прошел или неправильно.
#70 by Eugeneer
вот так понажимают кнопок без контроля а потом сидят и дрочатся чтобы найти то что сделало. почистить и заного начинать.
#71 by Anderson
Все проверки пробелов легко заменить Лист.Rows(Стр).OutlineLevel и получаешь готовую таблицу с уровнями.
#72 by Eugeneer
к тому же считывание экселя - тормознутая штука. а если ты еще пригрузишь его созданием. то будешь каждый раз процедуру выполнять в случае ошибок по 10 кругу! ну и зачем такое мосх..во? Лучше считать, а потом записать (в одной транзакции пройдет моментально)
#73 by Eugeneer
Я видел кучу обработок где делают номенклатуру при считывании ячеек. я за такое бы уволил бы сразу....)))
#74 by Eugeneer
это если они есть и если есть эксель, на который не каждый хочут 7 тыщ на юзера покупать, которые в нем никуя не делает.
#75 by izekia
дада, таблицу делать потом из нее создавать справочник - это намного быстрее и эффективнее ... извини, я как-то не подумал а по поводу уволил - очевидно, отсюда и имеем обработки, которые только с тремя уровнями вложенности работают
#76 by Eugeneer
да именно так. это будет мгновенно. Зато для отладки супер.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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