|
| ||
Гений 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 | ||
fisher 1 - 27.05.20 - 14:53 | У тебя внедренный в mxl вордовый ActiveDocument?
Надеюсь, у тебя чрезвычайно веские причины для такой архаичной лапароскопии. | ||
fisher 2 - 27.05.20 - 14:58 | В те древние времена, когда так еще носили, на сервере это делать я не пробовал (тогда царил толстый клиент). Возможно, поможет какая-то магия с настройкой прав и компонентов для пользователя, под которым стартует сервер приложений. | ||
fisher 3 - 27.05.20 - 15:00 | Безумная идея.
А попробуй на сервере запустить x64 конфигуратор и там его "перевнедрить". | ||
Lama12 4 - 27.05.20 - 15:03 | (0) Гетерогенный системы - зло.
5 лет назад предупреждал своих чот не надо делать печатные формы в ворде. Нет, сказали им так удобнее и последствия их не страшат. Теперь у всех стоит ворд 2019 или 365, а он глючный до безобразия. Теперь что б распечатать форму, нужно комп перезагрузить. А переделывать времени нет :-) | ||
Гений 1С 5 - 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("%НомерДокумента%", Ложь, Истина, Ложь, , , Истина, , Ложь,СокрЛП(НомерДляПечати)); Видимо выдает какую-то ошибку и виснет. | ||
Гений 1С 6 - 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"); Макет.Записать(ВФ); ДД = Новый ДвоичныеДанные(ВФ); Возврат ДД; КонецФункции |
|
Список тем форума
|