Вывести прайс лист с группировками из 1с в excel

1. user1008893 01.11.18 16:32 Сейчас в теме
Переделываю чужую обработку. ERP переписанная. Не знаю как выполнить группировку по номенклатуре в excel. Помогите разобраться.
В интернете очень мало чего нашла,ничего не подходит....
Процедура ВыгрузитьШаблоны() Экспорт
	
	Если глПустоеЗначение(КаталогШаблонов) Тогда
		глСообщить(ЭтотОбъект,"Не указан каталог сохранения шаблонов заказов!");
		Возврат;
	КонецЕсли;
	
	Для Каждого _Контрагент Из ТЧКонтрагенты Цикл
		
		Если _Контрагент.ВыгружатьШаблон = Истина Тогда
			
			ВыгрузитьШаблон(_Контрагент);
			
		КонецЕсли;		
		
	КонецЦикла;
	
КонецПроцедуры

Процедура ВыгрузитьШаблон(ВхСтрокаКонтрагент)
	
	ActiveDOC    = ПолучитьМакет("ШаблонЗаказа");
	COMobject    = ActiveDOC.Получить();
	
	Лист         = COMobject.WorkSheets(1);

	Лист.Cells(2,4).Value = СокрЛП(ВхСтрокаКонтрагент.Контрагент.Код);
	Лист.Cells(3,4).Value = СокрЛП(ВхСтрокаКонтрагент.Контрагент.Наименование);	
	Лист.Cells(4,4).Value = СокрЛП(ВхСтрокаКонтрагент.Контрагент.Адрес);
	
	//COMobject.Application.Visible = 1;
	COMobject.Windows(1).Visible = 1;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ВариантыИсполнения.Владелец КАК Номенклатура,
		|	ВариантыИсполнения.Ссылка КАК ВИ
		|ИЗ
		|	Справочник.ВариантыИсполнения КАК ВариантыИсполнения
		|ГДЕ
		|	ВариантыИсполнения.ПометкаУдаления = ЛОЖЬ
		|	И ВариантыИсполнения.Владелец.ПометкаУдаления = ЛОЖЬ
		|	И ВариантыИсполнения.Владелец В ИЕРАРХИИ(&Номенклатура)
		|	И ВариантыИсполнения.Активность
		|	И ВариантыИсполнения.Владелец.Активность
		|	И ВариантыИсполнения.ТипВИ = ЗНАЧЕНИЕ(Перечисление.ТипыВариантовИсполнения.Стандартный)
		|ИТОГИ ПО
		|	Номенклатура ИЕРАРХИЯ,
		|	ВИ";
	
	Запрос.УстановитьПараметр("Номенклатура", НоменклатураИерархия.ВыгрузитьЗначения());	
	РезультатЗапроса = Запрос.Выполнить();	
	ВыборкаНоменклатура = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	
	_й=9;
		//Док=Новый ТабличныйДокумент;
		
	//   Док.НачатьАвтогруппировкуСтрок();
	//     Пока ВыборкаНоменклатура.Следующий() Цикл
	//    Если ВыборкаНоменклатура.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
	//        Область = ОбластьГруппаИерархия;
	//    Иначе 
	//        Область = ОбластьГруппа;
	//        КонецЕсли;
	//    
	//    Область.Параметры.Заполнить(ВыборкаГруппа);
	//    Док.Вывести(Область,ВыборкаНоменклатура.Уровень());
	//    
	//    ВыборкаСтрока = ВыборкаНоменклатура.Выбрать();
	//    
	//    Пока ВыборкаСтрока.Следующий()Цикл
	//        ОбластьСтрока.Параметры.Заполнить(ВыборкаСтрока);
	//        Док.Вывести(ОбластьСтрока,ВыборкаСтрока.Уровень(),,Ложь);
	//    КонецЦикла;
	//КонецЦикла;
	//

	//Док.ЗакончитьАвтогруппировкуСтрок();	
		
	Пока ВыборкаНоменклатура.Следующий() Цикл
		
		ВывестиСтроку(ВыборкаНоменклатура,_й,Лист);
		
	КонецЦикла;
	
	COMobject.SaveAs(КаталогШаблонов+"\"+РегистрыСведений.ВнешниеКоды.ПолучитьВнешнийКодПоСсылке(ВхСтрокаКонтрагент.Контрагент,"МебельМосква")+"_ШаблонЗаказа.xlsx");

	// Выйти из Excel.
	COMobject.Application.Quit();
	
КонецПроцедуры

Процедура ВывестиСтроку(ВхВыборка,Итератор,ВхЛист)
		
	Если ВхВыборка.Номенклатура.ЭтоГруппа Тогда
		
		ВхЛист.Cells(Итератор,2).Value = Итератор;
		ВхЛист.Cells(Итератор,3).Value = СокрЛП(ВхВыборка.Номенклатура.Код);	
		ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
		ВхЛист.Cells(Итератор,5).Value = "";
		ВхЛист.Cells(Итератор,6).Value = "";
		ВхЛист.Cells(Итератор,2).Font.Bold = 1;
		ВхЛист.Cells(Итератор,3).Font.Bold = 1;
		ВхЛист.Cells(Итератор,4).Font.Bold = 1;
		ВхЛист.Cells(Итератор,5).Font.Bold = 1;
		ВхЛист.Cells(Итератор,6).Font.Bold = 1;
		Итератор = Итератор + 1;
		
		ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		Если ВыборкаНоменклатура.Следующий() Тогда
			ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист);
		КонецЕсли;
		
	Иначе	
		
		Если глПустоеЗначение(ВхВыборка.ВИ) Тогда
			
			ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
			
			Если ВыборкаНоменклатура.Следующий() Тогда
				ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист);
			КонецЕсли;
			
		Иначе	
			
			_Дополнительно = Новый Структура;
			_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
			_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
			_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
			
			ВхЛист.Cells(Итератор,2).Value = Итератор;
			ВхЛист.Cells(Итератор,3).Value = _ШК;	
			ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
			ВхЛист.Cells(Итератор,5).Value = СокрЛП(ВхВыборка.ВИ.Наименование);
			ВхЛист.Cells(Итератор,6).Value = "";
			Итератор = Итератор + 1;
			
			Пока ВхВыборка.Следующий() Цикл
				
				_Дополнительно = Новый Структура;
				_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
				_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
				_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
				
				ВхЛист.Cells(Итератор,2).Value = Итератор;
				ВхЛист.Cells(Итератор,3).Value = _ШК;	
				ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
				ВхЛист.Cells(Итератор,5).Value = СокрЛП(ВхВыборка.ВИ.Наименование);
				ВхЛист.Cells(Итератор,6).Value = "";
				Итератор = Итератор + 1;
				
			КонецЦикла;
			
		КонецЕсли;
	
	КонецЕсли;	
	
