- •Тема: «Отчеты»
- •Основные особенности табличных документов
- •5.2 Макеты
- •5.3. Области
- •Именование областей
- •5.4. Основные методы (команды) формирования печатной формы
- •5.5. Событие Выбор
- •6.6. Параметры
- •5.7. Расшифровки
- •Замечание к выполнению лабораторной работы
- •5.8. Группировки
- •5. 9. Примечания
- •5. 10. Значения ячеек
- •5. 11. Рисунки
5.5. Событие Выбор
При двойном щелчке (или нажатии Enter) на ячейке табличного документа или рисунке возникает событие Выбор. Это же событие возникает при одинарном щелчке на гиперссылке. Программист может перехватить это событие с помощью процедуры-обработчика.
Замечание. Следует различать события Выбор и ОбработкаРасшифровки. Событие Выбор возникает при двойном щелчке (или нажатии Enter) на ячейке или рисунке, даже если у них нет расшифровки, тогда как событие ОбработкаРасшифровки возникает у ячеек или рисунков, содержащих расшифровку. Причем сначала возникает событие Выбор, а потом ОбработкаРасшифровки.
6.6. Параметры
Чтобы вывести в ячейку информацию из базы данных, нужно установить свойство Заполнение в значение «Параметр» или «Шаблон», как показано на следующем рисунке:
Если выбрано значение «Параметр», то затем указывается имя параметра, которое будет доступно в модуле через коллекцию Параметры объекта ТабличныйДокумент.
Если выбрано значение «Шаблон», то имена параметров указываются в самой ячейке в квадратных скобках, как, например, ячейка «Директор» в макете расходной накладной.
Замечание. В квадратных скобках строки-шаблона не может быть выражений на встроенном языке, как это допускалось в версии 7.7. При формировании отчета не учитывается контекст модуля. Текст программы на встроенном языке может быть только в программном модуле.
Рассмотрим, как заполняются параметры у объекта ТабличныйДокумент через его свойство-коллекцию Параметры. Следующий фрагмент демонстрирует задание параметров через это свойство:
//получим область как новый табличный документ
Область = Макет.ПолучитьОбласть("Заголовок");
//укажем параметры области
Область.Параметры.НомерДокумента = Номер;
Область.Параметры.От = Дата;
Область.Параметры.Кому = Контрагент;
ТабДок.Вывести(Область);
ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));
Область = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрСостава Из Состав Цикл
Область.Параметры.Заполнить(СтрСостава);
ТабДок.Вывести(Область);
КонецЦикла;
Область = Макет.ПолучитьОбласть("Подвал");
Область.Параметры.ИтогоКоличество= Состав.Итог("Количество");
Область.Параметры.ИтогоСумма = Состав.Итог("Сумма");
РегОтв = РегистрыСведений.ОтветственныеСотрудники;
Область.Параметры.Директор= РегОтв.ПолучитьПоследнее(Дата).Директор;
ТабДок.Вывести(Область);
Метод Заполнить позволяет в краткой форме присвоить значения всем параметрам. Соответствие устанавливается по именам параметров области и именам свойств переданного объекта.
5.7. Расшифровки
Система 1С:Предприятие 8 поддерживает механизм расшифровок, когда пользователь щелкает на строке или ячейке отчета и получает более детальный отчет, если, конечно, это предусмотрено разработчиком.
Расшифровки делятся на стандартные и нестандартные.
Стандартные расшифровки обрабатываются системой автоматически и не требуют дополнительных усилий от программиста, например:
• значения типа «число», «строка», «дата», «перечисление» будут выданы для просмотра;
• для документов будет открыта форма документа;
• для элементов справочника будет открыта форма элемента, а если справочник редактируется в списке, то курсор будет установлен на текущем элементе в форме списка.
Для обеспечения стандартной расшифровки необходимо:
в свойствах ячейки, которая нуждается в расшифровке, найти свойство "парам. расшифровки" и ввести имя переменной-ссылки на элемент справочника, форму элемента которого необходимо показать (Например "Расшифровка")
В тексте процедуры печати означить данную переменную. Пример такой процедуры:
Пример процедуры печати справочника
Процедура Печать(Элемент)
ТабДок = Новый ТабличныйДокумент;
Макет = Справочники.ОсновныеСредства.ПолучитьМакет("Печать");
Макет.Параметры.Расшифровка = Истина; // чтобы работала расшифровка
Секция = Макет.ПолучитьОбласть("Заголовок");
ТабДок.Вывести(Секция);
Секция = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Секция);
Выборка = Справочники.ОсновныеСредства.ВыбратьИерархически();
Пока Выборка.Следующий() = Истина Цикл
Объект = Выборка.ПолучитьОбъект();
Если Объект.ЭтоГруппа = Истина Тогда
Секция = Макет.ПолучитьОбласть("Группа");
Секция.Параметры.Код=Объект.Код;
Секция.Параметры.Наименование=Объект.Наименование;
ТабДок.Вывести(Секция);
Иначе
Секция = Макет.ПолучитьОбласть("Элемент");
Секция.Параметры.Код=Объект.Код;
Секция.Параметры.Расшифровка=Объект;
Секция.Параметры.Наименование=Объект.Наименование;
ТабДок.Вывести(Секция);
КонецЕсли;
КонецЦикла;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Истина;
ТабДок.ТолькоПросмотр = Истина; // только в данном режиме работает расшифровка!!!
ТабДок.ОтображатьЗаголовки = Ложь;
ТабДок.Показать();
КонецПроцедуры
Для выполнения нестандартной расшифровки предназначено событие ОбработкаРасшифровки.
Замечание. Событие ОбработкаРасшифровки можно обработать только, если табличный документ отображается в форме в элементе управления ПолеТабличногоДокумента, а не открывается в отдельном окне.
ТабДок = ЭлементыФормы.ПолеТабДок;
ТабДок.Очистить();
Ниже показан отчет, в форме которого располагается элемент управления ПолеТабличногоДокумента на закладке «Таблица»
Рассмотрим на примере, как организовать расшифровку строки. Допустим, необходимо при щелчке на строке выдавать список расходных накладных по данному товару. Это реализуется следующим образом. В форме располагается элемент управления ПолеТабличногоДокумента с именем «ТаблицаРезультат», в свойствах которого указывается процедура-обработчик события ОбработкаРасшифровки.
Замечание. В некоторых случаях бывает затруднительно выделить поле табличного документа, чтобы обратиться к его свойствам. Обычно это делается щелчком мыши на границе элемента управления, но это невозможно, когда граница не видна, например, сливается с границей панели. В этом случае необходимо выделить любую ячейку и нажать клавишу ESC, после чего табличный документ будет выделен. Затем нажмите Alt-Enter для редактирования его свойств.
Следующая процедура-обработчик события анализирует расшифровку, и, если это элемент справочника Номенклатура, то вызывается процедура РасшифроватьСтроку, а стандартная обработка расшифровки отключается:
Процедура тпРезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
Если
ТипЗнч(Расшифровка)=Тип("СправочникСсылка.Номенклатура") Тогда
//отключим стандартную обработку
СтандартнаяОбработка = Ложь;
НовыйТабДок = ФормаРаcшифровки.ЭлементыФормы.ТабДок;
РасшифробатьСтроку(НовыйТабДок, Расшифровка);
ФормаРасшифровки.Открыть();
КонецЕсли;
КонецПроцедуры
Обработку расшифровок у ячейки можно отключить, если задать свойство ИспользованиеРасшифровки в значение «Без обработки». Это же свойство позволяет распространить расшифровку ячейки на всю строку, если установить его в значение «Строка».
