Как программно открыть форму варианта отчета в 1С:Предприятие 8.3

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

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

Постановка задачи и анализ проблемы

Представим ситуацию: у нас есть ссылка на вариант отчета (тип СправочникСсылка.ВариантыОтчетов). Нам нужно открыть форму редактирования этого варианта или форму его настроек. Основная сложность заключается в том, что в современных конфигурациях за это отвечают общие формы, такие как ОбщаяФорма.ФормаВариантаОтчета или ОбщаяФорма.ФормаНастроекОтчета. Эти формы являются универсальными «контейнерами», которые требуют инициализации контекста: они должны знать, к какому отчету относятся настройки, какие права у пользователя и в каком режиме открывается форма.

Рассмотрим подробнее, почему прямой вызов ОткрытьФорму("ОбщаяФорма.ФормаВариантаОтчета") без параметров чаще всего ни к чему не приводит. Форма ожидает получить структуру, содержащую как минимум ключ объекта, а в идеале — подготовленные данные компоновки. Выясним, как сделать это правильно.

Способ 1. Использование стандартного механизма открытия значения

Проанализируем самый простой путь. Если в вашей конфигурации (на закладке «Представление» в свойствах корня конфигурации) общая форма ФормаВариантаОтчета назначена основной формой для вариантов отчетов, платформа может сама обработать открытие. Попробуем использовать метод ОткрытьЗначение():


// СсылкаНаВариант - это СправочникСсылка.ВариантыОтчетов
ОткрытьЗначение(СсылкаНаВариант);

Этот метод хорош тем, что он автоматически пытается определить основную форму объекта. Если платформа «понимает» связь, она сама передаст ссылку в параметр Ключ. Однако в сложных типовых конфигурациях (ERP, УТ 11, БП 3.0) этот способ часто открывает лишь карточку справочника, а не интерфейс настройки СКД. Посмотрим на более продвинутые варианты.

Способ 2. Программное заполнение параметров формы

Если нам нужно открыть именно ОбщиеФормы.ФормаВариантаОтчета, мы должны подготовить структуру параметров. Как отметил автор темы, просто передать ссылку недостаточно — форме нужен контекст. Рассмотрим пример реализации, где мы подготавливаем структуру и вызываем форму программно:


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

    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗакрытияНастроек", ЭтотОбъект);
    
    ОткрытьФорму("ОбщаяФорма.ФормаВариантаОтчета", ПараметрыФормы, ЭтотОбъект, , , , ОписаниеОповещения);
    
КонецПроцедуры

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

Способ 3. Использование программного интерфейса БСП

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

Проанализируем, как это выглядит в коде:


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

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


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

Способ 4. Навигационные ссылки (e1cib)

Рассмотрим еще один интересный способ — использование навигационных ссылок. Этот метод позволяет платформе самой «разрулить» ситуацию. Каждая запись в базе данных имеет уникальный адрес. Если мы перейдем по нему, 1С применит логику по умолчанию для открытия этого объекта.


&НаКлиенте
Процедура ОткрытьЧерезНавигационнуюСсылку(СсылкаНаВариант)
    
    СсылкаТекст = ПолучитьНавигационнуюСсылку(СсылкаНаВариант);
    ПерейтиПоНавигационнойСсылке(СсылкаТекст);
    
КонецПроцедуры

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

Разбор нюансов: работа с «буфером» настроек

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

Алгоритм действий следующий:

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

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

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

Подведем итог нашего исследования. Выбор метода зависит от вашей конечной цели:

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

← На главную