Произошла исключительная ситуация microsoft word ошибка команды

   livingstone

08.07.15 — 15:36

Добрый день.

Платформа 8.3. Конфигурация — Документооборот. База серверная.

Проблема следующая:

При выполнении команды «Док = WordApp.Documents.Add(ПутьКФайлуНаДиске);» выводится сообщение «Ошибка при вызове метода контекста (Add), Произошла исключительная ситуация (Microsoft Word): Ошибка в Word.»

Если этот кусок кода будет выполнятся на клиенте, то все отрабатывается нормально. Ошибка только на сервере.

ПутьКФайлуНаДиске = локальный С:Юсерзс…., сетевой не пробовал, думаю проблема не в этом.

Сервер 1с установлен там же.

Подскажите пожалуйста, в чем может быть проблема.

   Лефмихалыч

1 — 08.07.15 — 15:50

на сервер ворд установи

   livingstone

2 — 08.07.15 — 15:53

Ворд установлен.

   Мыш

3 — 08.07.15 — 15:55

На сервере с юзерсами проблема. Есть ли у пользователя, от имени которого работает сервер приложений права на тот конкретный каталог?

   Лефмихалыч

4 — 08.07.15 — 15:55

значит обеспечь, чтобы файл лежал на сервере вот тут «С:Юсерзс….» до вызова Add

   livingstone

5 — 08.07.15 — 15:58

Файл там точно есть. Не думаю, что проблема с правами, так как с клиента ведь все срабатывает.

   Fish

6 — 08.07.15 — 15:59

(5) С клиента ты обращаешься к файлу под другим пользователем.

   Лефмихалыч

7 — 08.07.15 — 15:59

(5) отладчик не предлагать?

   Мыш

8 — 08.07.15 — 15:59

(6) Товарищ «не думает». Так шта не мешайте.

   livingstone

9 — 08.07.15 — 16:03

Процедура

1. Копирую некий файл вордовский в С:Юзерс. (т.е. права явно есть)

2. WordApp = Новый COMОбъект(«Word.Application»)

   Док = WordApp.Documents.Add(ПутьКФайлуНаДиске);

КонецПроцедуры

(7) отладчиком уже все по несколько раз проходил.

   Лефмихалыч

10 — 08.07.15 — 16:05

(9) ты на клиентской машине в С:Юзерс копируешь?

   Fish

11 — 08.07.15 — 16:05

(8) Типа: «а что тут думать, прыгать надо»? :))

   livingstone

12 — 08.07.15 — 16:07

(10) нет, на сервере.

т.е. С:Юзерс — это каталог сервера.

   Fish

13 — 08.07.15 — 16:12

(12) Читай (3) и (6) ещё раз.

   hhhh

14 — 08.07.15 — 16:21

(12) там users…

   yukon

15 — 08.07.15 — 16:47

Вопросы серверной автоматизации Office

https://support.microsoft.com/kb/257757

Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать.

   livingstone

16 — 09.07.15 — 07:50

(13) Проблема не в правах, права на каталог назначены. К тому же, если были бы проблемы с правами, серверный метод не смог бы даже скопировать файл в каталог. В (9) я описал суть метода. Ошибка возникает с «Док = WordApp.Documents.Add(ПутьКФайлуНаДиске);». Видимо проблема с самим вордом. Но тогда непонятно, почему с клиента проблемы не возникает.

   Dmitri888

17 — 09.07.15 — 09:03

А word х32 или х64?

   Krolik Bezobraznik

18 — 09.07.15 — 09:09

Если 1С обращается к диску из серверного модуля, то обращение происходит под тем пользователем, под которым у вас запущен сервер 1С. Посмотрите в запущенных сервисах, под каким пользователем у вас запущен сервер. Нужно настроить права доступа к этой папке для пользователя, под которым запущен сервер.

Сам недавно столкнулся, у меня фоновое задание обращается в файлу на диске, процедура в серверном модуле. После того как дал доступ, все заработало.

   Dmitri888

19 — 09.07.15 — 09:14

17+ И какой сервер установлен 32 или 64?

   Krolik Bezobraznik

20 — 09.07.15 — 09:18

(0) Проверьте доступ к папке. В вашем серверном модуле сделайте функцию с кодом

Функция ПроверитьДоступКПапке(Путь)

    
    КаталогНаДиске = Новый Файл(Путь);

    
    Возврат КаталогНаДиске.Существует();

    
КонецФункции

Посмотрите, что она вам вернет, если ЛОЖЬ, а пака есть, то делайте как я написал в (18)

   drcrasher

21 — 09.07.15 — 09:36

Копипаста:

При работе с Excel на сервере ОБЯЗАТЕЛЬНО!!! создать папку C:WindowsSysWOW64configsystemprofileDesktop или C:WindowsSystem32configsystemprofileDesktop (в зависимости от разрядности вашей системы).

  

livingstone

22 — 10.07.15 — 12:25

Вобщем сделал как в (21). Теперь все работает. Всем большое спасибо.

  

grantmet

07.08.12 — 17:47

Не удалось сформировать внешнюю печатную форму!

Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Word): Неверно указано имя файла.

Попробуйте выполнить следующие действия:

* Убедитесь, что путь введен правильно.

* Выберите нужный файл из списка файлов и папок.

Не могу понять куда копать и что такое (SaveAs).

  

grantmet

1 — 07.08.12 — 17:49

Кстати

конфигурация «Управление торговым предприятием для Украины», редакция 1.2. (1.2.8.7) Платформа 1С:Предприятие 8.2 (8.2.15.301)

  

Arxangel06

2 — 07.08.12 — 19:22

SaveAs — это метод в данном случае Word. Копать в процедуру, выводящую внешнюю печатную форму в файл. Если имя для файла задается вручную, то соответственно смотреть внимательно на это имя и думать, по какому пути платформа пытается записать файл. Например имеют значение права на запись в определенную папку.

  

grantmet

3 — 08.08.12 — 11:37

А может даст кто ссылку где можно почитать об SaveAs.

А то вроде путь ввожу правильно да файл выбираю нужный.

А оно мне

Попробуйте выполнить следующие действия:

* Убедитесь, что путь введен правильно.

* Выберите нужный файл из списка файлов и папок.

  

бомболюк

4 — 08.08.12 — 11:40

насколько я помню, в SaveAs надо не только имя файла указывать, но и формат сохранения (для офисов старше 2003 чтоль года или 2007). Сделай так: запусти запись макроса в Ворде, сохрани какое нить файло через «Сохранить как..», и погляди в коде VB чего там подставляется в параметры.

  

grantmet

5 — 08.08.12 — 11:42

и хоть я бухгалтер я постараюсь сделать так как Вы бомболюк указали.

  

бомболюк

6 — 08.08.12 — 11:44

(5) желаю удачи

  

Arxangel06

7 — 09.08.12 — 11:32

читать про методы объектов офиса лучше всего в первоисточнике, например тут:

http://msdn.microsoft.com/en-us/library/office/bb221597(v=office.12)

  

grantmet

8 — 09.08.12 — 22:16

Спасибо почитаю.

  

smaharbA

9 — 09.08.12 — 22:39

Ф1 и не парить мозги

  

smaharbA

10 — 09.08.12 — 22:39

(7) читать лучше всего в (9)

  

Arxangel06

11 — 10.08.12 — 11:43

(10)Сам то понял что сказал? Методы объектов Ms Office скрыты от рядового юзера и предназначены для девелоперов. С каких это пор микрософт девелоперскую информацию пишет в хэлпе? Или у тебя Ms Office Developer Edition?

  

smaharbA

12 — 10.08.12 — 11:48

(11) что Вы хотели сказать ?

  

smaharbA

13 — 10.08.12 — 11:49

жмите ф1 — реально помогает

  

Arxangel06

14 — 10.08.12 — 12:14

(12)Уважаемый, я хотел сказать, что Вы таки посылаете и меня, и ТСа практически в пешее эротическое путешествие. В какой программе мы должны нажимать ф1? В Excel/word? Так там нет описания объектов. В 1с? А там то уже откуда возьмется описание объектов Excel/word? Речь изначально идет о взаимодействии 1с и word. И вот ведь что характерно — в синтаксис-помощнике конструкции SaveAs нет вообще, а в Вашем любимом ф1 эта конструкция относится только к запуску самой платформы. Итак куда должен пойти ТС?

  

smaharbA

15 — 10.08.12 — 13:02

(14) может забъемся на ящик вискаря ?

  

Arxangel06

16 — 10.08.12 — 13:47

(15)Я вискарь не пью, так что не интересно. А может все-таки не понты разгибать, а ответить на вопрос?

  

smaharbA

17 — 10.08.12 — 13:52

(16) какой вопрос ? и какие такие понты ?

  

smaharbA

18 — 10.08.12 — 13:57

http://www.n-d.ru/pub/msof1.png

или Вам рассказать, как нажать ф1 в мсо ?

  

Arxangel06

19 — 10.08.12 — 14:15

(18)Мой вопрос был — «в какой программе нажать ф1». Правильный ответ был бы в этом случае «в Visual Basic Project Manager». Сложно? Ответить «как юзеру» не позволяет статус адынэсэра? Впрочем, это уже переход на личности. Но для справки — далеко не во все редакции МСО входит этот самый VBA Manager, и даже если входит, вполне может быть не установлен на компе.

Касаемо «понтов» — фраза «забьемся на ящик вискаря» иначе чем пустой понт дворового потсана не воспринимается, хотите предложить спор — предлагайте спор, а забивайтесь.

  

smaharbA

20 — 10.08.12 — 14:33

если бы Вы нажали ф1 не в менеджере, и были бы внимательны — получили бы тот же результат, а не проявляли свой гонор, и не пытались бы оспаривать сказанное знающими людьми.

  

smaharbA

21 — 10.08.12 — 14:34

еще скриншот ?

  

Arxangel06

22 — 10.08.12 — 14:58

(21)Да, пожалуй.

  

smaharbA

23 — 10.08.12 — 15:03

  

Arxangel06

24 — 10.08.12 — 15:23

  

Arxangel06

25 — 10.08.12 — 15:24

(24)Извиняюсь за тэги, это была моя первая ссылка здесь.

  

grantmet

26 — 12.08.12 — 18:38

Спасибо всем.Решил проблему.

nikolas2605

30.12.13 — 00:02

Здравствуйте. Пишу такой код (привожу фрагмент) по созданию договоров и их сохранению в Word

Договор = Документы.ЗаказПокупателя.ПолучитьМакет(«ДоговорНаОборудование1»);

     MSWord = Договор.Получить();

Попытка

