При переходе с обычных форм на управляемые (особенно в таких современных конфигурациях, как 1С:Комплексная автоматизация 2.4 или ERP 2.5), разработчики часто сталкиваются с тем, что старые методы работы с внешними обработками перестают быть эффективными или безопасными. Традиционный подход с использованием ПолучитьИмяВременногоФайла() и ручной записью двоичных данных на диск в среде управляемого приложения и жестких профилей безопасности может привести к ошибкам доступа или блокировкам со стороны системы. Рассмотрим современные стандарты разработки для решения этой задачи.
В конфигурации КА 2.4, построенной на базе Библиотеки стандартных подсистем (БСП), работа с внешними объектами (отчетами и обработками) централизована в справочнике ДополнительныеОтчетыИОбработки. Проанализируем, почему старый метод из «сообщения 0» больше не актуален. В управляемом интерфейсе, особенно если база работает в клиент-серверном варианте или в облаке, прямой доступ к файловой системе сервера ограничен. Вместо того чтобы самостоятельно извлекать данные из хранилища, мы должны использовать программный интерфейс модуля ДополнительныеОтчетыИОбработки.
Разберем основные шаги для программного подключения и создания объекта внешнего отчета:
ВнешниеОтчеты для создания экземпляра объекта по полученному имени.Посмотрим на пример кода, который реализует этот алгоритм:
// Находим ссылку на внешний отчет в справочнике БСП
СсылкаНаОтчет = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоКоду("Ц00000240");
// Используем метод БСП для безопасного подключения
ИмяОбработки = ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(СсылкаНаОтчет);
// Создаем объект внешнего отчета. Второй параметр "Истина" включает безопасный режим
ВнешнийОтчетОбъект = ВнешниеОтчеты.Создать(ИмяОбработки, Истина);
Поскольку автор вопроса упоминает необходимость «получить результат», нам нужно выполнить компоновку отчета без открытия его формы (в фоновом режиме или в рамках регламентного задания). Большинство внешних отчетов в КА 2.4 строятся на базе Системы компоновки данных (СКД). Чтобы программно получить сформированную таблицу, мы должны проделать следующие действия. При необходимости детального анализа схемы компоновки и промежуточных данных можно применить инструмент для отладки отчетов на СКД.
Проанализируем ситуацию: нам нужно инициализировать настройки компоновщика, выполнить компоновку и вывести результат в ТабличныйДокумент. Разберем по шагам:
// Подготавливаем табличный документ для результата
РезультатТабло = Новый ТабличныйДокумент;
// Инициализируем настройки (если нужно программно установить отборы)
Настройки = ВнешнийОтчетОбъект.КомпоновщикНастроек.ПолучитьНастройки();
// Выполняем стандартный метод формирования
ВнешнийОтчетОбъект.СкомпоноватьРезультат(РезультатТабло);
// Теперь в переменной РезультатТабло находится сформированный отчет
// Его можно сохранить в PDF/Excel или отправить по почте
РезультатТабло.Записать("C:\Temp\Report.pdf", ТипФайлаТабличногоДокумента.PDF);
Если задача заключается именно в запуске по расписанию, то в КА 2.4 нет необходимости писать собственный код для создания регламентного задания, которое будет «вытаскивать» отчет. БСП уже содержит встроенный механизм запуска внешних команд по расписанию.
Рассмотрим подробнее, как подготовить внешний отчет к работе в режиме регламентного задания:
СведенияОВнешнейОбработке().ДополнительныеОтчетыИОбработкиКлиентСервер.ВидКомандыВызовСерверногоМетода().ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды).Пример структуры модуля объекта для регламентного выполнения:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
// Логика формирования отчета
ТабДок = Новый ТабличныйДокумент;
ЭтотОбъект.СкомпоноватьРезультат(ТабДок);
// Логика сохранения или отправки результата
ОтправитьОтчетПоПочте(ТабДок);
КонецПроцедуры
После загрузки такого отчета в систему в карточке дополнительного отчета появится вкладка «Команды», где можно настроить расписание выполнения. Это гораздо надежнее, чем создавать кастомные регламентные задания в конфигураторе. Для пакетного добавления файлов в систему можно использовать обработку для загрузки внешних отчетов и обработок в справочник ДополнительныеОтчетыИОбработки.
Выясним причину возможных ошибок при выполнении кода в фоновом задании. В КА 2.4 часто используются профили безопасности. Если ваша внешняя обработка пытается записать файл на диск или обратиться к интернет-ресурсу, система может выдать исключение «Нарушение прав доступа».
Чтобы этого избежать, при регистрации внешнего отчета в пользовательском режиме убедитесь, что:
Резюмируем: Для работы с внешними отчетами в КА 2.4 следует отказаться от прямого использования ВнешниеОтчеты.Создать(ПутьКФайлу). Правильный путь — использование функций модуля ДополнительныеОтчетыИОбработки, что обеспечивает корректную работу в управляемом приложении, соблюдение прав доступа и интеграцию со стандартными механизмами планирования задач.