27.04.20 — 05:05
Подскажите пожалуйста, в чем может быть ошибка, открытия .xls листа?
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(Файл);
Исключение
Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);
Сообщить(ОписаниеОшибки());
Возврат 0;
КонецПопытки;
Выходит сообщение об ошибке, —
Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!
{ВнешняяОбработка.LOADxls.Форма.Форма.Форма(18)}: Ошибка при вызове конструктора (COMОбъект): -2147220994(0x800401FE): Приложение было запущено, но оно не зарегистрировало фабрику классов
1 — 27.04.20 — 05:20
Ошибка, на этой строке.
Excel = Новый COMОбъект(«Excel.Application»);
Запустил другой конфигуратор. Там такой ошибки нет.
2 — 27.04.20 — 05:39
Может что известное. Хотел узнать.
Пока работаю под другим конфигуратором.
3 — 27.04.20 — 08:00
(0)
1. Если все расположено на клиентской машине — нужно установить нормальный Excel.
2. Если на сервере — п. 1 и проверить права пользователя ОС на создание COM объектов.
4 — 27.04.20 — 08:37
(0) А что, читать через табличный документ уже нельзя?
5 — 27.04.20 — 11:01
(3) (4) Дело в том что не работает на одной из версий платформы. На которой я начал делать.
Вот и не понял. Открыл другую, так как не давно пробовал делать тоже самое. и там так же.
В начале же нужно прочитать с Эксель. Вот с него не читалось.
6 — 27.04.20 — 11:23
ЛивингСтар, ты ли это?
7 — 27.04.20 — 11:27
(5) Ты вообще понял, что написано в (4)?
Читай через табличный документ,а не ком-объект. И будет тебе счастье.
8 — 27.04.20 — 14:17
(0) База какая SQL или файловая и где выполняется >>Excel = Новый COMОбъект(«Excel.Application»); в процедуре
&НаКлиенте или &НаСервере ?
9 — 27.04.20 — 14:20
(0) считай это дерьмо через табличный документ
10 — 27.04.20 — 14:21
(0) и да
Тут рука профи нужна.
zmb@list.ru
Загрузка файла будет 1500 на карту стоить. Предоплата 100%.
11 — 27.04.20 — 16:39
(4) Да как то привык так вот эксель открывать при загрузке с него.
А не копировать и вставлять в табличный документ.
12 — 27.04.20 — 16:40
(8) На сервере конечно, как обычно.
&НаСервере
Функция СоздатьТЗсXLSЛистов(Файл)
Таблица = Новый ТаблицаЗначений;
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(Файл);
Исключение
Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);
Сообщить(ОписаниеОшибки());
Возврат 0;
КонецПопытки;
Попытка
Excel.Sheets(1).Select();
Исключение
Excel.ActiveWorkbook.Close();
Excel = 0;
Сообщить(«Файл » + Строка(Файл)+» не соответствует необходимому формату! Первый лист не найден!»);
ОтменитьТранзакцию();
Возврат 0;
13 — 27.04.20 — 16:40
(8) В данный момент файловая.
14 — 27.04.20 — 16:42
(10) А как вы сообщение отредактировали свое????
15 — 27.04.20 — 16:43
(12) Попробуйте создать процедуру &НаКлиенте и в процедуре открыть файл . Кстати Ексель стоит на компе, где пытаетесь файл считать.
&НаКлиенте процедура()
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(Файл);
Исключение
Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);
Сообщить(ОписаниеОшибки());
Возврат 0;
КонецПопытки;
16 — 27.04.20 — 17:13
(15) Тут вопрос был, почему под одной платформой не работает.
Идет ошибка что в (0). А под другой работает.
Я этого не мог понять. Может что с платформой.
Попробую ваш совет.
А ещё на сервере такой метод может не сработать, вроде как была как то у меня информация. Там как то иначе нужно.
Может это вот этот ваш совет про это. Я там встретился с тем что на сервере. делают копированием в табличный документ.
17 — 27.04.20 — 17:52
(16) Вы можете на клиенте в таблицу значений считать данные екселя и отдать ее на сервер выполнять дальнейшие манипуляции.
18 — 27.04.20 — 18:07
(17): на клиенте бывает (штатно) таблицазначений? и она норм сериализуется при передаче на сервер???
19 — 27.04.20 — 18:16
20 — 27.04.20 — 18:46
(19): метод «Прочитать» для таб.документов появился совсем недавно (в 15-м что ли релизе?)
ну и там (по ссылке) в принципе в коде не учтено, что книга читается в таб.документ с областями, имена которых совпадают с именами листов книги….
21 — 27.04.20 — 18:48
(10): опс. пардон, ялох…
просто на практике недавно нарвался, что «прочитать» нормально работал на 15-м — и при этом напрочь отказывался на 14-м… пардон, про «недавно№ не читайте, по ссылке на 9-м проверено…
22 — 28.04.20 — 10:00
В файловой базе загрузка прошла успешно.
Сейчас перенес на сервер. На удаленный рабочий стол, там не работает. Ошибка http://joxi.ru/823qePbHDq86wr
тут нужно делать как в (19) или (15) или (4) советуют?
Ошибка при загрузке http://joxi.ru/KAx3R4VT1LKM62
и http://joxi.ru/823qePbHDq86wr
23 — 28.04.20 — 10:02
Ошибка на Колонки, на какие то из этих процедур видимо
&НаСервере
Функция СоздатьТЗсXLSЛистов(Файл)
Таблица = Новый ТаблицаЗначений;
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(Файл);
Исключение
Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);
Сообщить(ОписаниеОшибки());
Возврат 0;
КонецПопытки;
Попытка
Excel.Sheets(1).Select();
Исключение
Excel.ActiveWorkbook.Close();
Excel = 0;
Сообщить(«Файл » + Строка(Файл)+» не соответствует необходимому формату! Первый лист не найден!»);
ОтменитьТранзакцию();
Возврат 0;
КонецПопытки;
Версия = Лев(Excel.Version,Найти(Excel.Version, «.») — 1);
Если Версия = «8» тогда
ФайлСтрок = Excel.Cells.CurrentRegion.Rows.Count;
ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
Иначе
ФайлСтрок = Excel.Cells(1, 1).SpecialCells(11).Row;
ФайлКолонок = Excel.Cells(1, 1).SpecialCells(11).Column;
Конецесли;
Сч = 1;
//
Таблица.Колонки.Добавить(«НоваяСтрока», ,»НоваяСтрока»);
//
Пока ЗначениеЗаполнено(Excel.Cells(1, Сч).Text) Цикл
ИмяКолонки = Excel.Cells(1, Сч).Text;
//
ИмяБезПробелов = СтрЗаменить(ИмяКолонки, » «, «»); //
ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «(«, «»); //
ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «)», «»); //
ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «.», «»); //
ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов, «,», «»); //
//
ИмяКолонки = СтрЗаменить(ИмяКолонки, » «, «»); //
ИмяКолонки = СтрЗаменить(ИмяКолонки, «(«, «»); //
ИмяКолонки = СтрЗаменить(ИмяКолонки, «)», «»); //
ИмяКолонки = СтрЗаменить(ИмяКолонки, «.», «»); //
ИмяКолонки = СтрЗаменить(ИмяКолонки, «,», «»); //
//
ИмяБезПробелов = СтрЗаменить(ИмяБезПробелов,»/»,»»);
ИмяКолонки = СтрЗаменить(ИмяКолонки,»/»,»»);
НоваяКолонка = Таблица.Колонки.Добавить(ИмяБезПробелов, ,ИмяКолонки);
Сч = Сч + 1;
КонецЦикла;
НомерСтроки = 1;
Для НС = 2 по ФайлСтрок Цикл
НоваяСтрока = Таблица.Добавить();
//
НоваяСтрока[«НоваяСтрока»] = НомерСтроки;
//
Для НомерКолонки = 1 по Таблица.Колонки.Количество()-1 Цикл
ТекущееЗначение = Excel.Cells(НС, НомерКолонки).Text;
ИмяКолонки = Таблица.Колонки[НомерКолонки].Имя;
НоваяСтрока[ИмяКолонки] = ТекущееЗначение;
КонецЦикла;
НомерСтроки = НомерСтроки + 1;
КонецЦикла;
//
Excel.DisplayAlerts = 0;
Excel.ActiveWorkbook.Close();
Excel.Quit();
Excel.DisplayAlerts = 1;
//
Возврат Таблица;
КонецФункции
//
&НаСервере
Процедура СоздатьТаблицуНаФорме(ТзДляСоздания)
//
Таблица = РеквизитФормыВЗначение(«Товары»);
МассивРеквизитов = Новый Массив;
Для Каждого Колонка Из Таблица.Колонки Цикл
МассивРеквизитов.Добавить(«Товары.» + Колонка.Имя);
КонецЦикла;
//
ИзменитьРеквизиты(,МассивРеквизитов);
//
ЭлементТаблица = Элементы.Найти(«Товары»);
Если ЭлементТаблица <> Неопределено Тогда
Элементы.Удалить(ЭлементТаблица);
КонецЕсли;
//
ЭлементТаблица = Элементы.Добавить(«Товары», Тип(«ТаблицаФормы»), Элементы.Группа7);
ЭлементТаблица.ПутьКДанным = «Товары»;
ЭлементТаблица.Отображение = ОтображениеТаблицы.Список;
//
МассивРеквизитов.Очистить();
Для Каждого Колонка ИЗ ТзДляСоздания.Колонки Цикл
МассивТипов = Новый Массив;
МассивТипов.Добавить(Колонка.ТипЗначения);
НоваяКолонка = Новый РеквизитФормы(Колонка.Имя, Новый ОписаниеТипов(МассивТипов), «Товары»);
МассивРеквизитов.Добавить(НоваяКолонка);
КонецЦикла;
//
ИзменитьРеквизиты(МассивРеквизитов);
ЗначениеВРеквизитФормы(ТзДляСоздания, «Товары»);
//
ЭлементТЗ = Элементы.Товары;
Для Каждого Колонка ИЗ ТзДляСоздания.Колонки Цикл
НовыйЭлементФормы = Элементы.Добавить(«Товары» + Колонка.Имя, Тип(«ПолеФормы»), ЭлементТЗ);
НовыйЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
НовыйЭлементФормы.ПутьКДанным = «Товары.» + Колонка.Имя;
КонецЦикла;
КонецПроцедуры
//
24 — 28.04.20 — 10:26
(22) с правами на доступ к екселю (или он вообще не установлен на компе гдк стоит сервер 1С) у пользователя под которым запущен сервер 1С
25 — 28.04.20 — 10:47
(24) Эксель стоит. Открывается. Видимо там принцип работы какой то другой. Отличный от того что выполняется в файловой версии на персональном компьютере.
26 — 28.04.20 — 10:50
(25) Принцип обработки файла кодом из 1с, я имею ввиду
27 — 28.04.20 — 10:51
(25) когда в серверной версии вы на сервере запускаете работу с екселем, то создается сом объект на компе где стоит сервер 1С и под правами пользователя , под которыми он запущен.
28 — 28.04.20 — 10:53
+(27) 1Ссервер м.б. запущен не под тем пользователем, под которым вы заходите для проверки прав доступа к екселю
29 — 28.04.20 — 11:01
(28) Да на этом сервере у меня органиченные права. то есть получается этот код не отработает там?
Как можно выйти из положения?
30 — 28.04.20 — 11:05
(17) &НаКлиенте не доступна Таблица = Новый ТаблицаЗначений;
31 — 28.04.20 — 11:06
(29) администратор системного подключать и проверять права именно на доступ к екселю под пользователем , под которым сервер 1С запущен
(30) К екселю подключается из под разных платформ ?
32 — 28.04.20 — 11:15
(30) на форме создайте элемент ТаблицаЗначений , колонки добавьте и потом перебором переписывайте
33 — 28.04.20 — 11:25
(31) На сервере под удаленным рабочим столом одна платформа.
(32) И на сервере не работает отладка, не посмотрю как выполняется код. Одно видно что ругается на Колонки сначала (22) .
34 — 28.04.20 — 11:40
(32) А как мне эксель то открыть?
35 — 28.04.20 — 12:56
Проверил, да, на клиенте может эксель открыть. Почему тогда такая проблема, не совсем пойму, из за чего.
36 — 28.04.20 — 13:10
(35) А как файл Excel на сервер с клиента передается? Через временное хранилище?
37 — 28.04.20 — 13:18
Повторюсь. Не надо СОМ. Используй чтение в табличный документ из файла методами 1С.
38 — 28.04.20 — 13:29
если уж так хоццца через com
попробуй включи пользователя, под которым запускается сервер приложений 1С Предприятия 8, в группу Distributed COM Users — если не поможет, то дополнительно включить его в группу локальных администраторов.
(о результате — отпишись?)
39 — 28.04.20 — 13:31
(36): тогда бы ошибка была про файл. который не найден — не на этапе создания com-объекта, а при открытии файла….
40 — 28.04.20 — 13:33
41 — 28.04.20 — 13:39
(37) Буду пробовать сейчас этот вариант.
Ещё раз. спасибо за мотивацию.
42 — 28.04.20 — 16:00
После того как с табличного документа я заполню &НаСервере таблицу значений,
где мне заполнять табличную часть на форме обработки? &НаКлиенте или на &НаСервере ?
А то утомился, подумал спрошу дельный совет. С табличного документа, я заполнил таблицу значений на сервере. Дальше?
Что бы на форме заполнить.
Что бы это все работало на удаленном рабочем столе, на сервере в базе ms sql server.
43 — 28.04.20 — 16:09
(42) Так ты на Сервере заполняй сразу в Объект, который из реквизита формы в значение получен. А затем обратно из значения в реквизит формы
у тебя что нет типовой? там же есть такое уже готовое, что подсмотреть можно.
44 — 28.04.20 — 16:15
(43) Буду сейчас пробовать!
45 — 28.04.20 — 16:15
(43) То есть сама таблица значений что есть у обработки, и положена на форму обработки для визуального отображения не доступна &НаСервере ?
46 — 28.04.20 — 16:17
Ахахаха, жесть жестяночка.
47 — 28.04.20 — 16:19
(45): во-первых, реквизит №тз» и объект «тз» — это две большие разницы.
ну и во-вторых — а вы попробуйте эту «тз» передать в параметре на сервер… а потом расскажите…
(46) ага. :)))
48 — 28.04.20 — 16:21
Смысл в том, что получив таблицу значений с эксель
хочу вывести это на форму. Вот и узнаю что бы без проб, как сразу правильно делать?
http://joxi.ru/RmznO4eiRZ5wVm
Намек хотя бы.
49 — 28.04.20 — 16:27
(48) такая ТЗ, как у тебя на картинке видна = реквизит формы. Поэтому нужно через
ТекущийОбъект = РеквизитФормыВЗначение(«Книги»);
ЗдесьПишемСвойКодЗаполнения(ТекущийОбъект);
ЗначениеВРеквизитФормы(ТекущийОбъект, «Книги»);
—
тогда увидишь свою заполненную тз на форме
50 — 28.04.20 — 17:01
(48) делал загрузку с формы, поищу обработку , если найду вышлю
51 — 28.04.20 — 17:12
(48) достаточно поместить табличное поле на форму, связанную с прочитанной таблицей. Посмотри типовую обработку по загрузке данных из табличного документа.
52 — 28.04.20 — 17:29
Куда выслать обработку ?
53 — 29.04.20 — 04:04
(52) Спасибо. Я сам делаю тут. Все равно по загрузке свои особенности.
Или вы тоже грузили в УТ 11.4
Вес товара с упаковкой (г), г
Высота предмета, см
Высота упаковки, см
Глубина предмета, см
Глубина упаковки, см
Ширина предмета, см
Ширина упаковки, см
54 — 29.04.20 — 04:35
(52) Ну, а если есть интересные какие примеры. Можно сюда. MyRezume2020@yandex.ru
falselight
55 — 29.04.20 — 04:59
На сервере удалось прочитать, вот таким кодом.
Сейчас уже и дальше можно обрабатывать.
//
&НаКлиенте
Процедура ФайлДляЗагрузкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = ложь;
ВыбратьФайл(«ФайлДляЗагрузки»);
КонецПроцедуры
//
&НаКлиенте
Процедура ВыбратьФайл(ФайлДляЗагрузки)
#Если ВебКлиент Тогда
Результат = ПодключитьРасширениеРаботыСФайлами();
Если Не Результат Тогда
УстановитьРасширениеРаботыСФайлами();
Если Не ПодключитьРасширениеРаботыСФайлами() Тогда
ВызватьИсключение «Ошибка. Ваш браузер не поддерживает работу с файлами.»;
КонецЕсли;
КонецЕсли;
#КонецЕсли
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Заголовок = «Выберите файл»;
Диалог.ПолноеИмяФайла = «»;
Диалог.МножественныйВыбор = Ложь;
Диалог.Фильтр = «Документ Excel (*.xls, *.xlsx)|*.xls;*.xlsx|»;
Оповещение = Новый ОписаниеОповещения(«ОповещениеПослеВыбораФайлаДляОткрытия», ЭтотОбъект, ФайлДляЗагрузки);
Диалог.Показать(Оповещение);
КонецПроцедуры
//
&НаКлиенте
Процедура ОповещениеПослеВыбораФайлаДляОткрытия(ВыбранныеФайлы, ДопПараметры) Экспорт
Если ТипЗнч(ВыбранныеФайлы) = Тип(«Массив») Тогда
Объект[ДопПараметры] = ВыбранныеФайлы[0];
КонецЕсли;
КонецПроцедуры
//
&НаКлиенте
Процедура Прочитать(Команда)
Если Не ЗначениеЗаполнено(Объект.ФайлДляЗагрузки) Тогда
Сообщить(«Не указан файл. Обработка не выполнена.»);
Возврат;
КонецЕсли;
ВыбФайл = Новый Файл(Объект.ФайлДляЗагрузки);
Если Не ВыбФайл.Существует() Тогда
Сообщить(«Файл не существует!»);
Возврат;
КонецЕсли;
ТДВыгрузка = Новый ТабличныйДокумент;
мПрочитатьТабличныйДокументИзExcel(ТДВыгрузка, Объект.ФайлДляЗагрузки, 1);
ПрочитатьНаСервере(ТДВыгрузка);
КонецПроцедуры
//
&НаКлиенте
Функция мПрочитатьТабличныйДокументИзExcel(ТабличныйДокумент, ИмяФайла, НомерЛистаExcel = 1) Экспорт
xlLastCell = 11;
ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить(«Файл не существует!»);
Возврат Ложь;
КонецЕсли;
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(ИмяФайла);
ExcelЛист = Excel.Sheets(НомерЛистаExcel);
Исключение
Сообщить(«Ошибка. Возможно неверно указан номер листа книги Excel.»);
Возврат Ложь;
КонецПопытки;
SpecialCells = Excel.Sheets(НомерЛистаExcel).Cells.SpecialCells(11);
RowCount = SpecialCells.Row;
ColumnCount = SpecialCells.Column;
Для Column = 1 По ColumnCount Цикл
ТабличныйДокумент.Область(«C» + Формат(Column, «ЧГ=»)).ШиринаКолонки = ExcelЛист.Columns(Column).ColumnWidth;
КонецЦикла;
Для Row = 1 По RowCount Цикл
Для Column = 1 По ColumnCount Цикл
Если ТипЗнч(ExcelЛист.Cells(Row,Column).Value) = Тип(«Число») Тогда
ЗначениеЗамена = СтрЗаменить(ExcelЛист.Cells(Row,Column).Value, » «, «»);
Иначе
ЗначениеЗамена = ExcelЛист.Cells(Row,Column).Value
КонецЕсли;
ТабличныйДокумент.Область(«R» + Формат(Row, «ЧГ=») +»C» + Формат(Column, «ЧГ=»)).Текст = ЗначениеЗамена;
КонецЦикла;
КонецЦикла;
Excel.WorkBooks.Close();
Excel = 0;
Возврат Истина;
КонецФункции //
//
&НаСервере
Процедура ПрочитатьНаСервере(Макет)
ТЗсXLS = Новый ТаблицаЗначений;
ТЗсXLS.Колонки.Добавить(«», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«OzonID», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«Баркод», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«Наименование», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«Автор», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«Год», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«Издательство», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«Артикул», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«Комплектация», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«ВесТовараСУпаковкой», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«ВысотаПредмета», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«ВысотаУпаковки», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«ГлубинаПредмета», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«ГлубинаУпаковки», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«ШиринаПредмета», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«ШиринаУпаковки», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«Количество», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«Цена», Новый ОписаниеТипов(«Строка»));
ТЗсXLS.Колонки.Добавить(«НомерСтроки», Новый ОписаниеТипов(«Строка»));
//
Для Стр = 2 По Макет.ВысотаТаблицы Цикл
НоваяСтрока = ТЗсXLS.Добавить();
НоваяСтрока.OzonID = СокрЛП(Макет.Область(Стр, 1).Текст);
НоваяСтрока.Баркод = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.Наименование = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.Автор = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.Год = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.Издательство = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.Артикул = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.Комплектация = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.ВесТовараСУпаковкой = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.ВысотаПредмета = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.ВысотаУпаковки = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.ГлубинаПредмета = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.ГлубинаУпаковки = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.ШиринаПредмета = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.ШиринаУпаковки = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.Количество = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.Цена = СокрЛП(Макет.Область(Стр, 2).Текст);
НоваяСтрока.НомерСтроки = Стр;
КонецЦикла;
//
ТзКнигиНаФорме = РеквизитФормыВЗначение(«Книги»);
Для Каждого СтрТЗсXLS Из ТЗсXLS Цикл
НоваяСтрока = ТзКнигиНаФорме.Добавить();
НоваяСтрока.НомерСтроки = СокрЛП(СтрТЗсXLS.НомерСтроки-1);
НоваяСтрока.OzonID = СокрЛП(СтрТЗсXLS.OzonID);
НоваяСтрока.Баркод = СокрЛП(СтрТЗсXLS.Баркод);
НоваяСтрока.Наименование = СокрЛП(СтрТЗсXLS.Наименование);
НоваяСтрока.Автор = СокрЛП(СтрТЗсXLS.Автор);
НоваяСтрока.Год = СокрЛП(СтрТЗсXLS.Год);
НоваяСтрока.Издательство = СокрЛП(СтрТЗсXLS.Издательство);
НоваяСтрока.Артикул = СокрЛП(СтрТЗсXLS.Артикул);
НоваяСтрока.Комплектация = СокрЛП(СтрТЗсXLS.Комплектация);
НоваяСтрока.ВесТовараСУпаковкой = СокрЛП(СтрТЗсXLS.ВесТовараСУпаковкой);
НоваяСтрока.ВысотаПредмета = СокрЛП(СтрТЗсXLS.ВысотаПредмета);
НоваяСтрока.ВысотаУпаковки = СокрЛП(СтрТЗсXLS.ВысотаУпаковки);
НоваяСтрока.ГлубинаПредмета = СокрЛП(СтрТЗсXLS.ГлубинаПредмета);
НоваяСтрока.ГлубинаУпаковки = СокрЛП(СтрТЗсXLS.ГлубинаУпаковки);
НоваяСтрока.ШиринаПредмета = СокрЛП(СтрТЗсXLS.ШиринаПредмета);
НоваяСтрока.ШиринаУпаковки = СокрЛП(СтрТЗсXLS.ШиринаУпаковки);
НоваяСтрока.Количество = СокрЛП(СтрТЗсXLS.Количество);
НоваяСтрока.Цена = СокрЛП(СтрТЗсXLS.Цена);
КонецЦикла;
ЗначениеВРеквизитФормы(ТзКнигиНаФорме, «Книги»);
КонецПроцедуры
//
Ошибка работы 1С 8 с Excel: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу
Описание ошибки:
Проявила себя в клиент-серверной базе. Релиз платформы 1С: Предприятие 8.3.13.1644.
Найденные решения:
Полная формулировка ошибки:
{Доработки Документ.УстановкаЦенНоменклатуры.Форма.Доп_ФормаИмпортXLS.Форма(83)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу ‘C:1C_ArhivТест загрузка прайсов[имя_файла].xlsx’. Это может быть вызвано одной из следующих причин.
• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
При доработке в расширении для конфигурации 1С: Комплексная автоматизация 8, ред. 2, которая должна загружать данные из файлов Excel и при попытке выполнения в коде РабочаяКнига = ExcelПриложение.WorkBooks.Open(ФормаИмпортXLS.ИмяФайла);. Что удивительно, но в более ранней редакции Комплексной, 1.1, эта проблема не возникала в этом же коде, хотя обе базы на одном сервере.
Проблема оказалась нова для автора этого текста только в 2020 году, хотя самой проблеме достаточно много времени (более 5 лет на момент написания). В обсуждении данной ошибки на сайте infostart.ru «Ошибка открытия файла Excel на сервере» обсуждается несколько предложений по решению проблемы, среди которых наиболее популярный вариант решения. Так же там много попутных предложений по настройке прав на стороне сервера, если вдруг популярный вариант окажется не актуальным.
Популярность этого варианта подтверждается исчерпывающим обсуждением и вот на этом ресурсе: «v8.x: [РЕШЕНО] Ошибка при вызове метода контекста (Open) при работе с Excel»
Проблема была рещена данным простым решением, но обращу внимание на то, что данное действие должно быть выполнено на сервере, а не на локальном рабочем месте.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
23-09-2020
Журавлев А.С.
(Сайт azhur-c.ru)
|
|||
Beduin
07.05.15 — 18:58 |
ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ИмяФайла, «UTF-8»); {Обработка.ВыгрузкаЗагрузкаДанныхXML.МодульОбъекта(64)}: Ошибка при вызове метода контекста (ОткрытьФайл) ЗаписьXML.ОткрытьФайл(ИмяФайла, «UTF-8»); по причине: Ошибка доступа к файлу ‘C:UsersAdmin1cDesktopФайл выгрузки.xml’ Режим тонкий клиент. Бухгалтерия КОРП 3.0 В чем причина? |
||
Beduin
1 — 07.05.15 — 19:00 |
При чем, если просто открыть файл как текстовый, то все хорошо. |
||
mehfk
2 — 07.05.15 — 19:03 |
Нет доступа на запись. Пнуть сисадмина. |
||
Beduin
3 — 07.05.15 — 19:05 |
(2) Средствами 1С создал файл и записал его в это папку. Права есть. |
||
Beduin
4 — 07.05.15 — 19:13 |
Это может из-за того что аккаунт от службы сервера не входит в группу администраторов? |
||
mehfk
5 — 07.05.15 — 19:17 |
Какое из 4-х слов в первом предложении не понятно? |
||
Beduin 6 — 07.05.15 — 20:00 |
(5) Угу . дело было в этом. Спасибо. |
|
TurboConf — расширение возможностей Конфигуратора 1С |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
-
20.12.2016, 13:59
#1
Иногда оказывает помощь
COM-объект и Excel
Создаю COM-объект и пытаюсь открыть файл Excel:
ex=Новый ComОбъект(«Excel.Application»);
ex.WorkBooks.Open(Файл);
Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:Ошибка при вызове метода контекста (Open)
ex.WorkBooks.Open(Файл);
по причине:
Неизвестная ошибкаСталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
Если что-то с Excel, то что?
-
20.12.2016, 15:25
#2
Гордость форума PRO
Re: COM-объект и Excel
Сообщение от lilyapo
Создаю COM-объект и пытаюсь открыть файл Excel:
ex=Новый ComОбъект(«Excel.Application»);
ex.WorkBooks.Open(Файл);
Файл существует, COM-объект создается, но при открытии файла Excel выдается сообщение:Ошибка при вызове метода контекста (Open)
ex.WorkBooks.Open(Файл);
по причине:
Неизвестная ошибкаСталкиваюсь с этим впервые, на других компах всю жизнь все работает, с любой платформой 8.3
Если что-то с Excel, то что?Ты открываешь Апликайшон — а как ты это открываешь (интерактивно или же на сервере)? Опять же у тебя какой эксель (32-х разрядный или же 64-х разрядный) и в каком контексте пытаешься открыть (в 32-х разрядном клиенте или же на стороне 64-х разрядного сервера)?
-
20.12.2016, 15:55
#3
Иногда оказывает помощь
Re: COM-объект и Excel
Все очень просто.
Файловая база.
Excel 2010. Файл лежит на том же диске, что и база и открывающая его обработка.
Никакого клиент-серверного режима нет.
-
20.12.2016, 16:31
#4
Гордость форума PRO
Re: COM-объект и Excel
А попробуй «завернуть» в Попытку
Что выдаст?
Попытка
Excel = Новый COMОбъект(«Excel.Application»);
Excel.WorkBooks.Open(ИмяФайла);
Состояние(«Обработка файла Microsoft Excel…»);
Исключение
Сообщить(«Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!»);
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
-
20.12.2016, 17:04
#5
Иногда оказывает помощь
Re: COM-объект и Excel
Все то же самое.
Ошибка при вызове метода контекста (Open): Неизвестная ошибка
ОписаниеОшибки()=»»
-
20.12.2016, 17:25
#6
Гордость форума PRO
Re: COM-объект и Excel
[QUOTE=lilyapo;469920]Все то же самое.
Ошибка при вызове метода контекста (Open): Неизвестная ошибкапохоже у тебя проблема с com-ом. А у тебя Excel нормально в реестре зареген? Ты его видишь в com-объектах?
Попробуй подключиться к открытому «ручками» экселю
Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна
Excel = ПолучитьCOMОбъект(, «Excel.Application»);
При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.
-
Пользователь сказал cпасибо:
-
20.12.2016, 17:41
#7
Иногда оказывает помощь
Re: COM-объект и Excel
Все получилось!
Спасибо огромное, фантастика!:dance:
-
13.09.2018, 12:20
#8
Гость форума
Re: COM-объект и Excel
Сообщение от lilyapo
Все получилось!
Спасибо огромное, фантастика!:dance:Пожалуйста. расскажите, как решили проблему.
Такая же ситуация на одном из компьютеров. Перепробовали все рекомендации из интернета. Ничего не помогает.
-
13.09.2018, 13:10
#9
Иногда оказывает помощь
Re: COM-объект и Excel
Попробуй подключиться к открытому «ручками» экселю
Как подключиться к запущенному Excel-евскому файлу в реальном времени, изменить его и даже не сохранять, а просто переключить окно на 1С и сразу же выгружать данные в табличную часть, лишь переключив окна
Excel = ПолучитьCOMОбъект(, «Excel.Application»);
При этом первый параметр нужно оставить пустым. В этом случае при этом подцепится тот файл экселя, который был открыт последним, даже если порядок переключения окон был таким:
Excel1, Excel2, IE, Проводник, 1С (т.е. что-то и было открытым между 1с и экселевским файлом) — все равно откроется Excel2, потому что он был активен последним.
Так я справилась с проблемой
Nikoly |
|
||
---|---|---|---|
|
При работе на сервере, регламентного задания, обработка открывает через Excel = Новый COMОбъект(«Excel.Application»); Excel.Application.Workbooks.Open(ИмяФайла) документ, мне выдается ошибка: Изменено 16.07.11 15:32:46 по причине: Другая категория |
Yandex |
|
||
---|---|---|---|
|
Nikoly |
|
||
---|---|---|---|
|
http://forum.mista.ru/topic.php?id=522217 |
Подсказка: Для выделения Кода используйте (в редакторе). |
Ошибка при вызове метода контекста (Прочитать)
Ошибка при выполнении файловой операции при чтении xls файла методом прочитать объекта ТабличныйДокумент.
Скрин сообщения
Данный объект 1C умеет не только записывать в Excel, но возможна и обратная операция с ограничениями, свойственными табличному документу.
В чем плюсы такой методики чтения
- Всё производится встроенными средствами;
- достаточно быстро;
- код в 2 строки
- данные не требуется преобразовывать, обычно всё считывается достаточно корректно, их можно проверить средствами 1С.
- возможно считывать значения ячеек как текст (без авто-преобразования),
- доступно на сервере, где excel вообще нельзя установить (linux, OSx).
Причина ошибки
Отличительной особенностью, вызывающей данную ошибку, является то, что 1С нужен монопольный доступ на время считывания.
Если же документ открыт, то выходит ошибка при выполнении файловой операции чтения.
COM-Объекта Excel.Application в данном ситуации просто открывает еще один экземпляр, а также в нём можно скрыть отображение сообшения о режиме «чтения».
Другой причиной может быть: отсутствие прав на чтение этого файла
Решение:
Закрыть открытую в Excel (или другой программе) книгу, проверить права на файл (возможность открытия в его в Excel, косвенный признак его наличия)
Реклама — величайшее искусство XX века.
-
Доброе время суток.
Проблема заключается в следующем внешняя обработка загрузки из Эксель на личном компьютере работает нормально, но на РДП выдает ошибку «ошибка при вызове метода контекста (open)» там и там база файловая.Переделал все что нашел в инете
— создал папку C:WindowsSysWOW64configsystemprofileDesktop ;
— Настройки DCOM добавил пользователя;
— И проделал «А решается это так:
на сервере убиваем excel (taskkill /im excel.exe /f)
открываем оснастку «Службы компонентов» (Пуск->Администрирование->Службы компонентов)
в ней раскрываем ветку Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM
справа в списке находим Microsoft Excel Application, открываем Свойства, вкладка Удостоверение, выбираем «Текущий пользователь», ОК.
Готово»
И все равно выскакиваю по ошибке.
Есть у кого то предложение что можно сделать еще. -
Online
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.889
- Симпатии:
- 1.029
- Баллы:
- 204
покпжите текст ошибки полностью.
из всего там нужно только последнее действие.что будет, если интерактивно запустить эксель и открыть этот же файл?
-
{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(35)}: Ошибка при вызове метода контекста (Open)
КНИГА = Excel.WorkBooks.Open(ИмяФайла);
по причине:
Неизвестная ошибка -
Запустил интерактивно и все равно ошибка
Опечатки нет пере набрал Open раз 10 -
Online
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 9.889
- Симпатии:
- 1.029
- Баллы:
- 204
при интерактивном открытии файла, что говорит?
-
Доброго,
Клиент какой запускается на RDP, 32/64 бит ? -
Добрый день.При интерактивном открытии ничего не пишет.
RDP клиент запускается 64 и офис 64 -
Похожая проблема вылечилась использованием 32 битного клиента (мы можем это себе позволить),
еще, как вариант, я делал через формирование файла на сервере и передачу его на клиента
С.П.- : «ПоместитьВоВременноеХранилище», «ПолучитьФайлы», «ОписаниеПередаваемогоФайла»
1.На сервере получаю макет, передаю его на клиента через «ПоместитьВоВременноеХранилище»/»ПолучитьФайлы»
2. На клиенте формируется документ через COM : «Новый COMОбъект(«Word.Application»)»
3. На клиенте заполняется макет, тем или иным способом -
Offline
ExtreMe
Опытный в 1С- Регистрация:
- 13 сен 2014
- Сообщения:
- 89
- Симпатии:
- 8
- Баллы:
- 29
мой набор: win8.1 64x, Excel 2016 64х, 1c 8.3.13.1513 64х и текст обработки
Путь = Объект.ИмяФайла; // тип Строка Попытка ОбъектExcel = Новый COMОбъект("Excel.Application"); Исключение Возврат "Ошибка открытия MS Excel"; КонецПопытки; Попытка ОбъектExcel.WorkBooks.Open(Путь); Исключение ОбъектExcel.DisplayAlerts = 0; ОбъектExcel.Quit(); ОбъектExcel.DisplayAlerts = 1; ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат ОписаниеОшибки; КонецПопытки;
проверил Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM->Microsoft Excel Application->Свойства->Удостоверение
Выбран «Текущий пользователь»Создал папку Desktop по обоим путям C:WindowsSysWOW64configsystemprofileDesktop и C:WindowsSystem32configsystemprofileDesktop
И хренасдва. всё равно выдаёт ошибку на стройке ОбъектExcel.WorkBooks.Open(Путь); и уходит в исключение
{ВнешняяОбработка.ЗагрузкаИзExcel.Форма.Форма.Форма(53)}: Ошибка при вызове метода контекста (Open) ОбъектExcel.WorkBooks.Open(Путь); по причине: Неизвестная ошибка
— Объединение сообщений, 17 янв 2019 —
попробовал под 1c 8.3.13.1513 86х, то же самое
после каждого запуска обработки в диспетчере остаётся висеть процесс Excel’я, я его каждый раз завершаюПоследнее редактирование: 17 янв 2019
-
Offline
ExtreMe
Опытный в 1С- Регистрация:
- 13 сен 2014
- Сообщения:
- 89
- Симпатии:
- 8
- Баллы:
- 29
одинаковая ситуация с тонким и толстым клиентом
-
Offline
ExtreMe
Опытный в 1С- Регистрация:
- 13 сен 2014
- Сообщения:
- 89
- Симпатии:
- 8
- Баллы:
- 29
пока решение нашёл в таком варианте:
открыть файл Excel
сделать поправки в кодеПуть = Объект.ИмяФайла; Попытка //ОбъектExcel = Новый COMОбъект("Excel.Application"); ОбъектExcel = ПолучитьCOMОбъект(, "Excel.Application"); Исключение ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); Возврат ОписаниеОшибки; КонецПопытки; //Попытка // ОбъектExcel.WorkBooks.Open(Путь); //Исключение // ОбъектExcel.DisplayAlerts = 0; // ОбъектExcel.Quit(); // ОбъектExcel.DisplayAlerts = 1; // ОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); // Возврат ОписаниеОшибки; //КонецПопытки;
так открытый файл подхватываться и нормально все работает, но хотелось ты без этих танцев с бубном…
— Объединение сообщений, 17 янв 2019 —
не совсем понял настройки безопасности
Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM->Microsoft Excel Application->Свойства->Безопасность
добавляя там пользователя, у меня то проходило чтение то нет
стабильной работы обработки при первом варианте кода не далоПоследнее редактирование: 17 янв 2019
-
Offline
ExtreMe
Опытный в 1С- Регистрация:
- 13 сен 2014
- Сообщения:
- 89
- Симпатии:
- 8
- Баллы:
- 29
Последнее редактирование: 20 янв 2019
-
Offline
evgkup
- Регистрация:
- 9 авг 2019
- Сообщения:
- 1
- Симпатии:
- 0
- Баллы:
- 1
Была аналогичная проблема на сервере
Помогло следующее (отображение открывающегося приложения excel)
Попытка
лпИмяФайла = «c:tmp1.xls»;
лпExcel = Новый COMОбъект(«Excel.Application»);
лпExcel.Visible = 1;
лпExcel.DisplayAlerts = 0;
лпExcel.WorkBooks.Open(лпИмяФайла);
Исключение
лпExcel.Quit();
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
…набор действийПоследнее редактирование: 9 авг 2019
Ошибка при вызове метода контекста (Прочитать)
Ошибка при выполнении файловой операции при чтении xls файла методом прочитать объекта ТабличныйДокумент.
Скрин сообщения
Данный объект 1C умеет не только записывать в Excel, но возможна и обратная операция с ограничениями, свойственными табличному документу.
В чем плюсы такой методики чтения
- Всё производится встроенными средствами;
- достаточно быстро;
- код в 2 строки
- данные не требуется преобразовывать, обычно всё считывается достаточно корректно, их можно проверить средствами 1С.
- возможно считывать значения ячеек как текст (без авто-преобразования),
- доступно на сервере, где excel вообще нельзя установить (linux, OSx).
Причина ошибки
Отличительной особенностью, вызывающей данную ошибку, является то, что 1С нужен монопольный доступ на время считывания.
Если же документ открыт, то выходит ошибка при выполнении файловой операции чтения.
COM-Объекта Excel.Application в данном ситуации просто открывает еще один экземпляр, а также в нём можно скрыть отображение сообшения о режиме «чтения».
Другой причиной может быть: отсутствие прав на чтение этого файла
Решение:
Закрыть открытую в Excel (или другой программе) книгу, проверить права на файл (возможность открытия в его в Excel, косвенный признак его наличия)
Реклама должна объяснить нам, без каких излишеств мы не можем прожить.
Дорабатывал обработку загрузки прихода из Excel. Обработка изначально была не моя, все хорошо работало, но внезапно клиент в облаке переехал с файловой базы на SQL, потому что файловая тормозила.
И тут 1С начала писать, что файл не обнаружен. Оказывается, код загрузки из Excel был написан только под толстого клиента. Пришлось дорабатывать стандартным образом:
//На клиенте
ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);//На сервере
ПолноеИмяФайла = ПолучитьИмяВременногоФайла(«XLS»);
ДД.Записать(ПолноеИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
Доработал и забыл. Как вдруг новая напасть — попросили доработать обработку, начинаю ее отлаживать, а она не считывает данные из XLSX файла.
Причем выдает ошибку доступа к временному файлу:
Я попробовал записывать во временный каталог, но это не принесло результата:
ТекКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ТекКаталог);
ПолноеИмяФайла = ТекКаталог + «» + Новый УникальныйИдентификатор() + ТипФайла; //ПолучитьИмяВременногоФайла(«XLS»);ДД.Записать(ПолноеИмяФайла);Ф = Новый Файл(ПолноеИмяФайла);
Сообщить(ПолноеИмяФайла + » Существует: » + Ф.Существует());ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст); //, ТипФайлаТабличногоДокумента.ODS);
Причем 1С писала, что файл существует:
Тогда почему же она не может его считать? Задачу нужно было решить срочно, причем прикладную логику я уже сделал, а споткнулся на мелочи. Я уже было хотел перейти на локальный компьютер для разработки (тем более что на сервере из соображений быстродействия отключена отладка). Но тут мне пришла мысль впервые попробовать использовать не временные файлы, а потоки:
ПотокДанных = Новый ПотокВПамяти();
ЗаписьДД = Новый ЗаписьДанных(ПотокДанных);
ЗаписьДД.Записать(ДД);
ЗаписьДД.Закрыть();
ПотокДанных.Перейти(0, ПозицияВПотоке.Начало);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПотокДанных, СпособЧтенияЗначенийТабличногоДокумента.Текст, ТипФайлаТабличногоДокумента.ODS);
ПотокДанных.Закрыть();
Увы, при этом выдавалась все та же ошибка доступа. Кроме того, в документации я посмотрел, что из памяти можно считывать не все форматы, а только MXL и ODS. Бред, конечно, но такова 1С.
И тут до меня дошло попробовать поменять расширение на XLSX:
//на клиенте
ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);
Ф = Новый Файл(ПолноеИмяФайла);
ТипФайла = Ф.Расширение);//на сервере
ТекКаталог = ПолучитьИмяВременногоФайла();
СоздатьКаталог(ТекКаталог);
ПолноеИмяФайла = ТекКаталог + «» + Новый УникальныйИдентификатор() + ТипФайла;
ДД.Записать(ПолноеИмяФайла);ДД = Новый ДвоичныеДанные(ПолноеИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ПолноеИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
И всё заработало. У 1С, как обычно, беда с диагностикой ошибок. Она пишет совсем не ту ошибку, которая вызывает проблему. Доступ к файлу есть, просто формат файла 1С определяет по расширению, а не содержимому файла.
Время факт: 0,5 час. На поиски решения проблемы.
Ошибка работы 1С 8 с Excel: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу
Описание ошибки:
Проявила себя в клиент-серверной базе. Релиз платформы 1С: Предприятие 8.3.13.1644.
Найденные решения:
Полная формулировка ошибки:
{Доработки Документ.УстановкаЦенНоменклатуры.Форма.Доп_ФормаИмпортXLS.Форма(83)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft Office Excel): Нет доступа к файлу ‘C:1C_ArhivТест загрузка прайсов[имя_файла].xlsx’. Это может быть вызвано одной из следующих причин.
• Имени файла или пути не существует.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.
При доработке в расширении для конфигурации 1С: Комплексная автоматизация 8, ред. 2, которая должна загружать данные из файлов Excel и при попытке выполнения в коде РабочаяКнига = ExcelПриложение.WorkBooks.Open(ФормаИмпортXLS.ИмяФайла);. Что удивительно, но в более ранней редакции Комплексной, 1.1, эта проблема не возникала в этом же коде, хотя обе базы на одном сервере.
Проблема оказалась нова для автора этого текста только в 2020 году, хотя самой проблеме достаточно много времени (более 5 лет на момент написания). В обсуждении данной ошибки на сайте infostart.ru «Ошибка открытия файла Excel на сервере» обсуждается несколько предложений по решению проблемы, среди которых наиболее популярный вариант решения. Так же там много попутных предложений по настройке прав на стороне сервера, если вдруг популярный вариант окажется не актуальным.
Популярность этого варианта подтверждается исчерпывающим обсуждением и вот на этом ресурсе: «v8.x: [РЕШЕНО] Ошибка при вызове метода контекста (Open) при работе с Excel»
Проблема была рещена данным простым решением, но обращу внимание на то, что данное действие должно быть выполнено на сервере, а не на локальном рабочем месте.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
23-09-2020
Журавлев А.С.
(Сайт azhur-c.ru)