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

08.11.18

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

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

Файлы

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

Наименование Скачано Купить файл
Отчет для демонстрации работы с программной расшифровкой СКД:
.erf 13,02Kb ver:1.1
23 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

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

Оформить подписку и скачать решение со скидкой

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

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

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

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

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

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

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

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

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

 

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


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

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

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

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

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

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


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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    244530    1340    419    

1121

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    4635    260    shapa_pro    25    

63

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    15176    ovetgana    112    

105

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    8943    krasnoshchekovpavel    5    

66

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    8167    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Хорошая отчетная форма - сродни искусству. Есть какое-то невероятное эстетическое удовольствие в том, чтобы разобраться в логике учета и анализируемых показателях, спроектировать архитектуру хранения данных так, чтобы оптимально собрать эти показатели вместе с аналитическими разрезами в запросе, а затем настроить отображение так, чтобы, глядя на результат, сразу было понятно, что это за отчет и какие задачи он призван решать. Система компоновки данных - это моя первая, главная и, наверное, единственная "рабочая" любовь. Ее я использую везде, где только можно и где нельзя тоже. Хочу поделиться с вами некоторыми практическими приемами в работе с отчетами на СКД, которые, надеюсь, будут полезны.

27.02.2025    15364    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    12976    Akcium    17    

46

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

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

15.05.2024    23478    implecs    9    

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


вот за это спасибо )
Для отправки сообщения требуется регистрация/авторизация