Просьба помочь! По ниже приведенному коду
формируется таблица.Необходимо в ней иметь результат по
группе. Запутался совсем,не получается,а времени в обрез.
1с Комплексная конфигурация 7.70.27,самописная под SQL
Help,заранее благодарен(Не судите строго ,учусь)
Перем тбБюджет,спФилиалы,тбСтатьи,флИзменения,Расшифровка,КодСтат;
//*******************************************
Процедура Выполнить()

КонецПроцедуры

Процедура ПересчитатьТаблицу()
    ВсегоСтрок=тбСтатьи.КоличествоСтрок();
    текУровень=Метаданные.Справочник("СтатьиБюджета").КоличествоУровней;
    спПлан=СоздатьОбъект("СписокЗначений");
    спФакт=СоздатьОбъект("СписокЗначений");
    Для нм=1 по спФилиалы.РазмерСписка() Цикл
        спПлан.ДобавитьЗначение(0);
        спФакт.ДобавитьЗначение(0);
    КонецЦикла;    
    Для ну=0 по Метаданные.Справочник("СтатьиБюджета").КоличествоУровней-1 Цикл
        текУровень=Метаданные.Справочник("СтатьиБюджета").КоличествоУровней-ну;
        Для нс=1 по ВсегоСтрок Цикл
            номСтроки=ВсегоСтрок-нс+1;
            тбСтатьи.ПолучитьСтрокуПоНомеру(номСтроки);
            Если тбСтатьи.Уровень=текУровень Тогда
                //накапливаем суммы
                Для нм=1 по спФилиалы.РазмерСписка() Цикл
                    спПлан.УстановитьЗначение(нм,спПлан.ПолучитьЗначение(нм)+тбБюджет.ПолучитьЗначение(номСтроки,"План_"+Формат(нм,"Ч(0)3.0")));
                    спФакт.УстановитьЗначение(нм,спФакт.ПолучитьЗначение(нм)+тбБюджет.ПолучитьЗначение(номСтроки,"Факт_"+Формат(нм,"Ч(0)3.0")));
                КонецЦикла;    
            ИначеЕсли тбСтатьи.Уровень=текУровень-1 Тогда
                //записываем сумму в группировку
                Для нм=1 по спФилиалы.РазмерСписка() Цикл
                    тбБюджет.УстановитьЗначение(номСтроки,"План_"+Формат(нм,"Ч(0)3.0"),спПлан.ПолучитьЗначение(нм));
                    тбБюджет.УстановитьЗначение(номСтроки,"Факт_"+Формат(нм,"Ч(0)3.0"),спФакт.ПолучитьЗначение(нм));
                    Если тбСтатьи.Уровень=1 Тогда
                        тбБюджет.УстановитьЗначение(номСтроки,"СуммаПлан_"+Формат(нм,"Ч(0)3.0"),спПлан.ПолучитьЗначение(нм));
                        тбБюджет.УстановитьЗначение(номСтроки,"СуммаФакт_"+Формат(нм,"Ч(0)3.0"),спФакт.ПолучитьЗначение(нм));
                    КонецЕсли;
                    //скидываем сумму
                    спПлан.УстановитьЗначение(нм,0);
                    спФакт.УстановитьЗначение(нм,0);
                КонецЦикла;    
            КонецЕсли;
        КонецЦикла;    
    КонецЦикла;    
КонецПроцедуры    


Процедура ПересчитатьСуммы(ВсегоСтрок,нм)
    текУровень=Метаданные.Справочник("СтатьиБюджета").КоличествоУровней;
    План=0;
    Для ну=0 по Метаданные.Справочник("СтатьиБюджета").КоличествоУровней-1 Цикл
        текУровень=Метаданные.Справочник("СтатьиБюджета").КоличествоУровней-ну;
        Для нс=1 по ВсегоСтрок Цикл
            номСтроки=ВсегоСтрок-нс+1;
            тбСтатьи.ПолучитьСтрокуПоНомеру(номСтроки);
            Если тбСтатьи.Уровень=текУровень Тогда
                //накапливаем суммы
                План=План+тбБюджет.ПолучитьЗначение(номСтроки,"План_"+Формат(нм,"Ч(0)3.0"));
                Если тбСтатьи.Уровень=1 Тогда
                    тбБюджет.УстановитьЗначение(номСтроки,"СуммаПлан_"+Формат(нм,"Ч(0)3.0"),План);
                КонецЕсли;
            ИначеЕсли тбСтатьи.Уровень=текУровень-1 Тогда
                //записываем сумму в группировку
                тбБюджет.УстановитьЗначение(номСтроки,"План_"+Формат(нм,"Ч(0)3.0"),План);
                Если тбСтатьи.Уровень=1 Тогда
                    тбБюджет.УстановитьЗначение(номСтроки,"СуммаПлан_"+Формат(нм,"Ч(0)3.0"),План);
                КонецЕсли;
                //скидываем сумму
                План=0;
            КонецЕсли;
            //только до вернего уровня
            Если тбСтатьи.Уровень=1 Тогда
                прервать;
            КонецЕсли;
        КонецЦикла;    
    КонецЦикла;    
