Как узнать уровень строки табличного документа?

  1. 9 г. назад

    сабж. имеется табличный документ(макет обработки) с него выведена скопированная номенклатура - с многоуровневой иерархией.
    нужно эту номенклатуру загрузить - в соответствии с иерархией, со всеми группами-родителями и пр

    как узнать уровень строки в табл документе?
    или как можно сохранить этот табл док, чтобы можно было узнать уровень?

    Ответы: (11)
  2. А откуда он взялся-то? При формировании того макета вроде как уровни и задаешь, если это вроде загрузки наименований из экселя. Если СКД из базы, и наоборот выгружаешь, так уже ссылка на номенклатуру есть, из которой уровень в иерархии узнать не проблема.

    Ответы: (2) (51)
  3. (1) не важно откуда он взялся. возможность получить данные есть только в сабжевом виде и ни в каком другом и работать надо только с ним

    Ответы: (3) (35) (51) (84)
  4. (2) Вообще-то как раз важно. Слишком абстрактная задача. Непонятно даже что у тебя в том макете. Строки текста или ссылки.

    Ответы: (4)
  5. (3) еще раз - не важно. в макете - голый текст

    Ответы: (5)
  6. (4) Так вам шашечки или ехать? Как-то же этот текст туда попадает, и в процессе известен уровень. Или это типа головоломка, а не реальная задача?

    Ответы: (6) (51)
  7. (5)[...], во ты достал.. неизвестен уровень. табличный документ - это результат штатной "вывести список" формы списка номенклатуры

    Ответы: (51)
  8. 01.12.2014 16:58:10 отредактировано Stim

    + огромная просьба глупые советы и дурацкие вопросы держать при себе!

    Ответы: (51)
  9. Хамло. Тупое хамло...

    Ответы: (10)
  10. андрэ, можно как-то забанеть пользователя в ветке, чтобы он не флудил?

  11. Дядя Вася Хамло. Тупое хамло...

    самокритика это хорошая штука, но мне нужно решение, а не детективное расследование что где и откуда

    Ответы: (12)
  12. (0) Есть у меня что-то похожее, тянул из эксельного файла номенклатуру и потом загружал в справочник с соблюдением иерархии.

    Ответы: (13) (14)
  13. (10) А ты стрелки-то не переводи. Твой уровень и характер всем известен...

  14. (11) я вот тоже сейчас пробую через эксель.

  15. (11) Он же ясно сказал - тупые советы держать при себе. Из экселя ему не надо :)

  16. а ЗагрузкаДанныхИзТабличногоДокумента не поможет ?

  17. у ячейки экселя есть свойство IndentLevel вроде что-то похожее

  18. хм. что-то не то он показывает

  19. какой есть алгоритм правильной загрузки иерархии типа

    -инструменты
    --садовые инструменты
    ---лопата
    ---грабли
    --монтровка
    --молоток
    -расходные материалы

    и тд

    Ответы: (20)
  20. 01.12.2014 17:29:55 отредактировано КитайскийМуй

    Если это группа и если есть родитель - ищем в справочнике по наименованию
    Не нашли - создаём группу и устанавливаем Родителя.

    Если это элемент и если есть родитель - ищем в справочнике по наименованию
    Не нашли - создаём элемент и устанавливаем Родителя.

    Ответы: (26)
  21. (18) если у тебя есть ТабДок с " многоуровневой иерархией", то примерно так
    Процедура ОбойтиУровеньДерева(Строки)
    Для Каждого Строка из Строки Цикл
    Если Строка.Группа Тогда
    // найти или создать группу
    Иначе
    // найти или создать элемент + всякая мутотень типа справочник-единицы
    КонецЕсли;
    ОбойтиУровеньДерева(Строка.Строки);
    КонецЦикла;
    КонецПроцедуры

    Процедура СоздатьСправочник(Кнопка)
    ОбойтиУровеньДерева(ТабДок.Строки);
    КонецПроцедуры

    Ответы: (21) (26)
  22. (20) было б все так просто)
    если б у меня было дерево, которое я мог обходить рекурсивно, я бы не парился

    Ответы: (22)
  23. (21) ПолныйКод() как-бы дает полное представление о дереве

    Ответы: (23)
  24. (22)пля, чувак, какое дерево, какой полныйкод??(( слезай уже со своего дерева, в сабже речь про табличный документ

    Ответы: (24)
  25. (23) Он имеет ввиду:

    ПолныйКод()
    Возвращаемое значение:
    Тип: Строка.
    Строка, включающая код элемента и коды всех вышестоящих элементов.
    Коды выводятся слева направо, начиная с самого верхнего уровня, разделяются символом "/".

    Описание:
    Получает код элемента справочника с учетом кодов всех вышестоящих элементов.

    Доступность:
    Сервер, толстый клиент, внешнее соединение.
    Пример:
    Сообщить("Полный код данного элемента: " + СсылкаНаЭлемент.ПолныйКод());

    Ответы: (25)
  26. (24) я знаю, что он имеет ввиду.
    но не понимаю, к чему это здесь??
    я не выгружаю справочник, а загружаю в него

    Ответы: (26) (27)
  27. (25) Тогда тебе подойдут алгоритмы (19) и (20)
    Нужно только добавить пару полей - ЭтоГруппа и Родитель.

  28. (25) Как в файле выглядит структура дерева?

    Ответы: (28)
  29. (27) ты не знаешь, как в табличном документе выглядит иерархическая структура??

    Ответы: (29)
  30. (28) В твоем - не знаю.

  31. пля))

    Ответы: (34)
  32. масянька, а какие структуры дерева в табличном документе ты знаешь, давай начнем с этого

    Ответы: (32)
  33. 02.12.2014 11:09:47 отредактировано КитайскийМуй

    (31) А зачем тебе табличное поле в виде дерева? Преобразуй его в табличну часть или ТЗ, табл.поле геморойно анализировать и разбирать, таблицу проще.

  34. Ну, пля, так пля...

  35. (30) пля, чувак , выложи уже хоть скрин сюда, а еще лучше сам файлик ... правильно догадываться могут не только лишь все (цы)

    Ответы: (35)
  36. (34)

    Stim не важно откуда он взялся. возможность получить данные есть только в сабжевом виде и ни в каком другом и работать надо только с ним

    Задачу он не озвучит. Отвечай на его ответ, [...]! )

  37. КАКОЙ СКРИН ПЛЯ?? мужики, вы чего - не видели табличный документ с иерархией??

  38. задачу я озвучил и откуда взялся этот док я тоже писал. тем, кто не умеет читать рекомендую обратиться к окулисту

  39. и других вариантов получить данные кроме как в табличном документе - НЕТ

    Ответы: (39)
  40. (38) твой стиль веденея диалога вызывает только одно желание - послать тебя подальше
    зы: если тебе влом показать что там у тебя - решай свои проблемы сам

    Ответы: (40)
  41. palpetrovich твой стиль веденея диалога вызывает только одно желание - послать тебя подальше

    ради бога, посылай, я не обижусь.
    мой стиль ведения диалога - это следствие отсутствия нормального конструктивного диалога и отсутствия адекватных решений.

    я готов выслушать советы, но не готов объяснять как выглядит табличный документ и как в нем отображается иерархия, уж извините

    Ответы: (41)
  42. (40) Пойди туда - не знаю куда, принеси то - не знаю что (С)

    Ответы: (42)
  43. (41) да, масянька, для тебя это и должно выглядеть именно так.

    Ответы: (43)
  44. (42) Дык, иди и неси.

  45. 02.12.2014 12:45:17 отредактировано Stim

    а вот и код!
    простой и правильный, никаких рекурсивных вызовов и поисков по наименованию

    ИмяФайла = "C:\вет\1.xls";
    Док = ПолучитьCOMОбъект(ИмяФайла);	
    счСтрок = 2;   	
    Наим = Док.Sheets(1).Cells(счСтрок,1).Value;
    
    ТаблицаРодителей = Новый ТаблицаЗначений;
    ТаблицаРодителей.Колонки.Добавить("Ссылка");
    
    //проинициализируем таблицу
    Текиндекс = 0;
    пока Текиндекс <> 10 цикл
    	Строка = ТаблицаРодителей.Вставить(Текиндекс);
    	Строка.Ссылка = Справочники.Номенклатура.ПустаяСсылка();
    	Текиндекс = Текиндекс + 1;
    КонецЦикла;
    
    ЭтоЭлемент = ЛОЖЬ;
    
    Пока ЗначениеЗаполнено(Наим) Цикл 
    	
    	Наименование	= Док.Sheets(1).Cells(счСтрок,1).Value;
    	Код = Док.Sheets(1).Cells(счСтрок,2).Value;
    	//..пр реквизиты
    	ЕдиницаДляОтчетов= Док.Sheets(1).Cells(счСтрок,8).Value;
    	
    	
    	Уровень = Док.Sheets(1).Cells(счСтрок,1).IndentLevel ;
    	
    	Уровень = Уровень + 2;//потому что начинается уровень с 0, а нулевой у нас это корень
    	
    	ЭтоЭлемент = ЗначениеЗаполнено(ЕдиницаДляОтчетов) ;	
    	
    	// все уровни - четные, группы идут по убывающей в разрезе иерархии
    	//поэтому алгоритм такой:
    	//если это группа - создаем, родителя получаем из таблицы по индекс-2
    	//записываем или перезаписываем группу в таблицу со своим индексом
    	//если элемент - создаем, родителя получаем из таблицы по индекс-2
    	
    	
    	Родитель = ТаблицаРодителей.Получить(уровень-2).ссылка;
    	
    	Если  ЭтоЭлемент Тогда
    		//создаем элемент
    		
    	Иначе
    		//создаем группу  
    		
    		Строка = ТаблицаРодителей.Получить(Уровень);
    		Строка.Ссылка = Группа.Ссылка;		
    	КОнецЕсли;
    	
    	счСтрок =  		счСтрок +1;			
    	Наим	= Док.Sheets(1).Cells(счСтрок,1).Value;
    КОнецЦикла;
    
    Ответы: (46)
  46. + загружает данные любого уровня вложенности(учитывать при инициализации таблицы родителей)

  47. (44) мдя, и не поспоришь-же :) :) [smile=>:)]

  48. можете в БЗ заносить, как один из способов загрузки данных из табличного документа(экселя)

    Ответы: (48) (49)
  49. (47) а что вносить-то? 4 строчки банального кода?
    да и без реально озвученой задачи - нифик никому не нужно

  50. (47) А в каком месте тут табличный документ? Ты загрузил из экселя, которого на машине может и не быть. Ты не ответил на свой ответ! Загружать нужно только из табличного документа и никак иначе. А тупые алгоритмы с экселем просьба держать при себе!

    Ответы: (50)
  51. 02.12.2014 14:01:47 отредактировано palpetrovich

    (49) а ты видишь весь код? это только я вижу только начало?

    Ответы: (51) (52) (53)
  52. (50) Три точки-то нажми... Это я к тому что при попытке выяснить, что ему реально надо, он начал хамить:

    Stim (1) не важно откуда он взялся. возможность получить данные есть только в сабжевом виде и ни в каком другом и работать надо только с ним

    Stim (5)[...], во ты достал.. неизвестен уровень. табличный документ - это результат штатной "вывести список" формы списка номенклатуры

    Stim + огромная просьба глупые советы и дурацкие вопросы держать при себе!

    В итоге привел код загрузки из экселя, а не из табличного документа. Вот что он спрашивал, и какой смысл ему в дальнейшем отвечать? Сам не знает чего хочет, а за попытку помочь обосрет.

    Ответы: (53) (54) (57)
  53. (50) А кнопачку с троеточием пробовал нажимать?

  54. (50)(51) Не правильно вы делаете... Нужно - упасть ниц и благоговейно воскликнуть "О, Стим! Бог загрузки из табличного документа!" [smile=^_^]

    Ответы: (55) (59)
  55. (51) а, эт у меня Опера древняя, нет на ней "триТочки", посмотерл на ОгнеЛисе - там есть :)

  56. (53) Из экселя. Я бы попросил :)

    Ответы: (56)
  57. (55) Не знаю... А зачем из экселя грузить номенклатуру?

    PS У меня где-то валяется загрузка прайса из экселя (около 10 тысяч строк). Тоже с группировкой. Долго убеждала клиента, что не нужно... Грузили около 40 минут... Через пару недель попросили убрать лишнюю [smile=^_^]

  58. Дядя Вася В итоге привел код загрузки из экселя, а не из табличного документа

    да, загрузка из экселя - это один из способов загрузки данных из табличного документа.
    Табличный документ сохраняется в эксель, в экселе доступны уровни строк.
    Если б табличный документ можно было сохранять в файл еще какого-то формата, в котором можно считать уровни - это был бы еще один способ.

  59. + для особо зверских буквоебоведов могу дописать код, в котором будет программное сохранение табличного документа в файл эксель. И с созданным файлом можно будет работать даже без установленного на машине экселя

  60. Масянька Не правильно вы делаете... Нужно - упасть ниц и благоговейно воскликнуть "О, Стим! Бог загрузки из табличного документа!"

    ну наверн для тебя я Бог :) по крайней мере я точно знаю, как выглядит табличный документ и как в нем отображается иерархическая структура данных.

    Ответы: (60) (61)
  61. (59) Бубен есть?
    Как в excel'е выглядит структура группировок знают многие. И с загрузкой из excel'я многие справятся без тебя.

    Ответы: (62)
  62. Stim по крайней мере я точно знаю, как выглядит

    Сделай скрин... всякое может быть.

    Ответы: (64)
  63. Масянька И с загрузкой из excel'я многие справятся без тебя.

    масянька, давай без пустозвонства - выкладывай свой код по загрузке иерархических данных из экселя.
    подозреваю, что своего у тебя нет, выкладывай какой есть

    Ответы: (63)
  64. (62) Зачем?

    Ответы: (65)
  65. 02.12.2014 14:37:15 отредактировано Stim

    Bumer Сделай скрин... всякое может быть.

    ок. для тех, кто только начинает изучать 1С, вот скрин:
    -image-
    вот ссылка на материал: http://v8.1c.ru/overview/PlTabDoc.htm

  66. (63) покажи мне хоть один способ загрузки из экселя, о которых ты говоришь.

    Ответы: (66)
  67. (65) Зачем?

    Ответы: (67)
  68. Масянька Зачем?

    чтобы я мог тебе доказать, что мой метод гораздо оптимальнее прочих методов, которые используют "многие",

    Ответы: (69)
  69. а впрочем хер с вами.
    спасибо тем, кто пытался помогать, лучи поноса тем, кто кривлялся и строил из себя клоуна.
    тема закрыта

  70. (67) А мне не надо доказывать.

или зарегистрируйтесь чтобы ответить!