Произошла исключительная ситуация microsoft word данная команда недоступна
На помощь нам приходит заполнение файла по шаблону, в который мы поместим особую метку. Но раз мы используем заполнение по шаблону, то правильно будет заполнять автоматически исходящий номер, краткое наименование документа, сведения о подписывающем лице и исполнителе документа. Файл шаблона и алгоритмы заполнения полей MS Word я приложу в архиве вместе с реализацией алгоритмов заполнения.
Алгоритм действий пользователей при подготовке исходящего письма следующий:
- Исполнитель создаёт письмо по шаблону, заполняет реквизиты и допечатывает необходимый текст в частично заполненный документ.
- Документ проходит процессы согласования, которые приняты в организации для такого вида документов.
- Согласованный документ отправляется на регистрацию.
- Сотрудник документооборота, снабжённый ЭЦП начальника:
- проверяет правильность оформления документа;
- регистрирует документ;
- заполняет регистрационную информацию в файле;
- подписывает документ ЭЦП;
- формирует визуализацию данного документа;
- отправляет документ по почте (при использовании внутренней почты в исходящем письме необходимо удалить файл, подписанный ЭЦП, т. к. он всё равно не уйдёт).
Изменение конфигурации состоит из добавления одного общего макета, двух общих модулей и доработке формы исходящего документа. Ничего не мешает оформить доработку формы, как расширение, но я и первые доработки проводил непосредственно в конфигурации и эти тоже решил в расширение не выносить.
Небольшая ремарка про метки. Их в общем случае может быть несколько. Называются они «Sign1”, “Sign2” и т. д. Они расставляются в нужных местах документа и красятся белым цветом, чтобы их не было видно. Размер штампа по вертикали составляет 2,7 см, и чтобы текст ниже штампа не поплыл (MS Word не позволяет использовать поля формы в колонтитулах), необходимо создавать запас пространства. В файле примера используется невидимая таблица с фиксированной высотой.
Непосредственно в форме элемента справочника «Исходящие документы» необходимо создать команды «Визулизация ЭЦП» и «Создать файл визуализации», и привязать их к функциональной опции «Использовать электронные подписи». Эти команды нужно разместить в группе «Форма ЭП и Шифрование/ЭП» с настройкой «Только во всех действиях» и в группе “КонтекстноеМенюФайлыГруппаЭП” таблицы значений «Файлы». Чтобы было совсем красиво, можно внести изменения в процедуру «УстановитьДоступностьКоманд».
Пара моментов про создание файлов PDF. Файлы создаются на компьютере пользователя и по этому MS Word 2007+ должен стоять там. Но MS Word умеет сохранять документы в формат PDF только с версии 2010. Для пользователей MS Word 2007 необходимо установить надстройку 2007 Microsoft Office: сохранение в формате PDF или XPS (Майкрософт).
Всем привет! Печ. форма формируется через 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;
Выдает ошибку: ": Ошибка при получении значения атрибута контекста (ActiveDocument)
Fnd = Word.ActiveDocument.Range().Find;
по причине:
Произошла исключительная ситуация (Microsoft Word): Данная команда недоступна, так как не открыт ни один документ."
Пожалуйста, помогите разобраться в чем дело.
Сначала делал так:
Потом переделал жестко:
Да, Word установлен. Если в файловом варианте развернуть, все работает, документ отлично формируется и открывается.
Кода запускаешь файловую базу, доступны ком-обхекты локальной системы. Если сервер 1С находится на другой машине, откуда ему знать про "C:\Users\Public\Documents\" терминального сервера или локальной машины?
Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал.
Vladal, Да, я когда разбирался с проблемой, установил все на одну машину. Сервер 1С, SQL и Word. На ней и разбираюсь.
zladenuw, ты прав. Там висела целая пачка процессов Word. Я их выбил, но теперь другая ошибка:
(12) Значит что-то из дочерних процессов может висеть и блокировать.
Скорее всего, он ответил на твой последний запрос com-объекта, что его прервали. Повтори через время или для верности перегрузи компьютер.
Я с проблемой второй день бьюсь и не раз перезагружал и даже переустанавливал платформу.
Если использовать "Word = Новый COMОбъект("Word.Application");", то COM объект создается. Т.е. по идее с СОМ все в порядке.
Для полной ясности скажу что стоит:
Платформа 8.2.17.153.
Сервер SQL - 2012
Печатная форма для УТ 11. Хотя непонятно, какое это все имеет отношение к COM объекту. Короче, танцы с бубном продолжаются, спасибо за участие!
Если танцы с бубном не помогут, есть вариант без ворда если у тебя простая замена по тексту на нужные значения.
Переименовываешь файл docx в zip, извлекаешь в папку, находишь в подпапках файл с данными в формате xml, производишь в нем замены и назад выполняешь упаковку и переименование.
Pashkaa, это всем бубнам бубен ))) Я уж лучше на файловой версии все оставлю, чем так. Думаю, решение рано или поздно найдется. Буду с разными платформами экспериментировать. Вряд ли я единственный пытаюсь документ Word сформировать из базы 1С на SQL. А судя по тому, что в поиске ничего подобного нет, то ситуация не популярная и легко все может заработать на другой системе или конфигурации. Такие мысли у меня.
(16) напиши сетевую папку. Диск С: лучше не писать. Там есть такая фигня в правах как передача прав подчиненным папкам. Наследование.
То есть если ваш админ для диска С: задал неполные права твоему пользователю, то хоть ты застрелись, но хотя и будешь "давать какие-угодно права пользователю" на папку C:\Users\Public\Documents всё равно приоритет у прав на диск С:, которые и применятся.
(4) Посмотри пути.
Выполняется наверняка на сервере, значит далеко не факт, что у учетки запуска rphost-a есть права на путь-файл.
Разобрался. Кто бы мог подумать. Как я уже писал, это УТ 11 - т.е. управляемые формы. Перенес выполнение всех операций с объектом "Word = Новый COMОбъект("Word.Application")" с сервера на клиент - все заработало. Не спешите кидать тухлыми помидорами типа "конечно, Word не откроется на стороне сервера". Но раньше-то как-то открывался. Именно это меня и пустило по ложному следу. Выходит, доступность методов COM объектов на файловом сервере и SQL - разная.
Какой я сделал вывод:
Что касается конкретно метода Word.Documents.Open - если база файл-серверная, методу все равно где выполняться, на клиенте или на сервере. Документ открывается и показывается ни смотря ни на что. Но когда я перешел на SQL, метод ошибки выдавать не стал и внешне отрабатывает как я писал выше. Но если выполняется на стороне сервера - ничего не открывает и дальнейшее обращение к документу дает ошибку, а на стороне клиента - открывает.
сколько можно на эти грабли наступать.
(21)
из (9)>Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал.
не стыкуется с (19)
Чем же не стыкуется? В (9) я мудрил с самим файлом, а в (19) перенес выполнение кода с сервера на клиент. Короче, флуд пошел.
На помощь нам приходит заполнение файла по шаблону, в который мы поместим особую метку. Но раз мы используем заполнение по шаблону, то правильно будет заполнять автоматически исходящий номер, краткое наименование документа, сведения о подписывающем лице и исполнителе документа. Файл шаблона и алгоритмы заполнения полей MS Word я приложу в архиве вместе с реализацией алгоритмов заполнения.
Алгоритм действий пользователей при подготовке исходящего письма следующий:
- Исполнитель создаёт письмо по шаблону, заполняет реквизиты и допечатывает необходимый текст в частично заполненный документ.
- Документ проходит процессы согласования, которые приняты в организации для такого вида документов.
- Согласованный документ отправляется на регистрацию.
- Сотрудник документооборота, снабжённый ЭЦП начальника:
- проверяет правильность оформления документа;
- регистрирует документ;
- заполняет регистрационную информацию в файле;
- подписывает документ ЭЦП;
- формирует визуализацию данного документа;
- отправляет документ по почте (при использовании внутренней почты в исходящем письме необходимо удалить файл, подписанный ЭЦП, т. к. он всё равно не уйдёт).
Изменение конфигурации состоит из добавления одного общего макета, двух общих модулей и доработке формы исходящего документа. Ничего не мешает оформить доработку формы, как расширение, но я и первые доработки проводил непосредственно в конфигурации и эти тоже решил в расширение не выносить.
Небольшая ремарка про метки. Их в общем случае может быть несколько. Называются они «Sign1”, “Sign2” и т. д. Они расставляются в нужных местах документа и красятся белым цветом, чтобы их не было видно. Размер штампа по вертикали составляет 2,7 см, и чтобы текст ниже штампа не поплыл (MS Word не позволяет использовать поля формы в колонтитулах), необходимо создавать запас пространства. В файле примера используется невидимая таблица с фиксированной высотой.
Непосредственно в форме элемента справочника «Исходящие документы» необходимо создать команды «Визулизация ЭЦП» и «Создать файл визуализации», и привязать их к функциональной опции «Использовать электронные подписи». Эти команды нужно разместить в группе «Форма ЭП и Шифрование/ЭП» с настройкой «Только во всех действиях» и в группе “КонтекстноеМенюФайлыГруппаЭП” таблицы значений «Файлы». Чтобы было совсем красиво, можно внести изменения в процедуру «УстановитьДоступностьКоманд».
Пара моментов про создание файлов PDF. Файлы создаются на компьютере пользователя и по этому MS Word 2007+ должен стоять там. Но MS Word умеет сохранять документы в формат PDF только с версии 2010. Для пользователей MS Word 2007 необходимо установить надстройку 2007 Microsoft Office: сохранение в формате PDF или XPS (Майкрософт).
Всем привет! Печ. форма формируется через Word. Открывается файл Word, там делаются замены после чего он сохраняется. Все отлично работало, пока не перенес базу на SQL. Причем, если на этом сервере развернуть эту же базу в файловом варианте - все работает. А на SQL - нет. Пробовал давать какие-угодно права пользователю, от имени которого запускается Агент сервера. Запускал его и под встроенной учеткой и под админом. нифига. Вот фрагмент кода, который перестает работать на SQL: по причине: Произошла исключительная ситуация (Microsoft Word): Данная команда недоступна, так как не открыт ни один документ." Пожалуйста, помогите разобраться в чем дело.
Сам Word установлен? Что выдаст ПолучитьCOMОбъект("", "Word.Application") или ПолучитьCOMОбъект("d: emp emp.docx")
Сначала делал так: Потом переделал жестко: ИмяФайлаШаблона = "C:UsersPublicDocuments" + "ШаблонДоговора.docx"; Но не помогло.
Да, Word установлен. Если в файловом варианте развернуть, все работает, документ отлично формируется и открывается.
Кода запускаешь файловую базу, доступны ком-обхекты локальной системы. Если сервер 1С находится на другой машине, откуда ему знать про "C:UsersPublicDocuments" терминального сервера или локальной машины?
Vladal, Да, я когда разбирался с проблемой, установил все на одну машину. Сервер 1С, SQL и Word. На ней и разбираюсь. zladenuw, ты прав. Там висела целая пачка процессов Word. Я их выбил, но теперь другая ошибка: <ВнешняяОбработка.ФормированиеПоШаблону.МодульОбъекта>: Ошибка при вызове метода контекста (ПолучитьCOMОбъект) Word = ПолучитьCOMОбъект(ИмяФайлаШаблона); по причине: Ошибка получения объекта COM: Операция прерванаВнешняяОбработка.ФормированиеПоШаблону.МодульОбъекта>
Значит что-то из дочерних процессов может висеть и блокировать. Скорее всего, он ответил на твой последний запрос com-объекта, что его прервали. Повтори через время или для верности перегрузи компьютер.
Я с проблемой второй день бьюсь и не раз перезагружал и даже переустанавливал платформу. Если использовать "Word = Новый COMОбъект("Word.Application");", то COM объект создается. Т.е. по идее с СОМ все в порядке. Для полной ясности скажу что стоит: Печатная форма для УТ 11. Хотя непонятно, какое это все имеет отношение к COM объекту. Короче, танцы с бубном продолжаются, спасибо за участие!
Если танцы с бубном не помогут, есть вариант без ворда если у тебя простая замена по тексту на нужные значения. Переименовываешь файл docx в zip, извлекаешь в папку, находишь в подпапках файл с данными в формате xml, производишь в нем замены и назад выполняешь упаковку и переименование.
Pashkaa, это всем бубнам бубен ))) Я уж лучше на файловой версии все оставлю, чем так. Думаю, решение рано или поздно найдется. Буду с разными платформами экспериментировать. Вряд ли я единственный пытаюсь документ Word сформировать из базы 1С на SQL. А судя по тому, что в поиске ничего подобного нет, то ситуация не популярная и легко все может заработать на другой системе или конфигурации. Такие мысли у меня.
напиши сетевую папку. Диск С: лучше не писать. Там есть такая фигня в правах как передача прав подчиненным папкам. Наследование. То есть если ваш админ для диска С: задал неполные права твоему пользователю, то хоть ты застрелись, но хотя и будешь "давать какие-угодно права пользователю" на папку C:UsersPublicDocuments всё равно приоритет у прав на диск С:, которые и применятся.
Посмотри пути. Выполняется наверняка на сервере, значит далеко не факт, что у учетки запуска rphost-a есть права на путь-файл.
Разобрался. Кто бы мог подумать. Как я уже писал, это УТ 11 - т.е. управляемые формы. Перенес выполнение всех операций с объектом "Word = Новый COMОбъект("Word.Application")" с сервера на клиент - все заработало. Не спешите кидать тухлыми помидорами типа "конечно, Word не откроется на стороне сервера". Но раньше-то как-то открывался. Именно это меня и пустило по ложному следу. Выходит, доступность методов COM объектов на файловом сервере и SQL - разная. Какой я сделал вывод: Что касается конкретно метода Word.Documents.Open - если база файл-серверная, методу все равно где выполняться, на клиенте или на сервере. Документ открывается и показывается ни смотря ни на что. Но когда я перешел на SQL, метод ошибки выдавать не стал и внешне отрабатывает как я писал выше. Но если выполняется на стороне сервера - ничего не открывает и дальнейшее обращение к документу дает ошибку, а на стороне клиента - открывает.
из >Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал. не стыкуется с
Чем же не стыкуется? В я мудрил с самим файлом, а в перенес выполнение кода с сервера на клиент. Короче, флуд пошел.
Сразу скажу - на файловой базе в Windows 7 этот код работает корректно. Итак, есть: W2016Server + сервер приложений 8.3.10.2580 + самописный документ, в котором есть строчка ДокументВорд = ОбъектВорд.Documents.Add(ИмяФайлаПаспортаЗаявки); Сразу говорю - файл я проверял вот так: Тест = Новый Файл("c: emp_pm est.docx"); Если Тест.Существует Тогда - он существует, и сервер его может прочитать. С правами доступа к папкам всё ОК. На сервере установлен Office 2013 (причем я ставил и 32-битный, и 64-битный), COM-компонент ручками зарегистрировал, поэтому строчка ОбъектВорд = Новый COMОбъект("Word.Application"); теперь выполняется без ошибок. В отладчике объект виден. Так вот, спотыкаемся на строчке ДокументВорд = ОбъектВорд.Documents.Add(ИмяФайлаПаспортаЗаявки); Если файл имеет расширение DOC - ошибка такая: <Документ.дкЗаявкаНаПроект.МодульОбъекта>: Ошибка при вызове метода контекста (Add): Произошла исключительная ситуация (Microsoft Word): Ошибка в Word. Если файл имеет расширение DOCХ - ошибка чуть другая: <Документ.дкЗаявкаНаПроект.МодульОбъекта>: Ошибка при вызове метода контекста (Add): Произошла исключительная ситуация (Microsoft Word): Приложению Word не удалось прочитать документ. Возможно, он поврежден. Попробуйте выполнить следующие действия: * Откройте файл с помощью команды ''Открыть и восстановить''. * Откройте файл с помощью конвертера резервных копий. Я уже в отчаянии, целый день мучаюсь. Сборки Офиса 2013 - от Кролика, с самыми последними обновлениями, сами понимаете, это бренд, здесь всё пучком. (На Win7 с файловой базой, где всё работает - такая же). Майкрософту я доверяю меньше, но завтра-таки попробую поставить c оригинального образа RTM. Интуиция подсказывает, что не взлетит. Подскажите, что ещё можно попробовать проверить?Документ.дкЗаявкаНаПроект.МодульОбъекта>
А если попробовать зайти на сервер и вручную открыть данный файл? Открывается нормально и содержимое отображает?
[Сборки Офиса 2013 - от Кролика, с самыми последними обновлениями, сами понимаете, это бренд, здесь всё пучком. (На Win7 с файловой базой, где всё работает - такая же). Майкрософту я доверяю меньше, но завтра-таки попробую поставить c оригинального образа RTM] Достаточно спорное утверждение. Я бы больше доверял оригинальному дистрибутиву, чем какой-то сборке, из которой вполне могли повыкидывать "ненужные" вещи.
конечно, открывает и отображает :) Я же не первый день замужем. И даже ЗапуститьПриложение(ИмяФайла), я уверен, будет работать. и папка эта - не первая, до неё я использовал подкаталог во временной папке (пробовал разные). Разумеется, права доступа - всем на всё. Ещё раз повторю, что на локальном компьютере с W7 при такой же структуре папок и том же дистрибутиве Офиса (только без сервера приложений) всё работает. Мне кажется, подвох в Windows 2016. Другой вариант - в сервере приложений. Третьего не дано.
нафиг вам этот офис вообще уперся. распаковал, засунул в xml чо хочешь, запаковал и все дела. быстро, дешево и сердито.
Курить "профиль безопасности" в программе "Администрирование серверов 1С Предприятия". По умолчанию использование COM на сервере 1С запрещено. Не советую работать с вордом екселем и тд. на сервере. Зависнет ворд вместе с ним 1с сеанс, что будете делать?
попробуйте написать сценарий и из него управлять вордлм,а уже этот сценарий запустите из 1ц,если что-то пойдет не так можно убить сценарий и ворд из самой 1с а сервер,кстати,обычно 64-битный
Подвохов там масса. Начиная от того под кем выполняется. Если ушло на сервер значит выполняется под серверным userV8 значит у него должен быть доступ к dcom объекту. Лезешь в dcom офиса и выдаешь ему там все права. Но лучше сделать по другому. docx это упакованные в zip xml. на просторах интернета есть уже готовый код. Также реализацию и можно посмотреть в 1С Договорчики. Фактически docx распаковывается, в нужном xml правится, пакуется обратно. Сам понимаешь никаких проблем с COM и офис не нужен.
изначально офис был 32-битный и была ошибка при создании ком-объекта: ОбъектВорд = Новый COMОбъект("Word.Application"); Но я вручную создал коннектор (по инструкции), и ошибка исчезла. Более того, как сказано в , я снес 32-битный Офис и поставил 64-битный - это ничего не изменило. а ссылку? У меня 15 файлов, часть в DOCX, часть в HTML, надо все их упихать в один. Я делаю это с помощью метода InsertFile. Благодарю, сейчас почитаю про эти профили. Похоже, собака зарыта именно здесь. пользователю usr1cv8 уже выданы везде все права, в том числе в COM+. Насчет XML и ZIP - это интересно, но на будущее. Я уже написал код, который быстро работает на файловой базе. Теперь задача - заставить его выполняться на сервере.
Читайте также: