Вопрос в следуущем:
Есть отчёт в СКД с собственной расшифровкой.
Открывает расшифровка новую форму (тоже на СКД) и компонуется
все открывается и компонуется, но расшифровки не работают. Если я вставляю второй параметр - то в качестве расшифровки выводится на экран число (уровень расшифровки, я так понимаю). Если нажать штатную кнопку "Сформировать" ничего не меняя, то расшифровка начинает работать. Как заставить её работать сразу?
(5) E_Migachev, Там же всего два параметра - куда выводить и переменная ДанныеРасшифровки. Если оставить NULL, то расшифровка вообще не работает, если передать переменную - то работает расшифровка, но выводит идентификатор этой самой расшифровки (число). Если нажать штатную "Сформировать", то расшифровка начинает работать так, как положено. Переформулирую вопрос:
где взять данные расшифровки в таком варианте, который я описал выше?
Для реализации расшифровки отчетов, выполненных при помощи системы компоновки данных, в платформе реализован объект ОбработкаРасшифровкиКомпоновкиДанных, который позволяет сформировать настройки компоновки данных, которые можно использовать для формирования отчета - расшифровки.
В некоторых ситуациях использовать возможности объекта ОбработкаРасшифровкиКомпоновкиДанных не представляется возможным, и возникает необходимость программного получения значений полей, которые присутствовали в некоторой ячейке табличного документа, для которой можно получать расшифровку.
В данной статье описывается, каким образом устроен объект ДанныеРасшифровки и как его можно использовать для получения значений полей и полей группировок. ВАЖНО!
Для того, чтобы при выводе отчета объект ДанныеРасшифровки был заполнен, следует его создать при компоновке макета и передать в процессор компоновки данных.
Для создания объекта ДанныеРасшифровки, при вызове метода Выполнить компоновщика макета, следует передать переменную, в которую требуется поместить созданный объект.
Пример:
Для того, чтобы данные расшифровки заполнились при формировании результата, необходимо передать объект ДанныеРасшифровки в метод Инициализировать процессора компоновки данных.
Пример:
Если используется метод объекта Отчет СкомпоноватьРезультат, то для заполнения данных расшифровки следует передать в метод переменную, в которую необходимо поместить данные расшифровки.
Пример:
Если отчет формируется при помощи стандартной команды отчета Сформировать, то данные расшифровки помещаются в свойство расширения формы отчета ДанныеРасшифровки.
Объект ДанныеРасшифровки содержит настройки, для которых этот объект был сформирован (заполняются при генерации макета компоновки данных) и коллекции элементов расшифровки (заполняются при формировании результата).
Каждый элемент расшифровки имеет идентификатор (который и помещается в ячейку табличного документа - результата) и массив идентификаторов родительских элементов расшифровки. Имея идентификатор расшифровки из объекта ДанныеРасшифровки можно получить элемент расшифровки при помощи метода Получить или при помощи операции [].
Пример:
Существуют два типа элементов расшифровки: ЭлементРасшифровкиКомпоновкиДанныхПоля и ЭлементРасшифровкиКомпоновкиДанныхГруппировка.
ЭлементРасшифровкиКомпоновкиДанныхПоля содержит список значений полей, которые присутствуют в элементе расшфровки. В каждом значении имеется указание того, для какого поля содержится значение (соответствует пути к данным поля в терминах настроек компоновки данных, например: Номенклатура.ОсновнойПоставщик), само значение поля, и указание того, что значение было получено для иерархической записи (имеет значение Истина, если значение было получено от иерархической записи).
ЭлементРасшифровкиКомпоновкиДанныхГруппировка содержит имя группировки, для которой был создан элемент (соответствует идентификатору группировки в настройках из данных расшифровки).
При компоновке результата процессор компоновки данных заполняет данные расшифровки следующим образом:
1. При выводе группировки помещает в данные расшифровки элемент типа ЭлементРасшифровкиКомпоновкиДанныхГруппировка, с указанием того, какая группировка выводится. Если выводится вложенная группировка, то в качестве идентификатора родительского элемента группировки будет использован идентификатор расшифровки от родительской группировки.
2. В качестве дочернего к элементу группировки выдает в данные расшифровки элемент типа ЭлементРасшифровкиКомпоновкиДанныхПоля, в который выдает значения полей, по которым осуществлялась группировка. Например, если группировка осуществлялась по полю Номенклатура.ОсновнойПоставщик, то в значениях полей будет находиться значение для этого поля. При этом, если группировка выполнялась по иерархии и в настоящий момент выдавалась иерархическая запись, то в значении поля группировки об этом будет сказано в свойстве Иерархия.
3. При выводе ячеек процессор компоновки получит из каждой ячейки список полей, которые нужно помещать в ее расшфровку и создаст в данных расшифровки для ячейки элемент типа ЭлементРасшифровкиКомпоновкиДанныхПоля, в который поместит значения полей. При этом родительским для нового элемента будет являться элемент, содержащий значения полей группировки, т.е. элемент, заполненный на втором шаге. Если выводился элемент для ресурсов на пересечении группировок кросс-таблицы, то у элемента будет установлено два родительских элемента - один от группировки - строки и один от группировки - колонки. Идентификатор вновь созданного элемента будет помещен в качестве значения расшифровки в ячейку результирующего табличного документа. Именно этот идентификатор придет в обработчик расшифровки, если пользователь потребует расшифровать в отчет в данной ячейке.
Обработка расшифровки.
При обработке расшифровки, в обработчик поля табличного документа будет передаваться идентификатор расшифровки. По этому идентификатору из объекта данных расшифровки можно получить элемент расшифровки. В этом элементе будут находиться значения полей, которые предполагалось выдавать в качестве расшифровки в данной ячейке.
Если необходимо получать значения полей - группировок для текущего элемента, то следует рекурсивно получить все родительские элементы расшифровки и получить из них значения полей.
(12) E_Migachev, спасибо, но всё это я уже читал,
Если используется метод объекта Отчет СкомпоноватьРезультат, то для заполнения данных расшифровки следует передать в метод переменную, в которую необходимо поместить данные расшифровки.
Пример:
Код 1C v 8.х
СкомпоноватьРезультат(ЭлементыФормы.Результат, ДанныеРасшифровки);
меня вот тут как раз и интересует, откуда я возьму ДанныеРасшифровки?
(14) E_Migachev, это всё из одной оперы, вокруг да около, я в 10 ответе уже приводил кусок кода, где это реализовано. Как обработать текущую расшифровку - мне понятно, непонятно другое, как сформировать другую СКД так, чтобы в ней тоже расшифровка работала сразу...
Доброго дня. Проблема та же: при формировании отчёта в расшифровке только унылые цифирьки. Нажимая "Сформировать" появляется расшифровка. Как быть, подскажите...
(16) Heinrich, (15) Mokey
Что только не перепробовал, но без "ОбработкиРасшифровки" в форме ни как не выходил каменный цветок...
задача проста... имеет только макет (или адрес полчения XML)
мне нужно Показать() Новый ТабличныйДокумент.
все оказалось весьма просто.
на каждое поле создаем макет, в поле параметр и параметрРасшифровки пишем один и тот же параметр (иначе он будет распознавать как параметр расшифровки и тогда ...циверки). Далее выбираем нужное поле в описании параметра Ииии!!! видим что коварная желтаясистема подставляет Представление(Номенклатура)... тупо ручками правим просто на "Номенклатура" и ..все ) далее мы видим не цифири, не строку с наименованием а открывшуюся форму.Изменено 24.05.12 17:11:26
Всем привет. Тоже занимаюсь сейчас данной проблемой.
К коду, описанному выше (10), добавила еще одну строку по загрузке ДанныхРасшифровки и вместо цифр теперь в отчете (который сам по себе уже расшифровка) появляется уже стандартная расшифровка.
Получилось вот что
....
Если Настройки<>Неопределено Тогда
Отчет = Отчеты.ОбороткаДляБухгалтерии.Создать();
Форма = Отчет.ПолучитьФорму();
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
Отчет.СкомпоноватьРезультат(Форма.ЭлементыФормы["Результат"], ДанныеРасшифровки);
// ДОБАВЛЕННАЯ СТРОКА
Форма .ДанныеРасшифровки = ДанныеРасшифровки;
// КОНЕЕЦ ДОБАВ СТРОКИ
Форма.Открыть();
Иначе
...
КонецЕсли;
Есть вероятность, что не те ДанныеРасшифровки я "засылаю" (только начинаю изучать СКД детально), но результат очень порадовал.
Народ, вы с бубном танцуете, когда достаточно задать себе вопрос: "А откуда взялась переменная ДанныеРасшифровки, которую вроде никто не объявлял?"
Святой Ctrl+F1 говорит, что это - расширение формы отчёта. Если намёк непонятен, то:
Форма.ДанныеРасшифровки
А вы вместо этого компонуете отчёт в созданной форме, а расшифровку оставляете в этой.
В итоге приз за успех в удалении гланд через *12 получает kirillova_nn.
Делал печатную форму документа через СКД, там соответственно нет формы, есть только макет.
Код который исправляет ситуацию:
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ТабДокумент); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
//Подмена расшифровки в макете Для к = 1 По ТабДокумент.ВысотаТаблицы Цикл Если ТабДокумент.Область(к,1).Расшифровка<>Неопределено Тогда ТабДокумент.Область(к,1,к,ТабДокумент.ШиринаТаблицы).Расшифровка=ДанныеРасшифровки.Элементы[ТабДокумент.Область(к,1).Расшифровка].ПолучитьПоля()[0].Значение; КонецЕсли; КонецЦикла;
Соответственно расшифровка берется из первой колонки и ставится на всю строку, в моём случае этого достаточно.
Подсказка:Вы можете добавить любую страничку в Социальные закладки щелкнув по значку соцсетей (в вверху)