Имя: Пароль:
1C
1С v8
Не работает "Word.Documents.Open" на сервере 1С
,
0 СЕсин
 
08.01.13
17:24
Всем привет! Печ. форма формируется через Word. Открывается файл Word, там делаются замены после чего он сохраняется. Все отлично работало, пока не перенес базу на SQL.
Причем, если на этом сервере развернуть эту же базу в файловом варианте - все работает. А на SQL - нет.
Пробовал давать какие-угодно права пользователю, от имени которого запускается Агент сервера. Запускал его и под встроенной учеткой и под админом... нифига.

Вот фрагмент кода, который перестает работать на SQL:

Word = Новый COMОбъект("Word.Application");
Word.Visible = 0;
Документ = Word.Documents.Open(ИмяФайлаШаблона);    
Fnd = Word.ActiveDocument.Range().Find;
Fnd.ClearFormatting();
Fnd.Forward = -1;

Выдает ошибку: "{ВнешняяОбработка.ФормированиеПоШаблону.МодульОбъекта(379)}: Ошибка при получении значения атрибута контекста (ActiveDocument)
   Fnd = Word.ActiveDocument.Range().Find;
по причине:
Произошла исключительная ситуация (Microsoft Word): Данная команда недоступна, так как не открыт ни один документ."

Пожалуйста, помогите разобраться в чем дело.
1 zladenuw
 
08.01.13
17:28
ну а путь к файлу у тебя какой? файл сам где лежит?
2 Vladal
 
08.01.13
17:29
Сам Word установлен?

Что выдаст ПолучитьCOMОбъект("", "Word.Application")
или ПолучитьCOMОбъект("d:\temp\temp.docx")
3 Vladal
 
08.01.13
17:29
ИмяФайлаШаблона - существует ли файл по этому пути, и доступен ли?
4 СЕсин
 
08.01.13
17:30
Сначала делал так:
ИмяФайлаШаблона = КаталогВременныхФайлов() + "ШаблонДоговора.docx";

Потом переделал жестко:

ИмяФайлаШаблона = "C:\Users\Public\Documents\" + "ШаблонДоговора.docx";

Но не помогло.
5 СЕсин
 
08.01.13
17:31
Да, Word установлен. Если в файловом варианте развернуть, все работает, документ отлично формируется и открывается.
6 Vladal
 
08.01.13
17:32
Ответь на (2)
7 Vladal
 
08.01.13
17:32
Только выполни на сервере
8 Vladal
 
08.01.13
17:33
Кода запускаешь файловую базу, доступны ком-обхекты локальной системы. Если сервер 1С находится на другой машине, откуда ему знать про "C:\Users\Public\Documents\" терминального сервера или локальной машины?
9 СЕсин
 
08.01.13
17:38
Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал.

Запускаю я все на одном и том же сервере. И Word и 1C установлены на той машине, на которой я работаю.
Насчет (2): в первом случае результат тот же - "ни открыт ни один документ", во втором случае другая ошибка: "{ВнешняяОбработка.ФормированиеПоШаблону.МодульОбъекта(374)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)
   Word = ПолучитьCOMОбъект(ИмяФайлаШаблона);
по причине:
Ошибка получения объекта COM: Фильтр сообщений выдал диагностику о занятости приложения."
10 Vladal
 
08.01.13
17:40
У тебя и сервер 1С на той же машине стоит?
11 zladenuw
 
08.01.13
17:41
может как вариант повис на сервере COMОбъект Ворда. посмотри в процессах.
12 СЕсин
 
08.01.13
17:46
Vladal, Да, я когда разбирался с проблемой, установил все на одну машину. Сервер 1С, SQL и Word. На ней и разбираюсь.

zladenuw, ты прав. Там висела целая пачка процессов Word. Я их выбил, но теперь другая ошибка:

{ВнешняяОбработка.ФормированиеПоШаблону.МодульОбъекта(374)}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект)
   Word = ПолучитьCOMОбъект(ИмяФайлаШаблона);
по причине:
Ошибка получения объекта COM: Операция прервана
13 Vladal
 
