Красивости в отчётах для 8-ки

27.03.10

Разработка - Работа с интерфейсом

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

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

 

Вот исходный код из Бухгалтерии КОРП:

Функция ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(ПолеТабличногоДокумента) Экспорт

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

    Возврат Сумма;

КонецФункции

Подумав немного, я добавил в функцию ещё расчёт среднего и определение количества ячеек с числами. Получилось вот что:

///==============================================================================
Функция ВычислитьСуммуВыделенныхЯчеекТабличногоДокумента(ПолеТабличногоДокумента, average = 0, count = 0) Экспорт

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

Результат на картинке.

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

См. также

Управление дашбордами

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    17096    23    4    

37

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    11561    771    elcoan    46    

107

Конструктор HTML, CSS и javascript

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    10118    156    acces969    31    

119

Модель состояния для MVC

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    4128    kalyaka    4    

31

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    9064    1    2    

6

Программный интерфейс для доработки форм

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    9896    AtamanovYS    19    

139
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Evg-Lylyk 4658 27.03.10 21:07 Сейчас в теме
Вариант КОРП медленный при выделении большого числа ячеек.
http://infostart.ru/public/57687/
2. Pim 182 28.03.10 11:35 Сейчас в теме
(1) Да уж... Надо внимательнее смотреть архив разработок, прежде чем публиковать.

Всем. Но зато я нашёл косяк во всех подобных разработках (и у 1с, и у Evg-Lylyk, ну и, соответственно, в моём первом варианте было).

Суть проблемы в том, что привыделении нескольких ячеек (преимущественно не смежных) с использованием клавиши CTRL, если несколько раз нажать на одну и ту же ячейку, то сумма увеличится на столько сколько раз нажимали на одну область.

У меня косяк проявился на платформе 8.1.15.14 и 8.2.10.77. Скорей всего и остальные версии платформы в этом случае в поле ВыделенныеОбласти табличного документа поместят при нажатом CTRL каждую ячейку столько раз, сколько на неё нажали.

Вот мой вариант устранения:
Сумма     = 0;
count     = 0;
processed = new ТаблицаЗначений;
processed.Колонки.Добавить("row");
processed.Колонки.Добавить("col");
Для Каждого Область Из ПолеТабличногоДокумента.ВыделенныеОбласти Цикл
	Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
		Для ИндексСтрока = Область.Верх По Область.Низ Цикл
			Для ИндексКолонка = Область.Лево По Область.Право Цикл
				if processed.НайтиСтроки(new Структура("row, col", ИндексСтрока, ИндексКолонка)).Количество() <> 0 then
					continue;
				endIf;
				Попытка
					vNumber = Число(СтрЗаменить(ПолеТабличногоДокумента.Область(ИндексСтрока, ИндексКолонка).Текст, " ", ""));
					Сумма   = Сумма + vNumber;
					count   = count + 1;
				Исключение
				КонецПопытки;

				vLine     = processed.Добавить();
				vLine.row = ИндексСтрока;
				vLine.col = ИндексКолонка;
			КонецЦикла;
		КонецЦикла;
	КонецЕсли;
КонецЦикла;

average = ?(count = 0, 0, Сумма / count);
Возврат Сумма;
Показать
3. WKBAPKA 214 29.03.10 12:40 Сейчас в теме
2(2): ну это ж не проблема... имена же областей известны, достаточно добавить список значений для контроля и все...
5. Evg-Lylyk 4658 01.04.10 18:01 Сейчас в теме
(2) Спасибо за замечание. Это мелочь из-за которой придется усложнять алгоритм и никто ее не оценит. Вон некоторым кнопки М достаточно.
4. wolfsoft 2422 01.04.10 17:46 Сейчас в теме
А чего "М" вверху на панели не работает?
Оставьте свое сообщение