![]() |
|
ЗУП 3.1, платформа 8.3.11, ошибки &НаКлиенте с COMОбъект("Word.Application") | ☑ | ||
---|---|---|---|---|
0
Serg_1960
04.06.18
✎
15:51
|
Толстый 32-битовый клиент на 64-битовом сервере 1C под Windows Server 2012 R2, внешняя обработка работает и файловом, и в клиент-серверном вариантах работы, но сыпятся ошибки при подключении обработки через "Дополнительные отчеты и обработки"...
Была ошибка "-2147467262(0х80004002) Интерфейс не поддерживается." -пользователю USR1CV8 дал права на запуск MicrosoftWord в DCOMе - ошибка ушла. Добавил папки Desktop в каталоги systemprofile на всякий случай. Сейчас ошибка на следующей строке алгоритма - при Activate(): "Произошла исключительная ситуация (Microsoft word): Не удается активизировать приложение." ЧЯДНТ? |
|||
1
Serg_1960
04.06.18
✎
15:59
|
Если вызвать как внешнюю обработку (через Файл - Открыть) - обработка работает без ошибок.
Я так понимаю, разница в вызове внешней обработки на клиенте и на сервере. Но где смотреть и куда копать - что-то не соображаю. |
|||
2
Serg_1960
04.06.18
✎
16:04
|
Вспоминаю, что были проблемы с V83.COMConnector между УПП 1.3 и ЗУП 3.1. (отображение зарплаты в бухгалтерском учете). Но эта проблема в своё время была преодолена и импорт/экспорт данных сейчас идёт нормально.
|
|||
3
Вафель
04.06.18
✎
16:05
|
самам мс не рекомендует ворд так запускать
|
|||
4
Вафель
04.06.18
✎
16:05
|
хотя на клиенте можно, но прием здесь тогда USR1CV8
|
|||
5
Serg_1960
04.06.18
✎
16:21
|
Я выше говорил - ошибка была на клиенте в строке <<"Новый COMОбъект("Word.Application")>> - вероятно права USR1CV8 неявно используются при создании COMОбъект-ов - для запуска приложения используется "Запускающий пользователь".
Если использовать в "Удостоверение" галочку "Текущий пользователь" или "Указанный пользователь", то 1С зависает позднее - при активации документа MS Word. |
|||
6
Флориан
04.06.18
✎
16:38
|
думаю что "ОтчетОбъект =ВнешниеОтчеты.Создать(ИмяФайла,Ложь)" должна на клиенте запускаться
|
|||
7
Serg_1960
04.06.18
✎
17:06
|
У меня часть пользователей работает в тонком клиенте :(
|
|||
8
Флориан
04.06.18
✎
17:24
|
На сервере вообще Word есть? Запустили его хоть раз под USR1CV8? Он там инициалы спрашивает в форме модальной
|
|||
9
Serg_1960
04.06.18
✎
17:45
|
На сервере Microsoft Word 2010 (64-бит). При чём тут инициалы - не понял. Но мысль интересная -завтра проверю, когда админ придёт.
|
|||
10
Serg_1960
04.06.18
✎
17:48
|
Права посмотреть USR1CV8. А то, вдруг, у него только вход в качестве службы и всё, привет.
|
|||
11
Сергиус
04.06.18
✎
17:49
|
(0)Делай инициализацию и вызов com-объекта в клиентской процедуре внешней обработки.
|
|||
12
Serg_1960
04.06.18
✎
17:54
|
(11) Так и делаю. Я уж подстраховался со всех сторон :(
&НаКлиенте Адрес = ПолучитьДанныеМакетаНаСервере("ТрудовойДоговор"); Данные = ПолучитьИзВременногоХранилища(Адрес); УдалитьИзВременногоХранилища(Адрес); Адрес = Неопределено; // попытка работы через MSWord ТекстОшибки = ""; Попытка ИмяФайла = ПолучитьИмяВременногоФайла("doc"); Данные.Записать(Имяфайла); Данные = Неопределено; MSWord = Новый COMОбъект("Word.Application"); MSWord.Displayalerts = Ложь; // Не отображать предупреждения и сообщения, на все вопросы ответы "по умолчанию" MSWord.Application.Visible = Истина; MSWord.Activate(); ... &НаСервере Функция ПолучитьДанныеМакетаНаСервере(ИмяМакета) Обработка = РеквизитФормыВЗначение("Объект"); Макет = Обработка.ПолучитьМакет(ИмяМакета); ИмяФайла = ПолучитьИмяВременногоФайла("tmp"); Макет.Записать(Имяфайла); Адрес = Новый УникальныйИдентификатор(); Результат = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла), Адрес); УдалитьФайлы(ИмяФайла); // принудительная очистка данных Обработка = Неопределено; Макет = Неопределено; ИмяФайла = Неопределено; Адрес = Неопределено; Возврат Результат; // возврат адреса временного хранилища (строка) КонецФункции |
|||
13
Сергиус
04.06.18
✎
19:29
|
(12)А на клиенте точно Ворд есть и нормально работает? И кстати, с сервера можно сразу ДвоичныеДанные возвращать, без помещения в хранилище.
|
|||
14
Serg_1960
04.06.18
✎
20:57
|
(13) Да, есть. В данном, конкретном, случае сеанс запускается на сервере 1С. На передачу через файл, завернутый в хранилище, можно не обращать внимание - во-первых: не принципиально, а во-вторых - это "хвосты", оставленные от промежуточного контроля каждом этапа работы. Потом приберу и оптимизирую.
|
|||
15
Сияющий в темноте
04.06.18
✎
21:29
|
Есть мнение,что кто то создал Com-сервер Word,не поставил ему видимость через Visible=True,и пытается вызвать метод Activate,который визуально подсвечивает ячейку.
Я бы на месте ворда тоже бы обиделся |
|||
16
Сергиус
04.06.18
✎
23:26
|
(15)MSWord.Application.Visible = Истина;
Вот в коде есть установка видимости, или о чем речь? |
|||
17
Сергиус
04.06.18
✎
23:28
|
(14)Имеется ввиду сеанс, под которым идет запуск внешней обработки? Т.е. клиент 1с установлен на компе, где находится сервер 1с или что?
|
|||
18
Serg_1960
05.06.18
✎
09:20
|
(17) В данном конкретном случае - это удаленный рабочий стол (Remote Desktop Connection) и WINWORD запускается из-под USR1CV8 :(
|
|||
19
hhhh
05.06.18
✎
09:40
|
(18) разве у Remote Desktop Connection пользователь USR1CV8?
|
|||
20
Serg_1960
05.06.18
✎
11:02
|
Эх... забодался объяснять :) См.(5)
Когда вызывается печать документа, то обработка запускается на сервере из справочника "Дополнительные отчеты и обработки". А так, как у обработки "ВызовКлиентскогоМетода", то выполняется клиентский метод обработки - вызывается процедура Печать() формы обработки... Короче: &НаКлиенте <<Новый COMОбъект("Word.Application")>> порождает процесс WINWORD от имени USR1CV8. Не спрашивай "Почему?" - скажи что делать :) |
|||
21
dubraver
05.06.18
✎
11:09
|
Могу лишь свой кусок кода кинуть который работает в ЗУП 3.1 в тонком клиенте.
&НаСервере Функция ПолучитьДанныеМакета(ИмяМакета) ТекОбъект = РеквизитФормыВЗначение("Объект"); ТрудовойДоговор = ТекОбъект.ПолучитьМакет(ИмяМакета); Возврат ТрудовойДоговор; КонецФункции &НаКлиенте Процедура ПечатьФормыWord(ОбъектыНазначенияМассив, ИмяМакета) Экспорт ТрудовойДоговор = ПолучитьДанныеМакета(ИмяМакета); мИмяФайла = ПолучитьИмяВременногоФайла("docx"); УдалитьФайлы(мИмяФайла); ТрудовойДоговор.Записать(мИмяФайла); MSWord = Новый COMОбъект("Word.Application"); WordДокумент = MSWord.Documents.Open(мИмяФайла); wdWindowStateMaximize=1; wdWindowStateMinimize=2; MSWord.Application.Visible = Истина; MSWord.Application.WindowState = wdWindowStateMinimize; MSWord.Application.WindowState = wdWindowStateMaximize; |
|||
22
Serg_1960
06.06.18
✎
09:16
|
(8) Кстати, - спасибо.
USR1CV8 был прописан только для работы службы. Добавил права на вход в систему и прочее - увидел, что MS Word каждый раз зависает на модальном окне с предупреждение о критической ошибке в предыдущем сеансе и предложением запустить сеанс в безопасном режиме. (21) Интересное решение и эффект от .WindowState :) Благодарю. Свою проблему ещё не решил. |
|||
23
Serg_1960
06.06.18
✎
14:04
|
С проблемой определился - в момент вызова MS Word возникает локальное окно с ошибкой:
Microsoft Word Не удается сохранить файл автозамены (MSO1049.acl). Он может быть доступен только для чтения, или у вас нет прав на его изменение. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |