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

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

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

Метод 1: Ограничение доступных полей в наборе данных

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

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

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

Метод 2: Программная обработка расшифровки в модуле объекта

Рассмотрим пример кода, который позволяет перехватить процесс компоновки результата. Это полезно, когда нам нужно программно подменить настройки расшифровки в момент её формирования. Основная логика заключается в использовании процедуры ПриКомпоновкеРезультата в модуле отчета. Посмотрим на пример реализации:


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

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

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

КонецПроцедуры

Важно помнить, что СтандартнаяОбработка = Ложь предотвращает автоматическое появление диалогов, так как мы берем управление выводом на себя. Однако этот метод работает на стороне сервера в момент формирования отчета. Чтобы полностью избавиться от вопросов при клике на готовую форму, нужно обратить внимание на клиентские события.

Метод 3: Перехват события расшифровки в БСП

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

В этом модуле существует процедура ОбработкаРасшифровки. Рассмотрим, как её использовать:

  1. Найдите процедуру ОбработкаРасшифровки(Результат, ДанныеРасшифровки, СтандартнаяОбработка).
  2. Установите параметр СтандартнаяОбработка = Ложь. Это "заткнет" стандартный диалог 1С.
  3. Используя параметр ДанныеРасшифровки, определите, на какую ячейку нажал пользователь.
  4. Программно вызовите открытие нужной формы или формирование другого отчета через ОткрытьФорму().

Этот способ хорош тем, что он работает глобально для всех отчетов, использующих стандартную форму отчета БСП, и не требует создания индивидуальных форм для каждого отчета.

Метод 4: Настройка "Основного действия" и "Доступных действий"

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

Параметр "Основное действие": если у поля выбрать действие "Открыть значение", то при двойном клике система сразу попытается открыть карточку объекта (справочника или документа), не предлагая меню выбора.

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

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

Метод 5: Использование макетов для предопределенной расшифровки

Рассмотрим еще один продвинутый вариант — использование собственных макетов оформления ячеек в СКД. На закладке Макеты мы можем создать макет для конкретного поля или группировки.

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

Резюме и рекомендации

Мы проанализировали несколько способов решения задачи. Подведем итог:

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

← На главную