Doc = MSWord.Application.Documents(1);

         Doc.Activate();

         Replace = Doc.Content.Find;

         FindText = «<Директор>»;

         MatchCase = Ложь;                                                        

         MatchWholeWord = Истина;

         MatchWildcards = Ложь;

         MatchSoundsLike = Неопределено;

         MatchAllWordForms = Неопределено;

          Forward = Истина;

          Wrap = Неопределено;

          Format_ = Ложь;

          РезультатСклонения=Падеж(Фио,-1 ,3,»231″);

                    ReplaceWith = РезультатСклонения;

          Replace.Execute(FindText,MatchCase,MatchWholeWord,MatchWildcards,MatchSoundsLike,MatchAllWordForms,Forward,Wrap,Format_,ReplaceWith);

          MSWord.Application.Visible = Истина;

    

    MSWord.Activate();

    ИмяФайла = Результат.Контрагент.НаименованиеПолное;

    Каталог = «D:LocalDogovorOborudovanie»;

    MSWord.SaveAS(Каталог + «» + ИмяФайла + «(оборудование)»,16);

          

Исключение

    Сообщить(ОписаниеОшибки());

    MSWord.Application.Quit();

КонецПопытки;

Иногда меня выкидывает с ошибкой, что {Документ.ЗаказПокупателя.МодульМенеджера(11636)}: Ошибка при вызове метода контекста (SaveAS): Произошла исключительная ситуация (Microsoft Word): Ошибка команды

В чём тут дело, может кто подскажет? Если контрагент — ИП или розничный покупатель, договор нормально сохраняется; если ООО — через раз. Конфигурация «Управление небольшой фирмой» ред.1.4. Заранее спасибо.

Vexcel

1 — 30.12.13 — 00:08

(0) ну наверно что то не нравиться в имени файла, может какой ни будь странный символ, или вовсе NULL приходит

Поставь в сообщение с ошибкой ещё и ИмяФайла

nikolas2605

2 — 30.12.13 — 00:09

(1) Пробовал кавычки убирать у ООО-шек — пока толку нет

nikolas2605

3 — 30.12.13 — 00:12

Например, ООО «ИТБ-Семигорье» меня выкидывает, а ООО «Ланч» сохраняет…

nikolas2605

4 — 30.12.13 — 00:15

Иду в отладчик, получаю, что когда меня выкидывает, программа пишет: метод объекта не обнаружен SaveAs. Куда смотреть далее, ведь такое не на всех контрагентах?

alexei366

5 — 30.12.13 — 00:19

(4) Так мож обращайся к объекту документа а не приложения.

Я через метод объекта документа делаю сохранение а не через метод приложения (я даж честно говоря и не задумывался и не смотрел что у приложения ворда тож такой метод есть), и удаляю все запрещенные виндой символы в имени файла перед сохранением

nikolas2605

6 — 30.12.13 — 00:24

(4)Извини за глупый вопрос, это как? Я пока начинающий, набираюсь опыта. Примеров не надо, просто объясни

alexei366

7 — 30.12.13 — 00:54

Doc.SaveAS(…)

alexei366

8 — 30.12.13 — 00:56

(7) И вообще вроде метод не SaveAS а  SaveAs

alexei366

9 — 30.12.13 — 01:00

nikolas2605

10 — 30.12.13 — 01:01

(9) Спасибо. сейчас смотрю. Пока и так выкинуло.

nikolas2605

11 — 30.12.13 — 01:07

Ссылка полезная. Если вычисляю выражение MSWord = Договор.Получить(), то мне на MSWord выдаёт свойства, а не методы…

alexei366

12 — 30.12.13 — 01:18

(11) А ты какбудто у какогонить объекта видел чтоб отладчик методы подсказвал?

alexei366

13 — 30.12.13 — 01:19

(11) А табличные части как заполнять будешь? или у тебя их нет?

nikolas2605

14 — 30.12.13 — 01:23

(12) Не видел. Пока ещё первый раз так печать реализую.

(13) Нет

nikolas2605

15 — 30.12.13 — 01:27

Какие символы виндой недопустимы?

alexei366

16 — 30.12.13 — 01:39

(15) Создай файл на рабочем столе, начни его переименовывать и попытайся поставить двоеточие, винда те покажет

alexei366

17 — 30.12.13 — 01:40

(14) Чот я у т в коде печати не вижу

nikolas2605

18 — 30.12.13 — 01:43

(17) пока не написал печать

nikolas2605

19 — 30.12.13 — 01:50

(17)Что программе не понравилось? Написал так:

Doc.SaveAS(Каталог + «» + ИмяФайла,16);

Сохранила!

nikolas2605

20 — 30.12.13 — 01:57

Рано радовался

nikolas2605

21 — 30.12.13 — 02:23

Сделал так:

ИмяФайла = Результат.Контрагент.Наименование;

И так как наименование — это краткое наименование контрагента, винда не пропускала кавычки в нём. Убрал кавычки в кратком наименовании в контрагенте, в полном оставил. Сохраняет.

alexei366

22 — 30.12.13 — 02:26

(21) Ты чо тупишь, сделай отдельную функцию типа :

Функция ПреобразоватьСтрокуВИмяФайла(ВходнаяСтрока)

ВходнаяСтрока = СтрЗаменить(ВходнаяСтрока,»:»,»»);

ВходнаяСтрока = СтрЗаменить(ВходнаяСтрока,»»»»,»»);

……..

Возврат ВходнаяСтрока;

КонецФункции

alexei366

23 — 30.12.13 — 02:27

(22) И Соответственно

ИмяФайла = ПреобразоватьСтрокуВИмяФайла(Результат.Контрагент.Наименование);

alexei366

24 — 30.12.13 — 02:27

(22) Ток в объявлении вот так

Функция ПреобразоватьСтрокуВИмяФайла(Знач ВходнаяСтрока)

nikolas2605

25 — 30.12.13 — 11:21

(24)Сработало. Спасибо. С наступающим Новым Годом!

  

alexei366

26 — 30.12.13 — 11:31

(25) Ага давай, тя тоже

  • Remove From My Forums
  • Общие обсуждения

  • Здравствуйте.  Пытаюсь создать и сохранить документ  в нужном мне месте.

    Word.Application wordapp;
                wordapp = new Word.Application();
                Word.Table table;
                wordapp.Visible = false;
                object missing = System.Reflection.Missing.Value;
                wordapp.Documents.Add(ref missing, false, Word.WdNewDocumentType.wdNewBlankDocument, true);
                Word.Document document = wordapp.Documents[1];
    
                Word.Paragraph wordparagraph = (Word.Paragraph)document.Paragraphs[1];
                wordparagraph.Range.Text = "lalalala";
                object fileName = @"c:1privetprivet.doc";
    		document.SaveAs(ref fileName, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing,
                            ref missing, ref missing);

    после команды SaveAs открывается окно word «Сохранение файла», где нужно указать
    вручную местоположение файла (хотя я явно указал куда нужно сохранять). пробовал и параметры функции менять и местоположение файла, но толку 0.

    Подскажите как мне сохранить выбранный мной документ в нужное место?

    Microsoft.Office.Interop.Word v 12.0.0

    Office 2010

    .net 4.0

    • Изменен тип

      31 марта 2014 г. 7:47
      Тема неаткина

Using

MS Office 2007

VS 2010 — Pointing frame work to 3.5

Windows 7

referenced NET Component Word 12.0 dll in C# code

——————————————————-

I wrote a console application to create PDF ..when I am running this application from my user (like double click) it is creating PDFs

But when I configured the same console application as Windoows Service (run as User (me), as SYSTEM, As Local same result)..I am getting exception from SaveAs command

Can any body help me? Obviously it is missing some thing when the application is running as a Windows Service. What it is?

Some dll? DCOM settings? another security? what it is I can’t think straungt? Help me!!!

Exception:

System.Runtime.InteropServices.COMException (0x800A1066): Command failed
   at Microsoft.Office.Interop.Word.DocumentClass.SaveAs(Object& FileName, Object& FileFormat, Object& LockComments, Object& Password, Object& AddToRecentFiles, Object& WritePassword, Object& ReadOnlyRecommended, Object&
EmbedTrueTypeFonts, Object& SaveNativePictureFormat, Object& SaveFormsData, Object& SaveAsAOCELetter, Object& Encoding, Object& InsertLineBreaks, Object& AllowSubstitutions, Object& LineEnding, Object& AddBiDiMarks)
   at SnapshotReportGenerator.reportWrkThread.createReports(ArrayList ScreenData, String newStorePath, Int64 jobId, Int64 recId, String ifileName, Int64 queueId) in C:C#SnapshotReportGeneratorSnapshotReportGeneratorreportWrkThread.cs:line 224

Code:

object fileFormat = Word.WdSaveFormat.wdFormatPDF;

                        oDoc.SaveAs(ref fileName,
                                     ref fileFormat,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing);

  • Moved by

    Saturday, July 28, 2012 1:16 PM
    not using VSTO technology (From:Visual Studio Tools for Office)

Using

MS Office 2007

VS 2010 — Pointing frame work to 3.5

Windows 7

referenced NET Component Word 12.0 dll in C# code

——————————————————-

I wrote a console application to create PDF ..when I am running this application from my user (like double click) it is creating PDFs

But when I configured the same console application as Windoows Service (run as User (me), as SYSTEM, As Local same result)..I am getting exception from SaveAs command

Can any body help me? Obviously it is missing some thing when the application is running as a Windows Service. What it is?

Some dll? DCOM settings? another security? what it is I can’t think straungt? Help me!!!

Exception:

System.Runtime.InteropServices.COMException (0x800A1066): Command failed
   at Microsoft.Office.Interop.Word.DocumentClass.SaveAs(Object& FileName, Object& FileFormat, Object& LockComments, Object& Password, Object& AddToRecentFiles, Object& WritePassword, Object& ReadOnlyRecommended, Object&
EmbedTrueTypeFonts, Object& SaveNativePictureFormat, Object& SaveFormsData, Object& SaveAsAOCELetter, Object& Encoding, Object& InsertLineBreaks, Object& AllowSubstitutions, Object& LineEnding, Object& AddBiDiMarks)
   at SnapshotReportGenerator.reportWrkThread.createReports(ArrayList ScreenData, String newStorePath, Int64 jobId, Int64 recId, String ifileName, Int64 queueId) in C:C#SnapshotReportGeneratorSnapshotReportGeneratorreportWrkThread.cs:line 224

Code:

object fileFormat = Word.WdSaveFormat.wdFormatPDF;

                        oDoc.SaveAs(ref fileName,
                                     ref fileFormat,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing,
                                     ref oMissing);

  • Moved by

    Saturday, July 28, 2012 1:16 PM
    not using VSTO technology (From:Visual Studio Tools for Office)

Ermak27

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

1

1C 8.x

25.06.2019, 11:26. Показов 8332. Ответов 17

Метки нет (Все метки)


Добрый день!
Подскажите как сохранить шаблон word. У меня ругается на SaveAs

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 ПутьКШаблонам =СокрЛП(Константы.КвартплатаПутьКШаблонам.Получить());
     Если ДокПечати=СокрЛП("Квитанция2") Тогда
         ИмяШаблона = СокрЛП("Квитанция2.dot");
     КонецЕсли;
 
     ИмяФайла = "E:file.doc";
    
    Word= Новый COMОбъект("Word.Application");
    Докум=Word.Documents.Add(""+ПутьКШаблонам+ИмяШаблона);
    Word=Докум;
    Докум=Word.Application.Documents(1);
    Докум.Activate();
    Докум.Content.Copy();
    фл=ложь;
    сч=0;
    
    Для Каждого Стр из Ведомость Цикл
        сч=сч+1;
        фл=Истина;
        
         ЛС=СокрЛП(Стр.ЛицевойСчет)+Стр.ЛицевойСчет.Регион.КодСбер;
         Попытка 
             Замена=Word.Content.Find;
             Замена.Execute("<ЛС"+сч+">",0,1,0,,,1,,0,Формат(ЛС,"ЧГ=0"));
         Исключение
         КонецПопытки;
         
         ФИО_1=ТРег(СокрЛП(Стр.ЛицевойСчет.ОтветственныйКвартиросъемщик));
         ФИО_1_Кратко=ОбщегоНазначения.ФамилияИнициалыФизЛица(ФИО_1);
         Попытка 
             Замена=Word.Content.Find;
             Замена.Execute("<ФИО"+сч+">",0,1,0,,,1,,0,СокрЛП(ФИО_1_Кратко));
         Исключение
         КонецПопытки;
         
         Попытка 
             Замена=Word.Content.Find;
             Замена.Execute("<АДРЕС"+сч+">",0,1,0,,,1,,0,СокрЛП(Стр.Адрес));
         Исключение
         КонецПопытки;
 
        Если сч=1 Тогда
            сч=0;
            Докум = Word.Range(0,0);
            Докум.InsertBreak();
            Докум = Word.Range(0,0);
            Докум.Paste();
        Конецесли; 
    КонецЦикла;
    Докум.SaveAs(ИмяФайла);
Word.Application.Quit();

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь

0

198 / 158 / 45

Регистрация: 23.08.2014

Сообщений: 807

25.06.2019, 12:42

2

Процедура клиент, сервер ?
Есть доступ до папки у пользователя ?
1С пробовал от админа запускать ?
И что за ошибка хоть ?

0

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

25.06.2019, 14:39

 [ТС]

3

1. Процедура сервер
2. Есть доступ
3. Работаю по админом
4. Метод объекта не обнаружен (SaveAs)
Докум.SaveAs(ИмяФайла);

0

198 / 158 / 45

Регистрация: 23.08.2014

Сообщений: 807

25.06.2019, 16:17

4

Нельзя сохранять фалы на сервере, нужно перенести на клиент.

0

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

25.06.2019, 16:18

 [ТС]

5

можешь показать

0

198 / 158 / 45

Регистрация: 23.08.2014

Сообщений: 807

25.06.2019, 16:24

6

Ermak27, полностью процедуру всю переноси на клиент. А данные для заполнения вытаскивай через функции на сервере несли понадобится.

Перед процедурой у тебя написано &НаСервере, меняй это на &НаКлиенте. Повалятся ошибки, такие как обращение к константе например и начинай их исправлять потихоньку.

0

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

25.06.2019, 16:44

 [ТС]

7

Я тебя не так понял на счёт сервера. У меня вообщем ничего не стоит перед процедурой. Нет &НаСервере и &НаКлиенте. У меня база крутиться на sql сервере

0

198 / 158 / 45

Регистрация: 23.08.2014

Сообщений: 807

25.06.2019, 16:52

8

Ermak27, хорошо. Напиши тогда где находится процедура. В модуле формы или модуле объекта ?

0

Ermak27

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

25.06.2019, 17:06

 [ТС]

9

Модуле формы. Процедура срабатывает при нажатии кнопки

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Процедура ОсновныеДействияФормыКвитанция(Кнопка)
    // Вставить содержимое обработчика.
    Печать("Квитанция2");
КонецПроцедуры
 
Процедура Печать(ДокПечати="")
    ПутьКШаблонам =СокрЛП(Константы.КвартплатаПутьКШаблонам.Получить());
     Если ДокПечати=СокрЛП("Квитанция2") Тогда
         ИмяШаблона = СокрЛП("Квитанция2.dot");
     КонецЕсли;
 
     ИмяФайла = "E:file.doc";
    
    Word= Новый COMОбъект("Word.Application");
    Докум=Word.Documents.Add(""+ПутьКШаблонам+ИмяШаблона);
    Word=Докум;
    Докум=Word.Application.Documents(1);
    Докум.Activate();
    Докум.Content.Copy();
    фл=ложь;
    сч=0;
    
    Для Каждого Стр из Ведомость Цикл
        сч=сч+1;
        фл=Истина;
        
         ЛС=СокрЛП(Стр.ЛицевойСчет)+Стр.ЛицевойСчет.Регион.КодСбер;
         Попытка 
             Замена=Word.Content.Find;
             Замена.Execute("<ЛС"+сч+">",0,1,0,,,1,,0,Формат(ЛС,"ЧГ=0"));
         Исключение
         КонецПопытки;
         
         ФИО_1=ТРег(СокрЛП(Стр.ЛицевойСчет.ОтветственныйКвартиросъемщик));
         ФИО_1_Кратко=ОбщегоНазначения.ФамилияИнициалыФизЛица(ФИО_1);
         Попытка 
             Замена=Word.Content.Find;
             Замена.Execute("<ФИО"+сч+">",0,1,0,,,1,,0,СокрЛП(ФИО_1_Кратко));
         Исключение
         КонецПопытки;
         
         Попытка 
             Замена=Word.Content.Find;
             Замена.Execute("<АДРЕС"+сч+">",0,1,0,,,1,,0,СокрЛП(Стр.Адрес));
         Исключение
         КонецПопытки;
 
        Если сч=1 Тогда
            сч=0;
            Докум = Word.Range(0,0);
            Докум.InsertBreak();
            Докум = Word.Range(0,0);
            Докум.Paste();
        Конецесли;  
    КонецЦикла;
    Докум.SaveAs(ИмяФайла);
Word.Application.Quit();
 
КонецПроцедуры

0

198 / 158 / 45

Регистрация: 23.08.2014

Сообщений: 807

25.06.2019, 18:16

10

Попробуй так прописать

Докум.Documents.SaveAs(ИмяФайла);

0

1117 / 671 / 195

Регистрация: 22.04.2013

Сообщений: 5,072

Записей в блоге: 1

25.06.2019, 22:48

11

Цитата
Сообщение от Ermak27
Посмотреть сообщение

У меня вообщем ничего не стоит перед процедурой. Нет &НаСервере и &НаКлиенте.

ну не стоит и не стоит. где процедура выполняется, когда не стоит? в воздухе? вряд ли.
посмотрите, есть ли у вас на сервере диск Е, куда вы пытаетесь записать, и есть ли права на запись на него

0

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

26.06.2019, 08:40

 [ТС]

12

dggrom, выдаёт ошибку Поле объекта не обнаружено (Documents)
Докум.Documents.SaveAs(ИмяФайла);

Добавлено через 2 минуты
Yulunga, Я же писал что диск есть, права есть

0

198 / 158 / 45

Регистрация: 23.08.2014

Сообщений: 807

26.06.2019, 10:02

13

Yulunga, у него метод записи самой не видет.

Ermak27, что за конфигурация, какие формы, управляемые или нет ?

0

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

26.06.2019, 10:05

 [ТС]

14

dggrom, Не управляемые, Обычное приложение

0

1117 / 671 / 195

Регистрация: 22.04.2013

Сообщений: 5,072

Записей в блоге: 1

26.06.2019, 13:01

15

по мне так проблема в этом:
Докум=Word…
Word=Докум;
Докум=Word…

запутал с какой-то целью. поэтому и нет там сейвас, что применяется не к тому к чему надо. чехарда. имена переменных закончились?

0

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

26.06.2019, 13:51

 [ТС]

16

Yulunga, я закомментировал Word=Докум;, теперь выдаёт ошибку Метод объекта не обнаружен (Range)
Докум = Word.Range(0,0);

0

Yulunga

1117 / 671 / 195

Регистрация: 22.04.2013

Сообщений: 5,072

Записей в блоге: 1

26.06.2019, 17:47

17

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Word =  Новый COMОбъект("Word.Application");
    word.Visible = 0;    
    word.Application.DisplayAlerts = ложь;
        
    Word.Documents.ADD();
    DocWord = Word.Documents.Open(ПутькФайлу);
    DocWord.Activate();
    
    DocWord.sections.item(1).footers.item(1).Range.Text = "Мой любимый документ";
 
    Word.Application.DisplayAlerts =-1; 
    
    Word.ActiveDocument.saveas(ПутькФайлу);
  
    word.Application.quit();

ну вот чем не код для рыбы. сейвас должен быть для активного документа

0

Ermak27

4 / 4 / 0

Регистрация: 16.01.2013

Сообщений: 1,228

27.06.2019, 11:22

 [ТС]

18

Yulunga, как мне мой код поправить?
Мне нужно чтобы два значение выводились на страницу.
Например: Страницу ворда я делю по пополам, получается при печати А5. Т.е есть в ТЗ 4 значение, то вордовский документ должен вывести две страницы, на каждой странице два значения. Приложил картинку.

