Имя: Пароль:
1C
 
Группировка по контрагентам.
0 antihacker
 
18.05.16
12:55
Всем привет ! Вот запрос. По идее он должен выводить должников по группам как они сидят в справочнике. Но почему то он просто показывает список контрагентов и все. Почему не показывает в иерархии груп ?

Макет=этотобъект.ПолучитьМакет("Макет");
    Таб=новый табличныйдокумент;
    областьШапка=Макет.ПолучитьОбласть("Шапка");
    областьшапка.Параметры.дата1=дата1;
    областьшапка.Параметры.ВыбКонтрагент=ВыбКонтрагент;
    
    таб.Вывести(ОбластьШапка);
    таб.НачатьАвтогруппировкуСтрок();
    
    
    
    
    //сначала определим сумму задолженности
    запросДолг=Новый Запрос;
    запросДолг.Текст="ВЫБРАТЬ
                     |    СУММА(ТиповойОстатки.СуммаОстатокДт) КАК Долг,
                     |    СУММА(ТиповойОстатки.СуммаОстатокКт) КАК ДолгК,
                     |    ТиповойОстатки.Субконто1 КАК Контрагент
                     |ИЗ
                     |    РегистрБухгалтерии.Типовой.Остатки(
                     |            &ДатаДолгов,
                     |            Счет В (&ВыбСчет),
                     |            ,
                     |            Субконто1 В ИЕРАРХИИ (&ВыбКонтрагент)
                     |                И Организация В ИЕРАРХИИ (&ВыбОрганизация)) КАК ТиповойОстатки
                     |
                     |СГРУППИРОВАТЬ ПО
                     |    ТиповойОстатки.Субконто1
                     |ИТОГИ СУММА(Долг) ПО Контрагент";
                ТиповойОстатки.Субконто1.Наименование";
    ЗапросДолг.УстановитьПараметр("ДатаДолгов",конецДня(Дата1));
    ЗапросДолг.УстановитьПараметр("ВыбСчет",СписокСчетов);
    ЗапросДолг.УстановитьПараметр("ВыбКонтрагент",ВыбКонтрагент);
    ЗапросДолг.УстановитьПараметр("ВыбОрганизация",ВыбОрганизация);
    
    результатЗ=запросДолг.Выполнить();
    рез=результатЗ.Выгрузить();
    
    ВыборкаЗ=результатЗ.Выбрать(обходрезультатазапроса.ПоГруппировкам,"Контрагент");
    итСр1т3=0;
    итСр4т7=0;
    итСр8т14=0;
    итСрБ14=0;
    итСрБ21=0;
    итМинус=0;
    итбылаоплата=0;
    пока ВыборкаЗ.Следующий() цикл
        БылаОплата=0;
        //если выборказ.контрагент.этогруппа=истина тогда продолжить; конецесли;
        
        если ВыборкаЗ.долг>0 тогда
            
            
            запросдокреал=новый запрос;
            запросдокреал.Текст="ВЫБРАТЬ
            |    РеализацияТоваровУслуг.Ссылка
            |ИЗ
            |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            |ГДЕ
            |    РеализацияТоваровУслуг.Дата >= &Дата1
            |    И РеализацияТоваровУслуг.Дата <= &Дата2
            |    И РеализацияТоваровУслуг.Проведен = ИСТИНА
            |   И РеализацияТоваровУслуг.Организация=&ВыбОрганизация
            |    И РеализацияТоваровУслуг.Контрагент В ИЕРАРХИИ(&ВыбКонтрагент)
            |
            |УПОРЯДОЧИТЬ ПО
            |    РеализацияТоваровУслуг.Дата УБЫВ";
            запросдокреал.УстановитьПараметр("Дата1",Дата1-(150*24*60*60));
            запросдокреал.УстановитьПараметр("Дата2",конецдня(Дата1));
            запросдокреал.УстановитьПараметр("ВыбОрганизация",ВыбОрганизация);
            //если ВыборкаЗ.контрагент.этогруппа=истина тогда
            //    запросдокреал.УстановитьПараметр("ВыбКонтрагент",выбконтрагент);
            //иначе
                запросдокреал.УстановитьПараметр("ВыбКонтрагент",выборкаЗ.контрагент);
            //конецесли;

            выборка=запросдокреал.Выполнить().Выбрать();
            
            тбДокОтгр=Новый таблицазначений;
            тбДокОтгр.Колонки.Добавить("ДокументОтгрузки");
            тбДокОтгр.Колонки.Добавить("ДатаОтгрузки");
            тбДокОтгр.Колонки.Добавить("СрокДолга");
            тбДокОтгр.Колонки.Добавить("Ср1т3");
            тбДокОтгр.Колонки.Добавить("Ср4т7");
            тбДокОтгр.Колонки.Добавить("Ср8т14");
            тбДокОтгр.Колонки.Добавить("СрБ14");
            тбДокОтгр.Колонки.Добавить("СрБ21");
            
            СумДолгИт=выборкаЗ.долг;
            
            
            
            
            пока выборка.Следующий() цикл
                если выборка.Ссылка.Проведен=Ложь тогда продолжить; конецесли;
                
                если выборка.Ссылка.СуммаДокумента<= СумДолгИт тогда
                    
                    
                    заполнять=1;
                    
                    //////если выбэкспедитор<>справочники.ФизическиеЛица.ПустаяСсылка() тогда
                    //////    //сообщить(выборка.ссылка.сделка);
                    //////    если выборка.ссылка.сделка<>документы.ЗаказПокупателя.ПустаяСсылка() тогда
                    //////        попытка
                    //////            если выборка.ссылка.сделка.Экспедитор<>выбэкспедитор тогда
                    //////                заполнять=0;
                    //////            конецесли;
                    //////        исключение
                    //////            сообщить("Ошибка Экспедитора: "+строка(выборка.ссылка));
                    //////            заполнять=0;
                    //////        конецпопытки;
                    //////    конецесли;
                    //////конецесли;  
                    //////
                    //////если ВыбТорговый<>справочники.ФизическиеЛица.ПустаяСсылка() тогда
                    //////    если выборка.ссылка.сделка<>документы.ЗаказПокупателя.ПустаяСсылка() тогда
                    //////        попытка
                    //////            
                    //////            если выборка.ссылка.сделка.ТорговыйАгент<>ВыбТорговый тогда
                    //////                заполнять=0;
                    //////            конецесли;
                    //////        исключение
                    //////            сообщить("Ошибка торгового: "+строка(выборка.ссылка));
                    //////            заполнять=0;
                    //////        конецпопытки;
                    //////        
                    //////    конецесли;
                    //////конецесли;
                    //////
                    
                    
                    
                    если заполнять=1 тогда
                        
                        новстр=тбДокОтгр.Добавить();
                        новстр.ДокументОтгрузки=выборка.Ссылка;
                        если (началодня(дата1)-Началодня(выборка.ссылка.дата))/24/60/60-1>21 тогда
                            новстр.СрБ21=выборка.Ссылка.СуммаДокумента;
                        иначеесли (началодня(дата1)-Началодня(выборка.ссылка.дата))/24/60/60-1>=15 тогда
                            новстр.СрБ14=выборка.Ссылка.СуммаДокумента;
                        иначеесли (началодня(дата1)-Началодня(выборка.ссылка.дата))/24/60/60-1>=8 тогда
                            новстр.Ср8т14=выборка.Ссылка.СуммаДокумента;
                        иначеесли (началодня(дата1)-Началодня(выборка.ссылка.дата))/24/60/60-1>=4 тогда
                            новстр.Ср4т7=выборка.Ссылка.СуммаДокумента;
                        иначе
                            новстр.Ср1т3=выборка.Ссылка.СуммаДокумента;
                        конецесли;
                        новстр.датаотгрузки=выборка.ссылка.дата;
                        новстр.СрокДолга=(началодня(дата1)-началодня(выборка.ссылка.дата))/24/60/60-1;
                        
                    конецесли;
                    СумДолгИт=СумДолгИт-Выборка.Ссылка.СуммаДокумента;
                    
                    
                иначе
                    заполнять=1;
                    ////если выбэкспедитор<>справочники.ФизическиеЛица.ПустаяСсылка() тогда
                    ////    если выборка.ссылка.сделка<>документы.ЗаказПокупателя.ПустаяСсылка() тогда
                    ////        попытка
                    ////            если выборка.ссылка.сделка.Экспедитор<>выбэкспедитор тогда
                    ////                заполнять=0;
                    ////            конецесли;
                    ////        исключение
                    ////            сообщить("Ошибка Экспедитора: "+строка(выборка.ссылка));
                    ////            заполнять=0;
                    ////        конецпопытки;
                    ////    конецесли;
                    ////конецесли;  
                    ////если ВыбТорговый<>справочники.ФизическиеЛица.ПустаяСсылка() тогда
                    ////    если выборка.ссылка.сделка<>документы.ЗаказПокупателя.ПустаяСсылка() тогда
                    ////        попытка
                    ////            если выборка.ссылка.сделка.ТорговыйАгент<>ВыбТорговый тогда
                    ////                заполнять=0;
                    ////            конецесли;
                    ////        исключение
                    ////            сообщить("Ошибка торгового: "+строка(выборка.ссылка));
                    ////            заполнять=0;
                    ////        конецпопытки;
                    ////    конецесли;
                    ////конецесли;
                    если заполнять=1 тогда
                        новстр=тбДокОтгр.Добавить();
                        новстр.ДокументОтгрузки=выборка.Ссылка;
                        если (началодня(дата1)-Началодня(выборка.ссылка.дата))/24/60/60-1>21 тогда
                            новстр.СрБ21=СумДолгИт;
                        иначеесли (началодня(дата1)-Началодня(выборка.ссылка.дата))/24/60/60-1>=15 тогда
                            новстр.СрБ14=СумДолгИт;
                        иначеесли (началодня(дата1)-Началодня(выборка.ссылка.дата))/24/60/60-1>=8 тогда
                            новстр.Ср8т14=СумДолгИт;
                        иначеесли (началодня(дата1)-Началодня(выборка.ссылка.дата))/24/60/60-1>=4 тогда
                            новстр.Ср4т7=СумДолгИт;
                        иначе
                            новстр.Ср1т3=СумДолгИт;
                        конецесли;
                        новстр.датаотгрузки=выборка.ссылка.дата;
                        новстр.СрокДолга=(началодня(дата1)-началодня(выборка.ссылка.дата))/24/60/60-1;
                        СумДолгИт=0;
                    конецесли;
                конецесли;
                
                если СумДолгИт<=0 тогда
                    прервать;
                конецесли;
            конеццикла;
            
            если сумДолгИт>0 тогда //нехватило накладных добавим строку
                
                заполнять=1;
                    новстр=тбДокОтгр.Добавить();
                    новстр.ДокументОтгрузки="Долг свяше 150 дней";
                    новстр.СрБ21=СумДолгИт;
                    СумДолгИт=0;
            конецесли;
            
            
            
            ///определим срок консигнации
            отборконс=новый структура;
            отборконс.Вставить("Контрагент",Выборказ.контрагент);
            тбконс=регистрысведений.Консигнация.СрезПоследних(дата1,отборКонс);
            срокконс="";
            для каждого стрКонс из тбконс цикл
                срокконс=срокконс+" "+строка(стрконс.номенклатура)+"="+строка(стрконс.СрокКонсигнации)+".";
            конеццикла;
            
            былаоплата=вернутьоплату(выборказ.контрагент);
            Регион=выборказ.контрагент.регион;
            
            
            
            если выборка.Количество()>0 тогда
                
                если (тбдокотгр.Итог("Ср1т3")+тбдокотгр.Итог("Ср4т7")+тбдокотгр.Итог("Ср8т14")+тбдокотгр.Итог("СрБ14")+тбдокотгр.Итог("СрБ21"))<>0 тогда
                    
                    областьДата=макет.ПолучитьОбласть("Дата");
                    областьдата.Параметры.Контрагент=выборказ.контрагент;
                    областьдата.Параметры.Консигнац=срокконс;
                    областьдата.Параметры.Ср1т3=тбдокотгр.Итог("Ср1т3");
                    областьдата.Параметры.Ср4т7=тбдокотгр.Итог("Ср4т7");
                    областьдата.Параметры.Ср8т14=тбдокотгр.Итог("Ср8т14");
                    областьдата.Параметры.СрБ14=тбдокотгр.Итог("СрБ14");
                    областьдата.Параметры.СрБ21=тбдокотгр.Итог("СрБ21");
                    областьдата.Параметры.общДолг=тбдокотгр.Итог("Ср1т3")+тбдокотгр.Итог("Ср4т7")+тбдокотгр.Итог("Ср8т14")+тбдокотгр.Итог("СрБ14")+тбдокотгр.Итог("СрБ21");
                    
                    областьдата.Параметры.былаоплата=былаоплата;
                    областьдата.Параметры.Регион=регион;
                    
                    
                    
                    таб.Вывести(ОбластьДата,выборказ.Уровень());
                конецесли;
            иначе
                областьДата=макет.ПолучитьОбласть("Дата");
                
                
                    областьдата.Параметры.былаоплата=былаоплата;
                    областьдата.Параметры.Регион=регион;
                
                областьдата.Параметры.Консигнац=срокконс;
                областьдата.Параметры.Контрагент=выборказ.контрагент;
                областьдата.Параметры.общДолг=выборкаЗ.долг;
                областьдата.Параметры.СрБ21=выборкаЗ.долг;
                таб.Вывести(ОбластьДата,выборказ.Уровень());
            конецесли;
            
            
            итСр1т3=итСр1т3+тбдокотгр.Итог("Ср1т3");
            итСр4т7=итСр4т7+тбдокотгр.Итог("Ср4т7");
            итСр8т14=итСр8т14+тбдокотгр.Итог("Ср8т14");
            итСрБ14=итСрБ14+тбдокотгр.Итог("СрБ14");
            итСрБ21=итСрБ21+тбдокотгр.Итог("СрБ21");
            
            
            
            
            тбдокотгр.Сортировать("ДатаОтгрузки");
            если выборказ.контрагент.этогруппа=ложь тогда
                для каждого стрОтгрДок из тбДокОтгр цикл
                    областьстрока=макет.ПолучитьОбласть("Строка");
                    областьСтрока.Параметры.Заполнить(стрОтгрДок);
                    таб.Вывести(областьСтрока,выборказ.Уровень()+1);
                Конеццикла;
            конецесли;
            
            
        иначе
            областьДата=макет.ПолучитьОбласть("Дата");
            Регион=выборказ.контрагент.регион;
                    областьдата.Параметры.Регион=регион;
            областьдата.Параметры.Контрагент=выборказ.контрагент;
            областьдата.Параметры.общДолг=-1*выборкаЗ.долгК;
            итминус=итминус+(-1)*выборказ.ДолгК;
            таб.Вывести(ОбластьДата,выборказ.Уровень());
            
        КонецЕсли;
        итбылаоплата=итбылаоплата+былаоплата;
    конеццикла;
    
    
    таб.ЗакончитьАвтогруппировкуСтрок();
    
    область=макет.ПолучитьОбласть("Итого");
    область.Параметры.итСр1т3=итСр1т3;
    область.Параметры.итСр4т7=итСр4т7;
    область.Параметры.итСр8т14=итСр8т14;
    область.Параметры.итСрБ14=итСрБ14;
    область.Параметры.итСрБ21=итСрБ21;
    область.Параметры.итОбщДолг=итСр1т3+итСр4т7+итСр8т14+итСрБ14+итСрБ21+итминус;
    область.Параметры.итБылаОплата=итБылаОплата;
    таб.ФиксацияСверху=8;
    таб.Вывести(область);
    таб.ТолькоПросмотр=Истина;
    таб.Показать();
Независимо от того, куда вы едете — это в гору и против ветра!