Написание отчета происходит в два этапа. Сбор данных, и вывод их на экран. И реализация именно вывода группировок отчета из таблицы значений на экран в платформе 7.7 оставляет желать лучшего. Когда я только начинал заниматься программированием в среде 1С 7.7, такая задача чуть ли не ставила в тупик. Потому что своей головы у меня хватало на вывод трех группировок (со вспомогательнгыми ТЗ), и очередность вывода была жестко привязана к коду. Потом однажды я нашел обработку [NotaBene] Универсальный отчет по таблице значений. Она здорово выручала иногда, но отсутствие нумерации строк отчета, которую очень часто просили, и привязка к оформлению (которое по ряду причин мне на душу не легло) привело к идее написать что-то свое. Кроме всего прочего сама идея использовать внешнюю обработку для таких целей мне тоже не нравилась.
Таким образом, я поставил перед собой задачу придумать алгоритм для вывода отчета, который сможет реализовать следующий функционал:
- — Возможность пользователя управлять вложенностями и видимостью группировок отчета из формы.
- — Перенумерация строк конечного отчета
- — Возможность легко в обработке изменить оформление отчета
Буду рад, если кому пригодиться 🙂
Добавлено 13.06.2012:
+ Отображение структуры группировок с помощью внешней компоненты Йоксель (качать отсюда: http://yoksel.net.ru/Hotfixes)
+Немного изменил алгоритм перенумерации.
Не очень красиво смотрятся цифры 1.1.1.1.2, я нумерую всегда с количеством уровней нумерации равным 3 (т.е. 1, 1.1, 1.1.1), а если в отчете много группировок — просто не нумерую первую, и пропускаю нумерацию для нижних уровней. Основываюсь только на своем опыте, меня еще ни разу не просили, чтобы в отчете было больше пяти группировок, а с таким условием такая нумерация очень приятно выглядит.
Добавлено 06.06.2013:
+ Вывод секций отчета рекурсивно, с использованием индексированной таблицы (ВК 1С++)
Т.к. уже давно и активно пользуюсь объектом «ИндексированнаяТаблица», решил маленько доработать эту публикацию. Просто при выводе тз с 10000 строк, с использованием ИТЗ уходит всего 3 сек., а с штатным методом этой обработки — 85 сек.
p.s. За веселые названия фирм спасибо сайту www.brendogenerator.ru
А можно прямую ссылку на Вашу обработку .
P.S. на счету 0.10$m
Да, скиньте мыло в личку я отправлю.
что-то я не понял разницу в двух сформированных отчетах (цвета естественно мною не учитываются), если можно разъясните пожалуйста мне
Если вы посмотрите на скриншоты, и комментарии к ним, увидите — в главном окне: Оформлять конечный отчет — градиентом, или подготовленной таблицей. Разница в том, что на скриншоте, где все такое серенькое для вывода группировок используется одна и та же секция таблицы, просто программно оформляется, в цикле делаю переход от темно-серого к белому. Это, например если много суммовых колонок там для 5 группировок, и неохота каждую разукрашивать, или просто надо быстро сделать. А на втором скриншоте показана заранеее подготовленная таблица (т.е. все секции заранее разукрашены, и оформлены).
+ у меня правда такого не было никогда (в смысле отчета, где одновременно надо было бы сформировать более пяти группировок), но если вдруг начальство попросило добавить пару группировок… СРОЧНО) То вывод одной секцией тоже довольно удобен. Останется доб
(5) большое спасибо за понятные мне разъяснения (разжовано досконально), что-то сам не смог осилить разницу в двух скриншотах
Очень интересная обработка. Скачаю, облизательно изучю.
А есть ли пример с группами номенклатуры, например, с итогами по каждой из вложенных групп?
(8) Вы что-то путаете. Это не пример формирования данных, а пример ВЫВОДА данных на экран. Если вам нужно вывести группировки по групам номенклатуры, создайте тз, типа:
В ПриОткрытии() пропишите
спГруппировок.ДобавитьЗначение(«Номенклатура»);
спГруппировок.ДобавитьЗначение(«Родитель»);
И дальше по аналогии с этим отчетом выводите данные на экран.
Хотя выводить отчеты с итогами по родителю порой проще другим алгоритмом, например прямо из выборки запроса.
Спасибо автору, действительно хорошая обработка. Для себя забрал только кусок с выводом через Йоксель. Как вариант доработки, чем сам воспользовался, можно в процедуру «ВывестиСтруктуруГруппировок» добавить еще один параметр «КоличествоСтрок» и заменить им все «ВремДокумент.ВысотаТаблицы()». Добавил чтобы можно было после сгруппированных строк выводить всякие итоги и подвал.
Сюда бы еще вкрутить, как в NotaBene — вывод какой-то из группировок (задавать такую группировку) в колонках. Тогда получались бы шахматки. И чтобы колонки с числовыми значениями (если таких колонок больше одной) тоже можно было сворачивать. Было бы очень хорошо…