Код который в самом начале, он так и выводит как надо, но встала задача сохранить эти вордовские документы по индексу, вот тут проблема и появилась у меня. Вчера я переделал немного код
Создал форму с типом ActiveDocument. Написал код который сохраняет мне вордовские документы но значение заносит в каждый лист, а мне нужно два значения на лист.

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Процедура КнопкаВыполнитьНажатие(Кнопка)               Файл = "E:doc";     //таблица     Таблица = Новый ТаблицаЗначений();   // создаем таблицу         //колонки     Таблица.Колонки.Добавить("Наименование"); //добавляем нетипизированную колонку     Таблица.Колонки.Добавить("Индекс"); //добавляем колонку со строгим указанием типа          //строчки     Строка = Таблица.Добавить();     Строка.Наименование = "Текст1";  //указываем произвольное значение     Строка.Индекс = "185001";   //указываем произвольное значение     Строка = Таблица.Добавить();     Строка.Наименование = "Текст11"; //указываем произвольное значение     Строка.Индекс = "185001";   //указываем произвольное значение     Строка = Таблица.Добавить();     Строка.Наименование = "Текст2";  //указываем произвольное значение     Строка.Индекс = "185002";   //указываем произвольное значение     Строка = Таблица.Добавить();     Строка.Наименование = "Текст22"; //указываем произвольное значение     Строка.Индекс = "185002";   //указываем произвольное значение     Строка = Таблица.Добавить();     Строка.Наименование = "Текст3";  //указываем произвольное значение     Строка.Индекс = "185003";   //указываем произвольное значение     Строка = Таблица.Добавить();     Строка.Наименование = "Текст33"; //указываем произвольное значение       Строка.Индекс = "185003";   //указываем произвольное значение     Строка = Таблица.Добавить();        Строка.Наименование = "Текст333";    //указываем произвольное значение       Строка.Индекс = "185003";   //указываем произвольное значение                ТабДокумент  = Новый ТабличныйДокумент;     ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ";          АктивныйДокумент = ПолучитьМакет("Макет");     КомОбъект = АктивныйДокумент.Получить();               Word = КомОбъект.Application;     Док=Word.Documents(1);     // Отключим проверку грамматики и вывод информации о грамматических ошибках.     Док.GrammarChecked=0;     Док.ShowGrammaticalErrors=0;          Док.Activate();     //Файл = "E:doc" + Индекс1 + "_" + КолЗаписей + ".doc";     Word.Selection.WholeStory();     Word.Selection.Copy();          Счетчик = 0;          Индекс1 = "";     КолЗаписей = 0;          //обход всей таблицы     Для каждого Стр из Таблица Цикл         Счетчик = Счетчик + 1;           Если Индекс1 <> Стр.Индекс Тогда             Если НЕ Индекс1=""  Тогда                 ЗаписатьФайл (Док,КолЗаписей,Индекс1,Файл);              КонецЕсли;                              ТабДокумент  = Новый ТабличныйДокумент;             ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ";                          АктивныйДокумент = ПолучитьМакет("Макет");             КомОбъект = АктивныйДокумент.Получить();                                       Word = КомОбъект.Application;             Док=Word.Documents(1);             // Отключим проверку грамматики и вывод информации о грамматических ошибках.             Док.GrammarChecked=0;             Док.ShowGrammaticalErrors=0;                          Док.Activate();             //Файл = "E:doc" + Индекс1 + "_" + КолЗаписей + ".doc";             Word.Selection.WholeStory();             Word.Selection.Copy();                                       КолЗаписей = 0;         КонецЕсли;                  КолЗаписей = КолЗаписей + 1;                  Замена = Док.Content.Find;         Замена.Execute("ЛС"+Счетчик,  Ложь, Истина, Ложь, , , Истина, , Ложь, Стр.Наименование);         Замена = Док.Content.Find;         Замена.Execute("Индекс"+Счетчик,  Ложь, Истина, Ложь, , , Истина, , Ложь, Стр.Индекс);                  Word.Selection.EndKey(6);                Если Счетчик < Таблица.Количество() тогда                 Word.Selection.InsertBreak(7);                 Word.Selection.Paste();      КонецЕсли;                          Индекс1 = Стр.Индекс;     КонецЦикла;     ЗаписатьФайл (Док,КолЗаписей,Индекс1,Файл);       Word.Quit(); КонецПроцедуры     Процедура ЗаписатьФайл (Док,КолЗаписей,Индекс1,Файл)      Док.SaveAs(Файл + ?(Прав(Файл,1)="","","") + Индекс1 + "_" + КолЗаписей + ".doc");     Док.Close(0); КонецПроцедуры

Можете подсказать как мне сделать чтобы два значения выводила.

Миниатюры

Word SaveAs 1c
 

0

I continually get «Command Fail» at either the saveas, saveas2 or save calls when trying to save a new programmatically created .docx. I know that the file is being created. works fine offline.
Visual Studio 2013
Microsoft.Office.Interop.Word 15
Microsoft Office 10 on server and dev machine
test code:

myInfo_lbl.Text = "" Dim word As New Microsoft.Office.Interop.Word.Application word.Visible = True Dim doc As Microsoft.Office.Interop.Word.Document doc = word.Documents.Add() Try Dim insertText As String = "This thing needs to start fn working. Damn it!" Dim range As Microsoft.Office.Interop.Word.Range = doc.Range(Start:=0, End:=0) range.Text = insertText doc.SaveAs2("D:myCVCOL_Filestest2.doc") 'doc.Save() 'doc.SaveAs2("D:myCVCOL_Filestest2.doc") Catch ex As COMException myInfo_lbl.Text = ex.ErrorCode & " ~ " & ex.HResult & " ~ " & ex.Message & " ~ try 6" Finally Dim save_changes As Object = False doc.Close(save_changes) word.Quit(save_changes) End Try 

ɢʀᴜɴᴛ's user avatar

ɢʀᴜɴᴛ

31.4k15 gold badges111 silver badges108 bronze badges

asked Aug 16, 2017 at 20:05

rtFord's user avatar

Looks like you didn’t set the format. Try this code

Imports System.Runtime.InteropServices Module Module1 Sub Main() CreateDoc() End Sub Public Sub CreateDoc() Dim wordApp As New Microsoft.Office.Interop.Word.Application Dim wordDoc As Microsoft.Office.Interop.Word.Document Dim range As Microsoft.Office.Interop.Word.Range Dim fileName As String Dim insertText As String Dim format As Microsoft.Office.Interop.Word.WdSaveFormat = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatDocument wordApp = New Microsoft.Office.Interop.Word.Application() wordDoc = New Microsoft.Office.Interop.Word.Document() insertText = "Some text" wordApp.Visible = True fileName = "D:ProjectsSandboxStackOverflowConsoleVBtest2.doc" wordDoc = wordApp.Documents.Add() range = wordDoc.Range(Start:=0, End:=0) range.Text = insertText wordDoc.SaveAs2(fileName, Format) wordDoc.Close(Nothing, Nothing, Nothing) wordDoc = Nothing wordApp = Nothing End Sub End Module 

answered Aug 16, 2017 at 21:54

Aeroradish's user avatar

AeroradishAeroradish

3711 gold badge5 silver badges11 bronze badges

1

I had for many months an 80% error when converting a word to a pdf using the function SaveAs(WordDocFilePath & WordDocName & ".pdf", Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatPDF) in VB.NET 2013 in a Windows 10 environment. I tried many things but this very simple change resolved just everything :

WordApp.ScreenUpdating = False (whether it was true before)

Suraj Rao's user avatar

Suraj Rao

29.3k11 gold badges96 silver badges103 bronze badges

answered Feb 4, 2021 at 11:27

Swiss Developer's user avatar

Добрый день! Почитала про это в инете, нашла что это возможно, пишут пример такой команды MSWord.SaveAS(Путь + ИмяФайла, 17); У меня команда вызывает ошибку. Причем, если сохранять как MSWord.SaveAS(Путь + ИмяФайла, 16); — в формате word, все ок. Почему в pdf не сохраняет? Потому что у меня Word 2007? А 2010 будет сохранять?

Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Word): Ошибка команды

этот код исполняется на сервере или на клиенте у тебя?

На клиенте. Если я все правильно понимаю)

Вопросы 1. В MSWORD  у тебя точно документ? обычно так называют application 2. Открой у себя на компе ворд и сохрани любой док в pdf — ошибок нет? 3. точно убедись что этот код исполняется на клиенте.

Варианты 1. Нет поддержки PDF 2. Кривые руки программиста

А какая разница Где? Главное что бы На клиенте или на Сервере был Офис с поддержкой сохранения PDF. И так же, что бы правильно был передан параметр выбора типа файла для сохранения. «Не каждый Офис в PDF пишет», так для справки

А я разве параметр неправильно передала?)

А ты проверь. Откуда ты взяла, что 17 — это тип PDF? Что за упертая уверенность ,что Офис вообще 2010 и выше?

+ Макрос показал совсем другой подход Sub Макрос1 ‘ ‘ Макрос1 Макрос ‘ ‘

+ Используй «ExportAsFixedFormat»

Так было в примере 16-ворд, 17-pdf, так в примерах было написано)) Я не говорила что у меня офис 2010, я написала что он 2007

Ну, елки-моталки… Попробуй в ворде сохранить в pdf. Даст?

Нет, пробовала, я просто интересуюсь, стоит ли ставить 2010, будет ли там сохранять или проблема не в этом

Блондинка блондинку не понимает

Не сохраняет из форда в пдф. Надо ставить 2010?) Я видимо блондинистей)

Поставь pdf-принтер и сохраняй в pdf из почти любой программы.

Мне это не подходит, я из 1с программно сохраняю при выводе документа на печать

ты что не понял? ТС хотела программно, а ты ей какой-то принтер пропихиваешь если из ворда не сохраняет в пдф, то и из 1С не сохранит — поверь.

MSWord.SaveAS(«C:1.pdf», 17);

В 2010 офисе есть функция сохранения в пдф.

она иногда кривит, например, с залоченными объектами в экселе. пришлось ставить doPDF.

если на компе Вин ХР то сначала её надо переставить

libreoffice convert to pdf совсем не подходит?

Тэги:

Комментарии доступны только авторизированным пользователям

Добрый день! Почитала про это в инете, нашла что это возможно, пишут пример такой команды MSWord.SaveAS(Путь + ИмяФайла, 17); У меня команда вызывает ошибку. Причем, если сохранять как MSWord.SaveAS(Путь + ИмяФайла, 16); — в формате word, все ок. Почему в pdf не сохраняет? Потому что у меня Word 2007? А 2010 будет сохранять?

Ошибка при вызове метода контекста (SaveAs): Произошла исключительная ситуация (Microsoft Word): Ошибка команды

этот код исполняется на сервере или на клиенте у тебя?

На клиенте. Если я все правильно понимаю)

Вопросы 1. В MSWORD  у тебя точно документ? обычно так называют application 2. Открой у себя на компе ворд и сохрани любой док в pdf — ошибок нет? 3. точно убедись что этот код исполняется на клиенте.

Варианты 1. Нет поддержки PDF 2. Кривые руки программиста :)

А какая разница Где? Главное что бы На клиенте или на Сервере был Офис с поддержкой сохранения PDF. И так же, что бы правильно был передан параметр выбора типа файла для сохранения. «Не каждый Офис в PDF пишет», так для справки :)

А я разве параметр неправильно передала?)

А ты проверь. Откуда ты взяла, что 17 — это тип PDF? Что за упертая уверенность ,что Офис вообще 2010 и выше? :)

+ Макрос показал совсем другой подход :) Sub Макрос1 ‘ ‘ Макрос1 Макрос ‘ ‘

+ Используй «ExportAsFixedFormat»

Так было в примере 16-ворд, 17-pdf, так в примерах было написано)) Я не говорила что у меня офис 2010, я написала что он 2007

Ну, елки-моталки… Попробуй в ворде сохранить в pdf. Даст?

Нет, пробовала, я просто интересуюсь, стоит ли ставить 2010, будет ли там сохранять или проблема не в этом

Блондинка блондинку не понимает :(

Не сохраняет из форда в пдф. Надо ставить 2010?) Я видимо блондинистей)

Поставь pdf-принтер и сохраняй в pdf из почти любой программы.

Мне это не подходит, я из 1с программно сохраняю при выводе документа на печать

ты что не понял? ТС хотела программно, а ты ей какой-то принтер пропихиваешь :) если из ворда не сохраняет в пдф, то и из 1С не сохранит — поверь.

MSWord.SaveAS(«C:1.pdf», 17);

В 2010 офисе есть функция сохранения в пдф.

она иногда кривит, например, с залоченными объектами в экселе. пришлось ставить doPDF.

если на компе Вин ХР то сначала её надо переставить

libreoffice convert to pdf совсем не подходит?

Тэги:

Комментарии доступны только авторизированным пользователям

<?php // Полная загрузка сервисных книжек, создан 2023-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='

Related Posts

  • Получение логина и пароля техподдержки 1С из базы
  • Класс для вывода отчета в ExcelКласс для вывода отчета в Excel
  • Счет-фактура для УПП
  • Библиотека классов для создания внешней компоненты 1С на C#
  • Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
  • Прайс-лист с артикулом в отдельной колонке

47 Comments

  1. Спасибо за статью, но ничего нового тут нет. Если Вы испытываете трудности с получением макета — храните вордовский шаблон файлом на диске (в общей шаре конечно) и все сведется к получению кома файла НаКлиенте. Возможно есть случаи, когда необходимо хранить шаблон вордовского файла в конфигурации, но на мой взгляд оперативно изменять текстовку шаблона (особенно если это договор и юристы никак не могут договориться о содержании шаблона :)) без влезания в конфигуратор проще и быстрее.

    Reply

  2. P.S. кстати, обратите, какая изящная задача получилась для тестирования опытного кандидата на работу.

    На собеседовании спрашивают то, что сами недано узнали (с)баш

    А если по теме, с какой стати у клиента есть доступ к файловой системе сервера и наоборот (и расшаренные папки тоже неуниверсально)? Лучше через двоичные данные и ХранилищеЗначения передавать, см. работу с картинками, а на клиенте сохранять во временный файл.

    А так полезная статья, узнал зачем нужен ActiveDocument 🙂

    (1) andrei.k, согласен, пусть лучше юзеры свой шаблон правят, не программистское это дело.

    Reply

  3. Друзья, я с Вами полностью согласен. Но файла в общей шаре может и не быть, а может у него имя изменили, а может шара недоступна, а может там что-то изменили без нашего ведома и заполнение параметров этого файла не получится сделать корректно.

    Слишком уж тут много неявных причин.

    По сути да — не очень понятно на кой черт такие танцы с бубном, ведь программная работа с ActiveDocument ничем не отличается от ДвоичныхДанных или ХранилищаЗначения. Принцип тот же.

    Но все-таки, пусть будет — для галочки 😉

    Reply

  4. Макет = ОбщийМодуль.ПолучитьМакет(Документ); //серверная функция, записывает макет в файл и возвращает полное имя файла

    разъясните

    если серверная функция записывает макет в файл, то где этот файл будет лежать?

    если на сервере, то как к нему получает доступ клиент в этом коде?

    Шаблон = ПолучитьCOMОбъект(Макет); //инициализируем COM-объект

    если на клиенте, то как серверная функция получит доступ к файловой системе клиента?

    и как она передаст на клиента этот самый файл?

    в общем, нужно привести листинг этой серверной функции, а также параметры модуля «ОбщийМодуль»

    Reply

  5. (4) YurySigolaev, у нас настроена общая шара, которая доступна для клиента и для сервера, по той простой причине, что все юзеры находятся в домене и не могут самостоятельно сохранять файл на локальную машину, с которой работают в данный момент (т.к. каждый раз они могут садиться за разные компьютеры)

    В остальных случаях уже написали как это делать 🙂

    Reply

  6. А можно для тупых полный листинг привести?))

    Reply

  7. Повторюсь

    А можно для тупых полный листинг привести?))

    Reply

  8. (6) s_uu, (7) Dighty,

    какой именно листинг нужно привести?

    В статье ведь есть листинг

    Reply

  9. Листинг &НаСервере если можно.

    Reply

  10. Или помогите я разобраться не могу. Мне надо документ activedocument на тонкий клиент вывести, сижу 3 день мозг ломаю. Пожалуйста помогите.

    Reply

  11. (10) Dighty, через двоичные данные. Читайте 2-й пост

    Reply

  12. Каким методом вы записывали файл Word на сервере? У меня на файловой метод SaveAs(ПУТЬ) работает, а на сервере нет. Путь доступен соответственно и там и тут, только на сервере почему то метод SaveAs не обнаружен… Метод Save работает только для ранее сохраненных, а у меня файл вновь созданный.

    /////Уточнение от 17.09.15

    Метод SaveAs он не пишет, что не обнаружен, а пишет «Произошла исключительная ситуация (Microsoft Word): Ошибка команды»

    Reply

  13. (12) klinval, a word на сервере установлен?

    Reply

  14. (13) да, установлен. Спотыкается именно на SaveAs. Макет получается(ПолучитьМакет),

     MSWord = Макет.Получить(); Документ = MSWord.Application.Documents(1); Документ.Activate();

    проходят успешно. Заполнение тоже проходит, а на Документ.SaveAs(ИмяВрем); спотыкается.

    Ощущение, что что-то не так с word-ом именно под пользователем под которым работает служба 1С, хотя я под ним заходил и офис нормально запускается!

    Чтобы не дебажить весь код, например можно попробовать написать (см. обработка во вложении):

    &НаКлиенте Процедура СоздатьТестWord(Команда) СоздатьТестWordНаСервере(); КонецПроцедуры &НаСервере Процедура СоздатьТестWordНаСервере() Word = Новый COMОбъект(«Word.Application»); Word.Visible=1; Документ = Word.Documents.Add(); ИмяВрем = ПолучитьИмяВременногоФайла(«.docx»); Документ.SaveAs(ИмяВрем); Сообщить(ИмяВрем); КонецПроцедуры 

    Показать

    На файловой базе работает, на SQL не работает (спотыкается на SaveAs). Можете попробовать у себя? Если эта простенькая обработка у вас заработает, значит у нас что-то не так с word-ом на сервере под этим Windows-пользователем.

    Я кстати задачу решил через двоичные данные, но всё равно интересно почему не работает SaveAs на сервере!

    Reply

  15. (14) klinval, проверьте права доступа для пользователя, word и 1С на стороне сервера

    Скорей всего проблема в этом. Можете попробовать залогиниться на сервак под юзером, под которым запускается 1С сервер и проверить, даёт ли там сохранить файл интерактивно

    Reply

  16. (15) я уже ранее проводил такую проверку: залогинился под пользователем и сохранил word интерактивно. Клиентской 1С на сервере до этого вообще не стояло, я поставил. Запустился, а там ошибка(см. приложение). Возможно в этом и косяк.

    У вас то обработка (во вложении к 14 сообщению) работает на SQL базе?

    Reply

  17. (16) klinval, конкретно в данный момент, нет возможности проверить вашу обработку

    Добавьте 1С в исключения в свойствах обозревателя IE

    Reply

  18. (17) отключил усиленную безопасность IE, поставил на самый «небезопасный» уровень, ошибка, указанная в 16 сообщении ушла, но метод SaveAS всё равно не работает.

    Так всё таки под кодом:

     Макет = ОбщийМодуль.ПолучитьМакет(Документ); //серверная функция, записывает макет в файл и возвращает полное имя файла

    Каким методом ты записываешь? Save, SaveAS?

    Reply

  19. (18) klinval, посмотрите на дату публикации. Доступа к той обработке у меня давно нет, а в памяти я такое держать не могу 🙂

    Что значит

    метод SaveAS всё равно не работает.

    ?

    Ошибка выпадает? Файл не сохраняет?

    Reply

  20. (19)

    Ошибка выпадает? Файл не сохраняет?

    Да. Да:)

    По-любому косяк где-то на уровне прав Windows-пользователя (т.е. связано с администрированием серверов, а не с 1С). Даже обработка с сообщения 14 не работает (хотя где там можно ошибиться?).

    {Форма.Форма.Форма(13)}: Ошибка при вызове метода контекста (SaveAs)

    Документ.SaveAs(ИмяВрем);

    по причине:

    Произошла исключительная ситуация (Microsoft Word): Ошибка команды

    Поэтому мне проще было не разбираться, а запихнуть шаблон не в ActiveDocument, а в двоичные данные, которые я могу спокойно передать на клиент. Что я и сделал… А ошибка с SaveAs, скорее всего так и останется неразгаданной.

    Reply

  21. (20) klinval, вам нужно запуститься непосредственно по тем пользователем, который указан для 1С на сервере и именно под ним попробовать сохранить MS Word интерактивно

    Reply

  22. (21) уже пробовал. Сохраняет… как ни странно.

    Reply

  23. (22) klinval, тогда нужно ловить ошибку, которую возвращает приложение

    подключитесь к MS Word из 1С через COM на сервере и попытайтесь сохранить файл методом SaveAs

    Reply

  24. (23) ну так это я и сделал! Ошибка уже давно выявлена и описание её ни о чём не говорит. Файл в 14 сообщении, ошибка от его исполнения в 20 сообщении.

    {Форма.Форма.Форма(13)}: Ошибка при вызове метода контекста (SaveAs)

    Документ.SaveAs(ИмяВрем);

    по причине:

    Произошла исключительная ситуация (Microsoft Word): Ошибка команды

    Если дать заведомо рабочий путь вручную: та-же ошибка (не важно сетевой или на диск C:)

    Если дать заведомо некорректный путь, то уже другая ошибки:

    {Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (SaveAs)

    Документ.SaveAs(«Ы:111.docx»);

    по причине:

    Произошла исключительная ситуация (Microsoft Word): Неверно указано имя файла.

    Попробуйте выполнить следующие действия:

    * Убедитесь, что путь введен правильно.

    * Выберите нужный файл из списка файлов и папок.

    Пробовал эксперементировать с расширением файла:

     Для Инд = 0 По 100 Цикл Попытка Word = Новый COMОбъект(«Word.Application»); Word.Visible=1; Документ = Word.Documents.Add(); Документ.SaveAs(«C:111.docx»,Инд); Сообщить(«ПОЛУЧИЛОСЬ:»+Инд); Исключение Сообщение = Новый СообщениеПользователю(); Сообщение.Текст = Строка(Инд)+»!»+ОписаниеОшибки(); Сообщение.Сообщить(); КонецПопытки; КонецЦикла; 

    Показать

    файл так и не создался.

    Сверил все настройки Word локальные и на сервере (запустившись от имени пользователя под которым работает служба 1С). Процесс ворда запускается точно под тем пользователем под которым запускается служба (проверил в диспетчере задач)…

    Reply

  25. (24) klinval, вам нужна ошибка именно MS Word

    {Форма.Форма.Форма(13)}: Ошибка при вызове метода контекста (SaveAs)

    Документ.SaveAs(ИмяВрем);

    по причине:

    Произошла исключительная ситуация (Microsoft Word): Ошибка команды

    Это листинг ошибки 1С. Обработайте через 1С, сообщение об ошибке MS Word и выведите её содержимое

    Reply

  26. (25)

    Обработайте через 1С, сообщение об ошибке MS Word и выведите её содержимое

    Не понял, как это сделать?

    Reply

  27. (26) klinval, в смысле? руками)))

    Reply

  28. (27) правильно я понял: ты хочешь увидеть ошибку как её видит Word, а не как её нам даёт 1С?

    Если да, то опять вопрос: как из 1С это можно вывести?

    Reply

  29. (28) klinval, читай про COM-объекты и инструментарий по MS Word

    Reply

  30. (29) что искать/читать и где? Вы ответьте хотя бы на:

    правильно я понял: ты хочешь увидеть ошибку как её видит Word, а не как её нам даёт 1С?

    Reply

  31. (30) klinval, искатьчитать:

    — работа с COM объектами в 1С

    — интеграция MS Word и 1С

    Вы ответьте хотя бы на:

    1С вообще никакой ошибки не видит, она тупо посредник между пользователем и приложением (MS Word)

    Reply

  32. (31) это реально можно вывести ошибку в 1С как её видит Word или ты чисто теоретически предполагаешь, что такой метод есть?

    Может я тебя не правильно понял: по тексту мне показалось, что ты уверен, что такая возможность (такой метод) есть, а может ты имел ввиду, что чисто теоретически такая возможность должна быть.

    Reply

  33. (32) Столкнулся с аналогичной проблемой — хотел узнать, удалось ли ее в итоге победить или забили?

    Ошибка таже:

    Ошибка при вызове метода контекста (SaveAs)

    Reply

  34. (33) ivant, вроде как CeHbKA утверждал, что можно считать ошибку как то по-другому и увидеть причину косяков. Я сильно «копнул» в этом направлении, но ничего не нашёл. Похоже это совет из разряда гипотетических, что мол возможно считать ошибку Word как то по другому, но я не знаю как, но точно можно… Можете как советовал CeHbKA копнуть в эту сторону, может я что-то не увидел!

    Хотя если честно ошибку я как-то исправил. Но вот не помню как, но явно не по этому совету. Моя обработка в (14) сообщении теперь у меня работает на серверной базе. Возможно ошибка просто ушла после обновления платформы.

    Ещё есть вариант перейти с ActiveDocument на двоичные данные, как я в начале и сделал. Можете посмотреть тут код как это делается. Если вкратце:

    //На клиенте получаем макет и заполняем его предварительно полученными данными ДвоичныеДанныеМакета = ПолучитьИзВременногоХранилища(ПолучитьМакетСКлиента(«ПисьмоНаОплатуWord»)); ИмяВрем = ПолучитьИмяВременногоФайла(«.docx»); ДвоичныеДанныеМакета.Записать(ИмяВрем); Попытка Документ = ПолучитьCOMОбъект(ИмяВрем); Для Каждого Параметр из СтруктураПараметров.Значение Цикл //В оригинале тут другой код, но для простаты пример: Selection = Документ.Content; Selection.Find.Execute(«[«+Параметр.Ключ+»]»,Ложь,Истина,Ложь,,,Истина,,Ложь,Параметр.Значение,2); КонецЦикла; Документ.Application.Visible = Истина; Документ.Application.WindowState = 2; Документ.Application.WindowState = 1; Документ.Activate(); Исключение ….. &НаСервереБезКонтекста Функция ПолучитьМакетСКлиента(Имя) Возврат ПоместитьВоВременноеХранилище(Документы.ПисьмоНаОплату.ПолучитьМакет(«ПисьмоНаОплатуWordДвоичныеДанные»)); КонецФункции 

    Показать

    Reply

  35. (32) klinval, (33) ivant, (34) klinval,

    вы получаете COM-объект MS Word

    соответственно работаете с API данного com-объекта (т.е. Word)

    функция SaveAS является функцией API Word

    значит, чтобы получить ошибку Word нужно воспользоваться API этого самого Word

    Reply

  36. Аналогичная ошибка, не может открыть документ сохраненный в темп

     ДвоичныеДанные = ПолучитьДвоичныеДанныеМакета(); COMОбъект = Новый COMОбъект(«Word.Application»); ИмяВременногоФайла = ПолучитьИмяВременногоФайла(«DOC»); ДвоичныеДанные.Записать(ИмяВременногоФайла); COMОбъект.Documents.Open(ИмяВременногоФайла); // здесь вываливается ошибка, никаких документов он не открыл, в темпе лежит созданный документ ворда , COMОбъект.Documents.Count = 0, через ЖР проверял Док = COMОбъект.Application.Documents(1); Док.Activate(); 

    Показать

    Reply

  37. Почему при сохранении макета типа active document в файл word кодом:

    Код:

    ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»); Макет = ОбработкаОбъект.ПолучитьМакет(«ШаблонПисьмаПросрочка»); ИмяФайла = КаталогВременныхФайлов() + «файл.doc»; Макет.Записать(ИмяФайла);

    Я получаю вместо нормального документа вот такой

    Reply

  38. А почему нельзя использовать документ двоичные данные? Загрузил туда шаблон. Получили шаблон. Сохранили документ. Передали на клиент имя открыли через COM и заполняем.

    &НаКлиенте Процедура ПолучитьМакет(Команда) Попытка Индификатор = ПолучитьДанныеМакета(); МакетПисьма = ПолучитьИзВременногоХранилища(Индификатор); ИмяФайла = «Письмо.doc»; ИмяФайлаПолное = «С:» + ИмяФайла; МакетПисьма.Записать(ИмяФайлаПолное); Исключение Сообщить(ОписаниеОшибки()); КонецПопытки; Попытка Шаблон = Новый COMОбъект(«Word.Application»); Исключение Сообщить(«Ошибка при попытке создать объект «»MS Word»»!» + Символы.ПС + «Возможно приложение «»MS Word»» не установлено или установлено неправильно.», СтатусСообщения.Внимание); КонецПопытки; Шаблон.Documents.Open(ИмяФайлаПолное); Попытка Шаблон.Application.Documents(1).Content.Find.Execute(«{Сумма}»,,,,,,,,, ЭтаФорма.Сумма, 2); Шаблон.Application.Documents(1).Content.Find.Execute(«{Контрагент}»,,,,,,,,, ЭтаФорма.Контрагент, 2); //Перемещаемся до строки в таблице Шаблон.Application.Selection.MoveDown(,8); //Перемещаемся вниз, выделяем строку таблицы и копируем ее в буфер обмена Шаблон.Application.Selection.SelectRow(); Шаблон.Application.Selection.Copy(); Для каждого Строка Из Этаформа.ТЗ Цикл //Заменяем значения Шаблон.Application.Selection.Find.Execute(«{НомерСчета}» ,,,,,,,,,Строка.НомерСчета, 2); Шаблон.Application.Selection.Find.Execute(«{ДатаПоставки}» ,,,,,,,,,Строка.ДатаПоставки, 2); //Последний параметр поиска пустой Шаблон.Application.Selection.Find.Execute(«{КрайняяДата}» ,,,,,,,,,Строка.КрайняяДата, 2); Шаблон.Application.Selection.Find.Execute(«{СтоимостьТоваров}» ,,,,,,,,,Строка.СтоимостьТоваров, 2); //Перемещаемся вниз, вставляем из буфера обмена строку Шаблон.Application.Selection.MoveDown(); Шаблон.Application.Selection.Paste(); //Перемещаемся вверх и выделяем строку для замены значений Шаблон.Application.Selection.MoveUp(); Шаблон.Application.Selection.SelectRow(); КонецЦикла; //Вырезаем лишнюю строку Шаблон.Application.Selection.Cut(); Шаблон.Application.Visible = Истина; Исключение // Если произойдет ошибка выводятся данные об ошибке и объект закрывается. Сообщить(«Ошибка: » + ОписаниеОшибки(), СтатусСообщения.Внимание); Шаблон.Application.Quit(0); КонецПопытки; КонецПроцедуры &НаСервере Функция ПолучитьДанныеМакета() АдресХранилища = Новый УникальныйИдентификатор(); ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»); Макет = ОбработкаОбъект.ПолучитьМакет(«ШаблонПисьмаПросрочка»); Возврат ПоместитьВоВременноеХранилище(Макет, АдресХранилища); КонецФункции 

    Показать

    У меня этот код на серверной базе работает

    Reply

  39. (42)

    МакетПисьма = ПолучитьИзВременногоХранилища(Индификатор);

    Здесь в тонком клиенте у Вас будет выскакивать ошибка. Такой способ только для толстого клиента подходит.

    Reply

  40. (43) Выскажусь в защиту:

    Глобальный контекст (Global context)

    ПолучитьИзВременногоХранилища (GetFromTempStorage)

    Синтаксис:

    ПолучитьИзВременногоХранилища(<Адрес>)

    Параметры:

    <Адрес> (обязательный)

    Тип: Строка.

    Адрес, указывающий на значение во временном хранилище.

    Возвращаемое значение:

    Тип: Произвольный.

    Значение, ранее помещенное с помощью метода ПоместитьВоВременноеХранилище.

    Описание:

    Получает значение из временного хранилища.

    Доступность:

    Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).

    Вызов метода выполняет обращение к серверу.

    Примечание:

    Результат выполнения не кэшируется, вызов сервера осуществляется при каждом вызове метода.

    Показать

    В справке написано, что тонкий клиент можно использовать! Я в своей статье данный метод тоже привожу в тонком клиенте, причём этот код уже давно работает на рабочей базе (в толстом клиенте у нас никто не работает).

    Reply

  41. Решение проблемы «Ошибка при вызове метода контекста (SaveAs) «

    Reply

  42. (17) Надо не 1с в исключения добавить, а всю строку about:…. только при добавлении снять галку с https…,а указанное в (18) делать нежелательно…тем более на сервере…

    Reply

  43. (33) У меня такая проблема была. все было в правах на сервере…получалось при этом сохранять в шару..решил делать это не на рдп а на локальной машине…SQL тут не причем

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

