Новичок новичку: самый простой способ сделать расшифровку в СКД (обычные\управляемые формы)

17.05.23

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

Рассказываю на примере, как наиболее просто сделать расшифровку в СКД

Здравствуйте.

Допустим, Вы сделали красивый и, ужас какой, нужный отчет, но до полного идеала не хватает маленького шажочка - нужно по щелчку ячейки отчета вывести дополнительные данные.

Это называется расшифровкой. Стандартно, расшифровка строится только для ссылочных данных: если в ячейке указан какой-то документ, то щелкнув по этой ячейке документ и откроется.

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

Однако, в 99% случаев задача перед программистом стоит такая: по щелчку мыши вывести дополнительную информацию. И все! 99% изученной информации Вам не потребуется.

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

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

В 99% случаях, данные выводятся в табличный документ.

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

При создании пользовательской формы отчета, система автоматически создает на ней элемент вывода данных. Как правило, это табличный документ с именем Результат:

 

простые формы обычные формы

У данного элемента есть событие Обработка расшифровки. Создайте событие, выбрав его:

 

 

Мы увидим следующий текст:

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
	// Вставить содержимое обработчика.
КонецПроцедуры

Комментарий нам не нужен, можете как оставить его так и удалить.

Прежде всего, нужно указать системе, что стандартное поведение расшифровки нас не устраивает, для этого вставим строку:

СтандартнаяОбработка = Ложь;

Если Вы теперь запустите свой отчет, то никакой расшифровки проводиться не будет. Даже стандартной. То есть мы отключили стандартное поведение, а из стандартных команд расшифровки осталась только "Открытие",  но так как и ее поведение мы еще не программировали, то и оно не работает.

Затем, следует запомнить выражение: ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0]

Именно здесь система хранить информацию о ячейке, по которой пользователь щелкнул мышью. Присвоив переменной данное выражение, мы получим переменную, состоящую из нескольких полей. Нас будут интересовать поля: Поле и  Значение.

Данные = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0];

Допустим, наш отчет имеет следующий вид:

 

 

Щелкнув по ячейке "1000", наша переменная Данные "получит информацию". Данные.Поле будет содержать "СуммаДокумента", а Данные.Значение будет содержать "1000". А вот если щелкнуть, по сотруднику Юмин КГ,  то Данные.Поле станет "Сотрудник", а Данные.Значение, будет содержать ссылку на элемент справочника Сотрудники - Юмина КГ. 

Но почему, в первом случае был просто текст, а во-втором - ссылка на сотрудника? Просто, в схеме компоновки данных отчета, я так указал именно эти типы полей:

 

 

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

Перейдем к практике.

Стандартно, данный отчет по щелчку на сотруднике должен открывать справочник сотрудника. Изменим поведение, чтобы открывался не сотрудник, а физическое лицо, которое привязано к этому сотруднику.

Не забываем отменить стандартное поведение расшифровки:

СтандартнаяОбработка = Ложь;

 Далее мы должны посмотреть, а не щелкнул ли пользователь по полю сотрудника, и если это так, то открыть физическое лицо:

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

Вот и все!

Теперь, давайте попробуем не ссылочный тип данных: выведем в текстовой документ сумму документа, если пользователь щелкает по сумме:

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

В итоге, вся процедура расшифровки получилась такой:

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

Для управляемых форм почти все тоже самое, отличие в том что, данные расшифровки не в памяти, а в хранилище, и их надо получить, кроме того, работа с расшифровкой в управляемых формах должна проводиться на сервере:

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

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

P.S. При усложнении схемы, а точнее ее настроек, значения полей расшифровки могут "теряться". Например, при введении группировок... Тогда следует получать расшифровку не прямым указанием: взять первое поле элемента расшифровки... Но это тема отдельной статьи. Главное новичку понять откуда что берется и только затем ставить перед собой более сложные задачи! 

На сегодня это все! Жду вопросов, критики и пожеланий.... 

Отчет СКД расшифровка

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    122178    670    389    

714

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

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

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

3 стартмани

05.02.2024    4042    25    obmailok    17    

63

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

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

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

1 стартмани

31.01.2024    2000    2    Yashazz    0    

29

СКД на JavaScript в 1С

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

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

2 стартмани

11.12.2023    8161    20    John_d    25    

123

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

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

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

05.12.2023    4657    PROSTO-1C    13    

61

Модель СКД

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

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

1 стартмани

15.11.2023    5807    15    kalyaka    5    

86

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

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

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

18.09.2023    6703    accounting_cons    5    

29

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

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

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

01.09.2023    4520    KVIKS    15    

80
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. laperuz 46 20.03.23 11:58 Сейчас в теме
Мне всегда казалось, что расшифровка, это детализация некоего значения по другим разрезам, не выведенным изначально в отчет, а оказывается расшифровка это просто открытие какого-то значения, вон оно как, Михалыч, оказывается, у новичков..

P.S. а в расшифровку, которая детализация, СКД умеет без единой строчки кода
Wern03; user1835472; olexi2012; Rafaraf; Yashazz; Award; Aili; +7 Ответить
2. user1312100 197 20.03.23 15:19 Сейчас в теме
(1)Вы это к чему? Статью следует удалить? Или исправить фрагмент? Выражайтесь конкретнее. Мы, новички, готовы к диалогу!
3. laperuz 46 20.03.23 19:55 Сейчас в теме
(2) Расшифровка это не то, что вы в публикации описали. Расшифровка это когда вы показываете пользователю из каких "частичек" сложилось то или иное значение отчёта(чаще всего числовое)
Например, у вас в отчёте вывелась общая задолженность организации перед сотрудниками в 100500 рублей, а вы хотите понять какому сотруднику вы сколько должны. Вы щелкаете 2 раза по циферке 100500 и у вас отображается окошко, в котором вы выбираете "Сотрудник". Открывается окно расшифровки отчёта и вы видите кучу строк, где есть сотрудник и суммы по каждому сотруднику.
Вот это называется расшифровка, и реализуется она с помощью СКД вообще без единой строчки кода.
И вы своим СтандартнаяОбработка = Ложь убиваете эту стандартную расшифровку, и вынуждены теперь для каждого поля описывать что должно произойти при попытке расшифровки поля.
А дальше вообще непонятно что происходит
Зачем писать какой-то код, чтобы по нажатию сотрудника открывалось физлицо? Это можно сделать опять же без кода с помощью средств СКД.

