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

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

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

Понимание проблемы расшифровки

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

Метод 1: Программная обработка текущей ячейки

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

Разберем это по шагам:

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

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

Метод 2: Настройка стандартного механизма через временное хранилище

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

Давайте проанализируем правильный алгоритм работы с ДанныеРасшифровки:

  1. Создаем объект ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;.
  2. Передаем его в ПроцессорКомпоновкиДанных.Инициализировать().
  3. Выполняем вывод: ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);.
  4. Критически важный момент: помещаем ДанныеРасшифровки во временное хранилище только после завершения вывода результата.

Пример программного формирования, который помогает обеспечить корректную работу:


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

Важные замечания по реализации

При работе с ОбработкаРасшифровки, убедитесь, что вы правильно используете полученный адрес хранилища. В обработчике события вам необходимо получить данные из хранилища, используя переданный адрес, а затем воспользоваться объектом ДанныеРасшифровкиКомпоновкиДанных для анализа элементов.

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

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

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

← На главную