08.01.13
17:52
(12) Значит что-то из дочерних процессов может висеть и блокировать.
Скорее всего, он ответил на твой последний запрос com-объекта, что его прервали. Повтори через время или для верности перегрузи компьютер.
14 СЕсин
 
08.01.13
17:55
Я с проблемой второй день бьюсь и не раз перезагружал и даже переустанавливал платформу.
Если использовать "Word = Новый COMОбъект("Word.Application");", то COM объект создается. Т.е. по идее с СОМ все в порядке.
Для полной ясности скажу что стоит:
Платформа 8.2.17.153.
Сервер 1С - х64
Сервер SQL - 2012
Печатная форма для УТ 11. Хотя непонятно, какое это все имеет отношение к COM объекту... Короче, танцы с бубном продолжаются, спасибо за участие!
15 Pashkaa
 
08.01.13
21:51
Если танцы с бубном не помогут, есть вариант без ворда если у тебя простая замена по тексту на нужные значения.

Переименовываешь файл docx в zip, извлекаешь в папку, находишь в подпапках файл с данными в формате xml, производишь в нем замены и назад выполняешь упаковку и переименование.
16 СЕсин
 
09.01.13
00:56
Pashkaa, это всем бубнам бубен ))) Я уж лучше на файловой версии все оставлю, чем так. Думаю, решение рано или поздно найдется. Буду с разными платформами экспериментировать. Вряд ли я единственный пытаюсь документ Word сформировать из базы 1С на SQL. А судя по тому, что в поиске ничего подобного нет, то ситуация не популярная и легко все может заработать на другой системе или конфигурации. Такие мысли у меня.
17 hhhh
 
09.01.13
01:58
(16) напиши сетевую папку. Диск С: лучше не писать. Там есть такая фигня в правах как передача прав подчиненным папкам. Наследование.

То есть если ваш админ для диска С: задал неполные права твоему пользователю, то хоть ты застрелись, но хотя и будешь "давать какие-угодно права пользователю" на папку C:\Users\Public\Documents всё равно приоритет у прав на диск С:, которые и применятся.
18 sapphire
 
09.01.13
03:52
(4) Посмотри пути.
Выполняется наверняка на сервере, значит далеко не факт, что у учетки запуска rphost-a есть права на путь-файл.
19 СЕсин
 
11.01.13
02:35
Разобрался. Кто бы мог подумать... Как я уже писал, это УТ 11 - т.е. управляемые формы. Перенес выполнение всех операций с объектом "Word = Новый COMОбъект("Word.Application")" с сервера на клиент - все заработало. Не спешите кидать тухлыми помидорами типа "конечно, Word не откроется на стороне сервера". Но раньше-то как-то открывался. Именно это меня и пустило по ложному следу. Выходит, доступность методов COM объектов на файловом сервере и SQL - разная.
Какой я сделал вывод:
Что касается конкретно метода Word.Documents.Open - если база файл-серверная, методу все равно где выполняться, на клиенте или на сервере. Документ открывается и показывается ни смотря ни на что. Но когда я перешел на SQL, метод ошибки выдавать не стал и внешне отрабатывает как я писал выше. Но если выполняется на стороне сервера - ничего не открывает и дальнейшее обращение к документу дает ошибку, а на стороне клиента - открывает.
20 МихаилМ
 
11.01.13
07:43
сколько можно на эти грабли наступать.

http://infostart.ru/public/165910/
21 СЕсин
 
11.01.13
10:32
МихаилМ, по-моему не совсем по теме. Сом объект-то создается и остальные методы у него работают. Вы читали ветку или только последнее сообщение?
Сколько можно на эти грабли наступать... Сейчас-то конечно все сразу умные станут. )) Что раньше молчали? Давайте без этого.
22 НЕА123
 
11.01.13
10:47
(21)
из (9)>Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал.
не стыкуется с (19)
23 СЕсин
 
11.01.13
11:08
Чем же не стыкуется? В (9) я мудрил с самим файлом, а в (19) перенес выполнение кода с сервера на клиент. Короче, флуд пошел...