Открытие текстового документа с суммой документа - зачем? Просто показать что можно открывать какую-то форму при расшифровке?
Wern03; ixijixi; olexi2012; korppinen; zqzq; Yashazz; Award; Aili; +8 Ответить
4. user1312100 197 21.03.23 16:35 Сейчас в теме
Может кому-то и пригодится...Так стояла у меня задача...
IgorS; Kilka_v_Kepke; +2 Ответить
6. evogul 05.04.23 11:04 Сейчас в теме
(3)Буквально вчера занимался тем же, что автор написал. В Документе табличная часть выведена в виде табличного документа, чтобы можно было вертеть группировки по ней. Но при этом при нажатии на группировку выполнялись некие действия. Так что, для отчетов да, я с вами согласен, но бывают случаи, когда нужен и такой подход как описано в статье. Правда я пользовался статьей Чистова.
https://infostart.ru/public/551359/
91. 3dice 19 24.02.24 00:03 Сейчас в теме
(3) Откуда вы такие умники беретесь? Сам то что-нибудь написал?
92. laperuz 46 24.02.24 03:37 Сейчас в теме
(91)Нет, я вообще дворник и программировать не умею.
90. user1274184 11.08.23 15:57 Сейчас в теме
(1)Подскажите, можно это сделать без единой строчки кода, если по щелчку по любому столбцу необходимо открыть определенный ссылочный объект?
5. ХамитоваРайса 25.03.23 09:58 Сейчас в теме
Статья легко читается, всё понятно и разложено по полочкам. И легкоусваиваемая любым программистом 1С. И подталкивает к дальнейшему развитию кода. То, что по такому сценарию можно открыть любой разработанный отчет-детализацию данных, напрашивается само собой. Автор просто подсказал новичкам идею, куда двигаться.
7. user1537276 27.04.23 17:55 Сейчас в теме
Спасибо за подробное описание. У меня почему то совсем не реагирует событие ОбработкаРасшифровки. Вставил в процедуру сообщить(Элемент) и сообщить(Расшифровка) и отладчиком точки останова...Ни как. Но это если у меня код вывода схемы находится в форме. Для этого создаю на форме кнопочку и к ней "подвязываю" код. В этом случае формируется таблица и выводится результат. Я нажимаю на ячейки этой таблицы, "эмоций" ноль.
Но, если я такой же код формирую в модуле объекта через процедуру "ПриКомпоновкеРезультата", и нажимаю стандартную кнопку "Сформировать", то обработчик срабатывает, но если использовать Вашу строчку кода:
Данные = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля[0];
то СКД данные формирует, появляется моя таблица в стандартном поле, а не в табличном документе, который выводится из формы и появляется сообщение: "Значение не является значением объектного типа (Элементы)".

Если, возможно, подскажите, я что то не правильно делаю? Разве нельзя из модуля формы запускать код на процесс компоновки данных, почему у меня не отслеживается событие ОбработкаРасшифровки?
И, конечно, почему выдаётся эта ошибка? Это может как раз из-за того что у меня данные получены из модуля объекта?
10. user1312100 197 28.04.23 05:23 Сейчас в теме
(7)Здравствуйте.
Вопрос не совсем понял... Вот мой код при компоновке:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	////////////////////////////////////////////////////////////­//////////////////////////////////////////		

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

Возможно, он Вам поможет. Если нет, то объясните яснее

Если формировать отчет из модуля формы..., например при открытии формы это делается так:
Процедура ПриОткрытии()
	НачПериода = ТекущаяДата() - 60*60*24*7;
	КонПериода = ТекущаяДата();
	ДатаНач = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаНач");
	ДатаНач.Значение = НачалоДня(НачПериода);
	ДатаНач.Использование = Истина;
	ДатаКон = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ДатаКон");
	ДатаКон.Значение = КонецДня(КонПериода);
	ДатаКон.Использование = Истина;
		
	ДокументРезультат = ЭлементыФормы.Результат;
	ДокументРезультат.Очистить();
	ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
	СкомпоноватьРезультат(ДокументРезультат,ДанныеРасшифровки);	
КонецПроцедуры
Показать


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

Еще могу посоветовать попробовать разобраться на простом примере, и только потом переходить к решению Вашего вопроса.
8. user1537276 27.04.23 17:59 Сейчас в теме
Да, ещё дополнение к вопросу, форма у меня управляемая
11. user1312100 197 28.04.23 06:37 Сейчас в теме
(8)Для управляемых форм сформировать результат из формы отчета можно одной строчкой, например, при открытии:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	СкомпоноватьРезультат();
КонецПроцедуры
9. user1537276 27.04.23 18:12 Сейчас в теме
ДанныеРасшифровки, какой тип должен быть? У меня Строка, и значение что то вроде
"e1cib/tempstorage/acf9764e-0703-4b17-833e-dc9f178df227?seanceId=8f42302f-8c32-4e8e-accf-344807b86f83"
Расшифровка имеет значение 2, а тип "ИдентификаторРасшифровкиКомпоновкиДанных",
и уже выражение "ДанныеРасшифровки.Элементы[Расшифровка]" выдаёт в отладчике:
"{(1)}: Значение не является значением объектного типа (Элементы)"

Что здесь не так может быть?
12. user1312100 197 28.04.23 07:34 Сейчас в теме
(9)На управляшках так и есть! Вам нужно теперь на сервере из хранилища по данным расшифровки и расшифровке получить значение
13. user1312100 197 28.04.23 09:22 Сейчас в теме
(12)Примерно это должно выглядеть так:

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

&НаСервере
Функция ПолучитьРасшифровку(Расшифровка, ДанныеРасшифровки)
	//получим из хранилища данные
	ДанныеРасшифровкиОбъект = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
	//вернулись к строке вида: ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0]
	Данные = ДанныеРасшифровкиОбъект.Элементы[Расшифровка].ПолучитьПоля()[0];
	//переменную Данные в управляемых формах на клиент передавать нельзя, а потому, перобразуем ее в структуру
	СтруктураДанных = Новый Структура;
	СтруктураДанных.Вставить("Поле", Данные.Поле);
	СтруктураДанных.Вставить("Значение", Данные.Значение);
	//возвращаем
	Возврат СтруктураДанных;
КонецФункции
Показать
14. user1537276 28.04.23 17:17 Сейчас в теме
(10) Уважаемый автор, добрый вечер!
Ещё раз отдельное спасибо за подробное пояснение, это очень помогает разобраться и главное это двигает желание разобраться. Я так понимаю, у Вас толстый клиент, у меня тонкий. Заменил функцию «ОткрытьЗначание», на «ПоказатьЗначение» и всё получилось. Понял, что ДанныеРасшифровки берутся на сервере, как и Вы показали в специальной функции. Но, как всегда есть «НО»))).
Поясню ещё раз вопрос, с Вашего позволения.

Вы оперировали предопределённым обработчиком события «ПриКомпоновкеРезультата».
Эта процедура является процедурой модуля объекта и у Вас она присутствует, поэтому могу предположить, что она нужна. У меня же был вопрос, а можно обойтись без неё? Я так и не понял. И зачем нужна эта расшифровка тогда?
В чём её смысл?
Если я убираю эту процедуру (РезультатОбработкаРасшифровки) из модуля формы, которые Вы привели для УФорм, но заполняю процедуру (ПриКомпоновкеРезультата) в модуле объекта, и нажимаю кнопку «Сформировать», то ровным счётом ничего не меняется, ничего.
Что в первом, что и во втором случае я нажимая на выбранную ячейку сформированного отчёта получаю один и тот же результат.
К примеру, у меня выводится одно поле, которое я задал в СКД, Покупатель. Нажимаю на него два раза, проваливаюсь в карточку. Если я убираю код в модуле формы, то тоже проваливаюсь в карточку. Зачем тогда писать код в модуле формы, не пойму?

А вопрос был такой. Если я хочу на форме сделать свою кнопочку, не используя стандартную («Сформировать»), которая по умолчанию выдаётся, и захочу вывести отчёт в ТабДок отдельную таблицу, то:

1) Нужно ли писать процедуру компоновки и вывода данных в предопределённой процедуре (ПриКомпоновкеРезультата), если я пишу такой же код в модуле Формы

2) Можно ли при этом в этой таблице получить расшифровку, потому как я не смог расшифровать данные, при выводе отчёта в отдельном ТабДоке, даже написав процедуру (РезультатОбработкаРасшифровки).
Т.е. я нажимаю на ячейку, а результата нет. Не возникает событие ОбработкаРасшифровки, оно не активно в этом случае?
15. user1312100 197 29.04.23 10:31 Сейчас в теме
(14)Здравствуйте.
Два раза прочел Ваш текст, все равно не понял в чем проблема...
Процедуры: ПриКомпоновкеРезультата и РезультатОбработкаРасшифровки вообще никак не связаны друг с другом...Ну может, связаны через реквизит ДанныеРасшифровки, одна в него записывает данные, вторая читает... И как это делает одна и вторая совершенно не важно, стандартно или нет... для расшифровки Вам следует смотреть только процедуру расшифровки...
Если вы выводите результат не на форму, а в табличный документ, то у каждой ячейки табличного документа есть текст, значение и расшифровка...Как Вы будете заполнять эти свойства, не важно, можно в цикле перебором всех ячеек, можно через макет...

https://helpf.pro/faq83/view/1620.htm

Отказавшись от стандартного формирования отчета, Вы, по сути, превратили отчет в обработку! И тогда у Вас появляется куча путей решения сформировать Табличный документ...
0) просто нарисовать таблицу ячейку за ячейкой или через макет, как это делается в печатных формах
1) юзать, команду СкомпоноватьРезультат(); Чтобы результат при этом не был стандартным придется менять процедуру компоновки
2) вызвать не посредственно процедуру компоновки при нажатии на кнопку. Так как эта процедура в модуле объекта, то для ее доступности из модуля формы нужно будет сделать экспортной
3) не париться с процедурой компоновки, а перенести ее код в модуль формы
Главное! НЕ ЗАБЫВАЙТЕ УСТАНОВИТЬ ДЛЯ ТАБЛИЦЫ ТОЛЬКО ПРОСМОТР
16. user1312100 197 29.04.23 11:05 Сейчас в теме
(14)Вам так нужно?:
&НаКлиенте
Процедура Команда1(Команда)
	ТабДок = СформироватьТабДок();
	ТабДок.Показать();
КонецПроцедуры

&НаСервере
Функция СформироватьТабДок()
	ТабДок = Новый ТабличныйДокумент;
	ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
	ДР = Новый ДанныеРасшифровкиКомпоновкиДанных;
	//Макет компоновки 
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки(),ДР,,Тип("ГенераторМакетаКомпоновкиДанных"));
    
    //Компоновка данных 
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДР);
    
    //Вывод результата 
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ПроцессорВывода.УстановитьДокумент(ТабДок);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки, Истина);
	ТабДок.ТолькоПросмотр = Истина;
	//Здесь код, который сделает расшифровку. Он чужой, копировать не буду, смотрите по ссылке https://infostart.ru/public/639758/		
	Возврат ТабДок;	
КонецФункции
Показать
17. user1537276 01.05.23 12:47 Сейчас в теме
(16) День добрый.
Не получается, я понимаю, что я что то не доделываю, но где и как?
Хочу выложить свою обработку, в ней использовал Вашу функцию, ДанныеРасшифровки не работают, более того при
выполнении макета выдаёт ошибку 3. Может просмотрите бегло, всю структуру, и Вам сразу станет понятно, потому как обрывки кода уже не могут разъяснить ситуацию.
Процедура РезультатОбработкаРасшифровки вообще не проявляет ни каких откликов.
А вот если в модуле объекта заполнить ПриКомпоновкеРезультата, тогда и обработка расшифровки участвует при нажатии на поле выведенной таблицы. Могу этот вариант так же выложить, для сравнения.

Спасибо.
Прикрепленные файлы:
СхемаСтр224.erf
19. user1312100 197 02.05.23 04:24 Сейчас в теме
(17)Посмотрел. стало еще непонятнее... Я даже не могу понять, что Вы хотите получить.

У Вас на форме 2 кнопки: Сформировать, ПечатьДок... Зачем вторая, если есть первая? Вторая - чтобы вывести тоже самое, что на форме, но только в отдельный в табличный документ или вывести в табличный документ вообще что-то другое? Если тоже самое, то зачем проводить вычисления в ПечатьДокНаСервере(), если что-то иное, то не проще было сделать еще одну схему компоновки и по нажатию на ПечатьДок брать не основную, а дополнительную?

Я проверить работу отчета не могу, так как нет Вашей базы...У Вас отчет то работает по кнопке сформировать? Вы делаете схему отчета с набором данных объект. По кнопке сформировать, подразумевается, что 1с получит данные при компоновке. А компоновки у Вас нет! Она располагается в модуле объекта, а модуль отчета у Вас чист!