КонецПроцедуры
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
20. Xershi 1490 05.11.18 16:52 Сейчас в теме
(1) вам нужно программно делать?
Самый простой вариант вывести в табличный документ и сохранить как эксель.
2. user1008893 02.11.18 08:10 Сейчас в теме
помогите пожалуйста.... вот такой макет
Наверно надо все переделывать,чтобы добиться группировки. Надо чтоб все данные выводились сначала в табдок,а потом только записывались в excel. Может можно просто здесь как нибудь сделать?
Прикрепленные файлы:
3. Leannet 5 02.11.18 09:52 Сейчас в теме
Можно. Выделить область, которую нужно сгруппировать и выполнить команду группировки.
Range(Cells(1, 1), Cells(100, 50)).Select //Выделение
Selection.Rows.Group //Группировка
4. user1008893 02.11.18 10:14 Сейчас в теме
(3)проблема в том,что бывает разное кол-во номенклатуры и я не могу знать где какая группа закончится..
7. user1008893 02.11.18 10:59 Сейчас в теме
(3)пишет неопознанный оператор
5. Leannet 5 02.11.18 10:25 Сейчас в теме
В коде отлавливать. Добавить условие проверки. Вы же последовательно выводите строки. Запомнили номер первой строки, вывели первую группу, запомнили номер последней строки. Сгруппировали. Выводите дальше.
user1008893; +1 Ответить
6. user1008893 02.11.18 10:28 Сейчас в теме
(5)в процедуре "вывести строку"?
Что то туплю... Не могу сообразить как это написать.
8. user1008893 02.11.18 11:15 Сейчас в теме
Процедура ВывестиСтроку(ВхВыборка,Итератор,ВхЛист)
		  номерстр =0;
	Если ВхВыборка.Номенклатура.ЭтоГруппа Тогда
		   номерстр =номерстр+1;
		  
		ВхЛист.Cells(Итератор,2).Value = Итератор;
		ВхЛист.Cells(Итератор,3).Value = СокрЛП(ВхВыборка.Номенклатура.Код);	
		ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
		ВхЛист.Cells(Итератор,5).Value = "";
		ВхЛист.Cells(Итератор,6).Value = "";
		ВхЛист.Cells(Итератор,2).Font.Bold = 1;
		ВхЛист.Cells(Итератор,3).Font.Bold = 1;
		ВхЛист.Cells(Итератор,4).Font.Bold = 1;
		ВхЛист.Cells(Итератор,5).Font.Bold = 1;
		ВхЛист.Cells(Итератор,6).Font.Bold = 1;
		Итератор = Итератор + 1;
		
		ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		Если ВыборкаНоменклатура.Следующий() Тогда
			ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист);
		КонецЕсли;
		 ВхЛист.Range(ВхЛист.Cells(номерстр,номерстр)).Select(); //Выделение 
