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

24.08.21

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

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

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

 

 

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

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

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

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


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

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

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

 

 

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

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

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

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

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

 

См. также

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

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    63015    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    18883    26    6    

41

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

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

1500 руб.

06.10.2020    10258    7    7    

10

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

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

20.08.2024    17062    mrXoxot    43    

121

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

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    7534    smielka    37    

100

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

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

27.12.2023    14888    922    elcoan    47    

117

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

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

2 стартмани

10.04.2023    11946    162    acces969    31    

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