Или Вам кнопка Сформировать вообще не нужна, и Вы хотите сделать, как в примере https://its.1c.ru/db/pubcomplexreports#content:65:hdoc ?
21. user1312100 197 02.05.23 06:42 Сейчас в теме
(17)Вот Вам 3 варианта:
Прикрепленные файлы:
ПростойОтчетПоДокументу.erf
18. user1537276 01.05.23 15:56 Сейчас в теме
(16) Прикрепляю фрагмент исполнения кода. Когда нажимаю кнопку "Печать Док", то результат формируется на закладке "Таблица". точно такой же результат и на закладке "Схема стр 224". Но он не активный, пишется что нужно формировать отчёт, т.е. нажать кнопку "Сформировать". Я ещё сделал событие для формы Выбор. В закладке "Таблица", опять ни каких откликов. Если я нажимаю на закладке "Схема стр 224" отклик есть. Я совсем запутался. Что мне выдаёт на закладке "Таблица", почему нет откликов на события нажатия мыши. Она вообще там может быть или нет? Может я зря пытаюсь там его получить?.
Прикрепленные файлы:
20. user1312100 197 02.05.23 05:18 Сейчас в теме
(18)
&НаСервере
Функция ВыполнитьПечатьДокВТаблицу(Ссылка)
    ТабДок = Новый ТабличныйДокумент;
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
    ДР = Новый ДанныеРасшифровкиКомпоновкиДанных;
	
    //настройки
	Настройки = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
	ПараметрСсылка = Настройки.ПараметрыДанных.Элементы.Найти("Ссылка");
	ПараметрСсылка.Значение = Ссылка;
    ПараметрСсылка.Использование = Истина;
	
	//Макет компоновки 
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, Настройки,ДР,,Тип("ГенераторМакетаКомпоновкиДанных"));
    
    //Компоновка данных 
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДР);
    
    //Вывод результата 
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ПроцессорВывода.УстановитьДокумент(ТабДок);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    ТабДок.ТолькоПросмотр = Истина;
    //Здесь код, который сделает расшифровку. Он чужой, копировать не буду, смотрите по ссылке https://infostart.ru/public/639758/        
    Возврат ТабДок;    
КонецФункции

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

&НаКлиенте
Процедура ПечатьДокНаФорму(Команда)
	Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;
	Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;
	ВыполнитьПечатьДокНаФорму(Документ);	
КонецПроцедуры

&НаКлиенте
Процедура ПечатьДокВТаблицу(Команда)
	ТабДок = ВыполнитьПечатьДокВТаблицу(Документ);
    ТабДок.Показать();
КонецПроцедуры
Показать
Прикрепленные файлы:
ПростойОтчетПоДокументу.erf
22. user1312100 197 02.05.23 09:10 Сейчас в теме
(18)Чтобы убрать сообщение о необходимости формировать отчет вставьте строки:
Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;
Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;

Вот 4 варианта:
Прикрепленные файлы:
ПростойОтчетПоДокументу.erf
23. user1537276 02.05.23 11:42 Сейчас в теме
(19) Спасибо за отклик. Код посмотрю, поиграюсь, потом напишу ответ, что удалось достичь.

Что я хотел. Есть база. Я делаю внешний отчёт. Получаю данные, к примеру, с какого нибудь документа. Хочу сделать формирование отчёта по своей кнопке, пусть это будет ПечатьДок.
Я хотел узнать, можно ли так делать? Будет ли это работать? Можно ли при этом получить расшифровки?. Потому как при реализации столкнулся с определёнными трудностями, о которых писал - не получаю расшифровки, нет ни какой реакции на мои действия с сформированным табдоком.
24. user1312100 197 02.05.23 11:53 Сейчас в теме
(23)Да я ж не это спрашивал! По кнопке своей формировать отчет можно! Вопрос КУДА? От цели будет зависеть код... Вывод на форму и в документ он разный, так как у одного есть модуль, события, элементы, а у второго нет!
Попробуйте прочитать статьи других авторов, возможно их стиль будет Вам более понятен. Начните с https://infostart.ru/1c/articles/1339226/ Там про расшифровку тоже неплохо написано
25. user1537276 02.05.23 12:27 Сейчас в теме
(24) спасибо, прочту обязательно.
Потому как я не совсем понимаю суть, как Вы пишите на форму или в документ... В этом наверно и загвоздка.
26. user1312100 197 02.05.23 15:09 Сейчас в теме
(25)🤦‍♂️
Прикрепленные файлы:
27. user1537276 02.05.23 16:01 Сейчас в теме
(26) Теперь совсем запутался.
Я думал что ярлык "Таблица" как раз показывает Табличный Документ "Результат", который создан автоматически при добавлении Формы отчёта во внешний отчёт. Потому как я задаю строчкой кода ПроцессорВывода.УстановитьДокумент(Результат) , в функции СформироватьОтчёт(ПараметрДанных). А Результат это поле ТабДока в Форме (элемент Формы).

А ярлык "СхемаСтр224" показывает Табличный Документ, который автоматом, без моего кода должен формироваться системой, на основе Схемы, которую я создал.

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

Т.е. этот отдельный ТабДок, по Вашей стрелке справа, как раз формируется с формы???
28. user1312100 197 02.05.23 16:19 Сейчас в теме
(27)Компоновать отчет в отдельный табличный документ НЕ принято!!!!
Стандартно результат должен выводиться на форму отчета!!! Указывайте в процессор вывода не табличный документ, а элемент на форме! Желательно элемент на форме перед этим очищать...
Выводить отчет через процессор - это тоже применимо только в крайних случаях, когда без этого не обойтись никак, в том числе и при нажатии дополнительных кнопок...Для этого придумали процедуру СкомпоноватьРезультат();
29. user1537276 02.05.23 16:41 Сейчас в теме
(26) Возьму паузу, подумаю, пока каша у меня. Учусь по Хрусталёвой ("Разработка сложных отчётов") там описаны расшифровки и они у меня не получаются. Почитаю Ваши рекомендованные статьи ещё, может что то прояснится. Пока огромное спасибо, обязательно отпишусь, разобрался или нет)))
30. user1537276 02.05.23 18:25 Сейчас в теме
(28) Всё таки напишу ещё один момент. Сейчас, просмотрел предыдущие отчёты, которые я делал по книге Хрусталёвой. Вот пример, есть отчёт, набор данных запрос, потом добавляется форма и в процедуре ПриСозданииНаСервере() пишется код.
Схема получается из макета этого же отчёта, настройки отдельной процедурой добавляются и отдельной процедурой формируется отчёт, в котором после инициализации есть вот такие строки:
Результат.Очистить();
	ДокументРезультат = Результат;
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

Всё как Вы описали - очищение и вывод в элемент формы.
Открываю отчёт, он сразу появляется, без нажатия кнопки "Сформировать", а иных кнопок и нет.
Но, возможности расшифровок, упорядочивания, группировок нет. Т.е. как как будто отдельный ТабДок.
Теперь я нажимаю сформировать и всё это появляется, правой клавишей мышки, пожалуйста, все ресурсы СКД доступны к расшифровке.
Вот мне это не понятно??? Так и должно быть? Или что то не так?
31. user1312100 197 03.05.23 01:18 Сейчас в теме
(30)
У формы есть событие при открытии...Если в это событие написать код формирования отчета, то при открытии отчет сформируется без нажатия кнопки
32. user1312100 197 03.05.23 04:15 Сейчас в теме
Но на клиенте формировать результат нельзя, это делается на сервере. Да, можно в процедуре при открытии вызвать серверную функцию и там сформировать результат, но проще воспользоваться процедурой при создании на сервере, которая выполняется до открытия открытия формы и в нее передается уже скомпонованный результат.

Но так как формы еще нет, то все параметры отчета нужно заполнить программно, а не тыкая мышкой в кнопки и настройки...

