Имя: Пароль:
1C
1С v8
Сформировать документ из ТЗ
0 Rom_Kat
 
21.09.15
11:12
Есть ТЗ где три колонки содержат значения шапки докмента и 4 значения полей строк табличной части. Нужно сгруппировать в запросе чтобы сфирмирвоать документ. Как сгруппировать по трем колонкам таблицы?

Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    
    Запрос.Текст = "ВЫБРАТЬ
                   |    ТЗ.ФлВыбор,
                   |    ТЗ.ТоварнаяПартия,
                   |    ТЗ.НомерЗаказа,
                   |    ТЗ.НомерИнфойса,
                   |    ТЗ.НомерНакладной,
                   |    ТЗ.ТранспортноеСредство,
                   |    ТЗ.ТипТранспорта,
                   |    ТЗ.ХарактерТовара,
                   |    ТЗ.СВХ,
                   |    ТЗ.Контрагент
                   |ПОМЕСТИТЬ ТЗП
                   |ИЗ
                   |    &ТЗПартий КАК ТЗ
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ТЗП.ТоварнаяПартия КАК ТоварнаяПартия,
                   |    ТЗП.НомерЗаказа,
                   |    ТЗП.НомерИнфойса,
                   |    ТЗП.НомерНакладной,
                   |    ТЗП.ТипТранспорта КАК ТипТранспорта,
                   |    ТЗП.ХарактерТовара,
                   |    ТЗП.СВХ КАК СВХ,
                   |    ТЗП.Контрагент КАК Контрагент
                   |ИЗ
                   |    ТЗП КАК ТЗП
                   |ГДЕ
                   |    ТЗП.ФлВыбор
                   |ИТОГИ ПО
                   |    ОБЩИЕ,
                   |    Контрагент,
                   |    СВХ,
                   |    ТипТранспорта";
                  
                  
    ТЗ = ТаблицаПартий.Выгрузить();              
    Запрос.УстановитьПараметр("ТЗПартий", ТЗ);
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаЗаписей = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент, СВХ, ТипТранспорта");
    
    ТаблицаВозврат = Новый Массив;
    
    Пока ВыборкаЗаписей.Следующий() Цикл
        
        СтруктураШапка = Новый Структура("Контрагент, СВХ, ТипТранспорта, ТабличнаяЧасть");
        
        ЗаполнитьЗначенияСвойств(СтруктураШапка, ВыборкаЗаписей);
        
        ВыборкаТабличнаяЧать = ВыборкаЗаписей.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Общие");
        
        ТабличнаяЧасть = Новый Массив;
        
        Пока ВыборкаТабличнаяЧать.Следующий() Цикл
            
            СтруктураСтрока = Новый Структура("ТоварнаяПартия,  НомерЗаказа, НомерИнфойса, НомерНакладной, ХарактерТовара");
            ЗаполнитьЗначенияСвойств(СтруктураСтрока, ВыборкаТабличнаяЧать);
            ТабличнаяЧасть.Добавить(СтруктураСтрока);    
            
        КонецЦикла;
        
        СтруктураШапка.ТабличнаяЧасть = ТабличнаяЧасть;
        
        ТаблицаВозврат.Добавить(СтруктураШапка);
        
    КонецЦикла;
1 mehfk
 
21.09.15
11:15
(0) Возможность получения итогов по сумме полей в запросе отсутствует.
2 Rom_Kat
 
21.09.15
11:17
(1) то есть запросом не решить?
3 Rom_Kat
 
21.09.15
11:29
Вот так шапку получить получается. А вот как строки теперь выбрать?


Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    
    Запрос.Текст = "ВЫБРАТЬ
                   |    ТЗ.ФлВыбор,
                   |    ТЗ.ТоварнаяПартия,
                   |    ТЗ.НомерЗаказа,
                   |    ТЗ.НомерИнфойса,
                   |    ТЗ.НомерНакладной,
                   |    ТЗ.ТранспортноеСредство,
                   |    ТЗ.ТипТранспорта,
                   |    ТЗ.ХарактерТовара,
                   |    ТЗ.СВХ,
                   |    ТЗ.Контрагент
                   |ПОМЕСТИТЬ ТЗП
                   |ИЗ
                   |    &ТЗПартий КАК ТЗ
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    ТЗП.ТоварнаяПартия КАК ТоварнаяПартия,
                   |    ТЗП.НомерЗаказа,
                   |    ТЗП.НомерИнфойса,
                   |    ТЗП.НомерНакладной,
                   |    ТЗП.ТипТранспорта КАК ТипТранспорта,
                   |    ТЗП.ХарактерТовара,
                   |    ТЗП.СВХ КАК СВХ,
                   |    ТЗП.Контрагент КАК Контрагент
                   |ИЗ
                   |    ТЗП КАК ТЗП
                   |ГДЕ
                   |    ТЗП.ФлВыбор
                   |ИТОГИ ПО
                   |    ОБЩИЕ,
                   |    Контрагент,
                   |    СВХ,
                   |    ТипТранспорта";
                  
                  
    ТЗ = ТаблицаПартий.Выгрузить();              
    Запрос.УстановитьПараметр("ТЗПартий", ТЗ);
    
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаЗаписей = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Контрагент");
    
    ТаблицаВозврат = Новый Массив;
    
    Пока ВыборкаЗаписей.Следующий() Цикл
        
        ВыборкаСВХ = ВыборкаЗаписей.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "СВХ");
        
        Пока ВыборкаСВХ.Следующий() Цикл
            ВыборкаТипТранспорта = ВыборкаСВХ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ТипТранспорта");
            Пока ВыборкаТипТранспорта.Следующий() Цикл
                
                СтруктураШапка = Новый Структура("Контрагент, СВХ, ТипТранспорта, ТабличнаяЧасть");
                
                ЗаполнитьЗначенияСвойств(СтруктураШапка, ВыборкаТипТранспорта);
                
                //ВыборкаТабличнаяЧасть = ВыборкаТипТранспорта.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "ОБЩИЕ");
                ВыборкаТабличнаяЧасть = ВыборкаТипТранспорта.Выбрать(ОбходРезультатаЗапроса.Прямой);
                ТабличнаяЧасть = Новый Массив;
        
                Пока ВыборкаТабличнаяЧасть.Следующий() Цикл
                    
                    СтруктураСтрока = Новый Структура("ТоварнаяПартия,  НомерЗаказа, НомерИнфойса, НомерНакладной, ХарактерТовара");
                    ЗаполнитьЗначенияСвойств(СтруктураСтрока, ВыборкаТабличнаяЧасть);
                    ТабличнаяЧасть.Добавить(СтруктураСтрока);    
                    
                КонецЦикла;
                
                СтруктураШапка.ТабличнаяЧасть = ТабличнаяЧасть;
                
                ТаблицаВозврат.Добавить(СтруктураШапка);
                
            КонецЦикла;
        
        КонецЦикла;
        
    КонецЦикла;
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший