формируется таблица.Необходимо в ней иметь результат по
группе. Запутался совсем,не получается,а времени в обрез.
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);
КонецПроцедуры
! | Не надо создавать одинаковые темы. |