Как вызвать внешнюю обработку в 1С: Enterprise: от командной строки до программного кода

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

Вопрос быстрого доступа к внешним обработкам актуален для любого разработчика и администратора 1С. Часто возникает ситуация, когда нужно предоставить пользователю удобную кнопку для запуска конкретного файла .epf, не внося при этом масштабных изменений в основную конфигурацию. Мы проанализируем различные подходы к решению этой задачи, начиная от простых параметров запуска и заканчивая программным подключением обработок в управляемом интерфейсе 8.3.

Способ 1. Использование параметров запуска 1С

Если нам требуется, чтобы конкретная обработка открывалась сразу при запуске программы (например, специализированная панель инструментов или мастер настройки), мы можем воспользоваться параметром командной строки /Execute. Этот метод позволяет запустить обработку без внесения каких-либо изменений в конфигуратор.

Рассмотрим структуру строки запуска для серверной базы:

"C:\Program Files\1cv8\bin\1cv8.exe" ENTERPRISE /S"ИмяСервера\ИмяБазы" /N"Логин" /P"Пароль" /Execute "C:\ExternalFiles\НашаОбработка.epf"

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

Способ 2. Программный вызов внешней обработки из файла

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

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


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    // Помещаем файл обработки во временное хранилище
    АдресХранилища = "";
    Результат = ПоместитьФайл(АдресХранилища, "C:\ВнешняяОбработка.epf", , Ложь);
    
    Если Результат Тогда
        // Подключаем обработку на сервере
        ИмяОбработки = ПодключитьВнешнююОбработку(АдресХранилища);
        
        // Открываем форму подключенной обработки
        ОткрытьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма");
    КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ПодключитьВнешнююОбработку(АдресХранилища)
    // Метод ВнешниеОбработки.Подключить возвращает уникальное внутреннее имя
    Возврат ВнешниеОбработки.Подключить(АдресХранилища);
КонецФункции

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

Способ 3. Вызов обработки, хранящейся в справочнике системы

Наиболее правильным и безопасным методом в типовых конфигурациях является хранение обработок в справочнике Дополнительные отчеты и обработки. Это позволяет централизованно управлять правами доступа и версиями файлов. Если нам нужно программно вызвать такую обработку, мы должны извлечь ее двоичные данные из хранилища значений.

Рассмотрим, как это реализовать программно:


&НаСервере
Функция ПодключитьОбработкуИзБазы(ИмяОбъекта)
    // Ищем обработку в справочнике по внутреннему имени или другому реквизиту
    СсылкаНаОбработку = Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", ИмяОбъекта);
    
    Если СсылкаНаОбработку.Пустая() Тогда
        Возврат Неопределено;
    КонецЕсли;

    // Получаем двоичные данные файла из хранилища
    ДвоичныеДанные = СсылкаНаОбработку.ХранилищеОбработки.Получить();
    АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
    
    // Регистрируем обработку в сеансе
    Возврат ВнешниеОбработки.Подключить(АдресХранилища);
КонецФункции

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

Способ 4. Использование расширений конфигурации

Если начальство требует именно "кнопочку в интерфейсе", а использование справочника дополнительных обработок кажется им слишком сложным (нужно сделать 2-3 лишних клика), лучшим решением будет использование Расширений конфигурации.

Выясним преимущества этого подхода:

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

Таким образом, пользователь видит привычную кнопку, а система "под капотом" обращается к внешнему файлу или записи в справочнике.

Важные нюансы работы в управляемом приложении

При реализации вызова внешних обработок в 1С 8.3 необходимо учитывать несколько критических факторов, которые часто становятся причиной ошибок:

Безопасный режим: По умолчанию внешние обработки, подключаемые программно через ВнешниеОбработки.Подключить(), запускаются в безопасном режиме. Это означает, что им запрещен доступ к файловой системе, установке внешних COM-соединений или работе с API. Если ваша обработка должна, например, сохранять данные в файл Excel, необходимо при подключении явно указать БезопасныйРежим = Ложь. Однако помните, что для этого у пользователя должны быть соответствующие административные права.

Веб-клиент и Тонкий клиент: Помните, что путь к файлу вида C:\Folder\File.epf будет работать только в толстом клиенте или если файл гарантированно лежит по этому пути на клиентском компьютере. При работе через браузер (веб-клиент) всегда используйте интерактивный выбор файла через НачатьПомещениеФайла(), чтобы передать данные на сервер.

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

← На главную