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

11.08.16

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

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
РасшифровкиПрограммногоСКД
.epf 8,46Kb
29 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

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

Решение

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

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

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

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

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

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

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

На этом все.

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    251199    1392    421    

1145

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5866    313    shapa_pro    25    

68

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    17467    ovetgana    112    

107

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    10189    krasnoshchekovpavel    5    

68

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    9486    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    16042    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    13697    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    10329    AlexeyPROSTO_1C    1    

32
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. alwiz3 23.05.17 10:59 Сейчас в теме
Не взлетело
Прикрепленные файлы:
2. kotlovD 89 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
rokhin; Littleman; place.ru; dr_eugeni; Xytras; John_d; ilego; InJey; Virsy; Pavel791; chemezov; HIVvich; OrcaMax; Gle; +14 Ответить
10. user1058740 28.01.20 14:42 Сейчас в теме
(4)

При помещении во временное хранилище следует указывать УИД, иначе после первого получения, данные из хранилища удаляются.
Дополнение:
ДанныеРасшифровки = ПоместитьВоВременноеХранилище(ДанныеРасшифровкиКомпоновкиДанных,ЭтаФорма.УникальныйИдентификатор);
rokhin; Littleman; Xytras; John_d; ilego; Virsy; Pavel791; HIVvich; OrcaMax; +9 Ответить
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

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

как вылечить? макет добавлять? не потеряется возможность пользовательской компоновки вида отчета?
да и добавлять макет как-то не хочется
9. wenzor 42 05.08.19 14:10 Сейчас в теме
(8)Нашли элегантное решение? Переносить макет в расширение действительно не хочется.
11. OrcaMax 15 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 40 07.09.21 11:16 Сейчас в теме
(13)ДанныеРасшифровкиОтчетов = ПоместитьВоВременноеХранилище(ДанныеРасшифровки,УникальныйИдентификатор);
Нужно указать УникальныйИдентификатор
vladimir-89; +1 Ответить
15. IgorKh_v 27.04.23 16:51 Сейчас в теме
Всем Здравствуйте. У меня вопрос такого характера. Не могу понять как получить ДанныеРасшифровки в модуле УФ. На форме есть спец реквизит, ДанныеРасшифровки, с типом Строка, который формируется автоматом, при выборе в отчёте пункт Схема КД, при создании макета. Там, как я читал, должен быть указан адрес хранилища объекта. У меня он по факту имеет значение Пусто, (т.е. ""), с типом строка. Если я формирую отчёт не с помощью кнопки "Сформировать", а на форме прикрепляю кнопочку, и пишу код по выводу схемы, я получаю данные в отдельной таблице. Всё формируется так же, как и при обычном подходе ("Сформировать"). Но, нет расшифровок. И в модуле формы, в методах: КомпоновщикМакета.Выполнить( , , ДанныеРасшифровки)
и в методе: ПроцессорКомпоновкиДанных.Инициализировать( , , ДанныеРасшифровки) эти параметры не заполняются, а так и остаются строкой. Даже если я перед этим пытаюсь создать объект ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных. Всё равно, получается Тип просто Строка. Соответственно методы эти не работают, пишет что не находит данные. Хотя этот объект создаётся автоматически, если я пишу тот же код в модуле объекта в процедуре "ПриКомпоновкеРезультата". Получается что из модуля формы нельзя получить отчёт с расшифровками? Но, я смотрю примеры Хрусталёвой, "Разработка сложных отчётов", там упор именно делается на то, что именно из модуля формы мы формируем отчёт и расшифровки так же можно получить. правда у меня книга для обычных форм, а не УФ. Может кто-нибудь прояснить этот момент?
Для отправки сообщения требуется регистрация/авторизация