КонецПроцедуры    

Процедура Сформировать(флг=0)
    Если флг=1 Тогда    
        Запрос=СоздатьОбъект("Запрос");
        Если КонДата>ПолучитьДатуТА() Тогда
            ДатаК=ПолучитьДатуТА();
        Иначе
            ДатаК=КонДата;
        КонецЕсли;
        Если НачДата>ПолучитьДатуТА() Тогда
            ДатаН=ПолучитьДатуТА();
        Иначе
            ДатаН=НачДата;
        КонецЕсли;
        
        ТекстЗапроса ="//{{ЗАПРОС(ПланФакт)
        |Период с ДатаН по ДатаК;
        |СтатьяБюджета = Регистр.Бюджет.СтатьяБюджета;
        |Филиал = Регистр.Бюджет.Филиал;
        |Факт = Регистр.Бюджет.Факт;
        |План = Регистр.Бюджет.План;
        |Функция ФактСумма = Сумма(Факт);
        |Функция ПланСумма = Сумма(План);
        |Группировка СтатьяБюджета;
        |Группировка Филиал без групп все ВошедшиеВЗапрос;
        |Условие(Филиал в ВыбУправление);
        |"//}}ЗАПРОС
;
        Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
            Возврат;
        КонецЕсли;
        //Пока Запрос.Группировка(1) = 1 Цикл
        //   Пока Запрос.Группировка(2) = 1 Цикл
        //       Сообщить(Строка(Запрос.СтатьяБюджета)+" "+Запрос.Филиал+" "+Строка(Запрос.Факт)+" "+Строка(Запрос.ФактСумма));
        //   КонецЦикла;    
        //КонецЦикла;
          
        //заполняем список филиалов
        спФилиалы=СоздатьОбъект("СписокЗначений");
        Если ПустоеЗначение(ВыбУправление)=1 Тогда
            спр=СоздатьОбъект("Справочник.Управления");
            спр.ВыбратьЭлементы();
            Пока спр.ПолучитьЭлемент()=1 Цикл
                спФилиалы.ДобавитьЗначение(спр.ТекущийЭлемент());
            КонецЦикла;    
        Иначе
            спФилиалы.ДобавитьЗначение(ВыбУправление);
        КонецЕсли;
        //заполняем список статей
        тбСтатьи=СоздатьОбъект("ТаблицаЗначений");
        тбСтатьи.НоваяКолонка("Статья","Справочник.СтатьиБюджета");
        тбСтатьи.НоваяКолонка("Уровень","Число",1,0);
        спр=СоздатьОбъект("Справочник.СтатьиБюджета");
        спр.ПорядокКодов();
        Если ПустоеЗначение(ВыбСтатья)=0 Тогда
            спр.ИспользоватьРодителя(ВыбСтатья);
        КонецЕсли;    
        спр.ВыбратьЭлементы();
        Пока спр.ПолучитьЭлемент()=1 Цикл  
            тбСтатьи.НоваяСтрока();
            тбСтатьи.Статья=спр.ТекущийЭлемент();
            тбСтатьи.Уровень=спр.ЭтоГруппа();
        КонецЦикла;    
        тбБюджет=СоздатьОбъект("ТаблицаЗначений");
        тбСтатьи.ВыбратьСтроки();
        Пока тбСтатьи.ПолучитьСтроку()=1 Цикл
            нс=тбСтатьи.НомерСтроки;
            тбБюджет.НоваяСтрока();
            Для нм=1 по спФилиалы.РазмерСписка() Цикл
                Если нс=1 Тогда
                    тбБюджет.НоваяКолонка("План_"+Формат(нм,"Ч(0)3.0"),"Число",12,2);
                    тбБюджет.НоваяКолонка("Факт_"+Формат(нм,"Ч(0)3.0"),"Число",12,2);
                    тбБюджет.НоваяКолонка("СуммаПлан_"+Формат(нм,"Ч(0)3.0"),"Число",12,2);
                    тбБюджет.НоваяКолонка("СуммаФакт_"+Формат(нм,"Ч(0)3.0"),"Число",12,2);

                КонецЕсли;    
                Если Запрос.Получить(тбСтатьи.Статья,спФилиалы.ПолучитьЗначение(нм))=1 Тогда
                    тбБюджет.УстановитьЗначение(нс,"План_"+Формат(нм,"Ч(0)3.0"),Запрос.ПланСумма);
                    тбБюджет.УстановитьЗначение(нс,"Факт_"+Формат(нм,"Ч(0)3.0"),Запрос.ФактСумма);
                    Если тбСтатьи.Уровень=1 Тогда
                    тбБюджет.УстановитьЗначение(нс,"СуммаПлан_"+Формат(нм,"Ч(0)3.0"),Запрос.ПланСумма);
                    тбБюджет.УстановитьЗначение(нс,"СуммаФакт_"+Формат(нм,"Ч(0)3.0"),Запрос.ФактСумма);    
                  КонецЕсли;
                КонецЕсли;    
            КонецЦикла;    
        КонецЦикла;


