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


Рекурсивно создаем группировки по Родителю в табличном документе,беда в том что номенклатуру по родителю группируется, но в табличном документе не выводятся названия родителей(групп)
1 luckyluke
 
05.10.11
15:35
(0) я так понимаю конструктором запросов не пользуешься по религиозным причинам?
Что ты имел ввиду под словами "Рекурсивно создаем группировки" я не понял, ибо рекурсии я не вижу в твоём коде.
И описание проблемы "в табличном документе не выводятся названия родителей" побуждает меня записаться в телепаты... но у меня вообще плохо с этим делом.
2 GreenDay1986
 
05.10.11
15:49
Поясняю - Создаю табличный документ типа

Имя Родителя1
- Ном1
- Ном2
Имя Родителя2
- Ном3
- Ном4

При нажатии на Имя Родителя Номенклатура сворачивается/разворачивается. У меня не выводятся Имя Родителя1, Имя Родителя2 и т.д. Конструктором да, по ним :)))
3 luckyluke
 
05.10.11
16:15
(2) четсно говоря лень разбираться во всём твоём коде и понимать что ты хотел сделать, но тебе по всей видимости нужно почитать про ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
4 GreenDay1986
 
05.10.11
16:20
делаю прайс - лист в группировкой по номенклатуре выгрудаемый в эксель(программно, с формулами). С Иерархией не катит, не  то. :) Пробовал
5 luckyluke
 
05.10.11
16:27
(5) ну судя по структуре из (2) как раз самое то.
6 chingiz
 
05.10.11
17:59
Нет времени читать (0), но в макете тебе нужно сделать Область твоей группы и под ней область строчек группы.

И выводить:

ТабДок.НачатьГруппуСтрок("Группа",Ложь);

ТабДок.Вывести(ОбластьСтрока);

ТабДок.ЗакончитьГруппуСтрок();

Для вывода, насколько помню нужно использовать ТаблицуЗначений.
7 GreenDay1986
 
10.10.11
10:54
Автогруппировко
8 GreenDay1986
 
10.10.11
10:55
Автогрупировкой строк получилось. Урррра! Кто бы еще подсказал как программно разлочить область группировок получившуюся ,если предварительно защитить лист :)
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший