Отчет скд не работает расшифровка

Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download

Сабж. Надо программно сформировать отчет на СКД.

Ок, лезем на любой ресурс, коих полно, копируем код, правим под свои нужды и вуаля! Отчет работает, только при попытке расшифровать выскакивает какое то окошко с цифрами 🙁 Что делать?

Решение

На самом деле в этом окошке нам сообщается идентификатор расшифровки компоновки данных. Имея этот идентификато и данные расшифровки, мы можем сделать все, что душе угодно.

Рассмотрю случай формирования СКД из обработки (см. в скрепке). Добавил макет СКД, на форму вывел два реквизита «Контрагент» и «ТабДок». Важно иметь доступ к данным расшифровки при обработке расшифровки табличного документа, поэтому добавим переменную, которую будет перебрасывать в процедуру программного формирования отчета. Ну и опишем саму процедуру обработки расшифровки.

Обработка расшифровки открывает значение, но вы можете прописать любое действие.

Скачать файлы

Специальные предложения

На УФ надо положить «Данные расшифровки» во временное хранилище. Далее:

Если ТипЗнч(Структура.Расшифровка) = Тип(«ИдентификаторРасшифровкиКомпоновкиДанных») тогда
ЭлементРасшифровки = Данные.Элементы[Структура.Расшифровка];
Если ТипЗнч(ЭлементРасшифровки) = Тип(«ЭлементРасшифровкиКомпоновкиДанныхПоля») Тогда
Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
Возврат Поле.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;

На форму добавить реквизит «ДанныеРасшифровки» с типом «Строка»

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)

&НаСервере
Процедура КонтрагентПриИзмененииНаСервере()

Если Контрагент.Ссылка.Пустая() Тогда
Возврат;
КонецЕсли;

// Создаем СКД. Устанавливаем параметры
СхемаКД = РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«Макет»);

ПараметрКД = Настройки.ПараметрыДанных.Элементы.Найти(«Контрагент»);
ПараметрКД.Значение = Контрагент;

// Создаем Макет КД
КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровкиКомпоновкиДанных = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКД, Настройки, ДанныеРасшифровкиКомпоновкиДанных);

// Создаем Процесор КД
ПроцессорКД = Новый ПроцессорКомпоновкиДанных;
ПроцессорКД.Инициализировать(МакетКД,, ДанныеРасшифровкиКомпоновкиДанных);

// Выводим
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.Вывести(ПроцессорКД);
ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновкиДанных);

&НаКлиенте
Процедура ТабДокОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
Данные = Сервер(Расшифровка);
ОткрытьЗначение(Данные);

&НаСервере
Функция Сервер(Расшифровка)

Если ТипЗнч(Расшифровка) = Тип(«ИдентификаторРасшифровкиКомпоновкиДанных») тогда
ЭлементРасшифровки = Данные.Элементы[Расшифровка];
Если ТипЗнч(ЭлементРасшифровки) = Тип(«ЭлементРасшифровкиКомпоновкиДанныхПоля») Тогда
Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
Возврат Поле.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;

Источник

Расшифровки при программном формировании отчета на СКД

Сабж. Надо программно сформировать отчет на СКД.

Ок, лезем на любой ресурс, коих полно, копируем код, правим под свои нужды и вуаля! Отчет работает, только при попытке расшифровать выскакивает какое то окошко с цифрами 🙁 Что делать?

Решение

На самом деле в этом окошке нам сообщается идентификатор расшифровки компоновки данных. Имея этот идентификато и данные расшифровки, мы можем сделать все, что душе угодно.

Рассмотрю случай формирования СКД из обработки (см. в скрепке). Добавил макет СКД, на форму вывел два реквизита «Контрагент» и «ТабДок». Важно иметь доступ к данным расшифровки при обработке расшифровки табличного документа, поэтому добавим переменную, которую будет перебрасывать в процедуру программного формирования отчета. Ну и опишем саму процедуру обработки расшифровки.

Обработка расшифровки открывает значение, но вы можете прописать любое действие.

Скачать файлы

Наименование Файл Версия Размер

Специальные предложения

На УФ надо положить «Данные расшифровки» во временное хранилище. Далее:

Если ТипЗнч(Структура.Расшифровка) = Тип(«ИдентификаторРасшифровкиКомпоновкиДанных») тогда
ЭлементРасшифровки = Данные.Элементы[Структура.Расшифровка];
Если ТипЗнч(ЭлементРасшифровки) = Тип(«ЭлементРасшифровкиКомпоновкиДанныхПоля») Тогда
Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
Возврат Поле.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;

На форму добавить реквизит «ДанныеРасшифровки» с типом «Строка»

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)

&НаСервере
Процедура КонтрагентПриИзмененииНаСервере()