После того как отчет открылся, Вы можете уже менять настройки и формировать отчет уже с новыми настройками.

Что не понятно?
35. user1312100 197 04.05.23 04:41 Сейчас в теме
(32)тут есть маленький нюанс - если формировать отчет при открытии, форма поймет что отчет сформирован и не будет просить нажать кнопку сформировать, если это делать при создании на сервере, придется программно отключать вывод этого сообщения. Как это сделать я писал выше...
33. user1537276 03.05.23 18:24 Сейчас в теме
(32) Не совсем понятно. Вернее понятно, что нужно, что то где то изменить для УФорм на тонком клиенте. Взял базу с толстым клиентом, обычные формы. Сделал такой же отчёт, с таким же кодом. Всё получилось, так как приведено в учебнике. Добавил код для расшифровки, тоже всё получилось. На тонком клиенте расшифровка не получается. Выделил эти четыре строчки кода. Если есть возможность посмотрите, помогите разобраться, файл прикрепляю, там на первом листе, код, который работает в обоих случаях, а на втором не получается на УФормах.

Спасибо.
Прикрепленные файлы:
ОбычныеИУФормыРазныеКлиенты.xlsx
34. user1312100 197 04.05.23 01:16 Сейчас в теме
(33) Вы забываете, что я тоже новичок! Нюансы тонкого и толстого клиентов я не знаю...
36. user1312100 197 04.05.23 09:08 Сейчас в теме
Вот Вам пример, как сделать формирование отчета при открытии на управляшках. Тут и база и отчет!
Прикрепленные файлы:
БазаПлюсОтчет.zip
37. user1537276 04.05.23 15:32 Сейчас в теме
(36) Пример скачал, смотрю. Спасибо большое. Изучу.
38. user1537276 04.05.23 15:35 Сейчас в теме
(36) Это тот код, который Вы уже присылали, только с базой, спб
39. user1312100 197 04.05.23 16:19 Сейчас в теме
Вижу изучили, но не до конца...Смотрите код при открытии и на тонком клиенте
40. user1537276 04.05.23 16:33 Сейчас в теме
(36) Я вижу сейчас проблему в том, что на толстом клиенте объект ДанныеРасшифровки есть, а при том же коде на тонком, его нет, тип просто Строка, вот из-за этого и проблема.
41. user1537276 04.05.23 16:37 Сейчас в теме
(39) И в Вашем примере, перед получением этого объекта я вижу всегда строку:
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
Не пойму, так ли это? У меня не работает этот трюк.
44. user1312100 197 04.05.23 18:34 Сейчас в теме
(41)Для примера "при открытии" этот метод не используется!
42. user1537276 04.05.23 16:58 Сейчас в теме
(39) Странно, как то. Не получаю объект ДанныеРасшифровки в модуле формы, тип строка выдаёт. Сделал в модуле объекта, получается, как надо, объект типа ДанныеРасшифровкиКомпоновкиДанных???
43. user1312100 197 04.05.23 18:32 Сейчас в теме
Потому что на управляшках с данными расшифровки работа ведется на сервере. А на клиенте это "ссылка" на эти данные
45. user1537276 05.05.23 10:11 Сейчас в теме
(43) Так я всё же делаю не сервере, если Вы открывали мой файлик в экселе, где я сравнивал тонкий и толстый клиент, то там видно это???
46. user1537276 05.05.23 13:31 Сейчас в теме
Нашёл пример в инете, когда разбирался когда в качестве набора данных используется не запрос, а таблица значений. Он самый простой и рабочий.
Сейчас я хочу его использовать для попытки выяснить о объекте ДанныеРасшифровки. В статье автора расшифровок не было. Потом я пытаюсь добавить и у меня получается очень интересная ситуация. Я думаю Вам, как новичку, тоже будет это интересно, проверить.
Привожу первоначальный код:

НаКлиенте
Процедура Команда1(Команда)
	Команда1НаСервере().Показать();
	
КонецПроцедуры

&НаСервере
Функция Команда1НаСервере()
	СтандартнаяОбработка = Ложь;
	ТЗВывод = Новый ТаблицаЗначений;
	ТЗВывод.Колонки.Добавить("Автомобиль");
	ТЗВывод.Колонки.Добавить("Количество");
	ТЗВывод.Колонки.Добавить("Сумма"); 
	НоваяСтрока = ТЗВывод.Добавить();
	НоваяСтрока.Автомобиль = "ВАЗ";
	НоваяСтрока.Количество = 10;
	НоваяСтрока.Сумма = 500;
	НоваяСтрока = ТЗВывод.Добавить();
	НоваяСтрока.Автомобиль = "Мерс";
	НоваяСтрока.Количество = 3;
	НоваяСтрока.Сумма = 1500;
	НоваяСтрока = ТЗВывод.Добавить();
	НоваяСтрока.Автомобиль = "Шкода";
	НоваяСтрока.Количество = 5;
	НоваяСтрока.Сумма = 900;
	
	НашМакет = РеквизитФормыВЗначение("Отчет");
	СКД = НашМакет.ПолучитьМакет("СКД");
	Настройки = СКД.НастройкиПоУмолчанию; 
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки);
	ВнешнийНаборДанных = Новый Структура("ПримерТаблицыЗначений", ТЗВывод);
	ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных);
	//Результат = Новый ТабличныйДокумент; //можно и без этой строчки
	Результат.Очистить();
	ПроцесорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцесорВывода.УстановитьДокумент(Результат);
	ПроцесорВывода.Вывести(ПроцессорКомпоновкиДанных);
	Результат.ОтображатьСетку = Ложь;
	Результат.ОтображатьЗаголовки = Ложь;
	Возврат Результат;
	
КонецФункции
Показать
47. user1537276 05.05.23 13:40 Сейчас в теме
Всё работает. При нажатии на Кнопка1 выводится Таблица без расшифровок. Если я после этого на кнопку "Сформировать" расшифровки появляются.
Приведу код, что бы можно было подключить и проверить. Ни каких данных первоначальных не надо, просто подключай и всё.
Кстати я этот код склеял на просторах инета, к сожалению, у кого не помню, код не мой, но автору ОГРОМНОЕ СПАСИБО!!!
Помог мне разобраться.
Прикрепленные файлы:
СхемаПримерВнешНаборДанныхТаблица_Первоначально.erf
48. user1537276 05.05.23 13:53 Сейчас в теме
теперь я хочу добавить расшифровки. Если я вставляю строчку кода:

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

перед строкой:
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;


то при нажатии на Кнопка1 таблица в отдельном окне формируется, а при нажатии на "Сформировать", выдаётся сообщение:
Неправильный путь к файлу 'ДанныеРасшифровкиКомпоновкиДанных'
Это так, просто наблюдение.
Если я пытаюсь вставить ДанныеРасшифровки в метод Выполнить и Инициализировать то при нажатии Кнопка1 выдаётся ошибка:
Несоответствие типов (параметр номер '3')
Привожу участок кода:
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных; 	
	    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	    МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, ДанныеРасшифровки);
	    ВнешнийНаборДанных = Новый Структура("ПримерТаблицыЗначений", ТЗВывод);
	    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
	    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешнийНаборДанных, ДанныеРасшифровки);
