В процессе разработки часто возникает задача не просто запустить внешний файл (например, Excel или PDF) в стороннем приложении, а отобразить его содержимое непосредственно внутри окна 1С:Предприятие. Это позволяет пользователю работать в едином интерфейсе, не переключаясь между окнами, и дает возможность программно обрабатывать данные. Рассмотрим подробнее, какими способами можно реализовать этот функционал, начиная от простых табличных документов и заканчивая продвинутыми методами визуализации.
Это самый популярный и нативный способ для отображения файлов электронных таблиц (Excel, ODS) и текстовых данных (CSV, TXT). Объект ТабличныйДокумент в 1С обладает мощным встроенным методом Прочитать(), который берет на себя всю работу по парсингу структуры файла.
Разберем по шагам, как это реализовать. Предположим, у нас есть путь к файлу Excel. Нам необходимо создать объект табличного документа, прочитать в него данные и вывести на экран.
&НаКлиенте
Процедура ОткрытьЭксельВ1С(ПутьКФайлу)
// Создаем новый табличный документ
ТаблДок = Новый ТабличныйДокумент;
// Читаем файл. Параметр СпособЧтенияЗначенийТабличногоДокумента
// позволяет выбрать, как интерпретировать данные (текст или значения)
Попытка
ТаблДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Значение);
// Показываем документ пользователю в отдельном окне
ТаблДок.Показать("Содержимое файла: " + ПутьКФайлу);
Исключение
Сообщить("Не удалось прочитать файл: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Важные нюансы метода Прочитать():
.xls, .xlsx, .ods, .txt и .csv.СпособЧтенияЗначенийТабличногоДокумента.Текст, вы получите данные в том виде, в котором они отображаются в ячейках. Режим Значение попытается привести данные к типам 1С (число, дата).Прежде чем открывать файл, мы должны дать пользователю возможность его выбрать. Проанализируем ситуацию, когда путь к файлу заранее неизвестен. Для этого мы будем использовать объект ДиалогВыбораФайла.
В современных управляемых формах работа с файлами должна происходить асинхронно, чтобы не блокировать интерфейс браузера или тонкого клиента. Рассмотрим правильный подход:
&НаКлиенте
Процедура ВыбратьИОткрытьФайл(Команда)
ПараметрыДиалога = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ПараметрыДиалога.Заголовок = "Выберите файл для открытия в 1С";
ПараметрыДиалога.Фильтр = "Файлы Excel (*.xlsx)|*.xlsx|Все файлы (*.*)|*.*";
// Используем асинхронный метод для работы в управляемом приложении
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораФайла", ЭтотОбъект);
ПараметрыДиалога.Показать(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы <> Неопределено Тогда
ПутьКФайлу = ВыбранныеФайлы[0];
// Теперь вызываем чтение в ТабличныйДокумент
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПутьКФайлу);
ТабДок.Показать(ПутьКФайлу);
КонецЕсли;
КонецПроцедуры
Начиная с версии платформы 8.3.10, в 1С появилась встроенная возможность просмотра PDF-файлов. Это избавляет от необходимости устанавливать Adobe Reader или использовать браузеры. Проанализируем, как вывести PDF на форму.
Для этого на форме создается реквизит с типом Строка (в котором будет храниться путь к файлу) и элемент формы типа Поле картинки. Выясним причину, почему это удобно: 1С автоматически распознает MIME-тип файла и подключает нужный вьюер.
Алгоритм действий следующий:
ПутьКФайлу.Поле картинки.
// Пример для отображения PDF в поле на форме
&НаКлиенте
Процедура ПоказатьPDF(ПутьКФайлу)
// Элемент формы "ПолеPDF" связан с реквизитом, куда мы передаем путь
Объект.ПутьКФайлу = ПутьКФайлу;
КонецПроцедуры
Если нам нужно отобразить специфический контент (например, SVG-графику, HTML-отчет или PDF с использованием расширенных инструментов управления), мы можем использовать Поле HTML-документа. Этот элемент управления по сути является встроенным браузером.
Разберем пример вывода локального файла через HTML:
&НаКлиенте
Процедура ОткрытьЧерезHTML(ПутьКФайлу)
// Формируем путь в формате URL
ТекстHTML = "<html><body><iframe src='file:///" + ПутьКФайлу + "' width='100%' height='100%'></iframe></body></html>";
Элементы.ПолеHTML.УстановитьТекст(ТекстHTML);
КонецПроцедуры
В некоторых случаях встроенный ТабличныйДокумент не справляется. Например, если в Excel-файле используется сложная группировка, защищенные листы или программное управление сводными таблицами. В такой ситуации мы можем использовать COM-соединение.
Важно: этот метод работает только в Windows и только если на компьютере установлен Microsoft Excel.
&НаКлиенте
Процедура ОткрытьЧерезCOM(ПутьКФайлу)
Попытка
ExcelПриложение = Новый COMОбъект("Excel.Application");
Книга = ExcelПриложение.Workbooks.Open(ПутьКФайлу);
// Делаем Excel видимым (он откроется в своем окне, но под управлением 1С)
ExcelПриложение.Visible = Истина;
Исключение
Сообщить("Ошибка при запуске Excel: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Рассмотрим подробнее минусы этого подхода. Использование COMОбъект значительно медленнее, требует наличия лицензионного офисного ПО и часто приводит к зависанию процессов excel.exe в памяти, если программист забыл вызвать ExcelПриложение.Quit().
Выясним, какой метод лучше выбрать в зависимости от задачи:
ТабличныйДокумент и метод Прочитать(). Это самый быстрый и надежный кроссплатформенный способ.Поле картинки для PDF и изображений.ЗапуститьПриложение() для открытия во внешнем редакторе или COMОбъект для глубокой интеграции.Таким образом, мы проанализировали основные инструменты 1С для работы с внешними файлами. Комбинируя эти методы, можно создать удобный и функциональный интерфейс для конечного пользователя.