Как программно открыть и отобразить внешний файл в интерфейсе 1С?

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

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

Способ 1. Использование объекта ТабличныйДокумент

Это самый популярный и нативный способ для отображения файлов электронных таблиц (Excel, ODS) и текстовых данных (CSV, TXT). Объект ТабличныйДокумент в 1С обладает мощным встроенным методом Прочитать(), который берет на себя всю работу по парсингу структуры файла.

Разберем по шагам, как это реализовать. Предположим, у нас есть путь к файлу Excel. Нам необходимо создать объект табличного документа, прочитать в него данные и вывести на экран.


&НаКлиенте
Процедура ОткрытьЭксельВ1С(ПутьКФайлу)
    // Создаем новый табличный документ
    ТаблДок = Новый ТабличныйДокумент;
    
    // Читаем файл. Параметр СпособЧтенияЗначенийТабличногоДокумента 
    // позволяет выбрать, как интерпретировать данные (текст или значения)
    Попытка
        ТаблДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
        
        // Показываем документ пользователю в отдельном окне
        ТаблДок.Показать("Содержимое файла: " + ПутьКФайлу);
    Исключение
        Сообщить("Не удалось прочитать файл: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Важные нюансы метода Прочитать():

  1. Форматы: Метод поддерживает расширения .xls, .xlsx, .ods, .txt и .csv.
  2. Ограничения: 1С не является полноценным редактором Excel. Если файл содержит очень сложные формулы, макросы или специфические элементы графики (SmartArt), они могут не отобразиться или отобразиться некорректно.
  3. Режим чтения: Используя СпособЧтенияЗначенийТабличногоДокумента.Текст, вы получите данные в том виде, в котором они отображаются в ячейках. Режим Значение попытается привести данные к типам 1С (число, дата).

Способ 2. Интерактивный выбор файла через диалог

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

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


&НаКлиенте
Процедура ВыбратьИОткрытьФайл(Команда)
    ПараметрыДиалога = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ПараметрыДиалога.Заголовок = "Выберите файл для открытия в 1С";
    ПараметрыДиалога.Фильтр = "Файлы Excel (*.xlsx)|*.xlsx|Все файлы (*.*)|*.*";
    
    // Используем асинхронный метод для работы в управляемом приложении
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
    ПараметрыДиалога.Показать(ОписаниеОповещения);
КонецПроцедуры

&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
    Если ВыбранныеФайлы <> Неопределено Тогда
        ПутьКФайлу = ВыбранныеФайлы[0];
        // Теперь вызываем чтение в ТабличныйДокумент
        ТабДок = Новый ТабличныйДокумент;
        ТабДок.Прочитать(ПутьКФайлу);
        ТабДок.Показать(ПутьКФайлу);
    КонецЕсли;
КонецПроцедуры

Способ 3. Просмотр PDF и изображений

Начиная с версии платформы 8.3.10, в 1С появилась встроенная возможность просмотра PDF-файлов. Это избавляет от необходимости устанавливать Adobe Reader или использовать браузеры. Проанализируем, как вывести PDF на форму.

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

Алгоритм действий следующий:

  1. Создаем на форме строковый реквизит ПутьКФайлу.
  2. Размещаем его на форме как Поле картинки.
  3. В коде присваиваем этому реквизиту путь к локальному файлу или навигационную ссылку на двоичные данные.

// Пример для отображения PDF в поле на форме
&НаКлиенте
Процедура ПоказатьPDF(ПутьКФайлу)
    // Элемент формы "ПолеPDF" связан с реквизитом, куда мы передаем путь
    Объект.ПутьКФайлу = ПутьКФайлу; 
КонецПроцедуры

Способ 4. Поле HTML-документа для сложных форматов

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

Разберем пример вывода локального файла через HTML:


&НаКлиенте
Процедура ОткрытьЧерезHTML(ПутьКФайлу)
    // Формируем путь в формате URL
    ТекстHTML = "<html><body><iframe src='file:///" + ПутьКФайлу + "' width='100%' height='100%'></iframe></body></html>";
    Элементы.ПолеHTML.УстановитьТекст(ТекстHTML);
КонецПроцедуры

Способ 5. Использование COM-объектов (ActiveX)

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

Важно: этот метод работает только в Windows и только если на компьютере установлен Microsoft Excel.


&НаКлиенте
Процедура ОткрытьЧерезCOM(ПутьКФайлу)
    Попытка
        ExcelПриложение = Новый COMОбъект("Excel.Application");
        Книга = ExcelПриложение.Workbooks.Open(ПутьКФайлу);
        
        // Делаем Excel видимым (он откроется в своем окне, но под управлением 1С)
        ExcelПриложение.Visible = Истина;
    Исключение
        Сообщить("Ошибка при запуске Excel: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Рассмотрим подробнее минусы этого подхода. Использование COMОбъект значительно медленнее, требует наличия лицензионного офисного ПО и часто приводит к зависанию процессов excel.exe в памяти, если программист забыл вызвать ExcelПриложение.Quit().

Выводы и рекомендации

Выясним, какой метод лучше выбрать в зависимости от задачи:

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

← На главную