Перенос расшифровки в пользовательские настройки

24.08.21

Разработка - Работа с интерфейсом

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

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

 

 

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

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

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

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


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

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

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

 

 

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

На портале уже были статьи о работе с расшифровками, есть статьи о пользовательских настройках. Связка "расшифровка-> пользовательские настройки", как мне кажется, еще не встречалась.

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

Функция Хронометраж(запрос) экспорт
	ПолныйТекст=запрос.Текст;

	запрос.МенеджерВременныхТаблиц=новый МенеджерВременныхТаблиц;
	
	Схема=новый СхемаЗапроса;
	Схема.УстановитьТекстЗапроса(ПолныйТекст);
	ОбщийСтарт=ТекущаяУниверсальнаяДатаВМиллисекундах(); 
	всего=Схема.ПакетЗапросов.Количество()-1;
	для i=0 по всего цикл
		старт=ТекущаяУниверсальнаяДатаВМиллисекундах(); 
		 запрос.Текст=Схема.ПакетЗапросов[i].ПолучитьТекстЗапроса();
		 ИмяВременнойТаблицы=Схема.ПакетЗапросов[i].ТаблицаДляПомещения;
		 результат=запрос.Выполнить();
		сообщить("i="+i+" "+ИмяВременнойТаблицы+" время выполнения  "+(ТекущаяУниверсальнаяДатаВМиллисекундах()-старт)/1000+"сек.");  
	конеццикла;	
	сообщить(" общее время выполнения  "+(ТекущаяУниверсальнаяДатаВМиллисекундах()-ОбщийСтарт)/1000+"сек.");  
КонецФункции	

 

См. также

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

2400 руб.

29.06.2020    17086    23    4    

37

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    11525    769    elcoan    46    

107

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    10107    156    acces969    31    

119

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    4110    kalyaka    4    

31

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12474    1    6    

11

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

Подсистема условного оформления элементов форм (далее подсистема) предназначена для настройки оформления элементов форм (видимость, доступность, цвет фона, цвет текста и прочее) в пользовательском режиме 1С. Также подсистему возможно использовать для ограничения доступа к реквизитам формы для определенных пользователей (или групп пользователей).

6000 руб.

18.01.2022    9055    1    2    

6

Программный интерфейс для доработки форм

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    9883    AtamanovYS    19    

139
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. paybaseme 14 15.10.21 15:18 Сейчас в теме
Скажите, а какую практическую задачу вы решали? Можно посмотреть глазами пользователя - вот что все это дало на практике?
Спасибо!
Оставьте свое сообщение