В современных конфигурациях 1С, построенных на базе Библиотеки стандартных подсистем (БСП), процесс вывода отчетов в формы документов сильно унифицирован. Разработчикам больше не нужно вручную рисовать кнопки на формах; вместо этого используется механизм подключаемых команд. Это позволяет динамически добавлять отчеты в меню «Отчеты» без изменения кода самой формы в каждом конкретном случае. Рассмотрим подробно два сценария: подключение внешнего отчета (через справочник «Дополнительные отчеты и обработки») и интеграцию встроенного отчета (из состава конфигурации или расширения), чтобы он отображался как «родной».
Часто возникает задача добавить отчет к документу без изменения самой конфигурации. Для этого используются внешние отчеты. Чтобы отчет «понял», что он должен отображаться в конкретном документе, нам необходимо правильно описать экспортную функцию СведенияОВнешнейОбработке в модуле объекта отчета.
Проанализируем структуру этой функции. Важнейшим моментом является заполнение массива назначений. Если мы хотим, чтобы отчет был доступен из формы документа, мы должны явно указать тип этого документа в параметрах регистрации.
Разберем пример кода, который позволяет зарегистрировать внешний отчет для конкретного документа (например, ЗапросНаБелиберду):
Функция СведенияОВнешнейОбработке() Экспорт
НаименованиеОтчета = "Запросы в снабжение в работе";
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив();
// Указываем конкретный документ, к которому привязываем отчет
МассивНазначений.Добавить("Документ.ЗапросНаБелиберду");
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
// Для отображения в меню отчетов документа используем вид "Отчет" или "ДополнительныйОтчет"
ПараметрыРегистрации.Вставить("Вид", "Отчет");
ПараметрыРегистрации.Вставить("Наименование", НаименованиеОтчета);
ПараметрыРегистрации.Вставить("Версия", "1.0");
ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
ПараметрыРегистрации.Вставить("Информация", НаименованиеОтчета);
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
НаименованиеОтчета,
"ОсновнаяКомандаОтчета", // Идентификатор команды
"ОткрытиеФормы", // Использование
Ложь, // Показывать оповещение
""); // Модификатор
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
Возврат ПараметрыРегистрации;
КонецФункции
Функция ПолучитьТаблицуКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
Возврат Команды;
КонецФункции
Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление;
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры
Важное замечание по интерфейсу: При использовании механизма внешних отчетов (через справочник ДополнительныеОтчетыИОбработки) БСП группирует их. Это означает, что в меню «Отчеты» документа ваш отчет попадет в подменю «Дополнительные отчеты...». Это встроенная логика БСП, которая отделяет типовой функционал от расширяемого. Чтобы открыть отчет, пользователю придется сделать один «лишний» клик. Если это критично, следует рассмотреть второй сценарий — интеграцию встроенного отчета.
Если необходимо, чтобы отчет отображался в основном списке меню «Отчеты» без дополнительных вложенных папок, его нужно зарегистрировать в модуле менеджера соответствующего документа. Это актуально как для новых отчетов в конфигурации, так и для отчетов, добавляемых через расширения.
Выясним, как работает этот механизм. БСП при формировании меню отчетов в форме вызывает экспортную процедуру ДобавитьКомандыОтчетов модуля менеджера объекта. Рассмотрим, как реализовать эту процедуру по шагам:
РеализацияТоваровУслуг).ДобавитьКомандыОтчетов.&После("ДобавитьКомандыОтчетов").Пример кода для регистрации внутреннего отчета:
// В модуле менеджера документа
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов) Экспорт
Команда = КомандыОтчетов.Добавить();
// Указываем путь к объекту отчета в конфигурации
Команда.Менеджер = "Отчет.НашНовыйОтчетПоПродажам";
Команда.Представление = НСтр("ru = 'Анализ продаж по документу'");
// Если нужно открывать отчет сразу по текущей ссылке документа
Команда.ПараметрыОснования = "Ссылка";
Команда.МножественныйВыбор = Ложь;
Команда.Порядок = 1; // Указываем приоритет отображения в списке
КонецПроцедуры
Проанализируем ситуацию, если вы добавили новый (нетиповой) документ. Меню может не появиться автоматически, так как БСП должна знать, что документ поддерживает функционал подключаемых отчетов. Для этого в общем модуле УправлениеОтчетамиПереопределяемый в процедуре ПриОпределенииОбъектовСКомандамиОтчетов необходимо добавить ваш документ в массив СписокОбъектов. Для изучения и быстрого поиска программных методов подсистем пригодится справочник по методам БСП с примерами кода.
Для того чтобы команды БСП «взлетели», сама форма документа должна быть подготовлена. В типовых конфигурациях (УТ 11, ERP, БП 3.0) это сделано для большинства документов. Если же вы создаете форму с нуля, убедитесь в следующем:
ПодменюОтчеты) в составе командной панели.ПриСозданииНаСервере присутствует вызов инициализации: ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);.
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуОтчета(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
Когда мы вызываем отчет из документа, мы ожидаем, что он сформируется именно по этому документу. Выясним, как передать ссылку. БСП автоматически ищет в схеме компоновки данных (СКД) отчета параметр с именем Ссылка или Объект и заполняет его значением текущего документа. Если ваш отчет контекстный, убедитесь, что в настройках СКД на закладке «Параметры» соответствующий параметр доступен для заполнения и используется в запросе.
Рассмотрим случай использования внешнего отчета: в коде функции СведенияОВнешнейОбработке мы указывали идентификатор команды. Если отчет сложный, вы можете перехватить выполнение команды в модуле формы отчета, проанализировав Параметры.ДополнительныеПараметры, которые БСП передает при открытии.
Подводя итог, можно сказать: выбор метода зависит от требований к интерфейсу. Если важно отсутствие лишних кликов и отчет является частью системы — используйте регистрацию через модуль менеджера документа (ДобавитьКомандыОтчетов). Если нужно быстро внедрить отчет без изменения конфигурации и расширений — используйте механизм внешних обработок с правильным заполнением СведенияОВнешнейОбработке. Помните, что для корректной работы механизмов БСП после внесения изменений в регистрацию команд часто требуется обновить кэш или запустить информационную базу с параметром /С ЗапуститьОбновлениеИнформационнойБазы.