49. user1537276 05.05.23 14:18 Сейчас в теме
(44) А почему такое сообщение выводится?!
Потому что строка
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

формирует не объект, который должен передаться в эти два метода, а просто имеет тип Строка. ПОЧЕМУ??? Ни как не могу этого понять.
Порылся в инете, приводят код, который получает данные из временного хранилища:
Данные = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);


Вставил его в функция и действительно получился в переменной Данные нужный объект,
НО только после того, когда нажал кнопку "Сформировать". Только после этого.
Если сразу нажать кнопку Команда1, выдаётся сообщение что несоответствие параметра1.
И в этом случае ДанныеРасшифровка имеет значение "", соттветственно из хранилища брать нечего.
52. user1312100 197 05.05.23 16:42 Сейчас в теме
Ой каша в голове...

В изначальном коде по Команда1 нет расшифровки, потому что она не определяется, не вычисляется, не выводится, про нее просто забыли...

Чтобы ее добавить нужно ввести переменную и писать в нее расшифровку.

Так как переменная ДанныеРасшифровки УЖЕ занята и используется для ДРУГОГО, то ее использовать для расшифровки нельзя!!!! Придумайте ЛЮБОЕ другое не занятое, не системное имя!

В итоге надо добавить в кнопку строку до макета компоновки:
ДанныеРасшиф = Новый ДанныеРасшифровкиКомпоновкиДанных;
И изменить строку на:
МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, Настройки, ДанныеРасшиф);
50. user1537276 05.05.23 14:29 Сейчас в теме
Приведу второй вариант.
Кстати, при этом варианте, таблица формируется, только после формирования отчёта, без него как я уже говорил выдаёт несоответствие типов 3, но всё равно расшифровки нет, так и должно быть?

Т.е. вопрос открытый и совсем не понятный...
Прикрепленные файлы:
СхемаПримерВнешНаборДанныхТаблица_С_Расшифровкой.erf
53. user1312100 197 05.05.23 16:57 Сейчас в теме
Ужас!

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

Эта строка будет работать если ДанныеРасшифровки вычислялись!!!!!!

Как Вы можете ДанныеРасшифровки получать, если до этого в коде Команды1 нет ни слова о ДанныеРасшифровки?!

А так как в модуле ПриКомпоновкеРезультата идет вычисление ДанныеРасшифровки , то естественно после запуска стандартной команды формирования, эти данные на сервере есть и ошибки не будет!

И последнее:

Возврат Результат; - это зачем? Вы результат получили, на форме он отобразился в поле результат...Зачем Вы его возвращаете дополнительно в виде таблицы, да потом еще используете метод показать()?

Вы дополнительно открываете окно с тем же результатом, только в виде таблицы! Причем расшифровка работать не будет, так как Вы не прочитали мой совет, о том что для расшифровки таблиц, следует их делать только для чтения....
51. user1537276 05.05.23 15:27 Сейчас в теме
(51) К сожалению, обнаружил большую не точность. У меня оказывается в этом файле заполнена процедура модуля объекта ПриКомпоновкеРезультата. Если оттуда убрать код, вообще не работает тот файл который с Расшифровкой.
Оно и понятно, откуда этой расшифровки взяться. Только не понятно, как её достать без заполнения предопределённой процедуры.

Это если соблюсти Вашу логику, то надо добавить Реквизит, типа ТаблицаЗначений. Это будет аналог Вашего запроса для получения документа, и передать в качестве ссылки в параметр компоновки и затем уже вызвать метод СкомпоноватьРезультат. А он является аналогом предопределённой процедуры ПриКомпоновкеРезультата для модуля формы?
Потому как после этого появляется форма типа отчёт, а не таблица, поэтому и формируется только после этого объект ДанныеРасшифровки, который уже можно вытащить из хранилища?

Неужели иначе ни как?
54. user1312100 197 05.05.23 17:03 Сейчас в теме
(51)Нененеееее...Вообще не моя логика....
Для расшифровки по кнопке, без ухода из модуля формы в модуль объекта не нужно никаких реквизитов...Реквизиты нужны для передачи данных из одних модулей в другие, Вы в пределах одного модуля можете просто создать переменную и использовать ее: см (52)
55. user1537276 05.05.23 17:57 Сейчас в теме
(53) Ой, Вы правы, каша не то слово. Не пойму, а как мне получить форму эту? Ну ни как не выходит. Показать() работает на клиенте. Я передаю на клиент с сервера возврат функции - Результат. Если будет процедура, а не функция, пишет нельзя так. А что мне передавать тогда?
Нажимаю Кнопка1 и вижу таблицу. А если нажимаю сформировать, то пишет мне ошибку: Не найден внешний набор данных: "ПримерТаблицыЗначений".
Ну вот как это сделать, как изменить этот вариант, к примеру (высылаю пример, там я добавил Ваши замечания по поводу только чтения, так ведь нужно?
Прикрепленные файлы:
СхемаПримерВнешНаборДанныхТаблица_Первоначально.erf
56. user1312100 197 05.05.23 18:18 Сейчас в теме
(55) Я же Вам написал как, смотрите 52 сообщение!
Прикрепленные файлы:
СхемаПримерВнешНаборДанныхТаблица_Первоначально.erf
57. user1537276 05.05.23 18:24 Сейчас в теме
(56) Я же не делаю в этом примере расшифровок, я о другом, как сделать так как Вы говорите, без возврата Результата
59. user1312100 197 05.05.23 18:31 Сейчас в теме
(57)Я вот извиняюсь, Вы компоновку то заем стерли? Теперь стандартная кнопка сформировать не работает...Так и задумывалось?
58. user1537276 05.05.23 18:29 Сейчас в теме
(57) Вы в 53 пишите, зачем нужно возвращать Результат, я вот же привёл код, и сказал почему так сделал, я не пойму как по другому это сделать, вот я ещё попытался применить ваш код, используя всего три процедуры без подмен, с использованием СкомпоноватьРезультат, опять блин не получается, выдаёт ошибку, можете глянуть код, пример прикреплю
Прикрепленные файлы:
СхемаПримерВнешНаборДанныхТаблица_Проба_Ещё.erf
60. user1312100 197 05.05.23 18:32 Сейчас в теме
(58)А Вы просто посмотреть ответ из 56 не можете?
61. user1312100 197 05.05.23 18:39 Сейчас в теме
(58)
В Вашей схеме НЕТ ПАРАМЕТРОВ! Зачем Вы их пытаетесь установить строками:
ПараметрыКомпоновки = Новый ПараметрКомпоновкиДанных("ВнешнийНаборДанных");
ПараметрСсылка = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрыКомпоновки);
ПараметрСсылка.Значение = ВнешнийНаборДанных;
ПараметрСсылка.Использование = Истина;