//ПересчитатьТаблицу();
    КонецЕсли;
    //Сообщить(тбБюджет.Итог(1));    
    //Сообщить(тбБюджет.Итог(2));
    //Сообщить(тбБюджет.Итог(3));
    //Сообщить(тбБюджет.Итог(4));    
    Таблица.Очистить();
    Таблица.ВывестиСекцию("Шапка|Начало");
    Для нм=1 по спФилиалы.РазмерСписка() Цикл
        Филиал=сокрлп(спФилиалы.ПолучитьЗначение(нм));
        Таблица.ПрисоединитьСекцию("Шапка|Филиал");
    КонецЦикла;    
    //Таблица.ПрисоединитьСекцию("Шапка|Конец");
    тбСтатьи.ВыбратьСтроки();
    //КодСтат=СоздатьОбъект("СписокЗначений");
    Пока тбСтатьи.ПолучитьСтроку()=1 Цикл
        нс=тбСтатьи.НомерСтроки;
        //Расшифровка=СоздатьОбъект("СписокЗначений");
        Расшифровка=СоздатьОбъект("СписокЗначений");
        Расшифровка.Установить("Отчет","РасшифровкаБюджета");
        Расшифровка.Установить("НачДата",НачДата);
        Расшифровка.Установить("КонДата",КонДата);
        Расшифровка.Установить("ВыбФилиал",ВыбУправление);
        Расшифровка.Установить("ВыбСтатья",тбСтатьи.Статья);
        Если тбСтатьи.Статья.ЭтоГруппа()=1 Тогда
            типСтроки="Группа";
        Иначе
            типСтроки="Строка";
        КонецЕсли;
        Статья=сокрлп(тбСтатьи.Статья.Наименование);
        Для кв=1 по тбстатьи.Уровень Цикл
            Статья="  "+Статья;
        конецЦикла;    
        Таблица.ВывестиСекцию(типСтроки+"|Начало");
        СумПлан=0;СумФакт=0;
        Для нм=1 по спФилиалы.РазмерСписка() Цикл
            Если флПромотр=0 Тогда
                РасшифровкаПлан="План_"+Формат(нм,"Ч(0)3.0")+"_"+Формат(нс,"Ч(0)3.0");
            КонецЕсли;
            План=тбБюджет.ПолучитьЗначение(нс,"План_"+Формат(нм,"Ч(0)3.0"));
            //РасшифровкаФакт="Факт_"+Формат(нм,"Ч(0)3.0")+"_"+Формат(нс,"Ч(0)3.0");
            Факт=тбБюджет.ПолучитьЗначение(нс,"Факт_"+Формат(нм,"Ч(0)3.0"));
            Если флПромотр=0 Тогда
                Таблица.ПрисоединитьСекцию(типСтроки+"|Филиал");
            Иначе
                Если Факт>0 Тогда
                //    Расшифровка=СоздатьОбъект("СписокЗначений");
                //    Расшифровка.Установить("Отчет","РасшифровкаБюджета");
                //    Расшифровка.Установить("НачДата",НачДата);
                //    Расшифровка.Установить("КонДата",КонДата);
                //    Расшифровка.Установить("ВыбФилиал",ВыбУправление);
                //    Расшифровка.Установить("ВыбСтатья",ВыбСтатья);
                Иначе
                    Расшифровка=0;
                КонецЕсли;
                Таблица.ПрисоединитьСекцию(типСтроки+"|ФилиалСм");
            КонецЕсли;
            СумПлан=СумПлан+План;
            СумФакт=СумФакт+Факт;
        КонецЦикла;    
        Если флПромотр=0 Тогда
            //Таблица.ПрисоединитьСекцию(типСтроки+"|Конец");
        Иначе      
            Если СумФакт>0 Тогда
            //    Расшифровка=СоздатьОбъект("СписокЗначений");
            //    Расшифровка.Установить("Отчет","РасшифровкаБюджета");
            //    Расшифровка.Установить("НачДата",НачДата);
            //    Расшифровка.Установить("КонДата",КонДата);
            //    Расшифровка.Установить("ВыбФилиал",ВыбУправление);
            //    Расшифровка.Установить("ВыбСтатья",ВыбСтатья);
            Иначе
                Расшифровка=0;
            КонецЕсли;
            //Таблица.ПрисоединитьСекцию(типСтроки+"|КонецСм");
        КонецЕсли;
    КонецЦикла;    
    Таблица.ВывестиСекцию("Подвал|Начало");
    СумПлан=0;СумФакт=0;
    Для нм=1 по спФилиалы.РазмерСписка() Цикл
        План=тбБюджет.Итог("План_"+Формат(нм,"Ч(0)3.0"));
        Факт=тбБюджет.Итог("Факт_"+Формат(нм,"Ч(0)3.0"));
        СумПлан=СумПлан+План;
        СумФакт=СумФакт+Факт;
        Таблица.ПрисоединитьСекцию("Подвал|Филиал");
    КонецЦикла;    
    //Таблица.ПрисоединитьСекцию("Подвал|Конец");
    
    Таблица.ТолькоПросмотр(1);
    Таблица.Опции(0,0,4,2);
