1с запустить внешний отчет программно

В версии 8.2 и старше: приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере.

Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий:

  • Передать файл внешней обработки на сервер
  • Подключить внешнюю обработку
  • Открыть форму внешней обработки

Чтобы передать файл на сервер, его нужно поместить во временное хранилище. Для этого сначала на клиенте, в обработчике команды открытия внешней обработки, методом глобального контекста ПоместитьФайл() мы помещаем файл из локальной файловой системы во временное хранилище.

В четвертом параметре этого метода указывается признак интерактивного режима выбора файла внешней обработки. Если этот параметр Истина, то появляется диалог выбора файла, в котором можно выбрать файл для помещения в хранилище. В нашем примере этот параметр — Ложь, а путь к файлу, данные из которого будут помещены во временное хранилище, явно задан во втором параметре метода.

При вызове метода ПоместитьФайл() первым его параметром, АдресХранилища, мы указываем пустую строку. После выполнения метода в нее будет помещен путь к файлу внешней обработки во временном хранилище. Этот путь мы используем для того, чтобы подключить внешнюю обработку.

Подключение внешней обработки выполняется на сервере методом Подключить() менеджера внешних обработок. В качестве параметра ему передается путь к файлу внешней обработки во временном хранилище — АдресХранилища. Возвращает этот метод имя подключенной внешней обработки, — ИмяОбработки, — которое мы используем для того, чтобы открыть форму этой обработки.

Для открытия формы внешней обработки используется метод глобального контекста ОткрытьФорму(), в который передается имя формы в виде следующей строки: «ВнешняяОбработка.»+ ИмяОбработки +».Форма». В приведенном варианте открывается основная форма обработки.

При работе с внешними обработками нужно учитывать, что по-умолчанию они запускаются в безопасном режиме исполнения программного кода. Это значит, что некоторые возможности встроенного языка будут для них недоступны. Если есть уверенность, что внешняя обработка не содержит вредоносного кода, ее можно подключить в обычном режиме исполнения программного кода. Для этого используется третий параметр метода Подключить() менеджера внешних обработок.

Подробнее о режиме безопасного исполнения программного кода можно прочитать в документации: 1С:Предприятие 8.2. Руководство разработчика, Раздел 5.5.4.3: Объекты конфигурации — Ветвь конфигурации «Общие» — Роли и права доступа — Безопасный режим работы.

Подробнее об использовании метода ПоместитьФайл() можно прочитать в синтакс-помощнике: Глобальный контекст — Процедуры и функции работы с файлами.

Подробнее об использовании метода Подключить() можно прочитать в синтакс-помощнике: Прикладные объекты — Внешние обработки и отчеты — ВнешниеОбработкиМенеджер — Методы.

У объекта ВнешняяОбработкаОбъект, есть свойство ИспользуемоеИмяФайла, доступное в контексте сервера — может пригодиться.

Жизненный пример

Форма с деревом значений, в котором перечислены обработки из каталога на сервере:

При двойном щелчке по названию файла — происходит его программное открытие:

В данной статье будет рассмотрен процесс открытия(и формирования) внешнего отчета подключенного к базе. Пример будет рассмотрен для конфигурации 1С:Управление торговлей 11.1.

Допустим у нас есть внешняя обработка, на ее форме расположена кнопка при нажатии на которую должен открываться внешний отчет, который подключен в к базе при помощи справочника ДополнительныеОтчетыИОбработки. В данном справочнике он имеет имя “Мой внешний отчет”, также при запуске отчета следует заполнить параметр его схемы компоновки данныхПериод(тип СтандартныйПериод) и установить отборы по полям Организация и Номенклатура.

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

  • Создадим реквизит формы МойОтчет типа СправочникСсылка.ДополнительныеОтчетыИОбработки.
  • Создадим реквизит формы ВидОтчет типа ПеречислениеСсылка.ВидыДополнительныхОтчетовИОбработок

Так как процедура открытия отчета будет происходить НаКлиенте, а заполнить описанные выше реквизиты можно только на сервере(если не делать дополнительный ввод данных на форме), то сделаем это в процедуре формы ПриСозданииНаСервере.

Далее создадим процедуру в которой будем открывать наш отчет, в параметрах передадим даты начала и окончания, которые необходимы для заполнения параметра Период, а также Организацию и Номенклатурудля отбора:

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

В процедуре ЗапускМоегоОтчета заполним переменную с выполняемой командой при помощи описанной процедуры:

Теперь заполним недостающие поля команды:

Создадим структуру с параметрами запуска нашего отчета:

Обратите внимание на параметр СформироватьПриОткрытии, если установить там значение Истина, то отчет будет автоматически сформирован после открытия.

Для дальнейшей работы с отчетом его необходимо подключить(временное подключение для работы в текущей сессии). После подключения отчет или обработка регистрируется в программе под определенным именем, используя которое можно создавать объект или открывать формы отчета или обработки.

Для этого используем типовую процедуру УТ 11.1 ПодключитьВнешнююОбработку.

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

Заполним параметры схемы компоновки(в нашем случае имеется один параметр Период) для этого нам понадобится функция поиска параметра в пользовательских настройках отчета, добавим ее в модуль обработки:

И процедура установки параметра пользовательской настройки:

Код для поиска и заполнения параметра в процедуре ЗапускМоегоОтчета:

Перейдем к заполнению отборов отчета. Нам понадобится процедура поиска отбора в пользовательской настройке:

Код для поиска и заполнения отбора по номенклатуре *в процедуре *ЗапускМоегоОтчета:

И для отбора по организации:

На этом работа с настройками отчета завершена, осталось добавить их в параметры обработки:

Получим форму отчета с учетом параметров и откроем ее:

На этом все, отчет откроется и сформируется.

Полный код процедуры ЗапускМоегоОтчета:

СсылкаНаОбъект = Справочники . ВнешниеОбработки . НайтиПоКоду ( «000000019» );

ЭтоОбработка = ?( СсылкаНаОбъект . ВидОбработки = Перечисления . ВидыДополнительныхВнешнихОбработок . Обработка , Истина, Ложь);
ЭтоОтчет = ?( СсылкаНаОбъект . ВидОбработки = Перечисления . ВидыДополнительныхВнешнихОбработок . Отчет , Истина, Ложь);

Если НЕ ( ЭтоОбработка ИЛИ ЭтоОтчет ) Тогда
Возврат;
КонецЕсли;

ИмяФайла = ПолучитьИмяВременногоФайла ();
ДвоичныеДанные = СсылкаНаОбъект . ХранилищеВнешнейОбработки . Получить ();
ДвоичныеДанные . Записать ( ИмяФайла );

Попытка
Если ЭтоОбработка Тогда
Форма = ВнешниеОбработки . ПолучитьФорму ( ИмяФайла );
Иначе
Форма = ВнешниеОтчеты . ПолучитьФорму ( ИмяФайла );
КонецЕсли;

Если Не Форма = Неопределено Тогда
Форма . Открыть ();
Иначе
Сообщить ( «Форма открываемой обработки или отчета не определена.» , СтатусСообщения . БезСтатуса );
КонецЕсли;
Исключение
Если ЭтоОбработка Тогда
Предупреждение ( «Выбранный файл не является внешней обработкой.
|Либо, данная обработка не предназначена для
|запуска в этой конфигурации.» );
Иначе
Предупреждение ( «Выбранный файл не является внешним отчетом.
|Либо, данный отчет не предназначена для
|запуска в этой конфигурации.» );
КонецЕсли;
КонецПопытки;

Оцените статью