При разработке отчетов в среде «1С:Предприятие 8.3» на управляемых формах часто возникает задача не просто предоставить пользователю стандартную кнопку открытия, а реализовать сложную логику запуска. Например, открыть специализированную форму, передать в нее предустановленные параметры или связать отчет с бизнес-логикой документов регламентированной отчетности. Для решения таких задач используются команды объектов.
В этой статье мы подробно рассмотрим, как правильно создать локальную команду для отчета в конфигураторе, как написать программный код обработчика этой команды на клиенте, а также как вывести созданную команду в интерфейс «Такси» для пользователей.
---
Для начала разберем, как добавить команду в структуру самого отчета в дереве метаданных. Создание команды непосредственно внутри объекта (а не в ветке «Общие команды») оправдано тогда, когда логика команды жестко привязана именно к этому отчету и ее не планируется повторно использовать для других объектов конфигурации.
Выполним следующие действия по шагам:
Отчеты).Команды.Имя (например, ОткрытьРегламентированныйОтчет) и Синоним (то, что увидит пользователь на кнопке, например, Журнал учета работы установок).Обратим внимание на важные свойства в палитре свойств команды:
Панель навигации.Обычное или Панель действий.Отчеты.Вызывать клиентский метод, так как открытие форм происходит на клиенте.---
После создания команды конфигуратор автоматически создаст для нее модуль. Если этого не произошло, нажмите правой кнопкой мыши по команде и выберите «Открыть модуль команды».
В модуле команды предопределена процедура ОбработкаКоманды, которая выполняется на клиенте при нажатии пользователем на соответствующую кнопку в интерфейсе. Нам необходимо прописать логику открытия формы.
Рассмотрим практический пример кода. В конфигурациях, где отчетность завязана на документы хранения версий (например, экологические отчеты, декларации), сам отчет часто запускается через форму списка документов РегламентированныйОтчет с установленным отбором по конкретному источнику (шаблону) отчета.
Проанализируем и напишем следующий код в модуле команды:
#Область ОбработчикиСобытий
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// Формируем структуру параметров для открываемой формы
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ИсточникОтчета", "РегламентированныйОтчетЖурналУчетаРаботыГиПУстановок");
ПараметрыФормы.Вставить("ПериодичностьОтчета", ПредопределенноеЗначение("Перечисление.ДоступныеПериодыОтчета.Год"));
// Открываем форму списка документов регламентированной отчетности с нашими параметрами
ОткрытьФорму(
"Документ.РегламентированныйОтчет.ФормаСписка",
ПараметрыФормы,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно,
ПараметрыВыполненияКоманды.НавигационнаяСсылка
);
КонецПроцедуры
#КонецОбласти
Разберем параметры метода ОткрытьФорму, которые мы использовали:
"Документ.РегламентированныйОтчет.ФормаСписка" — полное имя формы, которую мы хотим открыть.ПараметрыФормы — наша структура, куда мы передали имя источника (конкретного регламентированного отчета) и периодичность по умолчанию. При открытии форма списка считает эти параметры и автоматически установит нужные фильтры.ПараметрыВыполненияКоманды.Источник — указывает владельца открываемой формы (форму, из которой была вызвана команда).ПараметрыВыполненияКоманды.Уникальность — ключ уникальности, предотвращающий повторное открытие той же самой формы, если она уже открыта.---
Даже если команда создана и код написан, кнопка не появится в интерфейсе программы автоматически. Чтобы пользователи увидели команду в интерфейсе «Такси», необходимо выполнить настройку командного интерфейса подсистем.
Выполним настройку по шагам:
Отчет перейдите на вкладку Подсистемы.Экология, ОхранаОкружающейСреды или РегламентированнаяОтчетность).ОткрытьРегламентированныйОтчет).Документ.РегламентированныйОтчет). Без наличия соответствующих прав платформа автоматически скроет команду из интерфейса конкретного пользователя.---
В нашем примере мы создали независимую команду. Она вызывается из командного интерфейса разделов и никак не связана с конкретными данными на форме. Параметр ПараметрКоманды в процедуре ОбработкаКоманды при этом остается неопределенным.
Однако на практике часто требуются параметризуемые (контекстные) команды. Например, когда нужно открыть отчет по конкретному промышленному объекту или оборудованию непосредственно из карточки этого оборудования. В этом случае настройка выглядит иначе:
СправочникСсылка.ПромышленныеУстановки).Панель навигации формы.Перейти.ОбработкаКоманды в качестве первого параметра ПараметрКоманды будет передаваться ссылка на текущий элемент. Мы можем использовать ее для фильтрации данных отчета:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ПараметрыФормы = Новый Структура();
// Передаем ссылку на конкретную установку в параметры отчета
ПараметрыФормы.Вставить("ОтборПромышленнаяУстановка", ПараметрКоманды);
ОткрытьФорму("Отчет.НашЭкологическийОтчет.Форма", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник);
КонецПроцедуры
---
Если вы ведете разработку в современных типовых или отраслевых конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), ручное создание индивидуальных команд для каждого отчета часто считается устаревшим подходом (за исключением специфических регламентированных форм).
Согласно стандартам разработки БСП, интеграция новых отчетов выполняется через механизм «Варианты отчетов»:
НастроитьВариантыОтчета(Настройки, НастройкиОтчета), где регистрируете отчет, задаете его описание и указываете разделы интерфейса для размещения.ВариантыОтчетовПереопределяемый.Тем не менее, для специализированных регламентированных журналов учета и деклараций классический метод с созданием явной команды отчета и открытием формы списка документов (как мы разобрали в Шагах 1–3) остается самым надежным и гибким решением.