helpf.pro
Регистрация
 0 
Распечатать

Как сделать чтобы при выделении числе в табличном документе, отчете выводилась их сумма?

Часто бывает необходимость сложить несколько чисел в печатной форме, например, как это сделано в Excel.

Сегодня решить посмотреть Бухгалтерию КОРП. Нашёл в ней очень интересную штуку: поле в котором показан результат сложения выделенных ячеек печатной формы. Конечно, такую штуку бы правильнее реализовать на уровне платформы. Но коль нет, можно оказывается сделать ручками. Как говориться, и за это богам спасибо.

Вот исходный код из Бухгалтерии КОРП:
Код 1C v 8.х
 
Функция ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(ПолеТабличногоДокумента) Экспорт
Сумма = 0;
Для Каждого Область Из ПолеТабличногоДокумента.ВыделенныеОбласти Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Для ИндексСтрока = Область.Верх По Область.Низ Цикл
Для ИндексКолонка = Область.Лево По Область.Право Цикл
Попытка
Сумма = Сумма + Число(СтрЗаменить(ПолеТабличногоДокумента.Область("R" + Формат(ИндексСтрока, "ЧГ=0") + "C" + Формат(ИндексКолонка, "ЧГ=0")) .Текст, " ", ""));
Исключение
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Возврат Сумма;
КонецФункции


Подумав немного, я добавил в функцию ещё расчёт среднего и определение количества ячеек с числами. Получилось вот что:
Код 1C v 8.х
 Функция ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(ПолеТабличногоДокумента, average = 0, count = 0) Экспорт

Сумма = 0;
count = 0;
Для Каждого Область Из ПолеТабличногоДокумента.ВыделенныеОбласти Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Для ИндексСтрока = Область.Верх По Область.Низ Цикл
Для ИндексКолонка = Область.Лево По Область.Право Цикл
Попытка
vNumber = Число(СтрЗаменить(ПолеТабличногоДокумента.Область("R" + Формат(ИндексСтрока, "ЧГ=0") + "C" + Формат(ИндексКолонка, "ЧГ=0")) .Текст, " ", ""));
Сумма = Сумма + vNumber;
count = count + 1;
Исключение
КонецПопытки;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;

Если count <> 0 Тогда
average = Сумма / count;
Иначе
average = 0;
КонецЕсли;
Возврат Сумма;
КонецФункции // ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента


Результат на картинке:
title
Да, чуть не забыл самое главное, функцию надо вызвать в обработчике ПриАктивизацииОбласти поля табличного документа.

Автор: Pim
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 11190
 0 
Распечатать
Возможно, вас также заинтересует
10060 (0x0000274C): Попытка установить соединение была безуспешной 0
Установили новый терминальный сервер, на нем подняли 1С, терминальные пользователе неописуемо довольны, все просто летает :) И вот же надо было такому случиться, главному бухгалтеру не понравилось работать через...
1C: Enterprise Development Tools 35
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
1С Предприятие что это? 6
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который...
Cодержимое указанного ниже веб-сайта в этом приложении блокируется... Aboutsecurity_1cv8c.exe 0
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже...
Excel файл как Внешний источник данных 4
Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто. 1. В конфигурации добавляет новый объект метаданных типа " Внешние источники данных" и назовем его просто " Excel" . ...
Посмотреть все результаты поиска похожих
Комментарии
Vitalii
07.08.2012 09:48Комментарий: 7
Vitalii
Да полезная, но если табличный документ большой работает крайне медленно.
E_Migachev
29.07.2010 13:57Комментарий: 6
E_Migachev
Да, *08, автор не позаботился о выводе, оставил это нам )
Dymok
29.07.2010 13:00Комментарий: 5
Dymok
Функция лишь вычисляет, а еще необходимо позаботиться о том, чтобы отобразить результат, например в какой-либо надписи
Код 1C v 8.х
 ЭлементыФормы.Надпись1.Заголовок=(ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(Элемент));   


Кроме того, раз уж Вы добавили среднее и количество, то их тоже нужно возвращать
Код 1C v 8.х
 Возврат "Сумма: "+Сумма+" Среднее: "+average+" Кол-во: "+count;   
Dymok
29.07.2010 12:34Комментарий: 4
Dymok
Процедура ПолеТабличногоДокументаПриАктивизацииОбласти(Элемент)
ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(Элемент);
КонецПроцедуры

или

Процедура ПолеТабличногоДокументаПриАктивизацииОбласти(Элемент)
ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(ЭлементыФормы.ПолеТабличногоДокумента);

КонецПроцедуры
???
Dymok
29.07.2010 12:31Комментарий: 3
Dymok
Это понятно, а пример кода вызова?
E_Migachev
29.07.2010 11:58Комментарий: 2
E_Migachev
Функцию надо вызвать в обработчике ПриАктивизацииОбласти поля табличного документа.
Dymok
29.07.2010 11:44Комментарий: 1
Dymok
А как вызвать эту функцию?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.