[NotaBene] Универсальный отчет по таблице значений
1C v.7.7 Готовое решение. Не требует настройки. Не требует допрограммирования. Данная обработка решает часто встречающуюся задачу вывода в «красивом» виде таблицы значений (полученной, например, из запроса). Поддерживается произвольное группирование данных, отключение/включение группировок, в т.ч и создание «шахматок» (типа «продажи понедельно»). Обработка может использоваться как и в отладочных целях (для нормального просмотра ТЗ), так и в составе вполне рабочих отчетов. По крайней мере, я неоднократно клиентам данную обработку ставил вместо того, чтобы каждый раз писать замороченные выводы данных. И клиенты довольны, и мне — проще…
- Описание
- Подробнее
Описание
Подробный пример использования данной обработки в составе отчета по оплатам приведен здесь: //sale.itcity.ru/projects/522/?&desc=1&ref=174
Обработка, которая приведена здесь, по сравнению с упомянутой выше ссылкой, расширена: стало лень каждый раз обозначать требуемую раскладку колонок для вывода РАЗНЫХ отчетов — вот и прикрутил сохранение/восстановление раскладки колонок для вывода отчетов. Причем, обработка сама распознает, какой набор/раскладка колонок подходит для полученного на вывода отчета.
От других навороченных обработок аналогичного типа отличается, на мой взгляд, идеальной сбалансированностью функционала и простоты использования.
Мое мнение — удобнейший инструментарий! В копилку программистаааааа!!
Оригинал обработки расположен здесь: http://1c.proclub.ru/modules/mydownloads/personal.php?cid=5&lid=3454 Разрешение от автора на выкладывание доработанной обработки — получено.
Пример использования данной обработки.
//здесь работает внешний отчет, формирующий какие-либо данные
//…
//если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0
Тогда Возврат;
КонецЕсли;
ТЗ = СоздатьОбъект("ТаблицаЗначений");
Запрос.Выгрузить(ТЗ,1,0);
Если ФлагГруппа = 0 Тогда ТЗ.УдалитьКолонку("ГруппаТовара"); КонецЕсли;
ТЗ.УдалитьКолонку("Количество"); //удаляем ненужные колонки
ТЗ.УдалитьКолонку("ПродСт");
ТЗ.УдалитьКолонку("ТекДок");
//здесь имеем ПЛОСКУЮ ТЗ с нужными для вывода данными
//ТЗ должна содержать нужные числовые данные и, по возможности, не содержать лишних колонок
//…
//сформируем параметры для передачи в обработку
/
//Параметр "ТаблицаЗначений"
//собственно, сама таблица значений для вывода, подготовленная ранее, плоская.
//Параметр "СписокПоказателей"
//положим в список значений "счетные" колонки ТЗ (числовые)
//(суммы, количества, себестоимости и прочее всякое что можно складывать…)
//все остальные неуказанные колонки будут считаться "измерениями" (группировками)
//формат элемента списка значений:
//значение элемента = идентификатор колонки ТЗ,
//представление элемента = заголовок колонки в отчете
//
СЗПоказателей = СоздатьОбъект("СписокЗначений");
СЗПоказателей.ДобавитьЗначение("СуммаПродСт","Сумма"); //"СуммаПродСТ" — идентификатор колонки ТЗ, "Сумма" — будет выводиться заголовком колонки
СЗПоказателей.ДобавитьЗначение("СуммаКоличество","Кол-во"); //"СуммаКоличество" — идентификатор колонки ТЗ, "Кол-во" — будет выводиться заголовком колонки
//Параметр "СписокВыводаГруппировок", может отсутствовать
//положим в список значений формат вывода группировок (этот параметр может быть опущен/не задан)
//0 -группировку по измерению не выводить (свертывать, с последующей расшифровкой)
//1 -группировать измерение по строкам (группировок может быть несколько)
//2 -группировать измерение по столбцам (группировку по столбцам можно не более одной!)
//
//формат элемента списка значений:
// значение элемента = число (0,1,2)
// представление элемента = идентификатор колонки ТЗ
//
СЗгруппировок = СоздатьОбъект("СписокЗначений");
СЗгруппировок.ДобавитьЗначение(2,"ТипЯчейки"); //неуказаннные группировки имеют значение 1 — по строкам
СЗгруппировок.ДобавитьЗначение(0,"АдресЯчейки");
//Параметр "Заголовок", может отсутствовать
//текст, выводится как заголовок отчета
//…
//вызовем универсальный отчет по ТЗ
//в списке значений передадим параметры
// — саму таблицу значений для вывода, параметр "ТаблицаЗначений"
// — список "счетных" колонок, параметр "СписокПоказателей"
// — список группировок, параметр "СписокВыводаГруппировок" (может отсутствовать)
// — заголовок для отчета, параметр "Заголовок" (может отсутствовать)
КонтекстВызова = СоздатьОбъект("СписокЗначений");
КонтекстВызова.ДобавитьЗначение(ТЗ,"ТаблицаЗначений");
КонтекстВызова.ДобавитьЗначение(МойЗаголовокОтчета,"Заголовок");
КонтекстВызова.ДобавитьЗначение(СЗПоказателей,"СписокПоказателей");
КонтекстВызова.ДобавитьЗначение(СЗПоказателей,"СписокВыводаГруппировок"); //если не указывать параметр — все группировки = по строкам
//…
ПутьОбработки = ""; ИмяОбработки = "";
РасположениеФайла(ПутьОбработки, ИмяОбработки);
ОткрытьФорму("Отчет", КонтекстВызова, ПутьОбработки+"ОтчетПоТЗ.ert");
КонецПроцедуры //Сформировать()
Обновление 30.11.19
Модифицировано: выполняется автонастройка ширины колонок таблицы расшифровки числовых показателей
Обновление 29.11.19
Добавлена возможность манипулировать настройками вывода группировок программно при вызове отчета.
ВНИМАНИЕ: СПЕЦИАЛЬНО ДЛЯ ТЕХ, КТО НЕ УМЕЕТ ЧИТАТЬ, ПИШУ БОЛЬШИМИ ЖИРНЫМИ КРАСНЫМИ БУКВАМИ: ОБРАБОТКУ СЛЕДУЕТ ВЫЗЫВАТЬ КАК ОПИСАНО ВЫШЕ, ИСПОЛЬЗУЯ ПРОГРАММНЫЙ ОПЕРАТОР ОткрытьФорму("Отчет",….) — НИКАКИМИ ДРУГИМИ СПОСОБаМИ ДАННУЮ ОБРАБОТКУ ОТКРЫВАТЬ НЕ СЛЕДУЕТ!