Имя: Пароль:
1C
1С v8
Алгоритм загрузки иерархических прайсов из Excel в 1с
, ,
0 Herber
 
26.07.12
12:14
Доброе время суток, Форумчане!
http://s017.radikal.ru/i443/1207/41/d864eca01018.png

В общем примерный алгоримт нужен. Через какой цикл пробежать по данным, как сохранить подчиненность групп и т.д
1 Herber
 
26.07.12
12:14
ГоловнаяГруппа
 Пример1
  -- Наименование
  -- Наименование
  -- Наименование
 Пример2          
   Подпример2.1
     -- Наименование
     -- Наименование
   Подпример2.2
     -- Наименование
     -- Наименование
 Пример3
2 zak555
 
26.07.12
12:14
рекурсия ?
3 mzelensky
 
26.07.12
12:15
Зачем рекурсия?
Просто построчно идешь и обрабатываешь.
4 mzelensky
 
26.07.12
12:17
(3) + Если у всех элементов присутствует  "--" , то вот тебе и флаг. Если нет "--", значит группа, иначе элемент. А чтобы сохранить иерархию Хранишь два элемента Текущий элемент и Родительский элемент.
5 Herber
 
26.07.12
12:18
Сперва была идея пройтись по массиву и "построить" список групп. [Группа,СтрокаВхождени]
6 Reset
 
26.07.12
12:19
(4) Двух элементов недостаточно, нужен стек(банальный массив) родителей.
7 Herber
 
26.07.12
12:19
"--" знаки для наглядности. В прайсе их конечно же нету
8 х86
 
26.07.12
12:20
рекурсией проще
9 Herber
 
26.07.12
12:21
(8) Можно примерно хоть в набросках
10 х86
 
26.07.12
12:22
(9)помнится мне у Стаса в книжке был
11 х86
 
26.07.12
12:23
а это универсальный загрузчик из табличных доков разве тебе не подойдет?
12 Herber
 
26.07.12
12:23
(10) Кто такое Стас если не секрет
13 Herber
 
26.07.12
12:23
*такой
14 mikecool
 
26.07.12
12:24
(12) все, пипец тебе )
15 zladenuw
 
26.07.12
12:25
16 zak555
 
26.07.12
12:26
17 Herber
 
26.07.12
12:28
(10) Боюсь спросить где достать эту книгу)
18 and2
 
26.07.12
12:29
продам с автографом автора.
дорого
19 Herber
 
26.07.12
12:30
Я уже просмотрел. Нету там ничего подходяещго
20 Herber
 
26.07.12
12:32
В c# есть Dictionary<TKey, TValue>. Есть ли в 1с подобное?
21 mikecool
 
26.07.12
12:32
(19) короче - юзай рекурсию
22 mikecool
 
26.07.12
12:32
(20) без понятия что это такое
23 mikecool
 
26.07.12
12:32
или купи у Мани обработку - он вроде рекламировал ее как супер-пупер
24 zladenuw
 
26.07.12
12:33
получай тз элементов с экселя и делай что хочешь потом
25 Herber
 
26.07.12
12:33
(21) Я только один пример из рекурсии знаю)) нахождение факториала. Так что предлагайте другой метод
26 zladenuw
 
26.07.12
12:36
ПолучитьГруппыИерархически();

Процедура ПолучитьГруппыИерархически(Группа=Неопределено)
 Выборка=Справочники.Номенклатура.Выбрать(?(Группа=Неопределено,Справочники.Номенклатура.ПустаяСсылка(),Группа));
 Пока Выборка.Следующий() Цикл
   Если Выборка.ЭтоГруппа Тогда
     Сообщить(Выборка.Наименование);
     ПолучитьГруппыИерархически(Выборка.Ссылка);
   КонецЕсли;
 КонецЦикла;
КонецПроцедуры
27 Herber
 
26.07.12
12:41
(26) У меня мозг щас в рекурсию уйдет. Нет примера старым дедовским методом через Для
28 Сияющий Асинхраль
 
26.07.12
12:44
А ты думаешь быстрее поймешь без рекурсии? На самом деле без проблем можно и без, хотя не думаю, что это проще для запоминания
29 Сияющий Асинхраль
 
26.07.12
12:45
То бишь для понимания, а не запоминания
30 Herber
 
