Ошибка доступа к файлу Excel при попытке его чтения.
И снова всем привет от неофита. Начал читать файлик Excel для дальнейшей сверки номенклатуры из этого файла с номенклатурой в базе. Читаю при помощи табдок (не люблю COMОбъект). Пытаюсь прочитать, 1ска выкидывает с ошибкой "Ошибка доступа к файлу". Я так понимаю, что серверная сторона 1ски не может прочитать мой файлик, лежащий на рабочем столе. С клиента так же этого сделать невозможно, ибо метод ТабДок.Прочитать() на клиенте недоступен. Отсюда вопрос: как прочитать файлик на клиенте, чтобы преодолеть ограничение доступа, а потом отдать его на сервак для дальнейшей обработки данных? Ниже код:
Путь к файлу заполняется в другой процедуре, там проблем нет.
При попытке изменить формат файлика на .xslx, вылетает ошибка "Каталог недоступен". Даже если файлик сохранить в формате .xlsx.
&НаСервере
Функция СверитьНаСервере()
ПутьКФайлу = Объект.Папка;
ТабДок = Новый ТабличныйДокумент;
Попытка
ТабДок.Прочитать(ПутьКФайлу, СпособЧтенияЗначенийТабличногоДокумента.Текст);
Возврат ТабДок;
Исключение
Сообщить(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Предопределенный", Новый ОписаниеТипов("Булево"));
ТЗ.Колонки.Добавить("Родитель", Новый ОписаниеТипов("Строка"));
ТЗ.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка"));
КоличествоСтрок = ТабДок.ВысотаТаблицы;
Для Сч = 2 По КоличествоСтрок Цикл
Попытка
ТБ = ТЗ.Добавить();
ТБ.Предопределенный = Булево(ТабДок.ПолучитьОбласть("R" + Формат(Сч, "ЧГ=0") + "С" + 1).ТекущаяОбласть.Текст);
ТБ.Родитель = Строка(ТабДок.ПолучитьОбласть("R" + Формат(Сч, "ЧГ=0") + "С" + 2).ТекущаяОбласть.Текст);
ТБ.Наименование = Строка(ТабДок.ПолучитьОбласть("R" + Формат(Сч, "ЧГ=0") + "С" + 3).ТекущаяОбласть.Текст);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецФункции
ПоказатьПуть к файлу заполняется в другой процедуре, там проблем нет.
При попытке изменить формат файлика на .xslx, вылетает ошибка "Каталог недоступен". Даже если файлик сохранить в формате .xlsx.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Воспроизвел код. Получилось прочитать на сервере без проблем. Есть предположение, что ошибка возникает в неправильном пути к файлу. Я указывал полный сетевой путь типа \\SRVOiAPP\srv\Andy\Список.xls
Если база клиент-серверная, то файл должен быть доступен на сервере. Для файловой базы должно работать при любом раскладе
Пы.Сы. А зачем в приведенном листинге код после попытки - исключения? Судя по коду он никогда не сработает
Если база клиент-серверная, то файл должен быть доступен на сервере. Для файловой базы должно работать при любом раскладе
Пы.Сы. А зачем в приведенном листинге код после попытки - исключения? Судя по коду он никогда не сработает
можно обойтись без абсолютных путей, но для этого нужно передавать файл с клиента на сервер с использованием двоичных данных и хранилища значений
&НаКлиенте
Процедура ПрочитатьФайл()
ДвоичныеДанные = Новый ДвоичныеДанные(ПолныйПутьКФайлуНаКлиенте);
АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор)
ТабличныйДокумент = СверитьНаСервере(АдресХранилища);
КонецПроцедуры
&НаСервере
Функция СверитьНаСервере(АдресХранилища)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресХранилища);
ИмяФайла = ПолучитьИмяВременногоФайла("xls");
ДвоичныеДанные.Записать(ИмяФайла);
Попытка
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
Возврат ТабДок;
Исключение
Сообщить(ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
Показать
(5) Мне не нужен оптимальный код, только прочитать файлик.) Дело в том, что у нас при переносе номенклатуры вытянулись позиции из совсем старой базы (есть подозрение, что из неё напрямую и тянули). Что я делаю: гружу всю номенклатуру с родителями в файлик Excel, оттуда хочу прочитать его в КА и поглядеть, какие соответствия по номенклатуре установятся в результате сравнения. Не вошедшую номенклатуру, не участвующую в проводках пометить на удаление и снести. Однако, как видите, словил ступор на этапе чтения файлика.
(7)
ЗЫ Для открытия в клиент - сервере в (5) правильно советуют...
гружу всю номенклатуру с родителями в файлик Excel
- есть понимание, в Excel грузятся строки, а не элементы справочника? Если есть дубли с одинаковыми наименованиями (и/или кодами) то идентифицировать элемент справочника в базе не получится... Совет - в Excel выгружайте помимо наименований итд ГУИДы номенклатуры, и по ним следует искать элементы в базе...
ЗЫ Для открытия в клиент - сервере в (5) правильно советуют...
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот