Внешний отчёт 1С на СКД в БСП: СведенияОВнешнейОбработке и ХранилищеВариантов
Для регистрации внешнего отчёта .erf в конфигурациях на БСП (1С:ERP, КА 2, УТ 11, БП 3.0, ЗУП 3.1, УНФ) добавьте в модуль объекта экспортную функцию СведенияОВнешнейОбработке(). Она вызывает ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(ВерсияБСП), устанавливает Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет(), включает БезопасныйРежим = Истина и добавляет в таблицу Команды строку с типом использования ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы().
Чтобы при загрузке файла не появлялось предупреждение «Свойство отчета "ХранилищеВариантов" не заполнено», в Конфигураторе в свойствах корневого узла отчёта выберите ХранилищеВариантов = ХранилищеВариантовОтчетов и оставьте пустым свойство ОсновнаяФормаОтчета. Тогда платформа автоматически откроет отчёт через типовую общую форму БСП ОбщаяФорма.ФормаОтчета с поддержкой сохранения вариантов, рассылки и быстрых настроек.
Как подсистема БСП подключает внешний отчёт 1С 8.3
В типовых конфигурациях фирмы «1С» внешние отчёты (файлы .erf) и внешние обработки (.epf) загружаются в режиме «1С:Предприятие» в справочник ДополнительныеОтчетыИОбработки (раздел НСИ и администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки). Такой подход позволяет расширять аналитику без изменения основной конфигурации и без снятия информационной базы с поддержки.
В момент выбора файла .erf с диска сервер 1С помещает двоичные данные во временное хранилище, подключает отчёт через менеджер ВнешниеОтчеты.Подключить(...) в безопасном режиме и обращается к модулю объекта внешнего отчёта. Система ищет экспортную функцию СведенияОВнешнейОбработке(), выполняет её и читает возвращённую структуру параметров регистрации.
На основании этой структуры БСП заполняет карточку элемента справочника ДополнительныеОтчетыИОбработки, записывает команды в табличную часть Команды и связывает отчёт с подсистемой ВариантыОтчетов. Если экспортная функция в модуле объекта отсутствует или возвращает некорректную структуру, платформа прервёт загрузку файла с ошибкой регистрации.
Функция СведенияОВнешнейОбработке() в модуле объекта
Каркас параметров регистрации в современных редакциях БСП создают вызовом серверного метода ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(ВерсияБСП). В качестве параметра рекомендуется передавать текущую версию библиотеки конфигураций через СтандартныеПодсистемыСервер.ВерсияБиблиотеки() (либо строкой, например "3.1.9.1"), чтобы подсистема сформировала все актуальные ключи структуры.
#Область ПрограммныйИнтерфейс
// Возвращает параметры регистрации внешнего отчета для подсистемы БСП.
Функция СведенияОВнешнейОбработке() Экспорт
ВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки();
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(ВерсияБСП);
МетаданныеОтчета = Метаданные();
СинонимОтчета = ?(ЗначениеЗаполнено(МетаданныеОтчета.Синоним),
МетаданныеОтчета.Синоним, МетаданныеОтчета.Имя);
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительныйОтчет();
ПараметрыРегистрации.Наименование = СинонимОтчета;
ПараметрыРегистрации.Версия = "1.0.0";
ПараметрыРегистрации.БезопасныйРежим = Истина;
ПараметрыРегистрации.Информация = НСтр("ru = 'Внешний аналитический отчет на СКД'");
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = СинонимОтчета;
НоваяКоманда.Идентификатор = МетаданныеОтчета.Имя;
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
НоваяКоманда.ПоказыватьОповещение = Ложь;
Возврат ПараметрыРегистрации;
КонецФункции
#КонецОбласти
"ДополнительныйОтчет" или "Отчет"Истина)ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке()Идентификатор, Представление, Использование, ПоказыватьОповещение, Модификатор)Обратите внимание на универсальное получение Метаданные().Синоним и Метаданные().Имя: такой шаблон модуля объекта можно переносить между разными отчётами .erf без ручного переименования строковых литералов в коде.
Глобальный и контекстный отчёт: Вид, Назначение и разделы интерфейса
Подсистема «Дополнительные отчёты и обработки» поддерживает два вида регистрации для файлов .erf. От выбранного значения свойства ПараметрыРегистрации.Вид зависит, где именно пользователь увидит команду запуска и какие параметры получит форма отчёта при открытии.
| Свойство / настройка | Глобальный дополнительный отчёт | Прикрепляемый (контекстный) отчёт |
|---|---|---|
Значение ПараметрыРегистрации.Вид |
ВидОбработкиДополнительныйОтчет() (строка "ДополнительныйОтчет") |
ВидОбработкиОтчет() (строка "Отчет") |
Массив ПараметрыРегистрации.Назначение |
Не заполняется (подсистемы метаданных сюда передавать нельзя) | Заполняется полными именами, например: "Документ.ЗаказКлиента", "Справочник.Номенклатура" |
| Где отображается в интерфейсе 1С | В панелях отчётов разделов и в меню «Дополнительные отчёты» выбранных подсистем | В подменю кнопки «Отчёты» внутри формы документа, справочника или списка |
| Как настраивается размещение | В карточке справочника (реквизит «Размещение») и при сохранении варианта отчёта | Автоматически по списку объектов из массива Назначение (с возможностью уточнения в карточке) |
| Передача контекста при открытии | Отчёт открывается без отбора по текущему объекту | В параметры формы передаётся коллекция ОбъектыНазначения со ссылками выбранных элементов |
Распространённое заблуждение — попытка указать раздел командного интерфейса программно через ПараметрыРегистрации.Назначение.Добавить("Подсистема.Продажи"). Массив Назначение проверяется платформой через допустимые типы владельцев команд и принимает только ссылочные объекты (документы, справочники и др.). Разделы интерфейса для глобального отчёта администратор или автор выбирает интерактивно в карточке ДополнительныеОтчетыИОбработки по гиперссылке «Размещение», а также при публикации вариантов в справочнике ВариантыОтчетов.
СведенияОВнешнейОбработке() и собирает готовый файл .erf, который сразу загружается в справочник дополнительных отчётов.
Ошибка «Свойство отчета "ХранилищеВариантов" не заполнено» и как её исправить
При добавлении нового файла .erf в справочник дополнительных отчётов в 1С:ERP, ЗУП 3.1, УТ 11 или БП 3.0 часто всплывает диагностическое сообщение:
Свойство отчета «Хранилище вариантов» не заполнено. Сохранение (выбор) вариантов отчета будет работать в ограниченном режиме. Обратитесь к разработчику дополнительного (внешнего) отчета.
Причина предупреждения кроется в архитектуре подсистемы ВариантыОтчетов. Когда внешний отчёт создаётся в Конфигураторе через меню Файл — Новый — Внешний отчет, платформенные свойства корневого объекта по умолчанию остаются пустыми. Без привязки к стандартному хранилищу конфигурации БСП не знает, куда записывать изменённые варианты СКД, как разграничивать к ним права доступа («Только для автора» или «Всем пользователям») и как публиковать сохранённые варианты в панелях отчётов разделов.
Пошаговое исправление в Конфигураторе
- Откройте файл внешнего отчёта
.erfв Конфигураторе информационной базы, для которой он разрабатывается. - Дважды кликните по корневому узлу дерева метаданных отчёта (или вызовите контекстное меню Свойства).
- В палитре свойств на вкладке Основные (или Прочие в зависимости от режима отображения) найдите свойство Хранилище вариантов (
ХранилищеВариантов) и выберите из выпадающего списка объект конфигурацииХранилищеВариантовОтчетов. - В соседнем свойстве Хранилище настроек (
ХранилищеНастроек, хранилище пользовательских настроек) укажитеХранилищеПользовательскихНастроекОтчетов— это обеспечит автоматическое сохранение быстрых отборов и периода между сеансами пользователя. - Сохраните внешний отчёт (
Ctrl + S) и обновите его из файла в карточке справочникаДополнительныеОтчетыИОбработки.
После установки ХранилищеВариантовОтчетов и регистрации файла в справочнике БСП автоматически синхронизирует варианты из СхемаКомпоновкиДанных со справочником ВариантыОтчетов. Пользователи смогут сохранять собственные варианты настроек, делать их доступными коллегам, выводить в разделы учёта и подключать к регламентным рассылкам отчётов.
Работа без собственной формы и настройка ОбщаяФорма.ФормаОтчета
При разработке внешнего отчёта на СКД для типовой конфигурации на БСП не нужно создавать собственную управляемую форму отчёта. В свойствах корневого объекта ВнешнийОтчет оставьте поля ОсновнаяФормаОтчета и ОсновнаяФормаНастроек пустыми.
Если собственная форма не задана, при запуске команды с типом ТипКомандыОткрытиеФормы() подсистема БСП открывает отчёт в универсальной форме ОбщаяФорма.ФормаОтчета. Это даёт сразу два важных преимущества:
- Отсутствие ошибки
Поле объекта не обнаружено (КонтекстВарианта). Если назначить внешнему отчёту собственную автогенерируемую форму платформы и одновременно указатьХранилищеВариантовОтчетов, при нажатии кнопки «Сохранить вариант отчёта» форма сохранения БСП обратится к реквизитуВладелецФормы.КонтекстВарианта. В обычной форме этого реквизита нет, и платформа упадёт с исключением. ВОбщаяФорма.ФормаОтчетавсе служебные реквизиты БСП (КонтекстВарианта,ПараметрыОтчета,КлючТекущегоВарианта) уже присутствуют. - Готовый сервис БСП. Пользователь получает переключатель режимов «Простой / Расширенный», подсчёт суммы выделенных ячеек табличного документа, отправку по почте и фоновое формирование без единой строчки UI-кода.
Если отчёту на общей форме требуется особая инициализация (например, сформировать отчёт сразу при открытии или подставить отбор из документа для контекстного отчёта вида ВидОбработкиОтчет()), в модуле объекта объявляют экспортную процедуру ОпределитьНастройкиФормы и подписываются на серверные события общей формы:
// В функции СведенияОВнешнейОбработке() предварительно укажите:
// ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет();
// ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказКлиента");
// ПараметрыРегистрации.ОпределитьНастройкиФормы = Истина;
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт
Настройки.ФормироватьПриОткрытии = Истина;
Настройки.События.ПриСозданииНаСервере = Истина;
КонецПроцедуры
Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт
ОбъектыНазначения = Неопределено;
Если Форма.Параметры.Свойство("ОбъектыНазначения", ОбъектыНазначения)
И ЗначениеЗаполнено(ОбъектыНазначения) Тогда
КомпоновкаДанныхКлиентСервер.УстановитьЭлементОтбора(
Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки,
"ЗаказКлиента",
ОбъектыНазначения,
ВидСравненияКомпоновкиДанных.ВСписке,
,
Истина
);
КонецЕсли;
КонецПроцедуры
ОбщаяФорма.ФормаОтчета (или Неопределено при предварительном чтении)ФормироватьПриОткрытии, РазрешеноИзменятьВарианты, ВыводитьКоманднуюПанель) и вложенная структура подписок СобытияВажное правило: если вы установили в структуре Настройки.События какой-либо флаг в Истина (например, ПриСозданииНаСервере или ПриЗагрузкеПользовательскихНастроекНаСервере), одноимённая экспортная процедура с точной сигнатурой обязана присутствовать в модуле объекта отчёта. Иначе при открытии формы или чтении сохранённых настроек возникнет ошибка «Метод объекта не обнаружен».
Почему внешний отчёт не открывается в безопасном режиме
Во всех актуальных конфигурациях на БСП, а также в облачных сервисах 1С:Фреш и клиент-серверных базах с профилями безопасности внешние отчёты подключаются с флагом ПараметрыРегистрации.БезопасныйРежим = Истина. В безопасном режиме ядро платформы 1С:Предприятие 8.3 изолирует серверный вызов и блокирует потенциально опасные операции:
- выполнение произвольного кода через
Выполнить()иВычислить()во внешних модулях; - создание COM-объектов (
Новый COMОбъект("Excel.Application"),ADODB.Connection) и загрузку внешних компонент; - прямой доступ к файловой системе сервера 1С вне изолированного временного каталога, запуск приложений ОС и внешние сетевые соединения;
- самостоятельный переход в привилегированный режим (
УстановитьПривилегированныйРежим(Истина)) без выданного разрешения.
Но главной причиной, почему обычный отчёт на СКД без внешних вызовов не открывается или падает в безопасном режиме, является наличие в файле .erf собственной управляемой формы с серверным модулем или попытка обращаться из формы к закрытым методам конфигурации. Когда отчёт содержит только макет СхемаКомпоновкиДанных и стандартный модуль объекта, а за интерфейс отвечает доверенная ОбщаяФорма.ФормаОтчета самой конфигурации, вся компоновка выполняется штатным процессором БСП и проходит контроль безопасного режима без единого замечания.
Если же бизнес-логика отчёта в процедуре ПриКомпоновкеРезультата действительно требует обращения к внешнему ресурсу (например, чтения временного файла или HTTP-сервиса), не отключайте БезопасныйРежим — в базах с активным профилем безопасности кластера значение Ложь всё равно будет проигнорировано, либо БСП запретит загрузку файла. Вместо этого запросите явные разрешения через модуль РаботаВБезопасномРежиме:
// Внутри функции СведенияОВнешнейОбработке() при БезопасныйРежим = Истина:
ПараметрыРегистрации.БезопасныйРежим = Истина;
РазрешениеКаталог = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(
Истина, Ложь, НСтр("ru = 'Чтение временного файла выгрузки для СКД'")
);
ПараметрыРегистрации.Разрешения.Добавить(РазрешениеКаталог);
РазрешениеПривилегии = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима(
НСтр("ru = 'Чтение служебного регистра сведений без прав RLS'")
);
ПараметрыРегистрации.Разрешения.Добавить(РазрешениеПривилегии);
(Чтение, Запись, Пояснение) — доступ к временной папке сеанса на сервере(Пояснение) — право вызывать УстановитьПривилегированныйРежим(Истина)(Протокол, Сервер, Порт, Пояснение) — разрешение на внешнее соединение.erf со стандартной формой БСП, заполняет СведенияОВнешнейОбработке() с БезопасныйРежим = Истина и проверяет открытие отчёта в 1С.
Частые ошибки при подключении внешнего отчёта в БСП
- Предупреждение «Свойство отчета "ХранилищеВариантов" не заполнено» при загрузке в справочник. В Конфигураторе у корневого объекта внешнего отчёта оставлено пустым свойство
ХранилищеВариантов. Укажите в нёмХранилищеВариантовОтчетови пересохраните файл.erf. - Ошибка «Поле объекта не обнаружено (КонтекстВарианта)» при сохранении варианта. Разработчик создал во внешнем отчёте собственную форму (автоформу платформы) и одновременно выбрал
ХранилищеВариантовОтчетов. Удалите собственную форму из отчёта и очистите свойствоОсновнаяФормаОтчета, чтобы использоваласьОбщаяФорма.ФормаОтчета. - Попытка передать подсистему в массив
ПараметрыРегистрации.Назначение. Запись видаНазначение.Добавить("Подсистема.Продажи")игнорируется БСП, так какНазначениепредназначено только для привязки контекстных отчётов к документам и справочникам. Разделы меню для глобального отчёта выбираются в карточке справочникаДополнительныеОтчетыИОбработки. - Ошибка «Не удалось зарегистрировать дополнительный отчёт» из-за неверного типа команды. Для отчётов в таблице
ПараметрыРегистрации.Командыиногда по шаблону печатной формы оставляютТипКомандыВызовСерверногоМетода(). Для открытия отчёта СКД в форме БСП необходимо указыватьДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы(). - Падение «Метод объекта не обнаружен (ПриЗагрузкеПользовательскихНастроекНаСервере)». В процедуре
ОпределитьНастройкиФормывключён флаг в коллекцииНастройки.События, но сама экспортная процедура-обработчик в модуле объекта не создана или не помечена ключевым словомЭкспорт. - После обновления файла
.erfв базе остаются старые колонки и отборы. При открытии отчёта платформа подгружает кэшированные настройки пользователя из хранилища. Нажмите в форме отчёта Ещё — Стандартные настройки (или выберите заново вариант отчёта), чтобы перечитать обновлённую схему компоновки данных.
Частые вопросы по внешним отчётам в БСП
Чем вид «ДополнительныйОтчет» отличается от вида «Отчет» в СведенияОВнешнейОбработке?
Вид ДополнительныйОтчет (ВидОбработкиДополнительныйОтчет) регистрирует глобальный аналитический отчёт, который размещается в панелях отчётов разделов интерфейса (например, «Продажи», «Склад», «Финансы») и открывается независимо от конкретных документов. Вид Отчет (ВидОбработкиОтчет) предназначен для контекстных отчётов: они привязываются через массив Назначение к конкретным справочникам или документам, вызываются по кнопке «Отчёты» прямо из формы объекта или списка и получают массив выбранных ссылок в параметр формы ОбъектыНазначения.
Как исправить предупреждение «Свойство отчета "ХранилищеВариантов" не заполнено»?
Откройте файл внешнего отчёта (.erf) в Конфигураторе целевой информационной базы, выделите корневой узел отчёта в дереве метаданных и откройте палитру свойств. В свойстве «Хранилище вариантов» (ХранилищеВариантов) выберите значение ХранилищеВариантовОтчетов, а в свойстве «Хранилище настроек» укажите ХранилищеПользовательскихНастроекОтчетов. При этом поле «Основная форма отчёта» оставьте пустым, чтобы отчёт открывался общей формой БСП ОбщаяФорма.ФормаОтчета, после чего сохраните файл и заново загрузите его в справочник дополнительных отчётов и обработок.
Почему внешний отчёт на СКД работает через «Файл — Открыть», но не запускается из справочника БСП?
При интерактивном открытии через меню «Файл — Открыть» код исполняется с правами текущего сеанса и использует стандартную автоформу платформы, тогда как из справочника «Дополнительные отчёты и обработки» БСП запускает внешний отчёт на сервере в безопасном режиме через ОбщаяФорма.ФормаОтчета. Чтобы отчёт запускался без ошибок, удалите из него собственную управляемую форму, установите в функции СведенияОВнешнейОбработке() признак БезопасныйРежим = Истина и тип команды ТипКомандыОткрытиеФормы(), а если в модуле объекта используются внешние ресурсы или привилегированный режим — добавьте соответствующие разрешения через модуль РаботаВБезопасномРежиме.
ИИ Консоль отчётов 1С
Старт
Популярный выборДля индивидуального использования
- Сборка и проверка отчётов СКД (.erf)
-
≈ 100 задач Подробнее про лимиты
- Техническая поддержка
Лайт
Для ознакомления с возможностями
- Полный набор инструментов без урезаний
- Без ввода карты
Ранний доступ
Популярный выборТестирование продукта в режиме разработки
- Формирование панелей и виджетов в чате
- Поддержка таблиц и популярных типов диаграмм
- Приоритетный сбор обратной связи по развитию продукта
Продвинутый
Для интенсивного использования или команд
- Сборка и проверка отчётов СКД (.erf)
-
≈ 300 задач Подробнее про лимиты
- Техническая поддержка