Работа с расшифровкой в управляемом приложении :: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8

Работа с расшифровкой в управляемом приложении :: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8 Расшифровка

Динамическая расшифровка скд (на примере отчета)

СКДv8::ОУv8::СКД УТ11РоссияАбонемент ($m)

Если требуется расшифровка одного отчета СКД при помощи другого отчета СКД, можно использовать представленный вариант. Казалось-бы все просто, однако дело усложняется тем, что с одной стороны, нужно предусмотреть разделение функционала между клиентом и сервером, с другой, нет достаточно четкого описания поведения передачи параметров расшифровки. В итоге: все решается «элементарно», но чтобы дойти до этого, лично мне пришлось убить уйму времени, так что экономьте своё ))). Под «нестандартной расшифровкой» имеется ввиду расшифровка данных одного вида отчета — другим видом, отличным от первого (с предварительной установкой нужных параметров и отборов в отчете-расшифровке).

1 стартмани

12.09.2022   
95009   
mxm2   
49    

Работа с расшифровкой в управляемом приложении :: методическая поддержка для разработчиков и администраторов 1с:предприятия 8

15.02.2022

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

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

Выбрать действие расшифровки можно при помощи объекта ОбработкаРасшифровкиКомпоновкиДанных.

Пример создания объекта ОбработкаРасшифровкиКомпоновкиДанных:

Копировать в буфер обмена

ОбработкаРасшифровки =  Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));

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

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

После создания объекта, можно воспользоваться его методом ВыбратьДействие, для выбора действия пользователя.

Пример:

Копировать в буфер обмена

Перем ВыбранноеДействие;
Перем ПараметрыВыбранногоДействия;

ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыбранноеДействие, ПараметрыВыбранногоДействия);

Результат выбора пользователя будет помещен в переменные ВыбранноеДействие и ПараметрыВыбранногоДействия.

Использовать данный выбор можно, например, так:

Копировать в буфер обмена

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

В данном примере, выбор пользователем пункта «Открыть» приведет к тому, что выбранное значение покажется пользователю.

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

Полностью обработчик расшифровки будет выглядеть так:

Копировать в буфер обмена

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

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

Пример:

Копировать в буфер обмена

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

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

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

Другие сокращения:  Главная Челябинск

Расшифровка одного отчета скд при помощи другого отчета скд (в управляемых формах, классический вариант, методика пример для ут11)

СКДv81cv8.cfАбонемент ($m)

Возникла у меня необходимость в существующем отчете на СКД, имеющем набор данных — запрос, изменить тип набора данных с запроса на объект — таблицу значений. Но при смене типа набора данных слетели все поля, роли, ресурсы, оформление – в общем, все слетело.
Погуглил и нашел способ – редактирование xml- файла схемы компоновки данных в текстовом редакторе. А почему бы не написать обработку для 1С, которая все сделает сама?
Предлагаю вместе создать такую обработку.
На примере обработки рассмотрим, как в 1С реализовать:
Чтение и запись XML, использование СериализаторXDTO;
Программное изменение схемы компоновки данных;
Рекурсивное построение дерева значений;
Изменение вида элемента управления (флажок вместо поля ввода);
Работа с файлами диалог открытия, сохранения;
Управление видимостью строк/колонок и отдельных ячеек дерева значений.

1 стартмани

06.10.2022   
16332   
6   
Luchik   
5    

Расшифровка табличного документа, сформированного скд

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

Работа с расшифровкой в управляемом приложении :: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8

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

Процедура ОбработатьРасшифровкиОтчетаНаСКД(ТабДок, ДанныеРасшифровки)	Если ТабДок.ШиринаТаблицы * ТабДок.ВысотаТаблицы > 10000 Тогда	Ответ = Вопрос("You are about to save document " ТабДок.ШиринаТаблицы " x " ТабДок.ВысотаТаблицы " in dimensions.	|This will take at least " Цел(ТабДок.ШиринаТаблицы * ТабДок.ВысотаТаблицы/700) " sec. Are you sure?", РежимДиалогаВопрос.ДаНет,,, Метаданные().Синоним);	Если Ответ = КодВозвратаДиалога.Нет Тогда	Возврат	КонецЕсли;	КонецЕсли;	Состояние("Окучиваем табличный документ...");	ПрошлоВремени = ТекущаяДата();	ТипВсеСсылкиСправочники = Справочники.ТипВсеСсылки();	ТипВсеСсылкиДокументы = Документы.ТипВсеСсылки();	КэшНужныхТипов = Новый Соответствие;	Для Каждого Тип Из ТипВсеСсылкиСправочники.Типы() Цикл	КэшНужныхТипов.Вставить(Тип, Истина);	КонецЦикла;	Для Каждого Тип Из ТипВсеСсылкиДокументы.Типы() Цикл	КэшНужныхТипов.Вставить(Тип, Истина);	КонецЦикла;	Для Row = 1 По ТабДок.ВысотаТаблицы Цикл	Для Col = 1 По ТабДок.ШиринаТаблицы Цикл	Ячейка = ТабДок.Область(Row, Col);	Если ТипЗнч(Ячейка.Расшифровка) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда	Продолжить;	КонецЕсли;	// Так же из данных расшифровки возьмем ссылку на номенклатуру	//МассивПолейРасшифровки = ТиповыеОтчеты.ПолучитьМассивПолейРасшифровки(Ячейка.Расшифровка, ДанныеРасшифровки);	ЭлементРасшифровки = ДанныеРасшифровкиКонсоли.Элементы[Ячейка.Расшифровка];	Если ЭлементРасшифровки.ОсновноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда	МассивПолейРасшифровки = ЭлементРасшифровки.ПолучитьПоля();	Для Каждого ЭлементМассива Из МассивПолейРасшифровки Цикл	ТипЗначения = ТипЗнч(ЭлементМассива.Значение);	Если ТипЗнч(ЭлементМассива) = Тип("ЗначениеПоляРасшифровкиКомпоновкиДанных")	И (КэшНужныхТипов.Получить(ТипЗначения) = Истина)	И ЭлементМассива.Иерархия = Ложь Тогда	Ячейка.Расшифровка = ЭлементМассива.Значение;	Прервать;	КонецЕсли;	КонецЦикла;	КонецЕсли;	ОбработкаПрерыванияПользователя();	КонецЦикла;	КонецЦикла;	ПрошлоВремени = ТекущаяДата()-ПрошлоВремени;	Сообщить("Затрачено времени на выполнение процесса: " Формат('00010101' ПрошлоВремени,"ДЛФ=T; ДП=0") " сек");
КонецПроцедуры

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

Другие сокращения:  Упростить выражение | Онлайн калькулятор

Работа с расшифровкой в управляемом приложении :: Методическая поддержка для разработчиков и администраторов 1С:Предприятия 8

Про расшифровку табличного документа на сайте ИТС

В качестве примера доработанная Консоль отчетов СКД  (обычное приложение).

Скд: расшифровка данных по всей строке

Инструментарий разработчикаv8v8::УФ1cv8.cfРоссияАбонемент ($m)

Универсальная внешняя обработка для просмотра метаданных конфигураций баз 1С 8.3.
Отображает свойства и реквизиты объектов конфигурации, их количество, основные права доступа и т.д.
Отображаемые характеристики объектов: свойства, реквизиты, стандартные рекизиты, реквизиты табличных частей, предопределенные данные, регистраторы для регистров, движения для документов, команды, чужие команды, подписки на события, подсистемы.
Отображает структуру хранения объектов базы данных, для регистров доступен сервис «Управление итогами».
Платформа 8.3, управляемые формы. Версия 1.1.0.87 от 02.12.2021

3 стартмани

28.10.2022   
48926   
443   
ROL32   
72    

Формирование отчета скд с расшифровкой из обработки

1. В обработке нет реквизита КомпоновщикНастроек, его нужно добавить вручную.

Тестировал: 

1С:Комплексная автоматизация 2 (2.4.9.98)

Платформа 1С:Предприятие 8.3 (8.3.16.1148)

Оцените статью
Расшифруй.Ру