1С: Работа с расшифровками в отчетах
Расшифровка - это переменная произвольного типа (справочник, документ, структура и т.п.). Расшифровка очень удобна и используется в отчетах для расшифровки (вывода детальной информации) каких-либо показателей.
Я долго пользовался стандартной расшифровкой, но на днях я столкнулся с неприятной проблемой, но о ней позже, сначала опишу все возможные способы расшифровки:
1. Непосредственно присвоив области значение.
ЭлементыФормы.ПолеТабличногоДокумента1.Область(1,1).Расшифровка = "Текст расшифровки";
Данный вид расшифровки можно сказать полностью ручным, т.к. приходится знать в каком месте и с каким значением установить расшифровку. Мне ничего больше не подошло кроме этого метода, приходилось учитывать колонки и строки. Но в строках поджидала маленькая неприятность, необходимо было дополнительно учесть группировки в которых вывод расшифровки необходимо пропустить...
Расшифровка = Новый Структура; Расшифровка.Добавить("Контрагент", ""); Расшифровка.Добавить("Договор", ""); ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1; СчетчикОбласти = 4; // учитываем кол-во строк под шапку отчета ВыборкаГрупп = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам) Пока ВыборкаГрупп .Следующий Цикл СчетчикОбласти = СчетчикОбласти + 1; // пропускаем область, её займет группировка ЗаполнитьЗначенияСвойст(мГруппа.Параметры, ВыборкаГрупп); ТабДок.Вывести(мГруппа); Выборка = ВыборкаГрупп.Выбрать(); Пока Выборка.Следующий() Цикл СчетчикОбласти = СчетчикОбласти + 1; ЗаполнитьЗначенияСвойст(мСтрока.Параметры, Выборка); ТабДок.Вывести(мСтрока); ЗаполнитьЗначенияСвойст(Расшифровка, Выборка); ТабДок.Область(1,1).Расшифровка = Расшифровка; КонецЦикла; КонецЦикла;
В данном варианте без разницы что до установки расшифровки было выведено в ТабДок, это и есть одно из больших преимуществ данного метода! Рассмотрим другой вариант расшифровки...
2. Использовать параметр расшифровки и метод "Вывести".
Данный вид расшифровки можно назвать автоматическим, т.к. мы за ранее на макете указываем какого типа значение и где находится, расшифровка будет происходить самостоятельно, но в качестве значения расшифровки можно также передавать структуру:
Расшифровка = Новый Структура; Расшифровка.Добавить("Контрагент", ""); Расшифровка.Добавить("Договор", ""); ТабДок = ЭлементыФормы.ПолеТабличногоДокумента1; ВыборкаГрупп = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам) Пока ВыборкаГрупп .Следующий Цикл ЗаполнитьЗначенияСвойст(мГруппа.Параметры, ВыборкаГрупп); ТабДок.Вывести(мГруппа); Выборка = ВыборкаГрупп.Выбрать(); Пока Выборка.Следующий() Цикл ЗаполнитьЗначенияСвойст(мСтрока.Параметры, Выборка); мСтрока.Параметры.Контрагент = Структура; ТабДок.Вывести(мСтрока); КонецЦикла; КонецЦикла;
Правда для расшифровки структуры необходимо уже в процедуре "ОбработкаРасшифровки" научить программу что делать с этой структурой. Однако, все бы ничего (собственно сама проблема), но при данном подходе на сформированном отчете вместо значения "Контрагент" будет надпись "Структура". Расшифровать-то её можно, но то что вместо контрагента стала такая надпись, нисколько не радует, т.к. уже не понятно что это за контрагент...
Но все же, данный вариант имеет право на жизнь, например, когда нужно расшифровывать не ячейку, а строку, тогда мы можем в начале/конце таблицы вставить дополнительную колонку с данной расшифровкой, колонку не обрисовывать и в качестве её типа значения укажем, например, число. Получится что расшифровывается вся строка, а нашего поля и не видно, такой вариант будет намного легче реализовать нежели пойти первым методом...
- DrBlack's блог
- Добавить комментарий
- 4485 просмотров