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