Почему внешний отчет выдает пустой результат в положении «Используется» и как это исправить

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

В этой статье мы подробно разберем, почему это происходит, проанализируем механизмы работы БСП и выясним, какую строку кода нужно изменить, чтобы отчет всегда формировал данные корректно.

Разбор механизма регистрации внешнего отчета

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

Проанализируем пример кода для регистрации:


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

    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Сформировать отчет", "ИмяКоманды", "ОткрытиеФормы", Истина);
    
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции

Многие разработчики полагают, что если в параметре БезопасныйРежим указано значение Ложь, то отчет будет обладать всеми правами в любом контексте. Однако это не совсем так. При статусе «Используется» БСП применяет к отчету дополнительные механизмы управления настройками, которые могут конфликтовать с логикой, написанной внутри формы отчета.

Выясняем основную причину: Логика в модуле формы

Как показывает практика, проблема чаще всего кроется не в параметрах регистрации, а в том, как форма отчета реагирует на условия запуска. В стандартных шаблонах отчетов, особенно если они создавались на базе типовых решений, часто встречается код, который проверяет контекст выполнения.

Рассмотрим ситуацию: в модуле формы может присутствовать функция, управляющая флагом формирования отчета. Проанализируем пример кода, который часто становится источником ошибки:


// Ошибочный вариант логики в форме
Результат = РезультатФормированияОтчета(ФормированиеПриОткрытии, НастройкиОтчета.Внешний Или НастройкиОтчета.Безопасный);

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

Выясним, как это исправить. Нам необходимо принудительно разрешить формирование отчета, независимо от того, считает ли система сеанс «безопасным» или «внешним» с точки зрения БСП.

Пошаговое решение проблемы

Чтобы ваш отчет перестал выдавать пустой результат при запуске из справочника дополнительных обработок, выполните следующие действия:

  1. Откройте конфигуратор и перейдите в модуль формы вашего внешнего отчета.
  2. Найдите процедуру или функцию, которая отвечает за инициализацию настроек отчета (обычно это происходит ПриОткрытии или в специализированных процедурах БСП для работы с отчетами).
  3. Найдите вызов функции РезультатФормированияОтчета.
  4. Измените логику передачи параметров. Вместо проверки на внешнее или безопасное выполнение, передайте Истина, если вы хотите, чтобы отчет формировался всегда.

Пример исправленного кода:


// Исправленный вариант логики
// Вместо проверки контекста, мы явно разрешаем формирование
Результат = РезультатФормированияОтчета(ФормированиеПриОткрытии, Истина);

После внесения этих изменений отчет будет игнорировать флаги «безопасности» контекста БСП, которые ошибочно блокировали вывод данных.

Дополнительные факторы, влияющие на результат

Если после правки кода в модуле формы отчет все равно пустой, проанализируем еще несколько важных технических нюансов:

1. Использование фонового формирования
В режиме «Используется» БСП по умолчанию может пытаться сформировать отчет в фоновом задании. Если ваш отчет использует временные таблицы, сформированные в коде, или обращается к параметрам сеанса, которые недоступны на сервере в фоновом режиме, результат будет пустым. Попробуйте в процедуре ОпределитьНастройкиФормы в модуле объекта установить свойство РазрешитьВыполнениеВФоне в значение Ложь.

2. Кэширование внешних объектов
Система 1С кэширует файлы внешних обработок. При тестировании исправлений обязательно делайте следующее:

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

4. Роли и права доступа (RLS)
Когда отчет запущен в режиме «Используется», он проходит через механизмы проверки прав БСП. Если у пользователя ограничены права на программное чтение метаданных или действуют ограничения на уровне записей (RLS), отчет может не получить данные. Убедитесь, что в коде отчета не используются конструкции, требующие привилегированного режима, либо установите флаг БезопасныйРежим = Ложь и убедитесь, что профиль безопасности в информационной базе позволяет выполнение этих операций.

Заключение

Проблема «пустого отчета» в 1С чаще всего связана с избыточной защитной логикой в коде формы, которая срабатывает при интеграции в подсистему «Дополнительные отчеты и обработки». Мы разберем, что именно проверка НастройкиОтчета.Внешний зачастую является «камнем преткновения». Следуя приведенным выше инструкциям по корректировке функции РезультатФормированияОтчета, вы сможете обеспечить стабильную работу своих разработок в любых условиях использования.

← На главную