СКД в 1С

Внешний отчёт 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С В панелях отчётов разделов и в меню «Дополнительные отчёты» выбранных подсистем В подменю кнопки «Отчёты» внутри формы документа, справочника или списка
Как настраивается размещение В карточке справочника (реквизит «Размещение») и при сохранении варианта отчёта Автоматически по списку объектов из массива Назначение (с возможностью уточнения в карточке)
Передача контекста при открытии Отчёт открывается без отбора по текущему объекту В параметры формы передаётся коллекция ОбъектыНазначения со ссылками выбранных элементов

Распространённое заблуждение — попытка указать раздел командного интерфейса программно через ПараметрыРегистрации.Назначение.Добавить("Подсистема.Продажи"). Массив Назначение проверяется платформой через допустимые типы владельцев команд и принимает только ссылочные объекты (документы, справочники и др.). Разделы интерфейса для глобального отчёта администратор или автор выбирает интерактивно в карточке ДополнительныеОтчетыИОбработки по гиперссылке «Размещение», а также при публикации вариантов в справочнике ВариантыОтчетов.

В ИИ Консоли отчётов 1С не нужно вручную писать шаблон регистрации для БСП и искать версию библиотеки в конфигураторе. Агент изучает метаданные вашей базы, собирает схему компоновки данных, сам генерирует модуль объекта с СведенияОВнешнейОбработке() и собирает готовый файл .erf, который сразу загружается в справочник дополнительных отчётов.

Ошибка «Свойство отчета "ХранилищеВариантов" не заполнено» и как её исправить

При добавлении нового файла .erf в справочник дополнительных отчётов в 1С:ERP, ЗУП 3.1, УТ 11 или БП 3.0 часто всплывает диагностическое сообщение:

Свойство отчета «Хранилище вариантов» не заполнено. Сохранение (выбор) вариантов отчета будет работать в ограниченном режиме. Обратитесь к разработчику дополнительного (внешнего) отчета.

Причина предупреждения кроется в архитектуре подсистемы ВариантыОтчетов. Когда внешний отчёт создаётся в Конфигураторе через меню Файл — Новый — Внешний отчет, платформенные свойства корневого объекта по умолчанию остаются пустыми. Без привязки к стандартному хранилищу конфигурации БСП не знает, куда записывать изменённые варианты СКД, как разграничивать к ним права доступа («Только для автора» или «Всем пользователям») и как публиковать сохранённые варианты в панелях отчётов разделов.

Пошаговое исправление в Конфигураторе

  1. Откройте файл внешнего отчёта .erf в Конфигураторе информационной базы, для которой он разрабатывается.
  2. Дважды кликните по корневому узлу дерева метаданных отчёта (или вызовите контекстное меню Свойства).
  3. В палитре свойств на вкладке Основные (или Прочие в зависимости от режима отображения) найдите свойство Хранилище вариантов (ХранилищеВариантов) и выберите из выпадающего списка объект конфигурации ХранилищеВариантовОтчетов.
  4. В соседнем свойстве Хранилище настроек (ХранилищеНастроек, хранилище пользовательских настроек) укажите ХранилищеПользовательскихНастроекОтчетов — это обеспечит автоматическое сохранение быстрых отборов и периода между сеансами пользователя.
  5. Сохраните внешний отчёт (Ctrl + S) и обновите его из файла в карточке справочника ДополнительныеОтчетыИОбработки.

После установки ХранилищеВариантовОтчетов и регистрации файла в справочнике БСП автоматически синхронизирует варианты из СхемаКомпоновкиДанных со справочником ВариантыОтчетов. Пользователи смогут сохранять собственные варианты настроек, делать их доступными коллегам, выводить в разделы учёта и подключать к регламентным рассылкам отчётов.

Работа без собственной формы и настройка ОбщаяФорма.ФормаОтчета

При разработке внешнего отчёта на СКД для типовой конфигурации на БСП не нужно создавать собственную управляемую форму отчёта. В свойствах корневого объекта ВнешнийОтчет оставьте поля ОсновнаяФормаОтчета и ОсновнаяФормаНастроек пустыми.

Если собственная форма не задана, при запуске команды с типом ТипКомандыОткрытиеФормы() подсистема БСП открывает отчёт в универсальной форме ОбщаяФорма.ФормаОтчета. Это даёт сразу два важных преимущества:

  • Отсутствие ошибки Поле объекта не обнаружено (КонтекстВарианта). Если назначить внешнему отчёту собственную автогенерируемую форму платформы и одновременно указать ХранилищеВариантовОтчетов, при нажатии кнопки «Сохранить вариант отчёта» форма сохранения БСП обратится к реквизиту ВладелецФормы.КонтекстВарианта. В обычной форме этого реквизита нет, и платформа упадёт с исключением. В ОбщаяФорма.ФормаОтчета все служебные реквизиты БСП (КонтекстВарианта, ПараметрыОтчета, КлючТекущегоВарианта) уже присутствуют.
  • Готовый сервис БСП. Пользователь получает переключатель режимов «Простой / Расширенный», подсчёт суммы выделенных ячеек табличного документа, отправку по почте и фоновое формирование без единой строчки UI-кода.

Если отчёту на общей форме требуется особая инициализация (например, сформировать отчёт сразу при открытии или подставить отбор из документа для контекстного отчёта вида ВидОбработкиОтчет()), в модуле объекта объявляют экспортную процедуру ОпределитьНастройкиФормы и подписываются на серверные события общей формы:

// В функции СведенияОВнешнейОбработке() предварительно укажите:
// ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет();
// ПараметрыРегистрации.Назначение.Добавить("Документ.ЗаказКлиента");
// ПараметрыРегистрации.ОпределитьНастройкиФормы = Истина;

Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт

    Настройки.ФормироватьПриОткрытии = Истина;
    Настройки.События.ПриСозданииНаСервере = Истина;

КонецПроцедуры

Процедура ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка) Экспорт

    ОбъектыНазначения = Неопределено;
    Если Форма.Параметры.Свойство("ОбъектыНазначения", ОбъектыНазначения)
        И ЗначениеЗаполнено(ОбъектыНазначения) Тогда

        КомпоновкаДанныхКлиентСервер.УстановитьЭлементОтбора(
            Форма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки,
            "ЗаказКлиента",
            ОбъектыНазначения,
            ВидСравненияКомпоновкиДанных.ВСписке,
            ,
            Истина
        );
    КонецЕсли;

КонецПроцедуры
ОпределитьНастройкиФормы
ФормаФормаКлиентскогоПриложения — экземпляр открываемой ОбщаяФорма.ФормаОтчета (или Неопределено при предварительном чтении)
КлючВариантаСтрока — имя варианта из схемы компоновки данных
НастройкиСтруктура — управляющие флаги (ФормироватьПриОткрытии, РазрешеноИзменятьВарианты, ВыводитьКоманднуюПанель) и вложенная структура подписок События
→ Процедура модуля объекта

Важное правило: если вы установили в структуре Настройки.События какой-либо флаг в Истина (например, ПриСозданииНаСервере или ПриЗагрузкеПользовательскихНастроекНаСервере), одноимённая экспортная процедура с точной сигнатурой обязана присутствовать в модуле объекта отчёта. Иначе при открытии формы или чтении сохранённых настроек возникнет ошибка «Метод объекта не обнаружен».

Почему внешний отчёт не открывается в безопасном режиме

Во всех актуальных конфигурациях на БСП, а также в облачных сервисах 1С:Фреш и клиент-серверных базах с профилями безопасности внешние отчёты подключаются с флагом ПараметрыРегистрации.БезопасныйРежим = Истина. В безопасном режиме ядро платформы 1С:Предприятие 8.3 изолирует серверный вызов и блокирует потенциально опасные операции:

  • выполнение произвольного кода через Выполнить() и Вычислить() во внешних модулях;
  • создание COM-объектов (Новый COMОбъект("Excel.Application"), ADODB.Connection) и загрузку внешних компонент;
  • прямой доступ к файловой системе сервера 1С вне изолированного временного каталога, запуск приложений ОС и внешние сетевые соединения;
  • самостоятельный переход в привилегированный режим (УстановитьПривилегированныйРежим(Истина)) без выданного разрешения.

Но главной причиной, почему обычный отчёт на СКД без внешних вызовов не открывается или падает в безопасном режиме, является наличие в файле .erf собственной управляемой формы с серверным модулем или попытка обращаться из формы к закрытым методам конфигурации. Когда отчёт содержит только макет СхемаКомпоновкиДанных и стандартный модуль объекта, а за интерфейс отвечает доверенная ОбщаяФорма.ФормаОтчета самой конфигурации, вся компоновка выполняется штатным процессором БСП и проходит контроль безопасного режима без единого замечания.