Если Контрагент.Ссылка.Пустая() Тогда
Возврат;
КонецЕсли;

// Создаем СКД. Устанавливаем параметры
СхемаКД = РеквизитФормыВЗначение(«Объект»).ПолучитьМакет(«Макет»);

ПараметрКД = Настройки.ПараметрыДанных.Элементы.Найти(«Контрагент»);
ПараметрКД.Значение = Контрагент;

// Создаем Макет КД
КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных;
ДанныеРасшифровкиКомпоновкиДанных = Новый ДанныеРасшифровкиКомпоновкиДанных;
МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКД, Настройки, ДанныеРасшифровкиКомпоновкиДанных);

// Создаем Процесор КД
ПроцессорКД = Новый ПроцессорКомпоновкиДанных;
ПроцессорКД.Инициализировать(МакетКД,, ДанныеРасшифровкиКомпоновкиДанных);

// Выводим
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ТабДок);
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.Вывести(ПроцессорКД);
ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновкиДанных);

&НаКлиенте
Процедура ТабДокОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;
Данные = Сервер(Расшифровка);
ОткрытьЗначение(Данные);

&НаСервере
Функция Сервер(Расшифровка)

Если ТипЗнч(Расшифровка) = Тип(«ИдентификаторРасшифровкиКомпоновкиДанных») тогда
ЭлементРасшифровки = Данные.Элементы[Расшифровка];
Если ТипЗнч(ЭлементРасшифровки) = Тип(«ЭлементРасшифровкиКомпоновкиДанныхПоля») Тогда
Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
Возврат Поле.Значение;
КонецЦикла;
КонецЕсли;
КонецЕсли;

Источник

Расшифровка в СКД

Наименование Файл Версия Размер
Mokey 27.04.2011 15:40
Прочитано: 64169
Вопрос в следуущем:
Есть отчёт в СКД с собственной расшифровкой.
Открывает расшифровка новую форму (тоже на СКД) и компонуется
Код 1C v 8.х
все открывается и компонуется, но расшифровки не работают. Если я вставляю второй параметр — то в качестве расшифровки выводится на экран число (уровень расшифровки, я так понимаю). Если нажать штатную кнопку «Сформировать» ничего не меняя, то расшифровка начинает работать. Как заставить её работать сразу?
Yandex
Возможно, вас также заинтересует
E_Migachev 27.04.2011 18:02
Ответ № 1
(0) Mokey, если я тебя правильно понял, то: v8.x: Как сделать, чтобы при открытии отчет сразу Сформировался?
Mokey 28.04.2011 09:35
Ответ № 2
(1) E_Migachev, нет, он формируется, расшифровка не работает
E_Migachev 28.04.2011 11:22
Ответ № 3
(2) Mokey, Посмотри книгу Хрусталевой стр 260, там расписано как делается расшифровка
Mokey 28.04.2011 15:18
Ответ № 4
(3) E_Migachev, меня интересует вопрос, почему СкомпоноватьРезультат() не компонует расшифровку?
E_Migachev 28.04.2011 15:46
Ответ № 5
(4) Mokey, если все правильно указал — должен формировать!
Похоже что не понимает что ей скомпановывать *09
Mokey 28.04.2011 16:08
Ответ № 6
(5) E_Migachev, Там же всего два параметра — куда выводить и переменная ДанныеРасшифровки. Если оставить NULL, то расшифровка вообще не работает, если передать переменную — то работает расшифровка, но выводит идентификатор этой самой расшифровки (число). Если нажать штатную «Сформировать», то расшифровка начинает работать так, как положено. Переформулирую вопрос:
где взять данные расшифровки в таком варианте, который я описал выше?
E_Migachev 28.04.2011 17:26
Ответ № 7
Как описал ДанныеРасшифровки? код покажи
E_Migachev 28.04.2011 17:31
Ответ № 8
+(7) перед формированием расшифровки нужно ЗагрузитьНастройки
Mokey 28.04.2011 17:47
Ответ № 9
Код 1C v 8.х
Mokey 28.04.2011 17:53
Ответ № 10
а если полностью, то так выглядит:
Код 1C v 8.х
Mokey 28.04.2011 17:57
Ответ № 11
т.е. после условия Настройки<>Неопределено вызывается этот штатная расшифровка
E_Migachev 28.04.2011 18:01
Ответ № 12
Для реализации расшифровки отчетов, выполненных при помощи системы компоновки данных, в платформе реализован объект ОбработкаРасшифровкиКомпоновкиДанных, который позволяет сформировать настройки компоновки данных, которые можно использовать для формирования отчета — расшифровки.

В некоторых ситуациях использовать возможности объекта ОбработкаРасшифровкиКомпоновкиДанных не представляется возможным, и возникает необходимость программного получения значений полей, которые присутствовали в некоторой ячейке табличного документа, для которой можно получать расшифровку.
В данной статье описывается, каким образом устроен объект ДанныеРасшифровки и как его можно использовать для получения значений полей и полей группировок.
ВАЖНО!
Для того, чтобы при выводе отчета объект ДанныеРасшифровки был заполнен, следует его создать при компоновке макета и передать в процессор компоновки данных.
Для создания объекта ДанныеРасшифровки, при вызове метода Выполнить компоновщика макета, следует передать переменную, в которую требуется поместить созданный объект.
Пример:
Код 1C v 8.х
Для того, чтобы данные расшифровки заполнились при формировании результата, необходимо передать объект ДанныеРасшифровки в метод Инициализировать процессора компоновки данных.
Пример:
Код 1C v 8.х
Если используется метод объекта Отчет СкомпоноватьРезультат, то для заполнения данных расшифровки следует передать в метод переменную, в которую необходимо поместить данные расшифровки.
Пример:
Код 1C v 8.х
Если отчет формируется при помощи стандартной команды отчета Сформировать, то данные расшифровки помещаются в свойство расширения формы отчета ДанныеРасшифровки.

Объект ДанныеРасшифровки содержит настройки, для которых этот объект был сформирован (заполняются при генерации макета компоновки данных) и коллекции элементов расшифровки (заполняются при формировании результата).

Каждый элемент расшифровки имеет идентификатор (который и помещается в ячейку табличного документа — результата) и массив идентификаторов родительских элементов расшифровки. Имея идентификатор расшифровки из объекта ДанныеРасшифровки можно получить элемент расшифровки при помощи метода Получить или при помощи операции [].
Пример:
Код 1C v 8.х
Существуют два типа элементов расшифровки: ЭлементРасшифровкиКомпоновкиДанныхПоля и ЭлементРасшифровкиКомпоновкиДанныхГруппировка.

ЭлементРасшифровкиКомпоновкиДанныхПоля содержит список значений полей, которые присутствуют в элементе расшфровки. В каждом значении имеется указание того, для какого поля содержится значение (соответствует пути к данным поля в терминах настроек компоновки данных, например: Номенклатура.ОсновнойПоставщик), само значение поля, и указание того, что значение было получено для иерархической записи (имеет значение Истина, если значение было получено от иерархической записи).

ЭлементРасшифровкиКомпоновкиДанныхГруппировка содержит имя группировки, для которой был создан элемент (соответствует идентификатору группировки в настройках из данных расшифровки).

При компоновке результата процессор компоновки данных заполняет данные расшифровки следующим образом:
1. При выводе группировки помещает в данные расшифровки элемент типа ЭлементРасшифровкиКомпоновкиДанныхГруппировка, с указанием того, какая группировка выводится. Если выводится вложенная группировка, то в качестве идентификатора родительского элемента группировки будет использован идентификатор расшифровки от родительской группировки.

2. В качестве дочернего к элементу группировки выдает в данные расшифровки элемент типа ЭлементРасшифровкиКомпоновкиДанныхПоля, в который выдает значения полей, по которым осуществлялась группировка. Например, если группировка осуществлялась по полю Номенклатура.ОсновнойПоставщик, то в значениях полей будет находиться значение для этого поля. При этом, если группировка выполнялась по иерархии и в настоящий момент выдавалась иерархическая запись, то в значении поля группировки об этом будет сказано в свойстве Иерархия.

3. При выводе ячеек процессор компоновки получит из каждой ячейки список полей, которые нужно помещать в ее расшфровку и создаст в данных расшифровки для ячейки элемент типа ЭлементРасшифровкиКомпоновкиДанныхПоля, в который поместит значения полей. При этом родительским для нового элемента будет являться элемент, содержащий значения полей группировки, т.е. элемент, заполненный на втором шаге. Если выводился элемент для ресурсов на пересечении группировок кросс-таблицы, то у элемента будет установлено два родительских элемента — один от группировки — строки и один от группировки — колонки. Идентификатор вновь созданного элемента будет помещен в качестве значения расшифровки в ячейку результирующего табличного документа. Именно этот идентификатор придет в обработчик расшифровки, если пользователь потребует расшифровать в отчет в данной ячейке.

При обработке расшифровки, в обработчик поля табличного документа будет передаваться идентификатор расшифровки. По этому идентификатору из объекта данных расшифровки можно получить элемент расшифровки. В этом элементе будут находиться значения полей, которые предполагалось выдавать в качестве расшифровки в данной ячейке.

Если необходимо получать значения полей — группировок для текущего элемента, то следует рекурсивно получить все родительские элементы расшифровки и получить из них значения полей.

Mokey 28.04.2011 21:54
Ответ № 13
(12) E_Migachev, спасибо, но всё это я уже читал,
Если используется метод объекта Отчет СкомпоноватьРезультат, то для заполнения данных расшифровки следует передать в метод переменную, в которую необходимо поместить данные расшифровки.
Пример:
Код 1C v 8.х
СкомпоноватьРезультат(ЭлементыФормы.Результат, ДанныеРасшифровки);

меня вот тут как раз и интересует, откуда я возьму ДанныеРасшифровки?

E_Migachev 29.04.2011 14:46
Ответ № 14
(13) Mokey, Реализация расшифровки в Системе Компоновки Данных
Mokey 02.05.2011 21:17
Ответ № 15
(14) E_Migachev, это всё из одной оперы, вокруг да около, я в 10 ответе уже приводил кусок кода, где это реализовано. Как обработать текущую расшифровку — мне понятно, непонятно другое, как сформировать другую СКД так, чтобы в ней тоже расшифровка работала сразу.
Heinrich 14.03.2012 21:49
Ответ № 16
Доброго дня. Проблема та же: при формировании отчёта в расшифровке только унылые цифирьки. Нажимая «Сформировать» появляется расшифровка. Как быть, подскажите.
romanoff 24.05.2012 17:08
Ответ № 17
(16) Heinrich, (15) Mokey
Что только не перепробовал, но без «ОбработкиРасшифровки» в форме ни как не выходил каменный цветок.
задача проста. имеет только макет (или адрес полчения XML)
мне нужно Показать() Новый ТабличныйДокумент.

все оказалось весьма просто.
на каждое поле создаем макет, в поле параметр и параметрРасшифровки пишем один и тот же параметр (иначе он будет распознавать как параметр расшифровки и тогда . циверки). Далее выбираем нужное поле в описании параметра Ииии. видим что коварная желтаясистема подставляет Представление(Номенклатура). тупо ручками правим просто на «Номенклатура» и ..все ) далее мы видим не цифири, не строку с наименованием а открывшуюся форму. Изменено 24.05.12 17:11:26

Mokey 24.05.2012 17:50
Ответ № 18
(17) romanoff, лично я ничего не понял из вышеописанного
kirillova_nn 28.05.2012 16:01
Ответ № 19
Всем привет. Тоже занимаюсь сейчас данной проблемой.
К коду, описанному выше (10), добавила еще одну строку по загрузке ДанныхРасшифровки и вместо цифр теперь в отчете (который сам по себе уже расшифровка) появляется уже стандартная расшифровка.
Получилось вот что
.
Если Настройки<>Неопределено Тогда
Отчет = Отчеты.ОбороткаДляБухгалтерии.Создать();
Форма = Отчет.ПолучитьФорму();
Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
Отчет.СкомпоноватьРезультат(Форма.ЭлементыФормы[«Результат»], ДанныеРасшифровки);
// ДОБАВЛЕННАЯ СТРОКА
Форма .ДанныеРасшифровки = ДанныеРасшифровки;
// КОНЕЕЦ ДОБАВ СТРОКИ
Форма.Открыть();

Есть вероятность, что не те ДанныеРасшифровки я «засылаю» (только начинаю изучать СКД детально), но результат очень порадовал.

Может за это время решение еще кто-то нашел?

vasyak 19.02.2013 16:35
Ответ № 20
Народ, вы с бубном танцуете, когда достаточно задать себе вопрос: «А откуда взялась переменная ДанныеРасшифровки, которую вроде никто не объявлял?»
Святой Ctrl+F1 говорит, что это — расширение формы отчёта. Если намёк непонятен, то:

А вы вместо этого компонуете отчёт в созданной форме, а расшифровку оставляете в этой.
В итоге приз за успех в удалении гланд через *12 получает kirillova_nn.

andjei 20.03.2019 09:02
Ответ № 21

Если кому-то интересно.

Делал печатную форму документа через СКД, там соответственно нет формы, есть только макет.

Код который исправляет ситуацию:

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,Настройки,ДанныеРасшифровки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ТабДокумент); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

//Подмена расшифровки в макете Для к = 1 По ТабДокумент.ВысотаТаблицы Цикл Если ТабДокумент.Область(к,1).Расшифровка<>Неопределено Тогда ТабДокумент.Область(к,1,к,ТабДокумент.ШиринаТаблицы).Расшифровка=ДанныеРасшифровки.Элементы[ТабДокумент.Область(к,1).Расшифровка].ПолучитьПоля()[0].Значение; КонецЕсли; КонецЦикла;

Соответственно расшифровка берется из первой колонки и ставится на всю строку, в моём случае этого достаточно.

Источник

Читайте также:  Мини юсб не работает
Оцените статью