Как программно сформировать внешний отчет и получить результат в 1С:КА 2.4 на управляемых формах

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

При переходе с обычных форм на управляемые (особенно в таких современных конфигурациях, как 1С:Комплексная автоматизация 2.4 или ERP 2.5), разработчики часто сталкиваются с тем, что старые методы работы с внешними обработками перестают быть эффективными или безопасными. Традиционный подход с использованием ПолучитьИмяВременногоФайла() и ручной записью двоичных данных на диск в среде управляемого приложения и жестких профилей безопасности может привести к ошибкам доступа или блокировкам со стороны системы. Рассмотрим современные стандарты разработки для решения этой задачи.

Переход от ручного управления файлами к механизмам БСП

В конфигурации КА 2.4, построенной на базе Библиотеки стандартных подсистем (БСП), работа с внешними объектами (отчетами и обработками) централизована в справочнике ДополнительныеОтчетыИОбработки. Проанализируем, почему старый метод из «сообщения 0» больше не актуален. В управляемом интерфейсе, особенно если база работает в клиент-серверном варианте или в облаке, прямой доступ к файловой системе сервера ограничен. Вместо того чтобы самостоятельно извлекать данные из хранилища, мы должны использовать программный интерфейс модуля ДополнительныеОтчетыИОбработки.

Разберем основные шаги для программного подключения и создания объекта внешнего отчета:

  1. Получение ссылки на внешний отчет: Сначала необходимо найти нужный отчет в справочнике по коду, наименованию или другому идентификатору.
  2. Подключение обработки: Вызов серверного метода, который зарегистрирует обработку во временном сеансе и вернет ее имя.
  3. Создание объекта: Использование стандартного менеджера ВнешниеОтчеты для создания экземпляра объекта по полученному имени.

Посмотрим на пример кода, который реализует этот алгоритм:


// Находим ссылку на внешний отчет в справочнике БСП
СсылкаНаОтчет = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоКоду("Ц00000240");

// Используем метод БСП для безопасного подключения
ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(СсылкаНаОтчет);

// Создаем объект внешнего отчета. Второй параметр "Истина" включает безопасный режим
ВнешнийОтчетОбъект = ВнешниеОтчеты.Создать(ИмяОбработки, Истина);

Программное формирование результата отчета (СКД)

Поскольку автор вопроса упоминает необходимость «получить результат», нам нужно выполнить компоновку отчета без открытия его формы (в фоновом режиме или в рамках регламентного задания). Большинство внешних отчетов в КА 2.4 строятся на базе Системы компоновки данных (СКД). Чтобы программно получить сформированную таблицу, мы должны проделать следующие действия. При необходимости детального анализа схемы компоновки и промежуточных данных можно применить инструмент для отладки отчетов на СКД.

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


// Подготавливаем табличный документ для результата
РезультатТабло = Новый ТабличныйДокумент;

// Инициализируем настройки (если нужно программно установить отборы)
Настройки = ВнешнийОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();

// Выполняем стандартный метод формирования
ВнешнийОтчетОбъект.СкомпоноватьРезультат(РезультатТабло);

// Теперь в переменной РезультатТабло находится сформированный отчет
// Его можно сохранить в PDF/Excel или отправить по почте
РезультатТабло.Записать("C:\Temp\Report.pdf", ТипФайлаТабличногоДокумента.PDF);

Реализация регламентного задания для внешнего отчета

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

Рассмотрим подробнее, как подготовить внешний отчет к работе в режиме регламентного задания:

  1. В модуле объекта внешнего отчета должна быть функция СведенияОВнешнейОбработке().
  2. В таблице команд для нужной команды следует указать способ вызова: ДополнительныеОтчетыИОбработкиКлиентСервер.ВидКомандыВызовСерверногоМетода().
  3. В модуле объекта должна присутствовать экспортная процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды).

Пример структуры модуля объекта для регламентного выполнения:


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

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

Важные аспекты безопасности и профилей

Выясним причину возможных ошибок при выполнении кода в фоновом задании. В КА 2.4 часто используются профили безопасности. Если ваша внешняя обработка пытается записать файл на диск или обратиться к интернет-ресурсу, система может выдать исключение «Нарушение прав доступа».

Чтобы этого избежать, при регистрации внешнего отчета в пользовательском режиме убедитесь, что:

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

← На главную