Загрузка файлов из облачных хранилищ, таких как Яндекс.Диск, требует понимания того, как работает REST API и как 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");
После того как мы получили значение href, можно приступать к загрузке самого файла. Важно помнить, что ответ сервера содержит ДвоичныеДанные, которые нужно корректно записать во временный файл. Рекомендуется использовать проверенные библиотеки для HTTP-соединений, такие как коннекторы, доступные в open-source сообществах, чтобы избежать проблем с обработкой редиректов (302) и защищенными соединениями.
РезультатЗагрузки = Get(ПутьДляСкачивания); // Метод, возвращающий тело ответа
ПутьДляСохранения = ПолучитьИмяВременногоФайла("xls");
РезультатЗагрузки.Тело.Записать(ПутьДляСохранения);
Когда файл успешно сохранен во временной директории, мы можем использовать метод Прочитать() объекта ТабличныйДокумент. Если вы получаете ошибку доступа, убедитесь, что учетная запись, под которой запущен сервер 1С, имеет соответствующие права на запись в папку Temp.
Обратите внимание на то, что использование ТабличныйДокумент.Записать() перед чтением — это распространенная ошибка, которая затирает содержимое файла. Мы работаем только с уже загруженным файлом:
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(ПутьДляСохранения, СпособЧтенияЗначенийТабличногоДокумента.Текст);
Исключение
Сообщить("Ошибка чтения: " + ОписаниеОшибки());
КонецПопытки;
ТабличныйДокумент.Прочитать() ожидает файлы определенных форматов (обычно это MXL или XLS). Если файл с Яндекс.Диска был выгружен как HTML или CSV, метод не сможет его корректно отобразить. Проверьте содержимое файла через текстовый редактор.rphost может не иметь прав на работу с файлами в некоторых системных папках. Всегда используйте ПолучитьИмяВременногоФайла().COMОбъект("Excel.Application"). Однако этот метод считается ресурсоемким и менее предпочтительным.Если после выполнения этих шагов ваш документ все еще пуст, попробуйте открыть его вручную в Excel или LibreOffice. Если он открывается — значит, проблема в методе Прочитать(), и стоит рассмотреть альтернативные библиотеки (например, для парсинга XLSX), которые не зависят от структуры ТабличногоДокумента.