Почему при стандартной обработке расшифровки в 1С не открывается меню действий?

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

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

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

Логика работы событий расшифровки в платформе 1С

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

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

Рассмотрим практические способы решения типовых задач, связанных с расшифровкой.

Способ 1. Принудительное открытие меню действий СКД по двойному клику

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

Посмотрим на пример реализации в модуле управляемой формы отчета:


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

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

Способ 2. Полное отключение расшифровки ячеек

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

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

Способ 3. Создание собственного контекстного меню для произвольного отчета

Для нетиповых отчетов, сформированных программно без использования СКД, мы можем сформировать и показать пользователю собственное меню через СписокЗначений:


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

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

Возможные ошибки и нюансы

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

  1. Потеря адреса данных расшифровки во временном хранилище. Если отчет на СКД генерируется программно, инициализация ПроцессорКомпоновкиДанных и ГенераторМакетаКомпоновкиДанных должна обязательно производиться с объектом ДанныеРасшифровкиКомпоновкиДанных. Полученный результат помещается во временное хранилище, а его адрес присваивается реквизиту формы ДанныеРасшифровки. Если этот адрес утерян или пуст, меню действий СКД работать не будет.
  2. Недоступность пункта «Расшифровать». В стандартном меню СКД команда «Расшифровать» становится неактивной для строк группировки с типом «Детальные записи», если в настройках отчета для них не выведены числовые ресурсы.
← На главную