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

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

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

Анализ причины №1: Кеширование внешних отчетов в справочнике БСП

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

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

  1. Зайдем в раздел АдминистрированиеПечатные формы, отчеты и обработки.
  2. Найдем наш отчет в списке "Дополнительные отчеты и обработки".
  3. Обязательно нажмем кнопку Обновить из файла и выберем актуальную версию отчета.
  4. В некоторых случаях требуется полностью удалить запись об отчете и создать её заново, чтобы принудительно очистить временные данные в сеансе пользователя, что особенно важно при отладке внешних отчетов.

Анализ причины №2: Свойства ячейки в табличном документе макета

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

Рассмотрим пошагово настройку свойств ячейки:

  1. Откроем макет СКД и выделим ячейку, для которой нужна расшифровка.
  2. В палитре свойств найдем поле Параметр расшифровки. Здесь должно быть указано имя параметра (например, П1 или РасшифровкаСссылки).
  3. Важный нюанс: обратим внимание на свойство Защита. Чтобы расшифровка работала, в некоторых версиях платформы ячейка должна быть защищена, а у самого результирующего документа должно быть включено свойство ТолькоПросмотр. Если документ открыт для редактирования текста пользователем, стандартный обработчик расшифровки может игнорироваться.

Анализ причины №3: Связь параметра макета с набором данных

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

Выясним, правильно ли заполнена таблица параметров макета:

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

Анализ причины №4: Программный вывод отчета

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

Рассмотрим правильную последовательность инициализации процессора вывода:


// Создаем данные расшифровки
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

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

// Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

// Важно передать данные расшифровки в свойства формы или документа
ЭтотОбъект.ДанныеРасшифровки = ДанныеРасшифровки;

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

Особенности работы с "Детальными записями"

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

Проверка режима "Только просмотр"

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

  1. ТолькоПросмотр = Истина
  2. Защита = Истина (в некоторых случаях)

Эти свойства можно установить как в коде при выводе отчета, так и в настройках формы, где расположен элемент "Поле табличного документа".

Итоги

Если в вашем отчете со своим макетом не работает расшифровка, действуйте по следующему алгоритму:

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

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

← На главную