Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

ЗУП 3.1, платформа 8.3.11, ошибки &НаКлиенте с COMОбъект("Word.Application")

ЗУП 3.1, платформа 8.3.11, ошибки &НаКлиенте  с COMОбъект("Word.Application")
Я
   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): Не удается активизировать приложение."
 
ЧЯДНТ?
 
 
   Serg_1960
 
1 - 04.06.18 - 15:59
Если вызвать как внешнюю обработку (через Файл - Открыть) -  обработка работает без ошибок.

Я так понимаю, разница в вызове внешней обработки на клиенте и на сервере. Но где смотреть и куда копать - что-то не соображаю.
   Serg_1960
 
2 - 04.06.18 - 16:04
Вспоминаю, что были проблемы с V83.COMConnector между УПП 1.3 и ЗУП 3.1. (отображение зарплаты в бухгалтерском учете).  Но эта проблема в своё время была преодолена и импорт/экспорт данных сейчас идёт нормально.
   Вафель
 
3 - 04.06.18 - 16:05
самам мс не рекомендует ворд так запускать
   Вафель
 
4 - 04.06.18 - 16:05
хотя на клиенте можно, но прием здесь тогда USR1CV8
   Serg_1960
 
5 - 04.06.18 - 16:21
Я выше говорил - ошибка была на клиенте в строке <<"Новый COMОбъект("Word.Application")>> - вероятно права USR1CV8 неявно используются при создании COMОбъект-ов - для запуска приложения используется "Запускающий пользователь".

Если использовать в "Удостоверение"  галочку "Текущий пользователь" или "Указанный пользователь", то 1С зависает позднее - при активации документа MS Word.
   Флориан
 
6 - 04.06.18 - 16:38
думаю что "ОтчетОбъект =ВнешниеОтчеты.Создать(ИмяФайла,Ложь)" должна на клиенте запускаться
   Serg_1960
 
7 - 04.06.18 - 17:06
У меня часть пользователей работает в тонком клиенте :(
   Флориан
 
8 - 04.06.18 - 17:24
На сервере вообще Word есть? Запустили его хоть раз под USR1CV8? Он там инициалы спрашивает в форме модальной
   Serg_1960
 
9 - 04.06.18 - 17:45
На сервере Microsoft Word 2010 (64-бит). При чём тут инициалы - не понял. Но мысль интересная -завтра проверю, когда админ придёт.
   Serg_1960
 
10 - 04.06.18 - 17:48
Права посмотреть USR1CV8. А то, вдруг, у него только вход в качестве службы и всё, привет.
 
 Рекламное место пустует
   Сергиус
 
11 - 04.06.18 - 17:49
(0)Делай инициализацию и вызов com-объекта в клиентской процедуре внешней обработки.
   Serg_1960
 
12 - 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)А на клиенте точно Ворд есть и нормально работает? И кстати, с сервера можно сразу ДвоичныеДанные возвращать, без помещения в хранилище.
   Serg_1960
 
14 - 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с или что?
   Serg_1960
 
18 - 05.06.18 - 09:20
(17) В данном конкретном случае - это удаленный рабочий стол (Remote Desktop Connection) и WINWORD запускается из-под USR1CV8 :(
   hhhh
 
19 - 05.06.18 - 09:40
(18) разве у Remote Desktop Connection пользователь USR1CV8?
   Serg_1960
 
20 - 05.06.18 - 11:02
Эх... забодался объяснять :) См.(5)

Когда вызывается печать документа, то обработка запускается на сервере из справочника "Дополнительные отчеты и обработки". А так, как у обработки "ВызовКлиентскогоМетода", то выполняется клиентский метод обработки - вызывается процедура Печать() формы обработки...

Короче: &НаКлиенте <<Новый COMОбъект("Word.Application")>> порождает процесс WINWORD от имени USR1CV8. Не спрашивай "Почему?" - скажи что делать :)
   dubraver
 
21 - 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;
   Serg_1960
 
22 - 06.06.18 - 09:16
(8) Кстати, - спасибо.

USR1CV8 был прописан только для работы службы. Добавил права на вход в систему и прочее - увидел, что MS Word каждый раз зависает на модальном окне с предупреждение о критической ошибке в предыдущем сеансе и предложением запустить сеанс в безопасном режиме.

(21) Интересное решение и эффект от .WindowState :) Благодарю.

Свою проблему ещё не решил.
   Serg_1960
 
23 - 06.06.18 - 14:04
С проблемой определился - в момент вызова MS Word возникает локальное окно с ошибкой:
Microsoft Word
Не удается сохранить файл автозамены (MSO1049.acl).
Он может быть доступен только для чтения, или у вас нет прав на его изменение.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует