Расчет итогов по группировкам в уже сформированной таблице 7.7Иногда удобнее вывести итоги по группировкам в уже сформированной таблице. Вместо итоговых сумм для этой цели нужно вывести признаки, например "***" и "****", а числовые значения для суммирования вывести в расшифровках. Приведен код для 1С:Предприятие 7.7, который расчитывает суммы и помещает их вместо признаков в таблицу. | | Автор статьи: romix Последняя редакция №1 от 17.08.11 URL: http://kb.mista.ru/article.php?id=837 | |
Ключевые слова: таблица, итоги, группировки
Процедура РасчетИтоговСнизуВверх(прм_Таблица, прм_Колонка, прм_Признак)
//Принимает на входе ссылку на таблицу, номер колонки таблицы и признак.
//В колонке таблицы должны быть расставлены признаки, куда писать сумму, например "***",
//а числовые значения, которые надо суммировать, должны быть выведены в расшифровках.
//Просматривает таблицу снизу вверх (это нужно, например, для построения промежуточных итогов,
//где итоги выше самих сумм).
таб=прм_Таблица;
нс=таб.ВысотаТаблицы();
сумма=0;
Пока нс>=1 Цикл
обл=таб.Область(нс,прм_Колонка);
зн=СокрЛП(обл.Текст);
Если зн=прм_Признак Тогда
//Если встретили признак, например "***"
//пишем вместо него сумму
обл.Текст=Формат(сумма,"N19.2, ");
//Обнуляем сумму
сумма=0;
Иначе
//Считываем числовое значение из расшифровки
ч=Число(обл.Расшифровка());
сумма=сумма+ч;
КонецЕсли;
//Движемся вверх по таблице
нс=нс-1;
КонецЦикла;
КонецПроцедуры
Процедура РасчетИтоговСверхуВниз(прм_Таблица, прм_Колонка, прм_Признак)
//Принимает на входе ссылку на таблицу, номер колонки таблицы и признак.
//В колонке таблицы должны быть расставлены признаки, куда писать сумму, например "****",
//а числовые значения, которые надо суммировать, должны быть выведены в расшифровках.
//Просматривает таблицу сверху вниз (это нужно, например, для построения окончательных итогов,
//где итоги расположены ниже самих сумм).
таб=прм_Таблица;
сумма=0;
Для нс=1 по таб.ВысотаТаблицы() Цикл
обл=таб.Область(нс,прм_Колонка);
зн=СокрЛП(обл.Текст);
Если зн=прм_Признак Тогда
//Если встретили признак, например "***"
//пишем вместо него сумму
обл.Текст=Формат(сумма,"N19.2, ");
//Обнуляем сумму
сумма=0;
Иначе
//Считываем числовое значение из расшифровки
ч=Число(обл.Расшифровка());
сумма=сумма+ч;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
//*******************************************
Процедура Сформировать()
таб=СоздатьОбъект("Таблица");
таб.ИсходнаяТаблица("Таблица");
таб.ВывестиСекцию("Шапка");
таб.ВывестиСекцию("Строки");
//Таблица сформирована - расчитаем итоги
колонка=1;
РасчетИтоговСнизуВверх(таб, колонка, "***");
РасчетИтоговСверхуВниз(таб, колонка, "****");
колонка=2;
РасчетИтоговСнизуВверх(таб, колонка, "***");
РасчетИтоговСверхуВниз(таб, колонка, "****");
таб.Показать();
КонецПроцедуры
|