Как настроить автоматическую расшифровку отчета СКД по регистратору в 1С на управляемых формах?

Программист 1С v8.3 (Управляемые формы) Управленческий учет IT и автоматизация бизнеса
← На главную

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

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

Выясним причину поведения платформы

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

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

Способ 1. Ограничение доступности полей в СКД (без написания кода)

Проанализируем наиболее простой вариант настройки прямо в схеме компоновки данных. Если диалог выводит много «лишних» служебных полей (периоды, валюты и т. д.), их можно исключить из списка доступных для группировки.

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

Результат: если среди доступных для детализации полей останется только одно поле (например, Регистратор), платформа автоматически пропустит вывод окна выбора и сразу выполнит детализацию по этому полю.

Способ 2. Использование детального варианта отчета и события ОбработкаРасшифровки

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

Разберем по шагам реализацию данного подхода:

  1. На вкладке Настройки схемы СКД создадим два варианта отчета с ключами вариантов: "Основной" и "Детальный".
  2. В варианте "Детальный" добавим группировку по полю Регистратор или детальным записям.
  3. В модуле управляемой формы отчета обработаем клиентское событие ОбработкаРасшифровки.

Посмотрим на пример кода обработки события:


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

	// Получаем данные расшифровки из временного хранилища
	КоллекцияРасшифровки = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
	КоллекцияПолей = КоллекцияРасшифровки.Элементы[Расшифровка].ПолучитьПоля();
	
	Если КоллекцияПолей.Количество() = 0 Тогда
		Возврат;
	КонецЕсли;

	ЗначениеРасшифровки = КоллекцияПолей[0].Значение;

	// Проверяем тип кликнутого элемента (например, СправочникСсылка.Кассы)
	Если ТипЗнч(ЗначениеРасшифровки) = Тип("СправочникСсылка.Кассы") Тогда
		СтандартнаяОбработка = Ложь;
		
		КомпоновщикНастроек = Отчет.КомпоновщикНастроек;

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

		// Открываем форму этого же отчета с новыми параметрами
		ОткрытьФорму(
			"Отчет.Касса.Форма",
			ПараметрыОткрытия,
			,
			"Касса=" + Строка(ЗначениеРасшифровки)
		);
	КонецЕсли;

КонецПроцедуры

В данном коде параметр ДанныеРасшифровки — это реквизит формы с типом Строка, содержащий адрес хранилища данных расшифровки компоновки данных.

Способ 3. Переопределение действия через макеты СКД

Если требуется при клике на ячейку открывать конкретную форму значения (например, сам справочник или документ), можно применить custom-макет ячейки:

  1. Перейдем на вкладку Макеты в схеме компоновки данных.
  2. Создадим макет ячейки для нужного поля или ресурса.
  3. В свойствах ячейки зададим имя в строке Параметр расшифровки (например, ПараметрРегистратор).
  4. В таблице параметров макета для ПараметрРегистратор укажем выражение Регистратор и установим основное действие Открыть значение или Расшифровать.

Важное замечание: действие Открыть значение корректно отрабатывает только тогда, когда ячейка однозначно ассоциирована с одиночной ссылкой на объект (документ или справочник).

Особенности работы с регистраторами и виртуальными таблицами

При использовании виртуальных таблиц регистров накопления (например, ОстаткиИОбороты) с периодичностью Авто важно соблюдать следующие технические условия:

← На главную