При выполнении кода

WordApp = Новый COMОбъект("Word.Application");
Док = WordApp.Documents.Add("%pathtofile%test.docx");
Док = WordApp.Documents.Add("%pathtofile%test.docx");

на сервере вылетает ошибка:

Произошла исключительная ситуация (Microsoft Word): Приложению Word не удалось прочитать документ. Возможно, он поврежден.
Попробуйте выполнить следующие действия:
* Откройте файл с помощью команды ”Открыть и восстановить”.
* Откройте файл с помощью конвертера резервных копий.

Решение:
Помогло создание 2-х каталогов и добавление полных прав на эти каталоги для пользвоателя, под которым стартует сервис 1С.

Каталоги:

C:WindowsSysWOW64configsystemprofileDesktop
и
C:WindowsSystem32configsystemprofileDesktop

Источник информации с более расширенной инструкцией: http://pyatilistnik.org/dcom-in-excel-application/ здесь

Всем привет! Печ. форма формируется через Word. Открывается файл Word, там делаются замены после чего он сохраняется. Все отлично работало, пока не перенес базу на SQL. Причем, если на этом сервере развернуть эту же базу в файловом варианте — все работает. А на SQL — нет. Пробовал давать какие-угодно права пользователю, от имени которого запускается Агент сервера. Запускал его и под встроенной учеткой и под админом… нифига. Вот фрагмент кода, который перестает работать на SQL: по причине: Произошла исключительная ситуация (Microsoft Word): Данная команда недоступна, так как не открыт ни один документ.» Пожалуйста, помогите разобраться в чем дело.

ну а путь к файлу у тебя какой? файл сам где лежит?

Сам Word установлен? Что выдаст ПолучитьCOMОбъект(«», «Word.Application») или ПолучитьCOMОбъект(«d: emp emp.docx»)

ИмяФайлаШаблона — существует ли файл по этому пути, и доступен ли?

Сначала делал так: Потом переделал жестко: ИмяФайлаШаблона = «C:UsersPublicDocuments» + «ШаблонДоговора.docx»; Но не помогло.

Да, Word установлен. Если в файловом варианте развернуть, все работает, документ отлично формируется и открывается.

Только выполни на сервере

