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