Как скрыть определенные ресурсы (поля) при расшифровке отчета СКД

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

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

Метод 1. Программная модификация настроек в форме отчета

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

Выполним следующие шаги:

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

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


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

        Для Каждого ИмяПоля Из МассивПолейДляУдаления Цикл
            // Используем вспомогательную функцию для удаления поля из выбранных полей
            УдалитьВыбранноеПолеИзВсехНастроекОтчета(Отчет.КомпоновщикНастроек, ИмяПоля);
        КонецЦикла;
        
    КонецЕсли;
КонецПроцедуры

Процедура УдалитьВыбранноеПолеИзВсехНастроекОтчета(Компоновщик, ИмяПоля)
    ПолеКД = Новый ПолеКомпоновкиДанных(ИмяПоля);
    
    // Удаляем из основных настроек
    ВыбранныеПоля = Компоновщик.Настройки.Выбор.Элементы;
    Для Каждого Элемент Из ВыбранныеПоля Цикл
        Если ТипЗнч(Элемент) = Тип("ВыбранноеПолеКомпоновкиДанных") И Элемент.Поле = ПолеКД Тогда
            Элемент.Использование = Ложь; // Или удаляем совсем
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Важный нюанс: Вместо полного удаления поля лучше устанавливать свойство Использование = Ложь. Это позволит избежать ошибок, если на это поле завязаны другие настройки или макеты.

Метод 2. Использование структуры «Настройки группировки» в схеме (DCS)

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

Посмотрим, как это исправить:

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

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

Метод 3. Расшифровка через отдельный вариант отчета

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

Разберем алгоритм настройки:

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

Пример программного вызова другого варианта:


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

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

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

Метод 4. Хитрость с группировкой ресурсов (Таблица)

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

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

Метод 5. Ограничение поля в наборе данных

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

Однако будьте осторожны: это ограничение сделает поле недоступным для выбора пользователем в настройках «на лету». Используйте этот метод только для технических полей, которые нужны для расчета, но не предназначены для визуализации в детализации.

Резюме

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

← На главную