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

  1. 8 г. назад

    задача, нужно из екселевского документа загрузить номенклатуру со структурой папок.
    файл выглядит вот так http://c2n.me/3uaYY8o
    далее я создаю внешнюю обработку УФ в которой создаю реквизит табличный документ и размешаю ее на форме, после чего в режиме предприятия копирую туда данные из ексель и получается следующее http://c2n.me/3uaZtBg
    в него переносятся все данные вместе с группировками.
    я могу получить данные ячеек из табличного документа, а как получить уровень группировки? чтобы можно было создать структуру папок, а потом товары в этих папках.

  2. а надо ли изобретать велосипед? этих обработок, по загрузке из эксель, как грязи, в том числе и для УФ...

    Ответы: (4)
  3. Как узнать уровень строки табличного документа?

    Ответы: (5)
  4. привет, Стим. как раз хотел узнать получилось ли у тебя решить твою проблему?
    ексель не подходит, если подключаться на прямую к ексель через ком-объект - то -Док.Sheets(1).Cells(счСтрок,1).IndentLevel всегда возвращает ноль. для всех строк... поэтому это не работает

    Ответы: (8)
  5. Guk а надо ли изобретать велосипед? этих обработок, по загрузке из эксель, как грязи, в том числе и для УФ...

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

    Ответы: (6) (7)
  6. Stim Как узнать уровень строки табличного документа?

    вот я попробовал прочитать этот файл через ексель и вот что получилось

    Наименование=Быстровозводимые здания ЕдиницаДляОтчетов= уид=   ЭтоЭлемент=Нет   Уровень=2
    Наименование=Асерия ЕдиницаДляОтчетов= уид=   ЭтоЭлемент=Нет   Уровень=2
    Наименование=Комплект каркаса Асерии ЕдиницаДляОтчетов=шт уид=0b7ac84d-837b-11df-9f84-001cc413333a   ЭтоЭлемент=Да   Уровень=2
    Наименование=Вентиляционные и антенные выходы ЕдиницаДляОтчетов= уид=   ЭтоЭлемент=Нет   Уровень=2
    Наименование=Антенные выходы ЕдиницаДляОтчетов= уид=   ЭтоЭлемент=Нет   Уровень=2

    уровень=2 - означает что везде IndentLevel вернул ноль, хотя файл в екселе с группировками

  7. (4) обычно в подобных обработках есть настройки, позволяющие настроить обработку под любой формат файла (расположение колонок с данными, строка начала данных и т.п.)...

    Ответы: (7)
  8. Guk (4) обычно в подобных обработках есть настройки, позволяющие настроить обработку под любой формат файла (расположение колонок с данными, строка начала данных и т.п.)...

    у тебя есть на примете реально подходящая, дай, буду тебе благодарен

    Ответы: (11)
  9. zerbite привет, Стим. как раз хотел узнать получилось ли у тебя решить твою проблему?
    ексель не подходит, если подключаться на прямую к ексель через ком-объект - то -Док.Sheets(1).Cells(счСтрок,1).IndentLevel всегда возвращает ноль. для всех строк... поэтому это не работает

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

    Ответы: (9) (10)
  10. н

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

    вот моя загрузка

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

    может я где ошибку допустил?

    Ответы: (12)
  11. Stim у меня как раз-таки получилось через программную запись табличного документа в эксель.
    В самом табличном документе ты никак не определишь уровень, это плоская таблица

    и 2-й вопрос, я рассуждаю так если бы она была бы плоская то на 2-м скриншоте http://clip2net.com/s/3uaZtBg при вставки в табличный документ через буфер обмена из екселя - не было бы группировок. а они есть!!! ))

  12. (7) http://programmist1s.ru/zagruzka-nomenklaturyi-v-1s-8-3-iz-excel-ili-dbf/

    там описание и ссылка на обработку...

  13. zerbite может я где ошибку допустил?

    откуда я знаю, где ты ошибку допустил

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