ВхЛист.Selection.Rows.Group(); //Группировка 
		Сообщить(номерстр);
	Иначе	
		
		Если глПустоеЗначение(ВхВыборка.ВИ) Тогда
			
			ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
			
			Если ВыборкаНоменклатура.Следующий() Тогда
				ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист);
			КонецЕсли;
			
		Иначе	
			
			_Дополнительно = Новый Структура;
			_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
			_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
			_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
			
			ВхЛист.Cells(Итератор,2).Value = Итератор;
			ВхЛист.Cells(Итератор,3).Value = _ШК;	
			ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
			ВхЛист.Cells(Итератор,5).Value = СокрЛП(ВхВыборка.ВИ.Наименование);
			ВхЛист.Cells(Итератор,6).Value = "";
			Итератор = Итератор + 1;
			
			Пока ВхВыборка.Следующий() Цикл
				
				_Дополнительно = Новый Структура;
				_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
				_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
				_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
				
				ВхЛист.Cells(Итератор,2).Value = Итератор;
				ВхЛист.Cells(Итератор,3).Value = _ШК;	
				ВхЛист.Cells(Итератор,4).Value = СокрЛП(ВхВыборка.Номенклатура.Наименование);
				ВхЛист.Cells(Итератор,5).Value = СокрЛП(ВхВыборка.ВИ.Наименование);
				ВхЛист.Cells(Итератор,6).Value = "";
				Итератор = Итератор + 1;
				
			КонецЦикла;
			
		КонецЕсли;
	
	КонецЕсли;	
	
КонецПроцедуры
Показать

Вот так ?
Ошибка выходит:ВхЛист.Range(ВхЛист.Cells(номерстр,номерстр)).Select(); //Выделение
по причине:
Произошла исключительная ситуация (0x800a03ec)
9. Leannet 5 02.11.18 12:12 Сейчас в теме
ВхЛист.Range(Cells(номерстр,номерСтолбца), Cells(номерстр,номерСтолбца)).Select()
user1008893; +1 Ответить
10. user1008893 02.11.18 12:20 Сейчас в теме
(9) так с этим прошло,теперь вот это не нравится
Поле объекта не обнаружено (Selection)
ВхЛист.Selection.Rows.Group(); //Группировка
11. Leannet 5 02.11.18 12:36 Сейчас в теме
Selection не к листу применить а к COMobject
user1008893; +1 Ответить
12. user1008893 02.11.18 12:50 Сейчас в теме
(11)Переменная не определена (COMobject)
<<?>>COMobject.Selection.Rows.Group(); //Группировка (Проверка: Толстый клиент (обычное приложение))
Понимаю почему так,потому что в этой процедуре нет COMobject,а как передать с другой процедуры?
13. Leannet 5 02.11.18 12:53 Сейчас в теме
Как параметр при вызове процедуры
user1008893; +1 Ответить
14. user1008893 02.11.18 12:54 Сейчас в теме
(13)пробовала,там сразу куча ошибок,сейчас ещё раз сделаю
15. user1008893 02.11.18 12:57 Сейчас в теме
(13)поправила немного код,но все равно
Поле объекта не обнаружено (Selection)
COMobject.Selection.Rows.Group(); //Группировка
Процедура ВывестиСтроку(ВхВыборка,Итератор,ВхЛист,COMobject)
		 номерстр =0;
	Если ВхВыборка.Номенклатура.ЭтоГруппа Тогда
		  номерстр =номерстр+1;
		  
		ВхЛист.Cells(Итератор,2).Value = Строка(Итератор);
		ВхЛист.Cells(Итератор,3).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Код));	
		ВхЛист.Cells(Итератор,4).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Наименование));
		ВхЛист.Cells(Итератор,5).Value = "";
		ВхЛист.Cells(Итератор,6).Value = "";
		ВхЛист.Cells(Итератор,2).Font.Bold = 1;
		ВхЛист.Cells(Итератор,3).Font.Bold = 1;
		ВхЛист.Cells(Итератор,4).Font.Bold = 1;
		ВхЛист.Cells(Итератор,5).Font.Bold = 1;
		ВхЛист.Cells(Итератор,6).Font.Bold = 1;
		Итератор = Итератор + 1;
		
		ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		
		Если ВыборкаНоменклатура.Следующий() Тогда
			ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист,COMobject);
		КонецЕсли;
		 ВхЛист.Range(ВхЛист.Cells(номерстр,2), ВхЛист.Cells(номерстр,2)).Select(); //Выделение 
