![]() |
![]() |
![]() |
|
Ошибка Word через ОболочкаActiveDocument на 64-разрядном сервере 1С | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
27.05.20
✎
14:49
|
Пользователи работают на сервере РДП, база на сервере 1С. 1С там 64-разрядная.
Доп. внешняя печатная форма, серверная функция валится на Получить(): Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет"); //Тут возвращается вордовый ОболочкаActiveDocument Макет.Получить() Описания ошибки не выдает. В файловом варианте все работает, т.к. выполнение происходит на сервере РДП. Word.Application создается везде успешно. Попытка Word = Новый COMОбъект("Word.Application") Исключение Сообщить("Не удалось создать объект Word.Application: " + ОписаниеОШибки()); КонецПопытки; Может как-то можно загнать макет ОболочкаActiveDocument в Word.Application? Сервер РДП: Microsoft Windows 7 version 6.1 Service Pack 1 (Build 7601) 8.3.15.1830 Windows x86 Сервер 1С: Microsoft Windows 7 version 6.1 Service Pack 1 (Build 7601) 8.3.15.1830 Windows x86-64 |
|||
1
fisher
27.05.20
✎
14:53
|
У тебя внедренный в mxl вордовый ActiveDocument?
Надеюсь, у тебя чрезвычайно веские причины для такой архаичной лапароскопии. |
|||
2
fisher
27.05.20
✎
14:58
|
В те древние времена, когда так еще носили, на сервере это делать я не пробовал (тогда царил толстый клиент). Возможно, поможет какая-то магия с настройкой прав и компонентов для пользователя, под которым стартует сервер приложений.
|
|||
3
fisher
27.05.20
✎
15:00
|
Безумная идея.
А попробуй на сервере запустить x64 конфигуратор и там его "перевнедрить". |
|||
4
Lama12
27.05.20
✎
15:03
|
(0) Гетерогенный системы - зло.
5 лет назад предупреждал своих чот не надо делать печатные формы в ворде. Нет, сказали им так удобнее и последствия их не страшат. Теперь у всех стоит ворд 2019 или 365, а он глючный до безобразия. Теперь что б распечатать форму, нужно комп перезагрузить. А переделывать времени нет :-) |
|||
5
Гений 1С
гуру
27.05.20
✎
18:02
|
В принципе получилось, но виснет на первой операции поиска.
Код такой, если кому надо будет: Макет = ПолучитьМакетСервер(); //Сообщить(ТипЗнч(Макет)); Попытка MSWord = Макет.Полу3чить(); //Тут специально для тестов изменил название Исключение МояЗаписьЖурналаРегистрации("Отладка.Word",,,,"Не удалось получить макет так"); ОписаниеОшибкиМакета = ОписаниеОшибки(); Попытка MSWord = Новый COMОбъект("Word.Application"); MSWord.Displayalerts = ложь; ВФ = ПолучитьИмяВременногоФайла("DOC"); Макет.Записать(ВФ); //Документ = MSWord.Documents.Open(ВФ, ложь,,,,,,,,,,,,,,ложь ); //Тишина Документ = MSWord.Documents.Open(ВФ, ложь); //Тишина Исключение Сообщить("Ошибка при получении макета Word : " + ОписаниеОшибкиМакета); Сообщить("Не удалось создать объект Word.Application: " + ОписаниеОШибки()); Возврат Результат; КонецПопытки; МояЗаписьЖурналаРегистрации("Отладка.Word",,,,"Создали объект Word"); Конецпопытки; Зависает на этом: Замена = Документ.Content.Find; Замена.Execute("%НомерДокумента%", Ложь, Истина, Ложь, , , Истина, , Ложь,СокрЛП(НомерДляПечати)); Видимо выдает какую-то ошибку и виснет. |
|||
6
Гений 1С
гуру
27.05.20
✎
21:03
|
В общем, после нескольких запусков "повесил" сервер, админ был не рад, перезагрузил.
Плюнул и переписал на клиента... Столкнулся с тем, что ОболочкаАктивХДокумента живет только на сервере, поэтому заменил на старый добрый беспроблемный Word.Application. Код, который работал с Word, переписывать не пришлось - объект тот же самый. &НаКлиенте Процедура ПечатьНаКлиенте(Результат) Экспорт для каждого КЗ из Результат.Соо цикл СсылкаНаОбъект = КЗ.Ключ; СтруктураТаблиц = КЗ.Значение; ВыборкаОС = СтруктураТаблиц.ТЗОС[0]; Для каждого СтрокаОС из СтруктураТаблиц.ТЗПоОС цикл ДД = ПолучитьМакетСервер(); ВФ = ПолучитьИмяВременногоФайла("DOC"); ДД.Записать(ВФ); Попытка MSWord = Новый COMОбъект("Word.Application"); MSWord.Displayalerts = ложь; //ВФ = ПолучитьИмяВременногоФайла("DOC"); //Макет.Записать(ВФ); //Документ = MSWord.Documents.Open(ВФ, ложь,,,,,,,,,,,,,,ложь ); //Тишина Документ = MSWord.Documents.Open(ВФ, ложь); //Тишина Исключение //Сообщить("Ошибка при получении макета Word : " + ОписаниеОшибкиМакета); Сообщить("Не удалось создать объект Word.Application: " + ОписаниеОШибки()); Возврат; КонецПопытки; МояЗаписьЖурналаРегистрации("Отладка.Word",,,,"Создали объект Word"); Попытка //Документ = MSWord.Application.Documents(1); МояЗаписьЖурналаРегистрации("Отладка.Word",,,,"Получили документ Word"); Документ.Activate(); НомерДляПечати = УбратьПрефиксы(ВычислитьНаСервере(СсылкаНаОбъект, "Номер")); Замена = Документ.Content.Find; Замена.Execute("%НомерДокумента%", Ложь, Истина, Ложь, , , Истина, , Ложь,СокрЛП(НомерДляПечати)); &НаСервере Функция ТаблицуЗначенийВМассивСтруктур(ТЗ) Экспорт М = Новый Массив(); Для Каждого Строка ИЗ ТЗ Цикл Структура = Новый Структура(); Для Каждого Колонка ИЗ ТЗ.Колонки Цикл Структура.Вставить(Колонка.Имя, Строка[Колонка.Имя]); КонецЦикла; М.Добавить(Структура); КонецЦикла; Возврат М; КонецФункции &НаСервере Функция ВычислитьНаСервере(Ссылка, Реквизит) Экспорт Возврат Вычислить("Ссылка." + Реквизит); КонецФункции &НаСервере Функция ПолучитьМакетСервер() Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет"); ВФ = ПолучитьИмяВременногоФайла("DOC"); Макет.Записать(ВФ); ДД = Новый ДвоичныеДанные(ВФ); Возврат ДД; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |