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

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

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

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

Решение 1: Использование «Автополя» в выбранных полях группировки

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

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

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

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

Решение 2: Проверка режима «ТолькоПросмотр» табличного документа

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

Для того чтобы в результирующей таблице работали любые интерактивные действия (двойной клик, расшифровка, группировки строк), табличный документ должен быть защищен от непосредственного редактирования пользователем. Если свойство ТолькоПросмотр установлено в значение Ложь, то при клике на ячейку платформа переходит в режим ввода или редактирования текста, блокируя при этом стандартный механизм расшифровки.

Убедимся, что в коде вывода отчета присутствует следующая строка:

ТабличныйДокумент.ТолькоПросмотр = Истина;

Только при установке этого свойства в значение Истина ячейки отчета начнут реагировать на двойной щелчок мыши и вызывать стандартное диалоговое окно расшифровки.

Решение 3: Корректная передача данных расшифровки при программном выводе

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

Разберем по шагам правильный шаблон программного вывода отчета на СКД:


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

Если пропустить передачу переменной ДанныеРасшифровки в метод КомпоновщикМакета.Выполнить() или в метод ПроцессорКомпоновки.Инициализировать(), ячейки выведутся как простой текст без привязки к метаданным схемы, и расшифровать их будет невозможно. При необходимости можно изучить примеры программной работы со схемой компоновки данных.

Решение 4: Проверка ролей полей в наборе данных

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

Если для поля не определены роли в наборе данных, СКД может посчитать его простым текстовым представлением. Перейдем на вкладку «Наборы данных» схемы СКД и проверим колонку «Роль» для ключевых полей. Для документов-регистраторов желательно указать роль «Период» (если поле отвечает за период/регистратор) или убедиться, что у полей-измерений проставлен признак обязательного заполнения. Это помогает платформе правильно сопоставить типы данных при попытке пользователя детализировать строку отчета.

Решение 5: Настройка параметров расшифровки в ручных макетах

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

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

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

← На главную