Как реализовать расшифровку в табличном документе внешней обработки

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

Расшифровка (или drill-down) — это стандартный механизм в 1С, позволяющий пользователю при двойном клике на ячейку отчета открыть связанный объект (карточку справочника, документ) или сформировать детальный отчет. Реализация этого механизма во внешней обработке практически не отличается от работы во встроенных отчетах, однако требует соблюдения последовательности действий в макете, программном коде и настройках формы. Разберем этот процесс подробно по шагам.

Шаг 1. Настройка ячейки в макете табличного документа

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

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

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

Шаг 2. Программное заполнение данных расшифровки

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

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


// Получаем область из макета
ОбластьКонтрагент = Макет.ПолучитьОбласть("Строка");

// Заполняем текстовое представление для пользователя
ОбластьКонтрагент.Параметры.КонтрагентНаименование = Выборка.Контрагент.Наименование;

// Заполняем данные для расшифровки (саму ссылку на справочник)
ОбластьКонтрагент.Параметры.КонтрагентРасшифровка = Выборка.Контрагент;

// Выводим область в результирующий табличный документ
ТабДок.Вывести(ОбластьКонтрагент);

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

Шаг 3. Настройка свойств отображения Табличного документа

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

  1. Только просмотр (ReadOnly): Это свойство должно быть установлено в значение Истина. Рассмотрим почему: если ячейка доступна для редактирования, то двойной клик по ней переведет программу в режим ввода текста, и событие расшифровки не сработает.
  2. Использование расшифровки (DecodingUsage): Убедитесь, что этот флаг включен в свойствах элемента формы или установлен программно:

// Пример программной настройки перед показом документа
Результат.ТолькоПросмотр = Истина;
Результат.ИспользованиеРасшифровки = Истинный;

Шаг 4. Расширенные возможности: ОбработкаРасшифровки

Стандартная расшифровка просто открывает форму объекта. Но что, если нам нужно выполнить произвольное действие? Например, при клике на сумму открыть другой отчет с детализацией по этой сумме. Для этого мы будем использовать событие ОбработкаРасшифровки.

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

  1. Выделим элемент Результат (Поле табличного документа) на форме обработки.
  2. В списке событий нажмем на лупу рядом с ОбработкаРасшифровки.
  3. В созданном обработчике напишем следующий код:

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

Использование структур в расшифровке

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


ДанныеДляПерехода = Новый Структура;
ДанныеДляПерехода.Вставить("Контрагент", Выборка.Контрагент);
ДанныеДляПерехода.Вставить("Период",    Объект.ДатаОтчета);
ДанныеДляПерехода.Вставить("Организация", Объект.Организация);

ОбластьКонтрагент.Параметры.КонтрагентРасшифровка = ДанныеДляПерехода;

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

Резюме и частые ошибки

Выясним, на что стоит обратить внимание в первую очередь при отладке механизма расшифровки:

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

← На главную