Как сделать выбор вариантов отчета на СКД

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

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

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

Шаг 1. Настройка вариантов отчета в схеме компоновки данных

Для реализации исходной задачи нам не потребуется писать код. Все настройки выполняются непосредственно в конструкторе схемы компоновки данных. Давайте разберем этот процесс по шагам:

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

После сохранения отчета в режиме «1С:Предприятие» пользователь сможет переключаться между созданными вариантами с помощью стандартной кнопки командной панели «Выбрать вариант...».

Шаг 2. Особенности работы вариантов в управляемых формах (УФ) и интеграция с БСП

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

В современных конфигурациях 1С (таких как ERP, Управление торговлей 11, Комплексная автоматизация или ЗУП) за вывод, хранение и выбор вариантов отчетов отвечает специализированный механизм Библиотеки стандартных подсистем (БСП). Чтобы ваши варианты работали стабильно, необходимо учесть несколько важных моментов:

  1. Заполнение свойства «Хранилище вариантов». В свойствах самого объекта конфигурации «Отчет» в конфигураторе обязательно должно быть заполнено поле ХранилищеВариантов. Для систем на базе БСП туда следует установить значение ХранилищеВариантовОтчетов. Если оставить это свойство пустым, платформа не сможет автоматически связать форму отчета со списком доступных вариантов СКД.
  2. Регистрация вариантов в справочнике БСП. БСП хранит информацию о доступных отчетах и их вариантах в специальном справочнике «Варианты отчетов». Если вы добавили новый вариант в конфигураторе, программа может «не увидеть» его сразу в режиме предприятия. Чтобы обновить эту информацию, выполните обновление базы данных или зарегистрируйте варианты через код в модуле: ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов() Также можно запустить сеанс «1С:Предприятие» с параметром командной строки /ЗапуститьОбновлениеИнформационнойБазы для принудительного обновления справочников БСП.

Шаг 3. Программное открытие формы с определенным вариантом в УФ

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


ПараметрыФормы = Новый Структура();
// Передаем уникальное имя варианта, заданное в конфигураторе
ПараметрыФормы.Вставить("КлючВарианта", "БезПартий"); 
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);

ОткрытьФорму("Отчет.МойОтчетПоПродажам.Форма", ПараметрыФормы);

Использование свойства КлючВарианта гарантирует, что форма инициализируется именно с теми настройками структуры компоновки, которые соответствуют выбранному варианту.

Шаг 4. Реализация выбора вариантов в обычных формах (ОФ)

В старых конфигурациях 1С на обычных формах (например, УПП 1.3 или УТ 10.3) платформа не предоставляет «из коробки» удобный графический интерфейс для управления вариантами отчета на командной панели. В этом случае программисту приходится описывать логику выбора вариантов вручную в модуле формы отчета.

Разберем по шагам, как решить эту задачу программным путем:

1. Динамическое заполнение меню выбора вариантов при открытии формы. Нам нужно перебрать все варианты настроек, определенные в схеме компоновки, и добавить соответствующие кнопки на командную панель формы. Напишем код для обработчика ПриОткрытии:


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

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


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

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

← На главную