Как настроить расшифровку в детальных записях СКД и обеспечить сохранение пользовательских отборов

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

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

Причина отсутствия расшифровки в детальных записях

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

Основная ошибка заключается в использовании виртуальной сущности Детальные записи в тех случаях, когда нам нужна интерактивность. Выясним причину: Детальные записи — это по сути отсутствие группировки. Для системы это просто набор полей, не привязанный к конкретному ключу записи в контексте расшифровки.

Решение №1: Замена детальных записей группировкой по полю

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

  1. Перейдем на вкладку "Настройки" в конструкторе СКД.
  2. Удалим элемент Детальные записи.
  3. Добавим новую группировку и в качестве поля выберем Регистратор (или Ссылка, если отчет строится по справочнику).
  4. В "Выбранных полях" этой группировки укажем все необходимые колонки, которые должны отображаться в строке (Номенклатура, Количество, Сумма и т.д.).

Теперь система понимает, что каждая строка — это конкретный объект Регистратор. При двойном клике на любое поле в этой строке СКД будет знать ссылку на документ и предложит стандартное меню расшифровки.

Решение №2: Настройка ролей полей в наборе данных

Если замена группировки не помогла, проанализируем настройки полей на уровне набора данных. Чтобы расшифровка работала корректно, СКД должна понимать иерархию и уникальность данных. Посмотрим на вкладку "Наборы данных":

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

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

Программная обработка расшифровки

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


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

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

Проблема сохранения отборов в вариантах отчета

Рассмотрим вторую проблему, упомянутую в обсуждении: настройки отбора по определенному полю (например, Контрагент) не сохраняются в варианте отчета, хотя само поле присутствует в схеме. Выясним причину такого поведения.

В 1С существует разделение на настройки разработчика и пользовательские настройки. Если вы добавили отбор в конструкторе, но не вынесли его в состав пользовательских настроек, система может воспринимать его как временный или "жестко заданный", что приводит к проблемам при сохранении варианта.

Как заставить отборы сохраняться

  1. Откроем вкладку "Настройки" в СКД.
  2. Перейдем на закладку "Отбор".
  3. Найдем нужное поле (например, Контрагент) и нажмем на кнопку "Свойства элемента пользовательских настроек" (иконка с маленьким ключом в нижней части окна).
  4. В появившемся окне обязательно установим флаг "Включать в пользовательские настройки".
  5. Выберем режим редактирования: Быстрый доступ (отбор будет виден сразу в шапке отчета) или Обычный (в настройках).

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

Хранилище настроек и функциональные опции

Если вышеуказанные действия не помогли, проанализируем ситуацию с точки зрения метаданных конфигурации:

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

← На главную