Hare.ru @ Коллективный разум / Hare.ru @ Дикое место |
Архив hare.ru | |||||||||||||||||||||||||||||||||||||||||||||||
Мысли, конвертированные в текст | ||||||||||||||||||||||||||||||||||||||||||||||||
Собственные руки TMСложные отчёты – это просто! Набор сервисных функций.Сергей Осипов (koeniger) (где-то в 2001) Сервисные функции для сложных отчетовНаписание всевозможных отчетов и отчётиков для конфигураций V7 одно из основных направлений работы прикладного программиста. Часто заказчик требует сложные отчеты с итогами и группировками. Однажды мне надоело писать бесконечные Тогда я вспомнил, что настоящий программист это в первую очередь ленивый программист, и написал библиотеку сервисных функций, позволяющую избавиться от этой рутины.
С помощью этой библиотеки писать сложные отчеты так же легко, как составлять Как это работает? Пусть у нас есть задача сделать отчет вида:
Обрабатывая запрос по остаткам, мы создаём одну или несколько таблиц значений, на основании которых потом делаем печатную форму. Пусть мы сохраняем результаты запроса в таблице Данные вида:
Чтобы не писать бесконечные СоздатьОбъект(), ДобавитьСтроку(), ДобавитьКолонку(), мы используем сервисные функции:
Свернув таблицу по колонке группе Группа, мы получим таблицу Группы:
Теперь мы индексируем таблицу Данные, чтобы в ней можно было получать быстрые итоги:
А теперь, вместо того, чтобы накапливать промежуточные итоги, при выводе таблицы делаем вот что:
Здесь используется функция суммирования/поиска по нескольким колонкам. 1 означает, что нужно просуммировать все НачОст в таблице, где колонки Группа и Товар равны соответствующим значениям, переданным в функцию через параметры. Тот кто хоть раз писал подобные отчеты, поймет, насколько это упрощает жизнь. Тем более, что итог по группе в обычном случае можно вывести только в конце списка товаров группы, т.к. сначала надо «пересчитать« все товары группы. Описанная методика позволяет вывести итог по группе в любом месте. О скорости и немного философии Работает это достаточно быстро благодаря индексации таблицы значений. Индексация заключается в том, что в таблице в пару каждой колонке хранится «индексная» колонка с таким же именем, но начинающимся на _. В каждой строчке этой колонки хранится номер той строки таблицы, в которой значение этой колонки такое же, как и в текущей, или ноль, если таких значений больше нет. До введения индексации отчет (полный перебор) работал 2 часа, теперь только 5 минут. А вообще таблица значений в 1С достаточно мощный инструмент. В любой ячейке можно хранить значение любого типа, в том числе и другую таблицу значений. Вы никогда не пробовали создавать дерево в 1С? Делайте это в таблицах значений. |
Партнеры: Также может быть интересно: Канал Россия 1 на http://spbtvonline.ru/ |
|||||||||||||||||||||||||||||||||||||||||||||||
Сайт поддерживается за счет партнеров: | ||||||||||||||||||||||||||||||||||||||||||||||||
:::... Сайт содержит архив двух версий hare.ru | Карта сайта |