Ваш отчет не работает по кнопке сформировать, тогда почему Вы пытаетесь программно на нее нажать, выполнив СкомпоноватьРезультат(); - результат будет тотже - ошибка!

Вы вообще не понимаете зачем нужна каждая строчка кода в процедуре открытия?
62. user1537276 08.05.23 10:09 Сейчас в теме
(61) Да, согласен, тупо скопировал Ваш код, не обратил внимание на нюансы.
63. user1537276 08.05.23 10:15 Сейчас в теме
(59) Я пытаюсь хоть как то выйти на результат всей нашей переписки. И так уже и так, но ничего не получается. У Вас стоит СкомпоноватьРезультат и работает. Я пытаюсь у себя применить, у меня не работает.
я хочу добиться выполнения кода с расшифровкой без заполнения в модуле объекта процедуры ПриКомпоновкеРезультата.
Но ничего не получается. Даже без расшифровки.
64. user1312100 197 08.05.23 11:46 Сейчас в теме
(63)При наборе данных вида объект процедура компоновки результата ОБЯЗАТЕЛЬНА. В противном случае стандартная команда формировки и процедура компоновки будут не рабочими! Отчету просто неоткуда будет взять данные для вывода.
65. user1537276 08.05.23 12:34 Сейчас в теме
(64) Т.е. в данном случае, если у меня набор данных ТЗ, то мне без процедуры ПриКомпоновкеРезультата не обойтись? И все мои потуги в этом направлении напрасны?
67. user1312100 197 08.05.23 14:35 Сейчас в теме
(65)Справедливо для стандартной кнопки. Если кнопку добавляли самостоятельно, то код в ней - это Ваш полет фантазии
66. user1537276 08.05.23 14:22 Сейчас в теме
Всё. ПОЛУЧИЛОСЬ!!!
Спасибо автору. Вы подсказали главную идею, что нельзя делать код
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

А нужно присваивать это другой переменной, например ДанныеРасшифровки111.
И все везде, почему то пишут одинаково, а так не работает.
С методом СкомпоноватьРезультат не получилось. Использовал его, но к сожалению формируется отчёт, но
как бы в фоновом режиме, и требует нажать "Сформировать". Пошёл по другому пути.
Спасибо публикации http://oparin.info/1c/rasshifrovka-skd-upravlyaemye-formy/, в ней я нашёл как правильно сделать
расшифровку, но часть кода, который приводится в конце у меня никого эффекта не дал, - что есть этот код, что его нет, я не понял как добиться:
1) Как добавить стандартные функции (расшифровку, оформление, фильтрацию) в контекстное меню расшифровки?
2) Как добавить нестандартные функции?
Код вроде есть, а что поменялось я так и не понял.

В итоге привожу код, который позволяет получить расшифровки на тонком клиенте (УФормы).
Да, нужно добавить два реквизита на форму, для хранения схемы и расшифровки.
Используется режим отказа от модальности, для этого в коде присутствует метод Оповещение.
перем Настройки;
перем СхемаКомпоновкиДанных;

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

&НаСервере
Процедура УстановитьНастройки()
	ПараметрДанныхНачалоПериода = Этотобъект.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[0];
	ПараметрДанныхНачалоПериода.Значение = НачалоМесяца(ТекущаяДата());
	ПараметрДанныхНачалоПериода.Использование = Истина;
	ПараметрДанныхКонецПериода = Этотобъект.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[1];
	ПараметрДанныхКонецПериода.Значение = КонецМесяца(ТекущаяДата());
	ПараметрДанныхКонецПериода.Использование = Истина;
	Настройки = Этотобъект.Отчет.КомпоновщикНастроек.Настройки;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура РезультатОбработкиРасшифровки_Продолжение(ВыполненноеДействие, ПараметрВыполненногоДействия, ДополнительныеПараметры) Экспорт
	
	Если ПараметрВыполненногоДействия <> Неопределено Тогда
		Если ВыполненноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
			ПоказатьЗначение( , ПараметрВыполненногоДействия);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Показать
