Ребят, есть проблема, хочу открыть Excel файл посредством COM на сервере, пишу такой код:
&НаСервере
Процедура ПродолжитьЗагрузкуНаСервере (СтруктураПараметровФайла, ДополнтиельныеПараметры)
ФайлЗагрузки = ПолучитьИзВременногоХранилища(СтруктураПараметровФайла.Адрес);
ПутьДляФайла = ПолучитьИмяВременногоФайла(СтруктураПараметровФайла.Расширение);
ФайлЗагрузки.Записать(ПутьДляФайла);
ФайлЗагрузки = Новый COMОбъект("Excel.Application");
Книга = ФайлЗагрузки.WorkBooks.Open(ПутьДляФайла);
ЧислоЛистов = Книга.Sheets.Count;
Счетчик = 0;
Элементы.Лист.СписокВыбора.Очистить();
Пока Счетчик <= ЧислоЛистов - 1 Цикл
ЛистExcel = Книга.WorkSheets(Счетчик + 1);
Элементы.Лист.СписокВыбора.Вставить(Счетчик, ЛистExcel.Name, ЛистExcel.Name);
Счетчик = Счетчик + 1;
КонецЦикла;
Если Элементы.Лист.СписокВыбора.Количество() > 0 Тогда
Лист = Элементы.Лист.СписокВыбора[0].Значение;
КонецЕсли;
КонецПроцедуры
Показать
Разумеется до этого файл получил на клиенте, обработал и передал (т.е. файл в папке по нужному пути появляется), но на строке
ФайлЗагрузки = Новый COMОбъект("Excel.Application");
Вылетает с ошибкой, что недостаточно прав, скрины во вложении.
По обертке - конфа тррехзвенка (MSSQL), Ecxel 64 битный, сервер-приложение и платформа тоже (платформа 8.3.16.1030, пользователь заведен стандартный (USR1CV8), этому пользователю разрешил все в службах компонентов (папка DCOM, Microsoft Excel Application), папки C:\Windows\SysWOW64\config\systemprofile\Desktop\ и C:\Windows\System32\config\systemprofile\Desktop\ созданы, права на них полные, дал еще полные права на папку C:\Windows\System32\config\systemprofile\AppData. Все это для пользователя USR1CV8. Комп перезагружал, службу 1с и MSSQL тоже перезагружал, вроде все сделал, а прав как не было, так и нет, что нужно еще сделать? Разумеется, что на клиенте или в файловом варианте работы такой проблемы нет.
1. Администрирование - Службы компонентов – Компьютеры – Мой компьютер – Приложения COM+ - Создать приложение – Создать новое приложение – вводим имя «V83.COMConnector»(переключатель «Серверное приложение») – Указанный пользователь (Администратор)
Убедитесь что подставляете нужную версию и розрядность
2. В появившейся ветке V83COMConnector – подветка Компоненты – создание нового компонента – Установка новых компонентов - <каталог 1С>\bin\comcntr.dll
Обязательно!
3. Правой кнопкой по ветке V83COMConnector – Свойства – Безопасность – Снял галку «Принудительная проверка доступа для приложений» - Поставил галку «Применить политику программных ограничений» - Уровень ограничений «Неограниченный»
(2) Не помогло то что описано, сделал все в точности по инструкции, скрин прилагаю. В чем еще может быть проблема? Может банально прав на какую-то папку не хватает?
(3) Да, я знаю, спасибо, в этом случае я загружаю только список листов, для того, чтобы пользователь смог выбрать нужный ему лист.
Если использовать "ТабличныйДокумент.Прочитать(...)", то листы либо склеятся, либо загрузится только один (а его нужно передать по имени).
Попробуйте для начала положить файл под ноги, то есть в папку 1С. Тогда вы точно отсечете все возможных блокировки доступа, 1с точно увидит файл у себя под ногами. Прямо в папку bin запихните, а потом уже будете играться с правами на рабочем столе, с правами созданными для каталога или унаследованными или вообще замените владельца всех папок. Это будет уже в будущем.
(6)Он уже и так под ногами лежит (Функция ПолучитьИмяВременногоФайла гарантирует, что к возвращемому пути будет доступ и что после окончания сеанса будет очищен файл). Да и с файлом самим нет проблемы хотя бы потому что валится на этой строчке ФайлЗагрузки = Новый COMОбъект("Excel.Application"); а эта строка никак не связана с файлом. Если я просто возьму кнопку и повешаю на сервере обработчик ее нажатия такой же, то тоже будет ошибка (без какого либо файла)
Для V83COMConnector создания, пока нет повода, возможно конечно это поможет, но вероятнее всего проблема проще. Где то у вас действительно не хватает доступа, вероятнее всего на уровне файловой системы. До V83COMConnector создания, нужно все проверить как следует.
(7)С ком коннектором у меня и не было на самом деле проблем, есть бухия и УТ, которые обмениваются напрямую на этом же сервере, и не вылетают с ошибкой, так что вряд ли дело в этом..
Если говорить серьезно о V83COMConnector. То для меня исчерпывающей была эта статья из всех выше приведенных.
Если сервер 1С стоит на Windows х64, то рано или поздно Вы столкнетесь с проблемой создания COM-соединения, если соединение инициируется на стороне сервера. На стороне клиента COM-соединение работает нормально, на стороне сервера вываливается с ошибкой. Данная статья позволяет снять проблему. НО - до переустановки платформы.
https://infostart.ru/1c/articles/197627/ Тут описано все досконально, по ней и настраивал Com-соединение. Но если честно, то давно уже такие настройки нигде не требуются.