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

11.08.16

Разработка - СКД

Что делать, если не работают расшифровки при программном формировании отчета на СКД? Ответ ниже.

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

Наименование Файл Версия Размер
РасшифровкиПрограммногоСКД
.epf 8,46Kb
27
.epf 8,46Kb 27 Скачать

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

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

Решение

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

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

&НаКлиенте
Перем ДанныеРасшифровки;

&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
	
	КонтрагентПриИзмененииНаСервере(ДанныеРасшифровки);		
	
КонецПроцедуры

&НаСервере
Процедура КонтрагентПриИзмененииНаСервере(ДанныеРасшифровки)
	
    ТабДок.Очистить();
	
	Если Контрагент.Ссылка.Пустая() Тогда
		 Возврат;
	КонецЕсли;
	 
	// Создаем СКД. Устанавливаем параметры
	СхемаКД = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
	
	Настройки  = СхемаКД.НастройкиПоУмолчанию;
	
	ПараметрКД = Настройки.ПараметрыДанных.Элементы.Найти("Контрагент");
	ПараметрКД.Значение = Контрагент;
	
    // Создаем Макет КД
    КомпоновщикМакетаКД = Новый КомпоновщикМакетаКомпоновкиДанных;
	ДанныеРасшифровки 	= Новый ДанныеРасшифровкиКомпоновкиДанных;
    МакетКД = КомпоновщикМакетаКД.Выполнить(СхемаКД, Настройки, ДанныеРасшифровки);
	
    // Создаем Процесор КД
    ПроцессорКД = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКД.Инициализировать(МакетКД,, ДанныеРасшифровки);
	
	// Выводим
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабДок);	
    ПроцессорВывода.НачатьВывод();
	ПроцессорВывода.Вывести(ПроцессорКД);
		
КонецПроцедуры

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

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

На этом все.

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

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 8000 руб.

02.09.2020    122367    673    389    

716

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

По выбранной схеме компоновки данных генерирует программный код, который генерирует СКД, аналогичную исходной схеме. Есть дополнительные инструменты для просмотра дерева схемы, сравнение исходной схемы и полученной по коду, а также сравнение изменений в сгенерированном коде для исходной схемы и для измененной.

3 стартмани

05.02.2024    4053    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2006    2    Yashazz    0    

29

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8170    20    John_d    25    

123

Использование менеджера временных таблиц в СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Рассмотрим еще не получивший широкого распространения способ работы с внешними данным в СКД. В процессе обсуждения работы с СКД выяснилось, что многие не знакомы со способом помещения туда временной таблицы, полученной предварительно. Статья будет полезна разработчикам, знакомым с программным созданием СКД.

05.12.2023    4663    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5815    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    6738    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Когда отчет надо разделить по страницам, это всегда проблема для разработчика. Поскольку в СКД нет стандартных вариантов, как это сделать. Нашел (на свой взгляд) самое простое и оптимальное решение.

01.09.2023    4533    KVIKS    15    

80
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. alwiz3 23.05.17 10:59 Сейчас в теме
Не взлетело
Прикрепленные файлы:
2. kotlovD 87 02.06.17 16:01 Сейчас в теме
(1) Да, сорри этот код можно выполнить в толстом клиенте упр. приложения. Я когда выкладывал статью делал пример как раз на базе. которая переходит на тонкие формы и там был период когда режим работы обычное приложение, а форма управляемая.
Тут самое главное смысл получения расшифровки по идентификатору...
3. b66 04.09.18 14:31 Сейчас в теме
На УФ надо положить "Данные расшифровки" во временное хранилище. Далее:

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Стркутра = Новый Структура("Расшифровка", Расшифровка);
Данные = Сервер(Стркутра);
ОткрытьЗначение(Данные);
КонецПроцедуры

Функция Сервер(Структура)

Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);

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

КонецФункции
Littleman; kotlovD; GonziK_KIV; PokerFace; +4 2 Ответить
4. a.chulkov@nrg-group.ru 04.10.18 15:01 Сейчас в теме
На форму добавить реквизит "ДанныеРасшифровки" с типом "Строка"


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

КонтрагентПриИзмененииНаСервере();

КонецПроцедуры

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

ТабДок.Очистить();

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

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

Настройки = СхемаКД.НастройкиПоУмолчанию;

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

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

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

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

КонецПроцедуры

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

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

КонецПроцедуры

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

Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);

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

КонецФункции
Прикрепленные файлы:
РеализацииПоКонтрагенту.epf
Littleman; place.ru; dr_eugeni; Xytras; John_d; ilego; InJey; Virsy; Pavel791; chemezov; HIVvich; OrcaMax; Gle; +13 Ответить
10. user1058740 28.01.20 14:42 Сейчас в теме
(4)

При помещении во временное хранилище следует указывать УИД, иначе после первого получения, данные из хранилища удаляются.
Дополнение:
ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновкиДанных,ЭтаФорма.УникальныйИдентификатор);
Littleman; Xytras; John_d; ilego; Virsy; Pavel791; HIVvich; OrcaMax; +8 Ответить
5. pavlo 08.11.18 08:16 Сейчас в теме
Откуда событие "РезультатОбработкаРасшифровки" если программно формируется отчет и делается программно
Результат = Новый ТабличныйДокумент;
///// передали все в результат и вернули
Результат.Показать(). ?
Есть решения рассшифровок тут?
Пользователь 1С; -Denton-; ReactoR; krlexa; +4 Ответить
6. -Denton- 15.05.19 12:48 Сейчас в теме
(5) делается через Макет в СКД, добавляется поле и указывается Параметр расшифровки
7. kalleka 47 26.06.19 19:35 Сейчас в теме
(6) https://its.1c.ru/db/metod8dev/content/1811/hdoc

Если кто придет через поиск, вот тут показано как добавить поле в макет
Cthulhu; cbhouse; +2 Ответить
8. VictorRGB2 13 28.06.19 19:35 Сейчас в теме
отчет без формы, используется общая форма отчета
отчет в конфигурации, использует данные конфигурации - расшифровка работает
отчет в расширении, использует данные расширения - расшифровка не работает (показывает циферки идентификаторы)

как вылечить? макет добавлять? не потеряется возможность пользовательской компоновки вида отчета?
да и добавлять макет как-то не хочется
9. wenzor 39 05.08.19 14:10 Сейчас в теме
(8)Нашли элегантное решение? Переносить макет в расширение действительно не хочется.
11. OrcaMax 14 27.03.20 11:06 Сейчас в теме
(5) Событие так называется потому, что табличный документ у автора назывался "Результат". Если у Вас табличный документ, куда выводятся результаты компоновки, называется "ТабДок" то и имя события скорее всего сгенерируется как "ТабДокОбработкаРасшифровки". Это стандартное событие табличного документа (ТабДок->Свойства->События->ОбработкаРасшифровки). Даже если делать программно, ни какой разницы нет, главное программно добавить событие "ОбработкаРасшифровки" и указать его обработчик в модуле, для реквизита формы "ТабДок" или "Результат" (всего лишь имя реквизита табличного документа) . Функция ПолучитьПоля() для элемента данных расшифровки вернет значение и если это ссылочный тип данных, то система сама выполнит действие расшифровки по умолчанию (обычно это открытие), но действие можно установить свое. Специально создавать макет с параметрами для расшифровки не обязательно, только если Вас интересует какое-то кастомное действие. Действия "по умолчанию" для полей в ДанныхРасшифровки можно посмотреть в коллекции Элементы.
12. tuefl 31.05.21 03:53 Сейчас в теме
очень много познавательных букв там где НеКНочиБудетПомянутПроцессорВыводаРезультатаКомпоновкиДанных­ВТабличныйДокумент
и вот так работает.

АдресРасшифровки это реквизит произвольной формы.


&НаСервере
Процедура ОбновитьМониторОтгрузкиНаСервере()
	ТабДокОтчета.Очистить();
	отчМонитор = Отчеты.МониторОтгрузки.Создать();
	ДанныеРасшифровки = "";
	отчМонитор.СкомпоноватьРезультат(ТабДокОтчета, ДанныеРасшифровки);
	АдресРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровки, УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ТабДокОтчетаОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
	СтандартнаяОбработка = Ложь;
	ОткрытьЗначение(ПолучитьРасшифровку(Расшифровка));
КонецПроцедуры

&НаСервере
Функция ПолучитьРасшифровку(Расшифровка)
	ДанныеРасшифровки = ПолучитьИзВременногоХранилища(АдресРасшифровки);
	значениеРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля().Получить(0).Значение;
	Возврат значениеРасшифровки;
КонецФункции
Показать
kirinalex; user1455510; +2 Ответить
13. palax 18.06.21 12:59 Сейчас в теме
Два раза расшифровать не получиться. Каждый раз необходимо переформировывать и только потом срабатываетрасшифровка и только один раз, далее снова надо переформировать.

Значение не является значением объектного типа (Элементы)
{ВнешняяОбработка.РеализацииПоКонтрагенту.Форма.Форма.Форма(59)}: ЭлементРасшифровки = Данные.Элементы[Расшифровка];
{ВнешняяОбработка.РеализацииПоКонтрагенту.Форма.Форма.Форма(48)}: Данные = Сервер(Расшифровка);
14. Prooa 39 07.09.21 11:16 Сейчас в теме
(13)ДанныеРасшифровкиОтчетов = ПоместитьВоВременноеХранилище(ДанныеРасшифровки,УникальныйИдентификатор);
Нужно указать УникальныйИдентификатор
vladimir-89; +1 Ответить
15. user1537276 27.04.23 16:51 Сейчас в теме
Всем Здравствуйте. У меня вопрос такого характера. Не могу понять как получить ДанныеРасшифровки в модуле УФ. На форме есть спец реквизит, ДанныеРасшифровки, с типом Строка, который формируется автоматом, при выборе в отчёте пункт Схема КД, при создании макета. Там, как я читал, должен быть указан адрес хранилища объекта. У меня он по факту имеет значение Пусто, (т.е. ""), с типом строка. Если я формирую отчёт не с помощью кнопки "Сформировать", а на форме прикрепляю кнопочку, и пишу код по выводу схемы, я получаю данные в отдельной таблице. Всё формируется так же, как и при обычном подходе ("Сформировать"). Но, нет расшифровок. И в модуле формы, в методах: КомпоновщикМакета.Выполнить( , , ДанныеРасшифровки)
и в методе: ПроцессорКомпоновкиДанных.Инициализировать( , , ДанныеРасшифровки) эти параметры не заполняются, а так и остаются строкой. Даже если я перед этим пытаюсь создать объект ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных. Всё равно, получается Тип просто Строка. Соответственно методы эти не работают, пишет что не находит данные. Хотя этот объект создаётся автоматически, если я пишу тот же код в модуле объекта в процедуре "ПриКомпоновкеРезультата". Получается что из модуля формы нельзя получить отчёт с расшифровками? Но, я смотрю примеры Хрусталёвой, "Разработка сложных отчётов", там упор именно делается на то, что именно из модуля формы мы формируем отчёт и расшифровки так же можно получить. правда у меня книга для обычных форм, а не УФ. Может кто-нибудь прояснить этот момент?
Оставьте свое сообщение