Если же бизнес-логика отчёта в процедуре ПриКомпоновкеРезультата действительно требует обращения к внешнему ресурсу (например, чтения временного файла или HTTP-сервиса), не отключайте БезопасныйРежим — в базах с активным профилем безопасности кластера значение Ложь всё равно будет проигнорировано, либо БСП запретит загрузку файла. Вместо этого запросите явные разрешения через модуль РаботаВБезопасномРежиме:

// Внутри функции СведенияОВнешнейОбработке() при БезопасныйРежим = Истина:
ПараметрыРегистрации.БезопасныйРежим = Истина;

РазрешениеКаталог = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаВременныхФайлов(
    Истина, Ложь, НСтр("ru = 'Чтение временного файла выгрузки для СКД'")
);
ПараметрыРегистрации.Разрешения.Добавить(РазрешениеКаталог);

РазрешениеПривилегии = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима(
    НСтр("ru = 'Чтение служебного регистра сведений без прав RLS'")
);
ПараметрыРегистрации.Разрешения.Добавить(РазрешениеПривилегии);
РаботаВБезопасномРежиме
РазрешениеНаИспользованиеКаталогаВременныхФайлов(Чтение, Запись, Пояснение) — доступ к временной папке сеанса на сервере
РазрешениеНаИспользованиеПривилегированногоРежима(Пояснение) — право вызывать УстановитьПривилегированныйРежим(Истина)
РазрешениеНаИспользованиеИнтернетРесурса(Протокол, Сервер, Порт, Пояснение) — разрешение на внешнее соединение
→ XDTOОбъект (элемент массива Разрешения)
При сборке отчёта в ИИ Консоли отчётов 1С агент формирует готовый файл .erf со стандартной формой БСП, заполняет СведенияОВнешнейОбработке() с БезопасныйРежим = Истина и проверяет открытие отчёта в 1С.

Частые ошибки при подключении внешнего отчёта в БСП

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

Частые вопросы по внешним отчётам в БСП

Чем вид «ДополнительныйОтчет» отличается от вида «Отчет» в СведенияОВнешнейОбработке?

Вид ДополнительныйОтчет (ВидОбработкиДополнительныйОтчет) регистрирует глобальный аналитический отчёт, который размещается в панелях отчётов разделов интерфейса (например, «Продажи», «Склад», «Финансы») и открывается независимо от конкретных документов. Вид Отчет (ВидОбработкиОтчет) предназначен для контекстных отчётов: они привязываются через массив Назначение к конкретным справочникам или документам, вызываются по кнопке «Отчёты» прямо из формы объекта или списка и получают массив выбранных ссылок в параметр формы ОбъектыНазначения.

Как исправить предупреждение «Свойство отчета "ХранилищеВариантов" не заполнено»?

Откройте файл внешнего отчёта (.erf) в Конфигураторе целевой информационной базы, выделите корневой узел отчёта в дереве метаданных и откройте палитру свойств. В свойстве «Хранилище вариантов» (ХранилищеВариантов) выберите значение ХранилищеВариантовОтчетов, а в свойстве «Хранилище настроек» укажите ХранилищеПользовательскихНастроекОтчетов. При этом поле «Основная форма отчёта» оставьте пустым, чтобы отчёт открывался общей формой БСП ОбщаяФорма.ФормаОтчета, после чего сохраните файл и заново загрузите его в справочник дополнительных отчётов и обработок.

Почему внешний отчёт на СКД работает через «Файл — Открыть», но не запускается из справочника БСП?

При интерактивном открытии через меню «Файл — Открыть» код исполняется с правами текущего сеанса и использует стандартную автоформу платформы, тогда как из справочника «Дополнительные отчёты и обработки» БСП запускает внешний отчёт на сервере в безопасном режиме через ОбщаяФорма.ФормаОтчета. Чтобы отчёт запускался без ошибок, удалите из него собственную управляемую форму, установите в функции СведенияОВнешнейОбработке() признак БезопасныйРежим = Истина и тип команды ТипКомандыОткрытиеФормы(), а если в модуле объекта используются внешние ресурсы или привилегированный режим — добавьте соответствующие разрешения через модуль РаботаВБезопасномРежиме.

Тарифы

ИИ Консоль отчётов 1С

Лайт

Бесплатно

Для ознакомления с возможностями

  • Все функции бесплатно на 2 дня +2 дня за подписку на Telegram или Max
  • Полный набор инструментов без урезаний
  • Без ввода карты

Ранний доступ

Популярный выбор
Бесплатно

Тестирование продукта в режиме разработки

  • Формирование панелей и виджетов в чате
  • Поддержка таблиц и популярных типов диаграмм
  • Приоритетный сбор обратной связи по развитию продукта