Имя: Пароль:
1C
1С v8
Группировочный вывод документов с табличными частями на печать
0 NotARunAway
 
13.06.17
08:26
Доброе утро. Помогите, пожалуйста разобраться как правильно доделать (переделать)

Есть некий документ ПланЗакупок. В нем список документов с табличными частями. В документах есть реквизит "КодCPV" и в табличных частях документов есть реквизит "ПодКодCPV", т.е. Родитель -> Наследник. Документов с одинаковыми "КодCPV" может быть несколько, т.к. заявки могут поступать от некольких подразделений.

Не пойму как сделать запрос и выборку документов на печать с группировкой по "КодCPV" и по табличным частям "ПодКодCPV". Сейчас у меня просто выводятся документы с табличными частями по очереди.
Мне нужно, чтобы если в различных документах одинаковый "КодCPV" и в этих документах в ТЧ есть одинаковые "ПодКодCPV" их сгруппировать по тому и другому реквизитам и вывести сумму общую по "КодCPV" и сумму по подкодам. А в данном коде группировка возможно только по табличной части определенного документа, т.к. если начинаю группировать по реквизитам документа в конструкторе запроса, вылетает "Нельзя группировать по полям внешних таблиц при наличии вложенных таблиц".  

Процедура ПечатьПланаЗакупок() Экспорт  
    
    //создание нового табличного документа
    ТабДок = Новый ТабличныйДокумент;
    
    //получение макета для печати плана закупок
    Макет = Документы.э_ПланЗакупок.ПолучитьМакет("МакетПечатьПланаЗакупок");
    
    //получим область "Заголовок" как новый табличный документ
    Область = Макет.ПолучитьОбласть("Заголовок");
    
    //выведем заполненную область "Заголовок" в табличный документ
    ТабДок.Вывести(Область);
    
    //получение области "ШапкаТабличнойЧасти"
    Область = Макет.ПолучитьОбласть("ШапкаТабличнойЧасти");
    
    //вывод заполненной области "ШапкаТабличнойЧасти" в табличный документ
    ТабДок.Вывести(Область);
        
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    э_ПланЗакупок.КодCPV.Ссылка КАК КодCPV,
        |    э_ПланЗакупок.Описание КАК Описание,
        |    э_ПланЗакупок.Сумма КАК СуммаВсейЗакупки,
        |    э_ПланЗакупок.СоставПланаЗакупок.(
        |        ПодкодCPV КАК ПодкодCPV,
        |        ОписаниеЗакупки КАК ОписаниеЗакупки,
        |        Сумма КАК СуммаЭлементаЗакупки
        |    ) КАК СоставПланаЗакупок
        |ИЗ
        |    Документ.э_ПланЗакупок КАК э_ПланЗакупок";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    НомСтроки = 1;
    
    Пока Выборка.Следующий() Цикл
            
        //получим область "СтрокаТабличнойЧасти"
        Область = Макет.ПолучитьОбласть("СтрокаТабличнойЧасти");
        Область.Параметры.НомерСтроки = НомСтроки;
        Область.Параметры.КодПоКлассификатору = Выборка.КодCPV;
        Область.Параметры.НаименованиеЗакупки = Выборка.Описание;
        Область.Параметры.СуммаЗакупки = Выборка.СуммаВсейЗакупки;

        ТабДок.Вывести(Область);
        
        НомПодстроки = НомСтроки + 0.1;
        НомСтроки = НомСтроки + 1;
        
        ВыборкаТЧ = Выборка.СоставПланаЗакупок.Выбрать();
        
        Пока ВыборкаТЧ.Следующий() Цикл
            
            //получим область "ПодстрокаТабличнойЧасти"
            Область = Макет.ПолучитьОбласть("ПодстрокаТабличнойЧасти");
            СтрБезЗапятой = СтрЗаменить(НомПодстроки, ",", ".");  
            Область.Параметры.НомерПодстроки = СтрБезЗапятой;
            Область.Параметры.ПодКодПоКлассификатору = ВыборкаТЧ.ПодкодCPV;
            Область.Параметры.ПодНаименованиеЗакупки = ВыборкаТЧ.ОписаниеЗакупки;
            Область.Параметры.СуммаЭлемента = ВыборкаТЧ.СуммаЭлементаЗакупки;
            ТабДок.Вывести(Область);
            
            НомПодстроки = НомПодстроки + 0.1;
            
        КонецЦикла;
        
    КонецЦикла;

    //установим параметры отображения табличного документа
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.Защита = Ложь;
    ТабДок.ТолькоПросмотр = Ложь;
    ТабДок.ОтображатьЗаголовки = Ложь;
    
    //покажем табличный документ на экране
    ТабДок.Показать();
    
КонецПроцедуры
1 мистер игрек
 
13.06.17
08:31
ВЫБРАТЬ
        |    э_ПланЗакупок.Ссылка.КодCPV.Ссылка КАК КодCPV,
        |    э_ПланЗакупок.Ссылка.Описание КАК Описание,
        |    э_ПланЗакупок.Ссылка.Сумма КАК СуммаВсейЗакупки,
        |    э_ПланЗакупок.ПодкодCPV КАК ПодкодCPV,
        |        э_ПланЗакупок.ОписаниеЗакупки КАК ОписаниеЗакупки,
        |        э_ПланЗакупок.Сумма КАК СуммаЭлементаЗакупки

        |ИЗ
        |    Документ.э_ПланЗакупок.СоставПланаЗакупок КАК э_ПланЗакупок";


