Интерфейс не поддерживается |
Я |
22.05.12 — 08:20
Добрый день!
Есть клиент серверная база 1С 8.2 при загрузке эксель файла, на моменте создания соm объекта выходит ошибка «no such interface supported» или по русски интерфейс не поддерживается.
Док = новый COMОбъект(«Excel.Application»);
Сообщить(«Создан объект»);
Док.Workbooks.Open(файл);
Сообщить(«Файл открыт»);
Причем в файловом варианте все работает! версия платформы 8.2.15.294
Поискал на форуме, но ответа так и не нашел.
1 — 22.05.12 — 08:22
эксель на сервере установлен? права на ком-объекты есть?
2 — 22.05.12 — 08:31
(1) ексель установлен
а как проверить права на ком объекты? странно ведь в файловом варианте на сервере то работает…
3 — 22.05.12 — 08:32
проверь права пользователя от которого сервер 1с стартует
4 — 22.05.12 — 08:33
(2)[странно ведь в файловом варианте на сервере то работает..]
странно, что ты не нашёл ответа на этот вопрос на форуме
5 — 22.05.12 — 08:38
сервер 1с х64?
6 — 22.05.12 — 08:40
(5) да
7 — 22.05.12 — 08:42
а эксел х32
8 — 22.05.12 — 08:43
(7) да
9 — 22.05.12 — 08:45
(8) это был не вопрос
10 — 22.05.12 — 08:46
(9) так что можно сделать с этим?
11 — 22.05.12 — 08:49
А зачем ком на сервере создавать? Читать/писать в эксельный файл чисто клиентская задача.
12 — 22.05.12 — 08:49
(0)создать COMОбъект(«Excel.Application») на клиенте?
13 — 22.05.12 — 08:49
(11):)
14 — 22.05.12 — 08:50
(12) на &сервере
15 — 22.05.12 — 08:52
(14)это был не вопрос
16 — 22.05.12 — 08:54
(10) где-то в инете валялась инструкция, как сделать х64 стаб для х32 объекта. лично не пробовал, но вроде говорят, что работает
17 — 22.05.12 — 09:00
Дал права на USR1CV82 теперь ругается на строке Док.Workbooks.Open(файл); на путь файла
18 — 22.05.12 — 09:00
19 — 22.05.12 — 09:01
(17) какой путь у файла?
20 — 22.05.12 — 09:02
на рабочем столе. Вызываю диалог выбора файла
21 — 22.05.12 — 09:04
(20) извини, но файлу не место быть на конкретном рабочем столе. )
22 — 22.05.12 — 09:05
(21) я вызываю диалог выбора файла, пользователь сам выбирает путь к файлу
23 — 22.05.12 — 09:07
(22) шо, прямо на сервере?
24 — 22.05.12 — 09:10
(16) по-ходу, тут я загнался, это не ком, а оле
25 — 22.05.12 — 09:12
(23),(21) Вот полный код
&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
Длг = новый ДиалогВыбораФайла(Режим);
Фильтр = «Файл excell (*.xls)|*.xls»;
ДЛГ.Фильтр = Фильтр;
ДЛГ.Выбрать();
Файлик = ДЛГ.ПолноеИмяФайла;
Если ЗначениеЗаполнено(файлик) Тогда
ЗагрузитьДанныеИзФайла(Файлик);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьДанныеИзФайла(Файл)
СчСтроки = 2;
ТекНомер=1;
Док = новый COMОбъект(«excel.Application»);
Сообщить(«Создан объект»);
Док.Workbooks.Open(файл);
Сообщить(«Файл открыт»);
Пока ТекНомер=1 ЦИкл
Если Док.Sheets(1).Cells(счСтроки,1).Value = Неопределено Тогда
Прервать;
КонецЕсли;
26 — 22.05.12 — 09:14
(25) прав нет на файл у USR1CV82
27 — 22.05.12 — 09:15
Вообще есть мысль что путь к файлу между клиентом и сервером передавать нельзя или нужно как то иначе это дело реализовать
28 — 22.05.12 — 09:16
(27) т.е. файл на рабочем столе юзера — феерично
29 — 22.05.12 — 09:16
(25) и вообще, сама идея плоха
30 — 22.05.12 — 09:17
мда….
Файл лежит на компе у пользователя… Путь передаётся на другой комп… И странно, почему это он не открывается…
31 — 22.05.12 — 09:17
(26) в таком случае возникает трудности. USR1CV82 пользователь локальной машины и у него нет админских прав на домен
(29) а как можно сделать лучше?
32 — 22.05.12 — 09:18
(31)на клиенте открывай
33 — 22.05.12 — 09:18
(25) немного не в тему. что случится, если юзер откажется от выбора файла?
34 — 22.05.12 — 09:20
(33) ничего
(32) А на клиенте будет работать Док.Workbooks.Open(файл);?
35 — 22.05.12 — 09:21
феерично просто
36 — 22.05.12 — 09:21
(34) будет конечно
37 — 22.05.12 — 09:22
Когда это будет переносится на промышленную базу ТС будут ждать новые сюпризы
38 — 22.05.12 — 09:24
(37) какие сюрпризы?
39 — 22.05.12 — 09:25
(38)Для чего файл прогонять через сервер?Количество вызовов сервера лучше минимизировать
40 — 22.05.12 — 09:25
41 — 22.05.12 — 09:28
Еще добавлю,что если не нужные данные формы,то лучше использовать внеконтекстный(&НаСервереБезКонтекста)серверный вызов
42 — 22.05.12 — 09:38
блин, не получается. Я на сервере создаю ком объект, потом его передаю на клиент, чтобы открыл файл и начал его обрабатывать.
Вот на моменте передачи ком объекта из сервера на клиент вылетает ошибка
43 — 22.05.12 — 09:49
оказывается ком объекты можно создавать на клиенте. всё сделал, работает! Всем спасибо за участие и помошь!
Ranger_83
44 — 22.05.12 — 09:53
(43)Тебе об ентом еще с (11) еще намекали
I’ve got this annoying issue in here when using a VB6 DLL (AB5COM.dll) in my webAPI project.
All is working fine in my local VS2015. The problem occurs only in my remote IIS 7.5 (Win2008 R2) after deploying the published site.
I’m using this DLL in 2 projects of my solution.
I’ve tried several things —
- Generating interop.AB5COM
- Disable embed and copy local
- platform change to x86
- APP POOL supports 32bit
- [assembly: ComVisible(true)]
- Adding [Guid(«xxxxxxx-xxxxx-xxxxxx-xxxxxx»)] as attribute in my class
All was useless. Local VS2015 works, remote IIS7.5 fails with this exception.
System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to interface type 'AB5COM.trxAB5core'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{AF42661C-D369-454A-A005-55D51037166A}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
I also can’t find which DLL I need to register using regsvr32 since the COM dll isn’t published, and the interop cannot be registered.
Would appreciate your help on this.
Thx
asked Mar 20, 2017 at 14:04
4
Ok, since no answer on this, I had to make some moves…
The remote IIS environment is my TEST server, so I’ve installed VS2017 with my solution, ran my app (success) and published (success).
So currently I have no issues with this COM DLL which brings the conclusion that this is a pure REGISTRY issue. The VS2015 knows how to register the correct DLL and then all works perfectly.
Now, I need to figure how to make this working on my Production…
Although this is NOT a proper solution, I hope my personal post helps anyone.
answered Mar 23, 2017 at 10:07
Dave GahanDave Gahan
2992 silver badges13 bronze badges
Ошибка при вызове конструктора (COMObject) по причине: Интерфейс не поддерживается
Ошибка происходит при попытке загрузить из Excel в 1С, когда код обработчика выполняется не на клиенте, а на сервере и в большинстве случаев текст ошибки говорит об отсутствии прав у пользователя сервера 1С.
Быстрый переход
- Особенности
- Устранение:
- Может оказаться, что «Microsoft Excel Application» отсутствует в списке, в данном случае
- Заключение
Особенности
Кодом со стороны 1С без изменения места исполнения не устраняется, использование других функций подключения Com также не дает положительных результатов.
Убедиться в причине ошибки возможно, если посмотреть логи системы.
Устранение:
- на сервере убиваем excel (taskkill /im excel.exe /f)
- открываем оснастку «Службы компонентов» (Пуск->Администрирование->Службы компонентов)
- в ней раскрываем ветку Службы компонентов->Компьютеры->Мой компьютер->Настройка DCOM
- справа в списке находим Microsoft Excel Application, открываем Свойства, вкладка Удостоверение, выбираем пользователя с администраторскими правами, ОК.
Может оказаться, что «Microsoft Excel Application» отсутствует в списке, в данном случае
- Запускаем REGEDIT
- Открываем ветку ComputerHKEY_CLASSES_ROOTAppIDEXCEL.EXE, если ее нет, то создаем
- Создаем в ней строковый параметр AppID = {00020812-0000-0000-C000-000000000046}
- Выполняем команду «mmc comexp.msc /32», которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты.
- После этого в Component Services должен появиться «Microsoft Excel Application»
Чтобы решить эту проблему, я включил пользователя USRV82, под которым запускается сервер приложений 1С Предприятия 8.3, в группу Distributed COM Users, но ошибка сразу не ушла, потребовалась перезагрузка.
Для правки использовалась оснастка Локальные пользователи и группы (lusrmgr.msc) — это инструмент, предназначенный для управления локальными пользователями и группами. Локальный пользователь или группа — это учетная запись, которой могут быть предоставлены разрешения и права на вашем компьютере.
Осложняло проблему то, что ошибка плавала: периодически выходила, либо в момент создания объекта, либо уже в момент вызова методов excel-application.
Так что нельзя однозначно сказать, что же решило проблему.
Заключение
В большинстве случаев уйти от дополнительной настройки операционной системы возможно, если использовать вызова Com-Объекта на клиенте. При правильной установке объектов они работают даже при различных по битности 1с и Excel, OS.
В моем же случае клиентские компьютеры работали на Ubuntu, поэтому вся обработка перенесена на сервер.
Бывает такое: вы прописываете для компонента пользователя и пароль.
Затем через некоторое время меняете пароль и компонент перестает работать: выходит такая же ошибка «Интерфейс не поддерживается». Следует просто вбить новый пароль.
Сворачивать рекламу, чтобы сберечь деньги, все равно, что останавливать часы, чтобы сберечь время.
Настройка COM Объекта «Excel.Application» на сервере 1С, настройка поможет обработать большие файлы Excel на сервере 1C, в том числе через фоновые задания.
Та же данная настройка может решить проблему с ошибкой 1С:
ошибка -2147467262(0x80004002): Интерфейс не поддерживается
- Заходим на сервер приложений 1С под локальным админом или администратором домена
- Запускаем DCOMCNFG (Консоль настроек «Службы компонентов»)
- Открываем ветку Корень консоли -> Службы компонентов -> Компьютеры -> Мой компьютер -> Настройка DCOM
- Ищем «Microsoft Excel Application»
- Если запись существует, то переходим к пункту 4
- Закрываем «Службы компонентов»
- Настройка реестра
- Запускаем REGEDIT
- Открываем ветку КомпьютерHKEY_CLASSES_ROOTAppIDEXCEL.EXE, если ее нет, то создаем
- Создаем в ней строковый параметр AppID = {00020812-0000-0000-C000-000000000046}
- Выполняем команду «mmc comexp.msc /32», которая делает то же что и DCOMCONFIG, но позволяет видеть 32 битные компоненты
- После этого в Component Services должен появиться «Microsoft Excel Application»
- Настраиваем свойства DCOM компонента «Microsoft Excel Application»
- Заходим в «Свойства», закладка «Безопасность»
- «Разрешения на запуск и активацию» — Настроить — Изменить
- Добавляем пользователя, под которым запускается агент сервера 1С
- Назначаем ему только следующие права (Разрешить):
- Локальный запуск
- Локальная активация
- «Разрешения на доступ» -Настроить — Изменить
- Добавляем пользователя, под которым запускается агент сервера 1С
- Назначаем ему только следующие права (Разрешить):
- Локальный доступ
- «Разрешения на запуск и активацию» — Настроить — Изменить
- Переходим на вкладку «Удостоверение»
- Выбираем «Запускающий пользователь»
- Заходим в «Свойства», закладка «Безопасность»
- Настройка системных папок
- Папка «C:WindowsSysWOW64configsystemprofileDesktop»
- Проверяем наличие папки , если нет -то создаем
- Заходим в «Свойства» этой папки, закладка «Безопасность»
- Добавляем, если нет, пользователя, под которым запускается агент сервера 1С
- Добавляем права «Чтение» и «Запись»
- Папка «C:WindowsSystem32configsystemprofileDesktop»
- Проверяем наличие папки , если нет -то создаем.
- Заходим в «Свойства» этой папки, закладка «Безопасность»
- Добавляем, если нет, пользователя, под которым запускается агент сервера 1С
- Добавляем права «Чтение» и «Запись»
- Папка «C:WindowsSysWOW64configsystemprofileDesktop»
Платформа: 1С:Предприятие 8.3 (8.3.6.2100)
Конфигурация:Риэлтор. Управление продажами недвижимости для «1С:Управление торговлей 8», редакция 11.1 (11.1.10.145/2.7.3.42)
Проблема:Файловая база размещена на сервере, опубликована на веб-сервере. Пользователи подключаются через тонкого клиента к веб-серверу. При печати шаблона WORD база выдает ошибку -2147467262(0х80004002) Интерфейс не поддерживается.
Сложности в процессе решения:
Согласно инструкции разработчиков, по словам ошибки «интерфейс не поддерживается» проделали следующее:
1. Пользователю USR1CV82, от имени которого запускается сервер 1С, дать права на запуск DCOM MicrosoftWord и DCOM Microsoft Excel (при необходимости).
Для этого нужно:
1.1. Запустить службу компонентов. Из командной строки набрать
mmccomexp.msc
и найти компоненту Word или Excel. Пример для Word представлен на рисунке ниже:
При запуске службы компонентов на 64-х разрядной машине, 32-х разрядные компоненты могут не отображаться, тогда запуск нужно осуществить через команду:
C:WINDOWSSysWOW64>mmc comexp.msc /32
1.2. Открыть свойства компоненты и перейти на закладку Безопасность.
1.3. В разделе Разрешения на запуск выбрать пункт Настроить и нажать кнопку Изменить. Добавить пользователя USR1CV82.
Не помогло, база выдавала ошибку: Данная команда недоступна, так как не открыт ни один документ.
В ходе работ закончилась лицензия на MS Office, и в конфигурации после создания COM-объекта «Word.Application» на каждом шаге в отладке ОС запускает процесс завершения установки и активации MS Office. Клиент купил лицензию для сервера на MS Office.
После установки лицензий вернулась ошибка -2147467262(0х80004002) Интерфейс не поддерживается.
По словам разработчиков, перевод обработки Word на клиента не решит проблему. Судя по предоставленным нами логам — ошибка возникает в режиме веб-клиента. В этом режиме программная обработка Word на клиенте не возможна, только серверная обработка.
Но для работы базы необходимо было решить данную проблему. Мы вернули все изменения, которые сделали по инструкции разработчика. Долго прорабатывали доступы к папкам временного хранилища для пользователей извне. Создали еще одного администратора без пользовательских настроек, для него заново настраивали IIS.
Решение:
Настроили работу сервера через Apache. Создали папку, в которой находятся редактируемые шаблоны Word, дали общий доступ к этой папке, для пользователя IUSR и группы пользователей IIS_users.
На Windows Server 2012 (64 разрядности) установлен Word 2013 (32 разрядности), а у пользователей установлен Adobe Reader. Шаблон договора заполняется в 1С на сервере и конвертируется в PDF, сохраняется во временную папку на сервере.
Мы переписали обработку, чтобы документ сохранился в формат PDF (по требованию клиента для запрета редактирования, изменения документа) и сохранялся во временное хранилище 1С. Из хранилища документ/файл передается на указанный нами путь (во временные папки у клиента), как для тонкого клиента, так и для веб-клиента. Открывается файл именно из этой временной папки. Ниже пример кода, который мы дописали для передачи файла с сервера на клиент.
&НаКлиенте
Попытка
ЗапуститьПриложение(ПолноеИмяФайлаНаКлиенте);
Исключение
Адрес = УПН_ОбщиеПроцедуры.ПолучитьФайл(ПолноеИмяФайлаНаКлиенте);
Описание = Новый ОписаниеПередаваемогоФайла(«C:doc» + ДанныеФайла.ИмяФайла,Адрес);
МассивОписаний=Новый Массив;
МассивОписаний.Добавить(Описание);
ПолучитьФайлы(МассивОписаний,,,Ложь);
ЗапуститьПриложение(«C:doc» + ДанныеФайла.ИмяФайла);
КонецПопытки;
&НаСервере
Функция ПолучитьФайл(ПолноеИмяФайлаНаКлиенте) Экспорт
Двоичное = Новый ДвоичныеДанные(ПолноеИмяФайлаНаКлиенте);
Адрес = ПоместитьВоВременноеХранилище(Двоичное);
Возврат Адрес
КонецФункции
В настроках Панель управления, далее путь: Администрирование->Управление групповой политикой->Домены – выбираем наш сервер и во вкладке «Делегирование» добавляем группу IIS_users и пользователя IUSR (через которого подключаются внешние пользователи).
В веб-клиенте после отправки документа на печать браузе попросит установить расширение. Нужно установить, и все заработает:
Предпочтительнее использовать Internet Explorer (IE) не ниже 8 версии. При использовании Google Chrome (гугл хром) возникает ошибка: Использование модальных окон в данном режиме запрещено.
Если Internet Explorer не запускает документ на печать, можно принудительно запустить браузер от имени администратора:
В тонком клиенте сразу открывается заполненный шаблон (на примере ниже стерты данные клиента). Форма открывается в формате PDF по требованию клиента, чтобы пользователь не мог редактировать документ перед печатью.