Как правильно загрузить и прочитать файл Excel в веб-клиенте 1С:Предприятие

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

При переходе с тонкого клиента на веб-клиент многие разработчики сталкиваются с тем, что привычные способы работы с файловой системой перестают функционировать. В веб-клиенте 1С код, выполняемый на сервере, не имеет прямого доступа к файлам на компьютере пользователя. Разберем по шагам, как организовать процесс загрузки файла, чтобы его можно было корректно прочитать средствами платформы. Если операцию нужно выполнять регулярно, можно настроить автоматический сбор прайс-листов с почты, FTP, HTTP, их обработку и выгрузку.

Понимание архитектуры загрузки

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

Решение проблемы через асинхронные методы

Современный стандарт разработки в 1С подразумевает использование асинхронных методов с оператором ЖДАТЬ. Это делает код линейным, избавляет от сложных вложенных обработчиков оповещений и предотвращает блокировку интерфейса браузера.

Рассмотрим пример реализации метода для загрузки файла:


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

Обработка данных на сервере

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


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

Ключевые рекомендации по реализации

  1. Избегайте COM-объектов: Технология Excel.Application не будет работать в веб-клиенте, если сервер 1С запущен под управлением Linux, а также требует установленного MS Excel на сервере Windows. Метод ТабличныйДокумент.Прочитать() является универсальным и кроссплатформенным.
  2. Очистка временных файлов: Серверные процедуры создания временных файлов не занимаются автоматической очисткой диска. Обязательно используйте метод УдалитьФайлы() в блоке Попытка...Исключение, чтобы избежать переполнения временной папки сервера.
  3. Работа с типами данных: Помните, что при чтении Excel через ТабличныйДокумент важно правильно настроить типы ячеек. Если в Excel дата записана как текст, 1С не сможет автоматически преобразовать её в тип Дата, поэтому предусмотрите валидацию данных на этапе разбора таблицы значений.
  4. Используйте АСИНХ: Применение асинхронных вызовов гарантирует, что ваше приложение будет соответствовать актуальным стандартам разработки платформы 1С:Предприятие 8.3.

Следуя этим рекомендациям, вы сможете организовать надежный и быстрый механизм импорта данных из Excel, который будет стабильно работать как в обычном, так и в веб-клиенте. В частности, по этой схеме можно реализовать загрузку отчётов о продажах маркетплейсов в БП 3 из Excel для автоматического переноса сведений из файлов площадок в учёт.

← На главную