26.07.12
12:48
(26) Получили мы группы. Дальше?
31 Сияющий Асинхраль
 
26.07.12
12:49
Сам экселевский файл в каком виде, хоть пример покажи
32 Сияющий Асинхраль
 
26.07.12
12:50
А то, в принципе, могу скинуть пример, не скажу, что сильно красиво, но работает...
33 Feanorko
 
26.07.12
12:52
(12) неудачнег какой-то :)
34 Reset
 
26.07.12
12:53
(30) Ничего дальше. Это тебе привели пример рекурсии (кроме факториала). С твоей задачей ничего общего.
35 Herber
 
26.07.12
12:56
36 Сияющий Асинхраль
 
26.07.12
13:01
(35) И каким образом для такого варианта ты сам то уровни отличаешь? Пробелы перед наименованием, что ли, считаешь? Если так, то как-то криво и неоднозначно...
37 Herber
 
26.07.12
13:05
(36) В том то и дело что по пробелам не вариант различать. Примерно как я думаю

for int i=0; i< Sheets.count; i++)
 Если ячейка i,С3 пустая, то
    Создаем группу
    Буф= созданная группа;
    Если ячейка i+1,c3 пустая
      Буф.Родитель = ГоловнаяГруппа;
      СоздаемГруппу;
    КонецЕсли
 ИначеЕсли
   
.... Это для групп.
38 Сияющий Асинхраль
 
26.07.12
13:05
Короче, есть загрузка для варианта:

ГоловнаяГруппа|Световые приборы|Светильник|ф|100|10
ГоловнаяГруппа|Световые приборы|Светильник1|ы|100|10
ГоловнаяГруппа|Световые приборы|Светильник2|в|100|10

и т.д.
39 Сияющий Асинхраль
 
26.07.12
13:11
(37) И как ты различишь, что "Инструменты" у тебя находится на втором уровне, а не на третьем, как, например, молотки?
40 Herber
 
26.07.12
13:26
(37) Если два раза подряд идут элементы с жирным шрифтом или элементы у которых пустая третья ячейка, то первый будет головным, а второй будет подчиненным.
41 Сияющий Асинхраль
 
26.07.12
13:32
(40) Прикольно. :-) Вместо того, чтобы построить вменяемое структурирование, анализировать жирность шрифта, это класс...
42 sergeystav
 
26.07.12
13:43
у тебя каждый уровень в соответствующем столбце?
43 Сияющий Асинхраль
 
26.07.12
13:45
Судя по картинкам все в одном :-( , эх ладно побег я, товарищ говорит по одной фразе в пол часа...
44 Herber
 
26.07.12
13:48
(42) Ага
45 Reset
 
26.07.12
13:51
(42)(44) Нифуя, у него все в одном
46 Herber
 
26.07.12
14:12
апну тему
47 Herber
 
26.07.12
14:13
ГоловнаяГруппа
 Пример1
  -- Наименование
  -- Наименование
  -- Наименование
 Пример2          
   Подпример2.1
     -- Наименование
     -- Наименование
   Подпример2.2
     -- Наименование
     -- Наименование
 Пример3

А если использовать Таблицу Значений?
48 Ахиллес
 
26.07.12
14:19
(47) Я не возражаю. Используй.
49 Ахиллес
 
26.07.12
14:19
Откуда вообще этот прайс? Может его изначально можно составить по другому?
50 Feanorko
 
26.07.12
14:20
(47) используй ДеревоЗначений и не иппи моск :)
51 Herber
 
26.07.12
14:22
(50) а потом не будет проблематично загрузить из Дерева в номенклатуру
52 abitfrosty
 
26.07.12
14:24
Есть такое понятие "Родитель", вот если он заполнен - пихаешь свой элемент туда. Если этот родитель не создан - создаешь. Если у этого родителя есть родитель - создаешь его. Удачи.
53 Ахиллес
 
26.07.12
14:30
Кароче. Определяешь максимальный уровень вложенности групп (вручную).
Далее:
ТекущийРодитель_1
ТекущийРодитель_2
ТекущийРодитель_3
ТекущийРодитель_4
ТекущийРодитель_N
По максимальному уровню вложенности.
Далее в строке находишь данные, определяешь группа или номенклатура, записываешь с текущимродителем - 1 уровень.
54 Feanorko
 
26.07.12
14:33
(51) а в чем там может быть проблема?