COMobject.Selection.Rows.Group(); //Группировка 
		Сообщить(номерстр);
	Иначе	
		
		Если глПустоеЗначение(ВхВыборка.ВИ) Тогда
			
			ВыборкаНоменклатура = ВхВыборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
			
			Если ВыборкаНоменклатура.Следующий() Тогда
				ВывестиСтроку(ВыборкаНоменклатура,Итератор,ВхЛист,COMobject);
			КонецЕсли;
			
		Иначе	
			
			_Дополнительно = Новый Структура;
			_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
			_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
			_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
			
			ВхЛист.Cells(Итератор,2).Value = Итератор;
			ВхЛист.Cells(Итератор,3).Value = _ШК;	
			ВхЛист.Cells(Итератор,4).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Наименование));
			ВхЛист.Cells(Итератор,5).Value = Строка(СокрЛП(ВхВыборка.ВИ.Наименование));
			ВхЛист.Cells(Итератор,6).Value = "";
			Итератор = Итератор + 1;
			
			Пока ВхВыборка.Следующий() Цикл
				
				_Дополнительно = Новый Структура;
				_Дополнительно.Вставить("ВариантИсполнения",ВхВыборка.ВИ);
				_Дополнительно.Вставить("ЕдИзм",ВхВыборка.Номенклатура.БазоваяЕдИзм);
				_ШК = глСформироватьВнутреннийШтрихкод(ВхВыборка.Номенклатура,_Дополнительно);
				
				ВхЛист.Cells(Итератор,2).Value = Итератор;
				ВхЛист.Cells(Итератор,3).Value = _ШК;	
				ВхЛист.Cells(Итератор,4).Value = Строка(СокрЛП(ВхВыборка.Номенклатура.Наименование));
				ВхЛист.Cells(Итератор,5).Value = Строка(СокрЛП(ВхВыборка.ВИ.Наименование));
				ВхЛист.Cells(Итератор,6).Value = "";
				Итератор = Итератор + 1;
				
			КонецЦикла;
			
		КонецЕсли;
	
	КонецЕсли;	
	
КонецПроцедуры
Показать
16. user1008893 02.11.18 13:34 Сейчас в теме
сделала,вот так Группировка есть.
BegCell = ВхЛист.Cells(Итератор,1);
    EndCell = ВхЛист.Cells(Итератор,1);
      

    ВхЛист.Range(BegCell,EndCell).Rows.Group();
17. user1008893 02.11.18 13:39 Сейчас в теме
(16)но группирует чуть чуть неправильно
Прикрепленные файлы:
18. user1008893 05.11.18 16:20 Сейчас в теме
Помогите кто нибудь пожалуйста 😔
19. acanta 05.11.18 16:27 Сейчас в теме
ВхЛист.Range(ВхЛист.Cells(номерстр,2), ВхЛист.Cells(номерстр,2)).Select(); //Выделение 
ВхЛист.Selection.Rows.Group();


Так тоже не работает?
21. user1008893 05.11.18 17:15 Сейчас в теме
22. user1008893 06.11.18 08:20 Сейчас в теме
ВхЛист.Range(ВхЛист.Cells(номерстр,2), ВхЛист.Cells(номерстр,2)).Select(); //Выделение 
ВхЛист.Application.Selection.Rows.Group();

вот так сделала,но группировка все равно перевернутая.
Помогите пожалуйста....
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот