Как правильно загрузить файл Excel с Яндекс.Диска в 1С:Предприятие?

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

Загрузка файлов из облачных хранилищ, таких как Яндекс.Диск, требует понимания того, как работает REST API и как 1С обрабатывает бинарные данные. Часто разработчики сталкиваются с тем, что файл скачивается «битым» или ТабличныйДокумент не может его распознать. Давайте разберем этот процесс по шагам.

Шаг 1: Получение ссылки на скачивание

Яндекс.Диск не позволяет скачивать файл напрямую по прямой ссылке без предварительного получения временного URL через API. Для этого необходимо отправить GET-запрос к ресурсу /v1/disk/resources/download с передачей заголовка Authorization, содержащего ваш OAuth-токен.

Рассмотрим пример кода для получения ссылки:


Токен = "ВАШ_ТОКЕН";
Заголовки = Новый Соответствие;
Заголовки.Вставить("Accept", "application/json");
Заголовки.Вставить("Authorization", "OAuth " + Токен);

// Используем метод для получения JSON ответа от API
Результат = GetJson("https://cloud-api.yandex.net/v1/disk/resources/download?path=disk:/Test3.xls", Неопределено, Новый Структура("Заголовки", Заголовки));
ПутьДляСкачивания = Результат.Получить("href");

Шаг 2: Скачивание бинарных данных

После того как мы получили значение href, можно приступать к загрузке самого файла. Важно помнить, что ответ сервера содержит ДвоичныеДанные, которые нужно корректно записать во временный файл. Рекомендуется использовать проверенные библиотеки для HTTP-соединений, такие как коннекторы, доступные в open-source сообществах, чтобы избежать проблем с обработкой редиректов (302) и защищенными соединениями.


РезультатЗагрузки = Get(ПутьДляСкачивания); // Метод, возвращающий тело ответа
ПутьДляСохранения = ПолучитьИмяВременногоФайла("xls");
РезультатЗагрузки.Тело.Записать(ПутьДляСохранения);

Шаг 3: Чтение файла в ТабличныйДокумент

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

Обратите внимание на то, что использование ТабличныйДокумент.Записать() перед чтением — это распространенная ошибка, которая затирает содержимое файла. Мы работаем только с уже загруженным файлом:


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

Почему возникают ошибки?

  1. Неверный формат файла: Метод ТабличныйДокумент.Прочитать() ожидает файлы определенных форматов (обычно это MXL или XLS). Если файл с Яндекс.Диска был выгружен как HTML или CSV, метод не сможет его корректно отобразить. Проверьте содержимое файла через текстовый редактор.
  2. Проблемы с правами доступа: При работе на сервере процесс rphost может не иметь прав на работу с файлами в некоторых системных папках. Всегда используйте ПолучитьИмяВременногоФайла().
  3. Отсутствие COM-объекта: Если файл сохранен в формате XLSX, а платформа 1С старой версии, может потребоваться установка Microsoft Excel на сервере и использование COMОбъект("Excel.Application"). Однако этот метод считается ресурсоемким и менее предпочтительным.

Если после выполнения этих шагов ваш документ все еще пуст, попробуйте открыть его вручную в Excel или LibreOffice. Если он открывается — значит, проблема в методе Прочитать(), и стоит рассмотреть альтернативные библиотеки (например, для парсинга XLSX), которые не зависят от структуры ТабличногоДокумента.

← На главную