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