Имя: Пароль:
1C
1С v8
Выгрузка прайс - листа с группировками по номенклатуре в эксель. Не групируется
0 GreenDay1986
 
21.09.11
11:41
Процедура КнопкаВыполнитьНажатие(Кнопка)
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |Склады.Номенклатура.Родитель КАК Родитель,
   |1 КАК  Поле1,
   |Склады.Номенклатура.Код КАК Код,
   |Склады.Номенклатура.Артикул КАК Артикул,
   |Склады.Номенклатура.ссылка КАК Наименование,
   |Склады.Номенклатура.ЕдиницаДляОтчетов.Коэффициент КАК Коэффициент,
   |Склады.КоличествоОстаток КАК Остаток,
   |ВЫРАЗИТЬ(Цен.Цена - (Цен.Цена/100)*&Скидка КАК ЧИСЛО(10,2)) КАК Цена
   |ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаСреза)КАК Склады
   |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСреза,ТипЦен = &Цена) КАК Цен
   |ПО Склады.Номенклатура.Ссылка = Цен.Номенклатура.Ссылка
   |";
   
   Если ЗначениеЗаполнено(Родитель) = Ложь Тогда
       Запрос.Текст = Запрос.Текст + "СГРУППИРОВАТЬ ПО Склады.Номенклатура,
       |Склады.Номенклатура.Родитель,
       |Склады.КоличествоОстаток,
       |ВЫРАЗИТЬ(Цен.Цена - (Цен.Цена/100)*&Скидка КАК ЧИСЛО(10,2))
       |УПОРЯДОЧИТЬ ПО Склады.Номенклатура.Наименование
       |ИТОГИ Сумма(Поле1) ПО Наименование ТОЛЬКО ИЕРАРХИЯ
       |";
       
   Иначе Запрос.Текст = Запрос.Текст + "ГДЕ Склады.Номенклатура.Родитель = &Ном
       |СГРУППИРОВАТЬ ПО Склады.Номенклатура,
       |Склады.Номенклатура.Родитель,
       |Склады.КоличествоОстаток,
       |ВЫРАЗИТЬ(Цен.Цена - (Цен.Цена/100)*&Скидка КАК ЧИСЛО(10,2))
       |УПОРЯДОЧИТЬ ПО Склады.Номенклатура.Наименование
       |ИТОГИ Сумма(Поле1) ПО Наименование ТОЛЬКО ИЕРАРХИЯ
       |";
   КонецЕсли;
   
   Запрос.УстановитьПараметр("Скидка",(-1)*Число(ТипЦены.ПроцентСкидкиНаценки));    
   Запрос.УстановитьПараметр("ДатаСреза",КонецДня(Дата));
   Запрос.УстановитьПараметр("Ном",Родитель);
   Запрос.УстановитьПараметр("Цена",Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("00002"));
   Результат = Запрос.Выполнить();
   Выборка = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамCИерархией);
   Док = Новый ТабличныйДокумент;
   Макет = ПолучитьМакет("Макет");
   Область = Макет.ПолучитьОбласть("Шапка");
   Область.Параметры.Дата = Формат(Дата,"ДФ = дд.ММ.гггг");
   Область.Параметры.Скидка = -(ТипЦены.ПроцентСкидкиНаценки);
   Док.Вывести(Область);
   Область = Макет.ПолучитьОбласть("Заголовок");
   Док.Вывести(Область);
   Док.НачатьАвтогруппировкуСтрок();
   Пока Выборка.Следующий() Цикл
       СтрокаРодитель = Макет.ПолучитьОбласть("Родитель");
       СтрокаРодитель.Параметры.Родитель = Выборка.Родитель;
       Док.НачатьГруппуСтрок("СтрокаРодитель");
       Док.Вывести(СтрокаРодитель,Выборка.Уровень(1),"Группа");
       Выборка1 = Выборка.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
       Пока Выборка1.Следующий() Цикл
   //    Ном = Выборка1.Родитель;
   //    Если Справочники.Номенклатура.НайтиПоКоду(Ном.Код).Ссылка.ЭтоГруппа = Истина ТОГДА
   //        Строка = Макет.ПолучитьОбласть("Строка");
   //        Строка.Параметры.Наименование = Выборка1.Родитель;
   //    Иначе
           Строка = Макет.ПолучитьОбласть("Строка");
           Строка.Параметры.Наименование = Выборка1.Наименование;
           Строка.Параметры.Коэффициент = Выборка1.Коэффициент;
           Строка.Параметры.Остаток = Выборка1.Остаток;
           Строка.Параметры.Цена = Формат(Выборка1.Цена,"ЧДЦ = 2");
           Строка.Параметры.Код = Выборка1.Код;
           Строка.Параметры.Артикул = Выборка1.Артикул;
           Док.Вывести(Строка);
   //    КонецЕсли;
       