Кода запускаешь файловую базу, доступны ком-обхекты локальной системы. Если сервер 1С находится на другой машине, откуда ему знать про «C:UsersPublicDocuments» терминального сервера или локальной машины?

Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал. Запускаю я все на одном и том же сервере. И Word и 1C установлены на той машине, на которой я работаю. Насчет : в первом случае результат тот же — «ни открыт ни один документ», во втором случае другая ошибка: «{ВнешняяОбработка.ФормированиеПоШаблону.МодульОбъекта}: Ошибка при вызове метода контекста (ПолучитьCOMОбъект) по причине: Ошибка получения объекта COM: Фильтр сообщений выдал диагностику о занятости приложения.»

У тебя и сервер 1С на той же машине стоит?

может как вариант повис на сервере COMОбъект Ворда. посмотри в процессах.

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, метод ошибки выдавать не стал и внешне отрабатывает как я писал выше. Но если выполняется на стороне сервера — ничего не открывает и дальнейшее обращение к документу дает ошибку, а на стороне клиента — открывает.

сколько можно на эти грабли наступать.

МихаилМ, по-моему не совсем по теме. Сом объект-то создается и остальные методы у него работают. Вы читали ветку или только последнее сообщение? Сколько можно на эти грабли наступать… Сейчас-то конечно все сразу умные станут. )) Что раньше молчали? Давайте без этого.

из >Разумеется, я сто раз проверил существование файла, все права на него и все такое. В разные места его клал, админские права раздавал. не стыкуется с

Чем же не стыкуется? В я мудрил с самим файлом, а в перенес выполнение кода с сервера на клиент. Короче, флуд пошел…

Тэги: 1С 8

Комментарии доступны только авторизированным пользователям

Обновлено: 05.06.2023

— он существует, и сервер его может прочитать. С правами доступа к папкам всё ОК.

На сервере установлен Office 2013 (причем я ставил и 32-битный, и 64-битный), COM-компонент ручками зарегистрировал, поэтому строчка

ОбъектВорд = Новый COMОбъект(«Word.Application»);

теперь выполняется без ошибок. В отладчике объект виден.

Так вот, спотыкаемся на строчке

Если файл имеет расширение DOC — ошибка такая:

: Ошибка при вызове метода контекста (Add): Произошла исключительная ситуация (Microsoft Word): Ошибка в Word.

Если файл имеет расширение DOCХ — ошибка чуть другая:

: Ошибка при вызове метода контекста (Add): Произошла исключительная ситуация (Microsoft Word): Приложению Word не удалось прочитать документ. Возможно, он поврежден.
Попробуйте выполнить следующие действия:
* Откройте файл с помощью команды »Открыть и восстановить».
* Откройте файл с помощью конвертера резервных копий.

Я уже в отчаянии, целый день мучаюсь.
Сборки Офиса 2013 — от Кролика, с самыми последними обновлениями, сами понимаете, это бренд, здесь всё пучком. (На Win7 с файловой базой, где всё работает — такая же). Майкрософту я доверяю меньше, но завтра-таки попробую поставить c оригинального образа RTM. Интуиция подсказывает, что не взлетит.

Подскажите, что ещё можно попробовать проверить?

А если попробовать зайти на сервер и вручную открыть данный файл? Открывается нормально и содержимое отображает?

[Сборки Офиса 2013 — от Кролика, с самыми последними обновлениями, сами понимаете, это бренд, здесь всё пучком. (На Win7 с файловой базой, где всё работает — такая же). Майкрософту я доверяю меньше, но завтра-таки попробую поставить c оригинального образа RTM]

Достаточно спорное утверждение. Я бы больше доверял оригинальному дистрибутиву, чем какой-то сборке, из которой вполне могли повыкидывать «ненужные» вещи.

(0) попробуйте другую папку. c:temp_pm — очень сомнительное место, вряд ли там откроет файл ворд.

(1) конечно, открывает и отображает :) Я же не первый день замужем. И даже ЗапуститьПриложение(ИмяФайла), я уверен, будет работать.
(3) и папка эта — не первая, до неё я использовал подкаталог во временной папке (пробовал разные). Разумеется, права доступа — всем на всё.

Ещё раз повторю, что на локальном компьютере с W7 при такой же структуре папок и том же дистрибутиве Офиса (только без сервера приложений) всё работает.

Мне кажется, подвох в Windows 2016.
Другой вариант — в сервере приложений.
Третьего не дано.

(4) Подвох возможно кроется в битности офиса, 1С.
Допустим офис 64x, а 1С 32x и наоборот.
нафиг вам этот офис вообще уперся. распаковал, засунул в xml чо хочешь, запаковал и все дела. быстро, дешево и сердито.
Курить «профиль безопасности» в программе «Администрирование серверов 1С Предприятия». По умолчанию использование COM на сервере 1С запрещено. Не советую работать с вордом екселем и тд. на сервере. Зависнет ворд вместе с ним 1с сеанс, что будете делать?
попробуйте написать сценарий и из него управлять вордлм,а уже этот сценарий запустите из 1ц,если что-то пойдет не так можно убить сценарий и ворд из самой 1с
а сервер,кстати,обычно 64-битный
(8) Зачем такой изврат, можно просто фоновым заданием, мне кажется.

(4) Подвохов там масса. Начиная от того под кем выполняется. Если ушло на сервер значит выполняется под серверным userV8 значит у него должен быть доступ к dcom объекту. Лезешь в dcom офиса и выдаешь ему там все права.

Но лучше сделать по другому. docx это упакованные в zip xml. на просторах интернета есть уже готовый код. Также реализацию и можно посмотреть в 1С Договорчики.

Фактически docx распаковывается, в нужном xml правится, пакуется обратно. Сам понимаешь никаких проблем с COM и офис не нужен.

(5) изначально офис был 32-битный и была ошибка при создании ком-объекта:
ОбъектВорд = Новый COMОбъект(«Word.Application»);
Но я вручную создал коннектор (по инструкции), и ошибка исчезла. Более того, как сказано в (0), я снес 32-битный Офис и поставил 64-битный — это ничего не изменило.

(6) а ссылку? У меня 15 файлов, часть в DOCX, часть в HTML, надо все их упихать в один. Я делаю это с помощью метода InsertFile.

(7) Благодарю, сейчас почитаю про эти профили. Похоже, собака зарыта именно здесь.

(10) пользователю usr1cv8 уже выданы везде все права, в том числе в COM+.

Насчет XML и ZIP — это интересно, но на будущее. Я уже написал код, который быстро работает на файловой базе. Теперь задача — заставить его выполняться на сервере.

(11) В самом объекте dcom дал права?

Администрирование ? Службы компонентов ? *** ? Настройка DCOM ? Документ Microsoft Word 97–2003 ? безопасность.

(0) Сборки Офиса 2013 — от Кролика, с самыми последними обновлениями, сами понимаете, это бренд

К сожалению, даже новейшие версии «Офиса» периодически работают некорректно. Ошибка при открытии Word-файла может возникнуть в самый неожиданный момент, даже если всего пару минут назад вы спокойно работали с документом. И всё бы ничего, но что, если в нём содержится важная и ценная информация? Рассмотрим возможные причины проблемы и способы восстановить такие файлы.

Ошибка при открытии Word файла

Почему возникает ошибка?

При попытке открыть документ вы увидите на экране оповещение о том, что приложение не может прочитать файл из-за того, что он повреждён. Сразу скажем: это может произойти, даже если вы ничего не делали с документом и работали, как обычно. Как правило, происходит что-то из этого списка:

  1. В документе содержится большое количество таблиц, рисунков и формул. Ошибка при открытии Word-файла может возникнуть, если по каким-то причинам коды этих элементов были записаны некорректно (проще говоря, программа не может понять, что вообще нужно показывать).
  2. Проблемы связаны с различными элементами форматирования. Например, с теми, которые был созданы с помощью дополнительных приложений и надстроек на другом компьютере.
  3. Файл был неправильно сохранён (не в том формате).

Нажав на кнопку «Сведения», вы можете получить более точную информацию — в какой именно точке документа (номера строки и столбца) есть проблемы. Правда, неопытным пользователям это мало чем поможет. Поэтому сразу перейдём к тому, как можно повреждённый текстовый файл открыть.

Восстановление документа средствами Word

Немногие знают, что в самом текстовом редакторе от «Майкрософт» есть функция исправления повреждённых файлов. Поэтому, если возникает ошибка Word при попытки открытия файла, в первую очередь стоит попробовать восстановить документ стандартными средствами. Что для этого нужно сделать?

ошибка word при попытки открытия файла

Теперь, если всё хорошо, документ откроется и отобразится в стандартном режиме.

Затем необходимо закрыть окно и сохранить восстановленный документ. После этого ошибка при открытии Word-файла перестанет появляться. Но что делать, если получить доступ к документу таким образом не получилось?

Восстановление с помощью конвертера резервных копий

Отлично, если на вашем компьютере установлена эта небольшая утилита. Это значит, что при сохранении документа в памяти также создаётся его резервная копия. И сейчас мы попробуем извлечь неповреждённую версию документа:

  1. Запустите редактор через меню «Пуск».
  2. Выберите в меню «Файл» > «Открыть».
  3. Внизу открывшегося окна будет список «Типы файлов» (слева от кнопки «Отмена»). Нажмите на стрелочку и откройте список всех вариантов.
  4. Если конвертер установлен, вы увидите строку «Восстановление текста из любого файла (*.*)».
  5. Выберите этот вариант и ещё раз попробуйте открыть необходимый файл.

ошибка при открытии файла word 2003

Если даже после этого возникают ошибки, проверьте все таблицы в документе и посмотрите, нет ли в них ячеек и строк, в которых содержится слишком большой текст. Также проблемы могут возникать, если в документе присутствует незавершённая таблица.

Изменение настроек защищённого просмотра

Рассмотрим ещё один вариант. Он может сработать, если программа не открывает файл Word, который был загружен из Интернета. Система автоматически блокирует запуск документов, которые считает потенциально опасными. Отключить защиту можно следующим способом:

  1. Запустите «Ворд» и перейдите в меню «Файл» > «Параметры».
  2. В появившемся окне слева расположены основные вкладки. Нам нужен раздел «Центр управления безопасностью».
  3. В «Центре» перейдите на вкладку «Защищённый просмотр».
  4. Снимите флажки со всех пунктов, отвечающих за открытие документов в ограниченном режиме.
  5. Сохраните изменения, перезапустите программу и попробуйте ещё раз открыть файл.

не открывает файл word

Использовать этот способ нужно с осторожностью, и только в том случае, если вы на 100% уверены в безопасности файла.

Удаление надстроек Microsoft Word

Наша задача — отключить все надстройки, в т. ч. ту, которая вызывает ошибки. Для этого нужно:

После этого необходимо закрыть программу и ещё раз попробовать открыть проблемный документ.

текстовый файл открыть

Восстановление формата

Во многих случаях ошибка при открытии файла Word 2003-2013 связана с неправильным сохранением. Чтобы открыть документ, придётся восстановить правильный формат.