68. пользователь 08.05.23 14:38
Сообщение было скрыто модератором.
...
69. polyakovyan 15.05.23 16:48 Сейчас в теме
Приму знания в дар или за оплату. Какие нужны мне знания?
Всегда мучаюсь вот с такой задачей: в конфигурации имеются самописные отдельные отчеты на скд. Требуется в обработке каждый отчет вывести в отдельный ТабличныйДокумент (здесь проблем нет). Проблема в выводе Расшифровки ресурсов по регистратору. Хотелось бы получить наглядный пример подобной задачи.
70. user1312100 197 15.05.23 19:15 Сейчас в теме
(69) Возьмите пример из 36.
Там вывод в таблицу. И частичная расшифровка тоже есть. Однако по нажатию, выдается индекс, а не объект.
Так вот, после получения таблицы, не нужно ее сразу выводить, а нужно обработать каждую ячейку. То есть в двойном вложенном цикле (столбцы, строки) обойти ячейки, глянуть заполнена ли расшифровка, и если да, то заменить индекс, на непосредственно ссылку на объект...
Чужой труд забирать не буду, дам ссылку на пример: https://infostart.ru/1c/articles/1339226/ Смотрите самый последний код...
71. polyakovyan 16.05.23 09:46 Сейчас в теме
(70)Вы бы могли помочь с решением данного вопроса? Конечно, на возмездной основе.
72. user1312100 197 16.05.23 10:36 Сейчас в теме
(71)Я не знаю как взять с Вас деньги, да еще и заплатить налоги... В общем, качайте демку... а в благодарность скачайте мои любые платные разработки, поставьте лайки...в общем, что подскажет ваша совесть...
&НаСервере
Функция ВыполнитьПечатьДокВТаблицу(Ссылка)
    ТабДок = Новый ТабличныйДокумент;
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
    ДР = Новый ДанныеРасшифровкиКомпоновкиДанных;
	
    //настройки
	Настройки = ОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
	
	//Макет компоновки 
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(ОтчетОбъект.СхемаКомпоновкиДанных, Настройки,ДР,,Тип("ГенераторМакетаКомпоновкиДанных"));
    
    //Компоновка данных 
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,,ДР);
    
    //Вывод результата 
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.ОтображатьПроцентВывода = Истина;
    ПроцессорВывода.УстановитьДокумент(ТабДок);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    ТабДок.ТолькоПросмотр = Истина;
	//восстанавливаем расшифровку
	Для Стр = 1 По ТабДок.ШиринаТаблицы - 1 Цикл 
		Для Кол = 1 По ТабДок.ВысотаТаблицы - 1 Цикл
			Область = ТабДок.Область(Стр, Кол);
			Если ТипЗнч(Область.Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
				Область.Расшифровка = ДР.Элементы[Область.Расшифровка].ПолучитьПоля()[0].Значение;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
		      
    Возврат ТабДок;    
КонецФункции

&НаКлиенте
Процедура ПечатьДокВТаблицу(Команда)
	ТабДок = ВыполнитьПечатьДокВТаблицу(Документ);
    ТабДок.Показать();
КонецПроцедуры
Показать
Прикрепленные файлы:
ОБУЧАЛКА.zip
73. polyakovyan 16.05.23 12:30 Сейчас в теме
(72) Спасибо за то что пытаетесь помочь. Посмотрел отчет. Там не совсем то, что мне хочется реализовать.
Прикладываю выгрузку вашей обучалки чуть измененную с описанием того что хотелось бы.
Прикрепленные файлы:
пример.zip
75. user1312100 197 16.05.23 15:56 Сейчас в теме
(73)В предыдущем примере поторопился и перепутал строки со столбцами...😂
Выкладываю работающий пример, и вот такой там код:
&НаКлиенте
Процедура Сформировать(Команда)
	СформироватьОтчет();
КонецПроцедуры

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Объект.НачалоПериода = НачалоГода(ТекущаяДата());
	Объект.КонецПериода = КонецГода(ТекущаяДата());
КонецПроцедуры
Показать
Прикрепленные файлы:
пример.dt
74. user1312100 197 16.05.23 15:53 Сейчас в теме
(72)

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



Этот код не рабочий...Перепутал строки и колонки. Рабочий вариант в другом сообщении
76. polyakovyan 16.05.23 22:18 Сейчас в теме
(74) чего то всё так же ресурс не расшифровывается. Ссылочные данные открываются, а ресурсы выдают NULL.
77. user1312100 197 17.05.23 01:22 Сейчас в теме
(76)Ну так делайте дополнительную проверку... Я не понимаю задачу, а как они должны расшифровываться! Открыть регистратор? Тут два пути или вставлять ссылку на регистратор или хранить расшифровку на сервере во временном хранилище и делать расшифровку по процедуре обработки расшифровки получая в ней расшифровку
78. user1312100 197 17.05.23 04:23 Сейчас в теме
(76)Вы находитесь в форме обработки. В форме отчета есть СКД, при создании формы у отчета галочкой можно указать это. У формы обработки нет этого. Соответственно нет свойства расшифровки, реквизита данныхрасшифровки и прочее....
Я новичок, всего не знаю, но думаю, что это все можно создать вручную. Но именно все! То есть, в отчете по щелчку в отчете на ресурсе выскакивает запрос по какому полю сделать расшифровку. Такое нужно будет сделать и в обработке, но руками, автоматически такое не появится. А после, нужно будет очистить поле ТабДок и сформировать в него новый отчет, и будет он совсем другим, чем изначальный... Этот отчет тоже нужно будет "рисовать"...Не знаю готовы ли Вы пойти на это...
Если бы знать, что конкретно требуется, код можно было бы и сократить, например, сделать отдельный отчет с параметрами регистратор и ресурс и выводить его по щелчку на ресурсе в ТабДок, но превратить форму обработки в форму отчета один в один, это слишком утомительно....
Что-то подобное делал автор в статье https://infostart.ru/1c/articles/703526/
Вот Вам пример
79. user1312100 197 17.05.23 04:51 Сейчас в теме
(76)Добавил на форму реквизит и храню в нем адрес расшифровки. Тогда можно переделать Ваш тестовый отчет так, как во вложении.
Значение ресурсов или Null, или значение в таблице. Зависит от версии платформы. На работе возвращает нормально, дома возвращает Null.
в этом случае, значение можно брать не из расшифровки, а непосредственно из ячейки табличного документа.
Прикрепленные файлы:
Тест.epf
ТестЗначениеИзЯчейки.epf
83. user1312100 197 17.05.23 11:24 Сейчас в теме
(76)Разобрался почему NULL. Зависит не от версии платформы, а от наличия группировок...
80. polyakovyan 17.05.23 09:30 Сейчас в теме
Цитата: "Если бы знать, что конкретно требуется, код можно было бы и сократить, например, сделать отдельный отчет с параметрами регистратор и ресурс и выводить его по щелчку на ресурсе в ТабДок" - это то над чем я и бьюсь.
81. user1312100 197 17.05.23 10:27 Сейчас в теме
(80)Ну так сделайте еще один отчет, или вариант текущего отчета, или вариант схемы... и по щелчку по выводите новый отчет в этот же ТабДок... Только очистить его перед этим не забудьте...
По сути, при расшифровке по регистратору меняется только схема и добавляются отборы, как на скриншоте:
Прикрепленные файлы:
82. user1312100 197 17.05.23 11:04 Сейчас в теме
(80)Вы просили пример, вот Вам пример. Полностью разжевывать не буду, Показан общий принцип. В расшифровку нужно будет добавлять параметры, отборы...Это уж Вы, пожалуйста, сами...
Прикрепленные файлы:
БАЗАиОТЧЕТ.zip
84. polyakovyan 17.05.23 11:44 Сейчас в теме
(82) в общем смысл подхода понятен к расшифровке. Я почему то думал, что по клику можно вытянуть готовый массив регистраторов, а оказывается это всегда формирование нового отчета. Ладно если запрос простой. А если с объединением, где один уровень группировки может быть разного типа с разных счетов/регистров. То это получается надо "разматывать" от ячейки расшифровки иерархию, получать типы группировок со значениями и потом это в отбор для формирования нового отчета.Как то так примерно?))
85. user1312100 197 17.05.23 11:55 Сейчас в теме
(84)Да нет, отчет тот же, схема таже, запрос тот же, меняются только настройки, но вот программно их поменять та еще закавыка
86. пользователь 17.05.23 12:16
Сообщение было скрыто модератором.
...
87. пользователь 17.05.23 17:46
Сообщение было скрыто модератором.
...
88. user1312100 197 17.05.23 17:48 Сейчас в теме
(87)Ну, пролайкайте хотя бы
89. user1312100 197 17.05.23 18:25 Сейчас в теме
(84)Вот пример кода, когда при щелчке по ресурсу, программно меняется структура отчета (группировка по регистратору):
&НаКлиенте
Процедура Сформировать(Команда)
	СформироватьОтчет();
КонецПроцедуры

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Объект.НачалоПериода = НачалоГода(ТекущаяДата());
	Объект.КонецПериода = КонецГода(ТекущаяДата());
КонецПроцедуры

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

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

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


Теперь осталось сделать так, тоб уже у вновь сформированного отчета заработала расшифровка. Постарайтесь решить это самостоятельно
Прикрепленные файлы:
Тест.epf
Оставьте свое сообщение