Както так
2 1dvd
 
13.06.17
08:31
Для начала, делайзапрос не к документу Документ.э_ПланЗакупок, а к табличной части Документ.э_ПланЗакупок.СоставПланаЗакупок
3 NotARunAway
 
13.06.17
08:50
А как мне потом вытягивать строки табличных частей по этому запросу:

Пока Выборка.Следующий() Цикл
            
        //получим область "СтрокаТабличнойЧасти"

        Область = Макет.ПолучитьОбласть("СтрокаТабличнойЧасти");
        Область.Параметры.НомерСтроки = НомСтроки;
        Область.Параметры.КодПоКлассификатору = Выборка.КодCPV;
        Область.Параметры.НаименованиеЗакупки = Выборка.Описание;
        Область.Параметры.СуммаЗакупки = Выборка.СуммаВсейЗакупки;

        ТабДок.Вывести(Область);
        
        НомПодстроки = НомСтроки + 0.1;
        НомСтроки = НомСтроки + 1;
        
        ВыборкаТЧ = Выборка.СоставПланаЗакупок.Выбрать();
        
        Пока ВыборкаТЧ.Следующий() Цикл
            
            //получим область "ПодстрокаТабличнойЧасти"

            Область = Макет.ПолучитьОбласть("ПодстрокаТабличнойЧасти");
            СтрБезЗапятой = СтрЗаменить(НомПодстроки, ",", ".");  
            Область.Параметры.НомерПодстроки = СтрБезЗапятой;
            Область.Параметры.ПодКодПоКлассификатору = ВыборкаТЧ.ПодкодCPV;
            Область.Параметры.ПодНаименованиеЗакупки = ВыборкаТЧ.ОписаниеЗакупки;
            Область.Параметры.СуммаЭлемента = ВыборкаТЧ.СуммаЭлементаЗакупки;
            ТабДок.Вывести(Область);
            
            НомПодстроки = НомПодстроки + 0.1;
            
        КонецЦикла;
        
    КонецЦикла;
4 NotARunAway
 
13.06.17
08:51
Если
ВыборкаТЧ = Выборка.СоставПланаЗакупок.Выбрать();
пропадает, я не могу их перебирать.
5 мистер игрек
 
13.06.17
08:52
Сделай в запросе итоги по "КодCPV"
6 NotARunAway
 
13.06.17
09:37
7 NotARunAway
 
13.06.17
09:39
Код следующий:

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    э_ПланЗакупок.Ссылка.КодCPV.Ссылка КАК КодCPV,
        |    э_ПланЗакупок.Ссылка.Описание КАК Описание,
        |    э_ПланЗакупок.Ссылка.Сумма КАК СуммаВсейЗакупки,
        |    э_ПланЗакупок.ПодкодCPV КАК ПодкодCPV,
        |    э_ПланЗакупок.ОписаниеЗакупки КАК ОписаниеЗакупки,
        |    э_ПланЗакупок.Сумма КАК СуммаЭлементаЗакупки
        |ИЗ
        |    Документ.э_ПланЗакупок.СоставПланаЗакупок КАК э_ПланЗакупок
        |ИТОГИ ПО
        |    КодCPV";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    НомСтроки = 1;
    
    Пока Выборка.Следующий() Цикл
            
        Область = Макет.ПолучитьОбласть("СтрокаТабличнойЧасти");
        Область.Параметры.НомерСтроки = НомСтроки;
        Область.Параметры.КодПоКлассификатору = Выборка.КодCPV;
        Область.Параметры.НаименованиеЗакупки = Выборка.Описание;
        Область.Параметры.СуммаЗакупки = Выборка.СуммаВсейЗакупки;
        ТабДок.Вывести(Область);
        
        НомСтроки = НомСтроки + 1;
        
        Область = Макет.ПолучитьОбласть("ПодстрокаТабличнойЧасти");
        Область.Параметры.ПодКодПоКлассификатору = Выборка.ПодкодCPV;
        Область.Параметры.ПодНаименованиеЗакупки = Выборка.ОписаниеЗакупки;
        Область.Параметры.СуммаЭлемента = Выборка.СуммаЭлементаЗакупки;
        ТабДок.Вывести(Область);
            
        
    КонецЦикла;
8 1dvd
 
13.06.17
09:42
(7) Объясни нормально как ты хочешь сгруппировать

КодCPV
    ПодКодCPV
        Документ

или

ПодКодCPV
    КодCPV
        Документ


?
9 NotARunAway
 
13.06.17
09:47
Мне нужно, чтобы различные документы с одинаковым "КодCPV" группировались и их ТЧ по однинаковым "ПодКодCPV" группировались, выдавало суммы общие по "КодCPV" и ниже суммы наследников по "ПодКодCPV"
10 мистер игрек
 
13.06.17
09:48
КодCPVдобавь еще итоги по "ПодКодCPV"
11 NotARunAway
 
13.06.17
09:49
Чтобы не было повторных записей на макете
12 1dvd
 
13.06.17
09:51
(9) пелять... схематично покажи
13 NotARunAway
 
13.06.17
10:03