Табличный документ 1С:Предприятия 8 служит не только для печати документов и отчетов. Он имеет расширенные возможности, которые превращают его в интерактивное средство взаимодействия с пользователем. К таким возможностям относятся:
Стоит заметить, что к интерактивным возможностям табличного документа можно также отнести сводные таблицы и элементы управления, располагающиеся в ячейках, но сейчас мы не будем на них останавливаться, а подробнее рассмотрим вышеперечисленные механизмы.
Система "1С:Предприятие 8" поддерживает механизм расшифровок (drill-down, drill-through), когда пользователь щелкает на строке или ячейке отчета и получает более детальный отчет, если конечно это предусмотрено программистом.
Расшифровки делятся на стандартные и нестандартные. Стандартные расшифровки обрабатываются системой автоматически и не требуют дополнительных усилий от программиста, например, для документов будет открыта форма документа, а для элементов справочника будет открыта форма элемента. Если справочник редактируется в списке, то курсор будет установлен на текущем элементе в форме списка. Для выполнения нестандартной расшифровки предназначено событие ОбработкаРасшифровки.
Событие "ОбработкаРасшифровки" можно обработать, только если табличный документ помещен в форму как элемент управления, а не открывается в отдельном окне, поскольку это событие существует только у элемента управления "ПолеТабличногоДокумента". Ниже показаны категория свойств "События" элемента управления "ПолеТабличногоДокумента", где назначается процедура-обработчик расшифровки:
Сама процедура "РасшифроватьСтроку" может выглядеть следующим образом (как пример):
Копировать в буфер обменаПроцедура РасшифроватьСтроку(Элемент, Расшифровка, СтандартнаяОбработка) Если ТипЗнч(Расшифровка) = Тип("ДокументСсылка.ДоговорПродажи") Тогда СтандартнаяОбработка = Ложь; Отчет = Отчеты.АнализДоговора.Создать(); Отчет.Договор = Расшифровка; //заполняем реквизит отчета Отчет.Сформировать(ЭлементыФормы.ПолеТабличногоДокумента1); КонецЕсли; КонецПроцедуры
Примечание 1. В модуле приложения (аналог глобального модуля в версии 7.7) больше нет события ОбработкаЯчейкиТаблицы. Вся обработка расшифровок должна быть произведена в модуле формы, где располагается элемент управления "ПолеТабличногоДокумента".
Примечание 2. Событие "ОбработкаРасшифровки" возникает при щелчке на ячейке или рисунке, содержащих расшифровку. Не путайте его с событием "Выбор", возникающим для всех ячеек и рисунков при двойном щелчке мыши или нажатии клавиши Enter, причем, сначала возникает событие "Выбор", а потом "ОбработкаРасшифровки".
В 1С:Предприятии 8 появилась возможность группировать данные в отчете. Группировки могут быть горизонтальные и вертикальные, тогда слева и сверху появляются специальные маркеры, позволяющие пользователю разворачивать и сворачивать группы, как показано на следующем рисунке:
Самый простой способ добавить группировки в отчет — доверить эту задачу системе, тогда от программиста потребуются минимальные усилия. Необходимо всего лишь применить методы НачатьАвтоГруппировкуСтрок/НачатьАвтоГруппировкуКолонок и ЗакончитьАвтоГруппировкуСтрок/ЗакончитьАвтоГруппировкуКолонок, которые включают режим автоматической группировки строк или колонок соответственно. В этом режиме при вызове методов Вывести (для строк) и Присоединить (для колонок) указываются дополнительные параметры для группировки:
Вывести(<Таблица>, <Уровень>, <Имя группы>, <Открыта>)
Присоединить(<Таблица>, <Уровень>, <Имя группы>, <Открыта>)
При использовании группировок очень полезно установить свойство ячейки "АвтоОтступ" в какое-нибудь ненулевое значение, например, 5. Тогда система будет автоматически добавлять заданное количество пробелов слева текста ячейки, основываясь на текущем уровне группировки. В результате отчет приобретет удобный внешний вид для отображения иерархии данных.
Следующий пример выводит список товаров с группировками:
Копировать в буфер обменаТабДок = Новый ТабличныйДокумент; Макет = Справочники.Номенклатура.ПолучитьМакет("Каталог"); Область = Макет.ПолучитьОбласть("Строка"); Выборка = Справочники.Номенклатура.ВыбратьИерархически(); ТабДок.НачатьАвтоГруппировкуСтрок(); Пока Выборка.Следующий() Цикл Область.Параметры.Номенклатура = Выборка.Ссылка; ТабДок.Вывести(Область, Выборка.Ссылка.Уровень(), Выборка.Наименование, Истина); КонецЦикла; ТабДок.ЗакончитьАвтоГруппировкуСтрок(); ТабДок.Показать();
Ячейки табличного документа могут иметь примечания, тогда в правом верхнем углу ячейки выводится маленький красный треугольник. При наведении курсора мыши на ячейку примечание показывается во всплывающем окне:
Программная установка примечаний реализуется следующим образом:
Копировать в буфер обменаТабДок = ЭлементыФормы.ПолеТабличногоДокумента1; ТабДок.Очистить(); Макет = Справочники.Номенклатура.ПолучитьМакет("Каталог"); Выборка = Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл ОбластьЯчеекМакета = Макет.Область("ЯчейкаНаименование"); ОбластьЯчеекМакета.Примечание.Текст = Выборка.Ссылка.Комментарий; ОбластьТабДок = Макет.ПолучитьОбласть("Строка"); ОбластьТабДок.Параметры.Номенклатура = Выборка.Ссылка; ТабДок.Вывести(ОбластьТабДок); КонецЦикла;
Обратите внимание, что свойство "Примечание" у объекта "ОбластьЯчеекМакета" является объектом типа "Рисунок", а не простой строкой. Через этот объект можно редактировать внешний вид примечания, шрифт и цвет текста, фон, линии и т.д.