//        Док.Вывести(Область);
КонецЦикла;
Док.ЗакончитьГруппуСтрок();
КонецЦикла;
Док.ЗакончитьАвтогруппировкуСтрок();
УровеньГруппировки = 1;
Док.ПоказатьУровеньГруппировокСтрок(УровеньГруппировки);

                                                                     
   Если ФлагОстатки = Ложь Тогда
       Док.Область("C5:C5").Видимость = Ложь;
   Иначе Док.Область("C5:C5").Видимость = Истина;
   КонецЕсли;
   Док.АвтоМасштаб = Истина;
   Док.ОтображатьСетку = Истина;
   Док.ОтображатьЗаголовки = Истина;
   Док.Записать("C:\ПрайсЛистХБС.xls",ТипФайлаТабличногоДокумента.XLS);
   КоличествоСтрок = Выборка.Количество();
       
   Попытка
       Таблица = Новый  COMОбъект("Excel.Application") ;
       Книга = Таблица.Workbooks.Open("C:\ПрайсЛистХБС.xls");
   Исключение
       Предупреждение(ОписаниеОшибки()+"Не удалось сформировать обьект");
   КонецПопытки;
   Лист = Книга.WorkSheets(1);
   Лист.Range("I9:"+"I"+строка(ФОРМАТ(КоличествоСтрок+7,"ЧГ="))).FormulaR1C1 = "=RC[-5]*RC[-3]*RC[-2]+RC[-1]*RC[-3]" ;
   Лист.Cells(3,6).FormulaR1C1 = "=SUM(R[6]C[3]:R["+строка(ФОРМАТ(КоличествоСтрок+7,"ЧГ="))+"]C[3])";
   Лист.Range("7:8").Rows.Group();
   Лист.Range("15:16").Rows.Group();
   //Лист.Protect("asd86",истина,истина,истина,истина,истина,истина,истина,истина,истина,истина,истина,истина);
   //Лист.Range("G9:"+"H"+строка(ФОРМАТ(КоличествоСтрок+7,"ЧГ="))).Locked = Ложь;
   Таблица.ActiveWindow.SplitRow = 7;
   Таблица.ActiveWindow.FreezePanes = 1;
   Книга.SaveAs("C:\ПрайсЛистХБС.xls");
   Таблица.Workbooks.Close();
       
КонецПроцедуры

Не группруется в эксель по номенклатурным групппам.
1 Wobland
 
21.09.11
11:47
всё не читал, но заметил, что второй параметр в Вывести() не используется
2 GreenDay1986
 
21.09.11
11:53
Прайс группируется, но + появляется та где есть подпапки(вложенные номенклатурные группы). Может кто-нибудь посоветует как в общем случае сделать выгрузку в эксель с группировкой ном.групп. Когда щелкаем на + рядом с группой чтобы она открывалась
3 GreenDay1986
 
26.09.11
11:14
Док.НачатьАвтогруппировкуСтрок();
   
   ВыборкаГруппа = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
 
   Пока ВыборкаГруппа.Следующий() Цикл
       Если ВыборкаГруппа.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
           Область = ОбластьГруппаИерархия;
       Иначе
           Область = ОбластьГруппа;
           КонецЕсли;
       
       Область.Параметры.Заполнить(ВыборкаГруппа);
       Док.Вывести(Область,ВыборкаГруппа.Уровень());
       
       ВыборкаСтрока = ВыборкаГруппа.Выбрать();
       
       Пока ВыборкаСтрока.Следующий()Цикл
           ОбластьСтрока.Параметры.Заполнить(ВыборкаСтрока);
           Док.Вывести(ОбластьСтрока,ВыборкаСтрока.Уровень(),,Ложь);
       КонецЦикла;
   КонецЦикла;
   

   Док.ЗакончитьАвтогруппировкуСтрок();
2 + 2 = 3.9999999999999999999999999999999...