КонецПроцедуры        

//Процедура ПриВыбореЯчейкиТаблицы(ИмяЯчейки, Значение)
//   Сообщить(ИмяЯчейки+" "+Значение);
//
//КонецПроцедуры


Процедура ОбработкаЯчейкиТаблицы(знч,флаг,табл1,резулт)
    Если Найти("План,Факт",лев(знч,4))>0 Тогда
        нк=лев(знч,8);
        нс=число(сред(знч,10,3));
        номкол=число(сред(знч,6,3));
        чс=тбБюджет.ПолучитьЗначение(нс,нк);
        Если ВвестиЧисло(чс,"Введите значение:",12,2)=1 Тогда
            тбБюджет.УстановитьЗначение(нс,нк,чс);
            //ПересчитатьСуммы(нс,номкол);
            Сформировать(0);
            флИзменения=1;
        КонецЕсли;    
    ИначеЕсли ТипЗначенияСтр(знч)="СписокЗначений" Тогда
        глРасшифровка = знч;
        глФлагРасшифровки=1;
        ОткрытьФорму("Отчет.РасшифровкаБюджета");
    КонецЕсли;    
    флаг=0;
КонецПроцедуры    

Функция УстДоступность()
    Форма.кнСохранить.Доступность(флИзменения);
КонецФункции    

Процедура СохранитьИзм()
    Док=СоздатьОбъект("Документ.БюджетныйПлан");
    Док.ВыбратьДокументы(НачДата,КонДата);
    Пока Док.ПолучитьДокумент()=1 Цикл
        Попытка
            Док.Удалить(1);
        Исключение
            Предупреждение("Ошибка записи изменений");
            возврат;
        КонецПопытки;
    КонецЦикла;    
    Док.Новый();
    Док.ДатаДок=НачДата;
    Док.УстановитьНовыйНомер();
    тбСтатьи.ВыбратьСтроки();
    Пока тбСтатьи.ПолучитьСтроку()=1 Цикл
        нс=тбСтатьи.НомерСтроки;
        Если тбСтатьи.Статья.ЭтоГруппа()=0 Тогда
            Для нм=1 по спФилиалы.РазмерСписка() Цикл
                План=тбБюджет.ПолучитьЗначение(нс,"План_"+Формат(нм,"Ч(0)3.0"));
                Если План>0 Тогда
                    Док.НоваяСтрока();
                    Док.Филиал=спФилиалы.ПолучитьЗначение(нм);
                    Док.СтатьяБюджета=тбСтатьи.Статья;
                    Док.Сумма=План;
                КонецЕсли;
            КонецЦикла;    
        КонецЕсли;
    КонецЦикла;    
    Если Док.КоличествоСтрок()>0 Тогда
        Попытка
            Док.Записать();
            Док.Провести()
        Исключение
            Предупреждение("Ошибка записи изменений");
            возврат;
        КонецПопытки;
    КонецЕсли;    
    флИзменения=0;
КонецПроцедуры    

Процедура ПриОткрытии()  
    флИзменения=0;
    флПромотр=1;
    глУстПропись(гривня,"У");
       ВыбУправление=ВосстановитьЗначение("БюджетноеПланирование_ВыбУправление");
       НачДата=НачМесяца(РабочаяДата());
       КонДата=КонМесяца(РабочаяДата());
       ВыбУправление=Константа.БазУправление;
    Сформировать(1);
КонецПроцедуры



 ! 

Не надо создавать одинаковые темы.