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