Отчет для демонстрации работы с программной расшифровкой СКД

08.11.18

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

Программное добавление дополнительных пунктов меню в расшифровке и программное формирование отчета-детализации для отчета СКД.

Скачать файл

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

Наименование По подписке [?] Купить один файл
Отчет для демонстрации работы с программной расшифровкой СКД:
.erf 13,02Kb
22
22 Скачать (1 SM) Купить за 1 850 руб.

Демонстрирует работу:

  • Программное формирование дополнительных пунктов меню в расшифровке отчета СКД
  • Формирование отчета-расшифровки
  • Получение информации о группировках поля, по которому требуется расшифровка
  • Передача информации от открываемой формы расшифровки

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

В демо примере показано, как программно сформировать отчет-детализацию с передачей параметров детализации в новый отчет.

В качестве основного запроса отчета используется запрос к регистру накоплений ВыручкаИСебестоимостьПродаж из УТ 11.4. Для вашей конфигурации запрос нужно изменить.

Используется работа с объектом ОбработкаРасшифровкиКомпоновкиДанных

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

Для открытия меню выбора используется метод ПоказатьВыборДействия:

ОбработкаРасшифровки.ПоказатьВыборДействия(ОписаниеОповещенияОЗакрытии, Расшифровка, ДоступныеДействия, ДополнительныеДействия, Ложь);

 

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


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

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

&НаКлиенте
Функция ПолучитьПолеКомпоновкиДанных(Структура)
	Для каждого Поле из Структура Цикл
		Если ТипЗнч(Поле) = Тип("ГруппировкаКомпоновкиДанных") Тогда
			Возврат ПолучитьПолеКомпоновкиДанных(Поле.ПоляГруппировки.Элементы);
		ИначеЕсли ТипЗнч(Поле) = Тип("ПолеГруппировкиКомпоновкиДанных") Тогда
			Возврат Поле.Поле;
		КонецЕсли;
	КонецЦикла;
КонецФункции

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

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

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


Тестировалась на Управление торговлей, редакция 11 (11.4.5.111).

расшифровка отчет СКД ОбработкаРасшифровкиКомпоновкиДанных

См. также

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

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

10000 руб.

02.09.2020    152137    834    397    

842

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

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

15.05.2024    7225    implecs_team    6    

46

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

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

3 стартмани

05.02.2024    6471    49    obmailok    21    

79

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

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

1 стартмани

31.01.2024    2982    3    Yashazz    0    

34

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

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

2 стартмани

11.12.2023    10315    23    John_d    25    

124

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

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

05.12.2023    7292    PROSTO-1C    14    

67
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. a45 88 23.09.20 13:53 Сейчас в теме
// Удалим описание оповещения, иначе будут выдаваться непонятные ошибки при вызове этой процедуры из непонятно чего.
ОписаниеОповещенияОЗакрытии = Неопределено;


вот за это спасибо )
Оставьте свое сообщение