Попробуем перенести рабочую информацию в новый, неповреждённый документ:

  1. Создайте в «Ворде» новый пустой файл и сохраните его.
  2. Закройте программу и зайдите в «Проводник».
  3. Найдите созданный файл и превратите его в архив, изменив расширение (для этого нужно просто переименовать документ и вписать .zip вместо .doc).
  4. То же самое нужно сделать с файлом, который вы хотите восстановить.
  5. Откройте документы с помощью любого архиватора.
  6. Извлеките из повреждённого документа папку «word» и скопируйте её в архив с новым документом с заменой всех файлов.
  7. Переименуйте файл из .zip в .doc или .docx обратно.

ошибка при открытии word файла

Ручное редактирование кода

  1. Откройте документ как архив (см. предыдущий пункт).
  2. Найдите и извлеките файл document.xml.
  3. Откройте документ в «Блокноте» или Notepad++. Желательно, чтобы текстовый редактор отслеживал позицию курсора — показывал номера строк и столбцов.
  4. Найдите фрагмент, который вызывает ошибку, и отредактируйте его.
  5. Загрузите обновлённый document.xml в архив вместо старого файла. После этого откройте документ в Word.

Здесь важно понимать суть проблемы. Чаще всего это неправильный порядок тегов в коде. В крайнем случае можно удалить часть текста.

ошибка при открытии word файла

Восстановление документа с помощью Word Recovery

ошибка при открытии word файла

Полезные советы

Перед тем как приступить к исправлению «битого» файла, обязательно сделайте его копию.

Если не получается восстановить документ в родном формате (.doc или .docx), сначала попробуйте сохранить его как .rtf.

Иногда при восстановлении таблицы на экране высвечивается предупреждение, что компьютеру не хватает памяти. В данном случае нужно закрыть все программы, папки и файлы, кроме самого «Ворда».

Все вопросы ко мне. Чем могу — помогу. Верстаю больше 10 лет и знаю много чего. Особенно Ворд, потому что мои заказчики, как правило, хотят готовые материалы получать в Ворде (идиоты!). Граждане! Пишите версию Ворда, когда что-то спрашиваете.

:нет Увы мне! Я абсолютно не знакома ни с сайтом, ни с технологией создания брошюр на этом сайте.

К Ворду, в принципе, существует макрос, позволяющий спускать полосы непосредственно из этой программы. У меня этот макрос когда-то был, но после того, как гикнулся жесткий диск, к сожалению, я его не восстановила. Как назывался не помню. Попробуйте поискать в Интернете «спуск полос в Word».

Спуск полос — это автоматическое перемещение страниц на нужное место в книге или брошюре, выполненное логическим (в компьютерном случае) способом. Например, если у вас книжка из 16 страниц, то при печати у вас на одной стороне листа будут 16 и 1 страницы, а на другой 2 и 15 соответственно. Аналогично для следующих распечатанных листов. Такой лист и называется полосой.

Как там на сайте, не видел. Но чтобы получилась брошюра,можно FinePrint попробовать
Раньше я думал что в ворде я «полнейший чайник» но после одного случая я понял, что, похоже, уже дорос до «кофейника». Дело в том, что один знакомый попросил меня распечатать небольшой документ (страниц на 5), но перед этим подредактировать текст (сделать «покрасивше» — чистая косметика). Начал я текст редактировать — и он у меня «поплыл» со страшной силой — после «разборок» оказалось, что он весь текст «пробил» через ввод (оконечил каждую строку вводом, как на печатной машинке). После матов и часа работы я эти «вводы» ликвидировал и сделал таки приличный документ. Но остался вопрос — а можно — ли было эти «вводы» ликвидировать одним махом? А то это знакомый уже намекал, что готовит ещё один документ. Я ему, конечно, объяснял, но.

2 Quatrix
Да можно конечно. Только надо воспользоваться командой замены, а там указать спецсимволы.

Как меня достали заказчики, которые предоставляюют электронную версию своих потуг.
Типа в екселе родили свой прайс с картинками.

Добавлено через 6 минут 16 секунд

Спуск полос — это автоматическое перемещение страниц на нужное место в книге или брошюре, выполненное логическим (в компьютерном случае) способом. Например, если у вас книжка из 16 страниц, то при печати у вас на одной стороне листа будут 16 и 1 страницы, а на другой 2 и 15 соответственно. Аналогично для следующих распечатанных листов. Такой лист и называется полосой.
Блин, не ввобите в заблуждение народ. Полосой является страница. А вот спуск как раз и необходим, чтобы при печати на большЕм формате с последущей фальцовкой получить книжку как хочет этого заказчик!
Блин, не ввобите в заблуждение народ. Полосой является страница. А вот спуск как раз и необходим, чтобы при печати на большЕм формате с последущей фальцовкой получить книжку как хочет этого заказчик!

Добавлено через 6 минут 13 секунд

Раньше я думал что в ворде я «полнейший чайник» но после одного случая я понял, что, похоже, уже дорос до «кофейника». Дело в том, что один знакомый попросил меня распечатать небольшой документ (страниц на 5), но перед этим подредактировать текст (сделать «покрасивше» — чистая косметика). Начал я текст редактировать — и он у меня «поплыл» со страшной силой — после «разборок» оказалось, что он весь текст «пробил» через ввод (оконечил каждую строку вводом, как на печатной машинке). После матов и часа работы я эти «вводы» ликвидировал и сделал таки приличный документ. Но остался вопрос — а можно — ли было эти «вводы» ликвидировать одним махом? А то это знакомый уже намекал, что готовит ещё один документ. Я ему, конечно, объяснял, но.
Правка — Заменить — Больше — Специальный — Знак абзаца поставить в строку «Найти». В строке «Заменить на» поставить пробел. Сначала проверить, как работает, а потом запустить полную замену.
и 10 страниц текста станут одним абзацем. После этого машина начинает виснуть и срочно надо разбивать текст на (опять же) абзацы.
я в таких случаях, как
оконечил каждую строку вводом, как на печатной машинке
сделал макрик: заменить (буквы по алфавиту+символы, кроме точки)+символ абзаца на ту же букву + пробел.
абзацы заканчиваются на тчк+Энтер. только заголовки суть абзацы без точек в конце, их потом находишь вручную.

и 10 страниц текста станут одним абзацем. После этого машина начинает виснуть и срочно надо разбивать текст на (опять же) абзацы.
я в таких случаях, как

сделал макрик: заменить (буквы по алфавиту+символы, кроме точки)+символ абзаца на ту же букву + пробел.
абзацы заканчиваются на тчк+Энтер. только заголовки суть абзацы без точек в конце, их потом находишь вручную.

Ну значит без полной автозамены. А во второй Вашей тираде лично я ничего вообще не поняла. Интересно, предыдущий алчущий помощи в этом вопросе что-нибудь понял?

Ну, не все знают ВБА, чтобы такое наваять. Да и не совсем корректно работать будет.

2 Quatrix
Я бы сделал так: Выделил бы абзац (который неправильно набит) не захватывая последний символ «конец абзаца». После этого запустил бы запись макроса ( с назначением его, скажем, на ctrl+1) и выполнил следующие действия:
1) замена «конец абзаца» на «пробел»
2) Установить параметры абзаца — шоб красиво было
3) Установить параметры шрифта — шоб тоже красиво было
4) Конец записи
Один абзац у тебя готов. Далее выделяешь следующий и жмешь ctrl+1!

Очень рекомендую запускать еще замену: «Пробел»»Пробел» на «Пробел». И так повторяешь до тех пор, пока не будет выполнено 0 замен. Некоторые так равнять любят. А нормальная разметка при этом косячиться.

сенькс на добром слове. я, таки ж да, знаю . оч. часто беру текст из Нета (f.e. закон Верховной нашей Рады), шрифтом курьер Нью добиваются выравнивания по ширине, но чуть тропешь формат или страницу — упс. текст одним абзацем на 10-15 страниц уделывает тачку под ноль! (хотя, возможно, кому-то с тех.обесп. повезло больше, типа оп.пямяти)
согласен, но порой легче постучать по клаве, . типа, енд+делит (если текст по размерам умеренный..)
натайпил для тех, кто понял, сорьки, если перемытил, но ИМХО все понятно. ежели что — не судите строго, но букв в алфавите чуть да нифига, и символом типа «кома», на который строка может обрываться наглым ентером тож немного, замена по тексту , чё ж проще-то.

salam, по-моему, то, что ты хочешь сделать, невозможно в Word.

Просто такие доки как у тебя нужно создавать не с черточками, которые потом съезжают, с табуляцией.
Соответственно тебе нужно заменить все подчеркивания tabом с заполнителем.

Вообще-то можно, но большой геморрой.

Кстати, такие «черточки» делаются не табуляцией с заполнителем, а подчеркнутой табуляцией. Выглядит приблизительно так: табуляция (центральная) — какие-то слова — табуляция правая. И все это делается подчекнутым.

заме желтая текст

Причина

Эта проблема обычно возникает, если файл был изменен сторонним программным обеспечением во время передачи и из-за этого не открывается.

Решение

Сначала щелкните правой кнопкой мыши файл Word, с которым возникли проблемы, и выберите «Свойство».

заме желтая текст

нажмите

кнопку «Разблокировать», а когда все будет готово, нажмите кнопку «ОК». (Примечание. В файле Word с правильной работой не отображается кнопка «Разблокировать»).

заме желтая текст

этом случае вы сможете открыть этот файл

без дополнительных проблем. Если вы столкнулись с этой проблемой во многих файлах, попробуйте сделать следующее: сначала переместите эти файлы в ту же папку, откройте Word 2010, а затем щелкните «Файл» и выберите «Параметры». (В Word 2007 нажмите кнопку «Office» и выберите «Параметры Word»).

заме желтая текст

«Центр управления доверием» и щелкните «Параметры центра управления доверием».

далее, щелкните «Надежные расположения» и нажмите кнопку «Добавить новое расположение».

«ОК», а затем нажмите кнопку «ОК» еще раз.

Обратная связь важна для нас

Вы удовлетворены нашим содержимым? Как бы вы ни были:
«Отлично! Проблемы решены».
или «Проблемы не решены. У меня есть идея по-лучше».
Мы хотели бы, чтобы вы предоставили нам свои ценные мнения с помощью формы опроса, которая может быть расположена в нижней части этой статьи. Мы будем рады любым стимулам, которые могут быть у вас, и будем создавать для вас более полезные технические статьи.

Читайте также:

      

  • Как в приложении интерсвязь добавить еще один адрес
  •   

  • Телеграм где сливают тик токеров
  •   

  • Приложение анилибрия не работает
  •   

  • Как заказать доставку посылки с почты на дом через приложение почта россии
  •   

  • Как посмотреть приложения друзей в вк

Понравилась статья? Поделить с друзьями:
  • Произошла временная ошибка dns попробуйте обновить страницу
  • Произошла внутрисистемная ошибка при установке directx
  • Произошла внутрисистемная ошибка dxerror log directx log
  • Произошла внутренняя системная ошибка чтобы определить причину
  • Произошла внутренняя системная ошибка dxerror log directx log