1с word documents add ошибка

   Dmitriy_ Kolesnikov

03.11.17 — 00:39

Сразу скажу — на файловой базе в Windows 7 этот код работает корректно.

Итак, есть: W2016Server + сервер приложений 8.3.10.2580 + самописный документ, в котором есть строчка

ДокументВорд = ОбъектВорд.Documents.Add(ИмяФайлаПаспортаЗаявки);

Сразу говорю — файл я проверял вот так:

Тест = Новый Файл(«c:temp_pmtest.docx»);

Если Тест.Существует() Тогда

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

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

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

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

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

ДокументВорд = ОбъектВорд.Documents.Add(ИмяФайлаПаспортаЗаявки);

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

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

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

{Документ.дкЗаявкаНаПроект.МодульОбъекта(79)}: Ошибка при вызове метода контекста (Add): Произошла исключительная ситуация (Microsoft Word): Приложению Word не удалось прочитать документ. Возможно, он поврежден.

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

* Откройте файл с помощью команды »Открыть и восстановить».

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

Я уже в отчаянии, целый день мучаюсь.

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

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

   Сергиус

1 — 03.11.17 — 01:24

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

   Сергиус

2 — 03.11.17 — 01:26

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

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

   h-sp

3 — 03.11.17 — 01:34

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

   Dmitriy_ Kolesnikov

4 — 03.11.17 — 06:46

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

(3) и папка эта — не первая, до неё я использовал подкаталог во временной папке (пробовал разные). Разумеется, права доступа — всем на всё.

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

Мне кажется, подвох в Windows 2016.

Другой вариант — в сервере приложений.

Третьего не дано.

   arsik

5 — 03.11.17 — 09:02

(4) Подвох возможно кроется в битности офиса, 1С.

Допустим офис 64x, а 1С 32x и наоборот.

   v77

6 — 03.11.17 — 09:05

нафиг вам этот офис вообще уперся. распаковал, засунул в xml чо хочешь, запаковал и все дела. быстро, дешево и сердито.

   DOSS_S

7 — 03.11.17 — 09:30

Курить «профиль безопасности» в программе «Администрирование серверов 1С Предприятия». По умолчанию использование COM на сервере 1С запрещено. Не советую работать с вордом екселем и тд. на сервере. Зависнет ворд вместе с ним 1с сеанс, что будете делать?

   Сияющий в темноте

8 — 03.11.17 — 09:46

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

а сервер,кстати,обычно 64-битный

   arsik

9 — 03.11.17 — 10:16

(8) Зачем такой изврат, можно просто фоновым заданием, мне кажется.

   Dedal

10 — 03.11.17 — 11:08

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

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

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

   Dmitriy_ Kolesnikov

11 — 03.11.17 — 11:14

(5) изначально офис был 32-битный и была ошибка при создании ком-объекта:

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

Но я вручную создал коннектор (по инструкции), и ошибка исчезла. Более того, как сказано в (0), я снес 32-битный Офис и поставил 64-битный — это ничего не изменило.

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

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

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

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

   v77

12 — 03.11.17 — 11:20

(11) «а ссылку?» я писал про XML и ZIP

   Dedal

13 — 03.11.17 — 11:36

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

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

   Филиал-msk

14 — 03.11.17 — 11:53

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

Кто все эти люди?

   v77

15 — 03.11.17 — 12:03

(14) уголовники

   Dmitriy_ Kolesnikov

16 — 09.11.17 — 17:05

(13) конечно

(14) весьма уважаемые люди. Робин Гуды наших дней.

(15) руководствуясь вашей логикой, уголовниками можно обозвать 99,9% граждан России, пользующихся компьютерами.

   Филиал-msk

17 — 09.11.17 — 17:07

(16) Обиделся, уголовник?

  

Dedal

18 — 09.11.17 — 17:16

(16) показывай что у тебя между:

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

ДокументВорд = ОбъектВорд.Documents.Add(ИмяФайлаПаспортаЗаявки);

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

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/ здесь

В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.

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

Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:

Использование шаблонов Word в 1С

Использование шаблонов Word в 1С

Использование шаблонов Word  в 1С

Использование шаблонов Word в 1С

Далее необходимо в файл шаблона для 1С, добавить текст и пару закладок. Закладка добавляется через меню «Вставка» — «Закладка». Нужно выделить текст закладки, скопировать его, открыть меню «Вставка — Закладка», вставить скопированный текст закладки и нажать «Добавить»:

Установка закладки, шаблон Word для 1С

Установка закладки, шаблон Word для 1С

Когда файл шаблона Word готов, создаем новую внешнею обработку в 1С, добавляем форму и в модуле формы вставляем следующий код:

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ЗаполнитьШаблонВорд();
	
КонецПроцедуры

&НаКлиенте
Функция ЗаполнитьШаблонВорд()

	//Попытка создать COM объект
	Попытка
		ОбъектВорд = Новый COMОбъект("Word.Application"); 
	Исключение
		Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
		Возврат Неопределено;
	КонецПопытки;
	
	//Путь к шаблону
	ОбъектВорд.Documents.Add("C:UsersКонстантинDesktopШаблон.docx");
	ШаблонВорд = ОбъектВорд.ActiveDocument;
	
	//Получаем все закладки из шаблона
	Для каждого ЗакладкаВорд Из ШаблонВорд.Bookmarks Цикл
		Сообщить(ЗакладкаВорд.Name);		
	КонецЦикла;
	
	//Заменяем закладку1 на текст
	ШаблонВорд.Bookmarks("Закладка1").Select();
	ШаблонВорд.Application.Selection.TypeText("Текст для закладки №1.");
	
	//Заменяем закладку2 на текст
	ШаблонВорд.Bookmarks("Закладка2").Select();
	ШаблонВорд.Application.Selection.TypeText("Текст для закладки №2.");
	
	//Заменяем закладку3 на текущую дату
	ШаблонВорд.Bookmarks("Закладка3").Select();
	ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());
	
	ОбъектВорд.Application.Visible = Истина;
	ОбъектВорд.Activate();
	
	//Закрытие документа
	//ОбъектВорд.Application.Quit();
	
КонецФункции

В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат:

Результат использования шаблонов Word в 1С

Результат использования шаблонов Word в 1С

Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.

Скачать файл обработки 1С и шаблона Word.

Дополнение к заметке Использование шаблонов Word в 1С

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

1. А как поменять размер шрифта во вставляемом тексте?
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:

//Заменяем закладку3 на текущую дату
ШаблонВорд.Bookmarks("Закладка3").Select();

ШаблонВорд.Application.Selection.Font.Bold = 1;
ШаблонВорд.Application.Selection.Font.Size = 20;
	
ШаблонВорд.Application.Selection.TypeText(ТекущаяДата());

2. Картинки есть возможность выгружать в шаблон?
Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx, а для 1С код будет следующий:

// Вставка изображения
ШаблонВорд.Bookmarks("Закладка3").Select();
ШаблонВорд.Application.Selection.InlineShapes.AddPicture("C:UsersКонстантинDesktoplogo_1c.png");

3. При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
Может попробовать изменить путь на: «C:Шаблон.docx».

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

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

Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk
Предполагаю, что метод Записать(< ИмяФайла>, < ТипФайлаТаблицы>) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».

5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:

Sub Макрос1()
'
' Макрос1 Макрос
'
'
    Selection.MoveLeft Unit:=wdCharacter, Count:=15, Extend:=wdExtend
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
        "C:UsersКонстантинDesktopТест.txt", SubAddress:="", ScreenTip:="", _
        TextToDisplay:="ТестоваяСсылка"
End Sub

Описание метода добавления в MSDN: https://msdn.microsoft.com/en-us/vba/word-vba/articles/hyperlinks-add-method-word

Соответственно код для 1С следующий:

Функция ЗаполнитьШаблонВорд()

	//Попытка создать COM объект
	Попытка
		ОбъектВорд = Новый COMОбъект("Word.Application"); 
	Исключение
		Сообщить("Ошибка при запуске Microsoft Word: " + ОписаниеОшибки(), СтатусСообщения.Внимание);
		Возврат Неопределено;
	КонецПопытки;
	
	//Путь к шаблону
	ОбъектВорд.Documents.Add("C:Usersk.blaginDesktopШаблон.docx");
	ШаблонВорд = ОбъектВорд.ActiveDocument;
	
	//Получаем все ссылки из шаблона
	Для каждого ЗакладкаВорд Из ШаблонВорд.Hyperlinks Цикл
		Сообщить(ЗакладкаВорд.Name);		
	КонецЦикла;
	
	//Меняем адрес уже существующей ссылки
	ШаблонВорд.Hyperlinks("Logs.zip").Address = "C:Usersk.blaginDesktopMemory.zip";
	
	//Заменяем закладку на ссылку
	ОбъектЗакладка = ШаблонВорд.Bookmarks("Закладка3");
	ШаблонВорд.Hyperlinks.Add(ОбъектЗакладка.Range, "C:Usersk.blaginDesktopШаблон.docx", "", "Шаблон.docx", "C:Usersk.blaginDesktopШаблон.docx");
	
	ОбъектВорд.Application.Visible = Истина;
	ОбъектВорд.Activate();
	
	//Закрытие документа
	//ОбъектВорд.Application.Quit();
	
КонецФункции

Автор bestname, 29 апр 2016, 15:35

0 Пользователей и 2 гостей просматривают эту тему.

Здравствуйте. Формирую word файл. Никак не могу добавить строки из табличной части документа в word. Все получается, только если в ТЧ документа одна строка. Если больше, то получаю ошибку:

{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(3000)}: Ошибка при вызове метода контекста (Cell): Произошла исключительная ситуация (Microsoft Word): Запрашиваемый номер семейства не существует

Я так понимаю, что я обращаюсь к ячейке еще не созданной строки. Но я вроде как ее создаю. Наверное неправильно создаю.


        Договор = ПолучитьМакет("Макет");
MSWord = Договор.Получить();

Попытка
Doc = MSWord.Application.Documents(1);
Doc.Activate();

//Товары
ТекСтрока = ЭлементыФормы.Товары.ТекущаяСтрока;
Для Каждого ТекСтрока Из Товары Цикл

    НомерСтроки = ТекСтрока.НомерСтроки + 1;
    //Добавляем новую строку таблицы
    Doc.Tables(2).Rows.Add();

    Doc.Tables(2).Cell(НомерСтроки, 1).Range.Text = ТекСтрока.НомерСтроки;
    Doc.Tables(2).Cell(НомерСтроки, 2).Range.Text = ТекСтрока.Номенклатура.НаименованиеПолное;
    Doc.Tables(2).Cell(НомерСтроки, 3).Range.Text = ТекСтрока.ЕдиницаИзмерения.Наименование;
    Doc.Tables(2).Cell(НомерСтроки, 4).Range.Text = ТекСтрока.Количество;
    Doc.Tables(2).Cell(НомерСтроки, 5).Range.Text = ТекСтрока.Цена;
    Doc.Tables(2).Cell(НомерСтроки, 6).Range.Text = ТекСтрока.Сумма;
КонецЦикла;

    MSWord.Application.Visible = Истина;
    MSWord.Activate();
Исключение
    Сообщить(ОписаниеОшибки());
    MSWord.Application.Quit();   
КонецПопытки;   

возврат 0;

Что я делаю неправильно?


Doc.Tables(2).Cell(НомерСтроки,)<—- нет такого элемента

Добавлено: 29 апр 2016, 15:50


т.е. по данному номеру строки не может найти элемент

Добавлено: 29 апр 2016, 15:54


по идеи Doc.Tables(2).Rows.Add() должно вернуть вам строку

Помогли — Скажи спасибо! Решил сам — поделись решением!
:)


Короче я понял. Строка добавляется в конце таблицы. А мне нужно с определенного места(со второй строки). Я так понимаю, что в

Doc.Tables(2).Rows.Add(); мне нужно передать параметры?
Пишу
Doc.Tables(2).Rows.Add(2);
{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(2993)}: Ошибка при вызове метода контекста (Add): Произошла исключительная ситуация (Microsoft Word): Неверный параметр

Вот как выглядит макет моей таблицы:

Добавлено: 05 мая 2016, 11:54


Вообщем получилось, строка добавилась после второй строки. Но добавилась, когда я снял объединение ячеек. Вот такая команда:


Doc.Tables(2).Rows(2).Select();
MSWord.Application.Selection.InsertRowsBelow(1);

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

{Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(2994)}: Ошибка при вызове метода контекста (Rows): Произошла исключительная ситуация (Microsoft Word): Отсутствует доступ к отдельным строкам, поскольку таблица имеет ячейки, объединенные по вертикали

Может кто подскажет?


В статье рассмотрены основные методы работы с массивами в 1С

В данной статье рассмотрен пример передачи данных из табличной части документа в параметр.

Для решения этой проблемы достаточно установить пользователя под которым будут выполняться регламентные задания.

Функция пропорционально распределяет сумму на необходимое количество

В тех случаях, когда возникает необходимость отключить авторегистрацию объектов, при записи объекта следует устанавливать дополнительное свойство.

В статье рассмотрено несколько основных алгоритмов удаления строк из табличной части по условию. Каждый из вариантов по своему хорош, вам…

Примеры программного заполнения параметров и отборов для отчетов СКД

Примеры создания простых типов в 1С. Числа, строки ,логические, символы.

Данная функция преобразовывает Фамилию Имя Отчество в Фамилия И.О.

Примеры работы с деревом значений в 1С. Добавление, удаление, перемещение строк, создание копии, сортировка данных и др.

Примеры создания дерева значений, массивов, словарей, списка значений, структуры, таблицы значений

Примеры использования условий отбора в запросе 1С. Отборы по дате, по объектам, по параметрам и др.

Ermak27

4 / 4 / 0

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

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

1

1C 8.x

25.06.2019, 11:26. Показов 9089. Ответов 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



1155 / 702 / 203

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

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

Записей в блоге: 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



1155 / 702 / 203

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

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

Записей в блоге: 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

1155 / 702 / 203

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

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

Записей в блоге: 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



Пример выгрузки информации в ворд из 1С

Процедура КнопкаВыполнитьНажатие(Кнопка)

          // Создание объекта MS Word
     //Попытка
     //    Word = Новый COMОбъект(«Word.Application»);
     //Исключение
     //    Сообщить(ОписаниеОшибки(),»!!!»);
     //    Сообщить(«Возможно, MS Word не установлен на этом компьютере.»);
     //    Возврат;
     //КонецПопытки;

          Handler = Новый Структура(«Тип», «DOC»);

          Попытка
         Word = Новый COMОбъект(«Word.Application»);
     Исключение
         //ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), «Ошибка»,
         //    ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина);
         //НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке());
     КонецПопытки;

          Handler.Вставить(«COMСоединение», Word);
     Попытка
         Word.Documents.Add();
     Исключение
         Word.Quit(0);
         Word = 0;
         Handler.Word = 0;
         //ОбщегоНазначенияКлиент.ДобавитьСообщениеДляЖурналаРегистрации(СобытиеЖурналаРегистрации(), «Ошибка»,
         //    ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()),,Истина);
         //НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке());
     КонецПопытки;

   

     // Установка видимости приложения
     Word.Visible = Истина;
     // Добавление нового документа в приложение
     //Word.Documents.Add();
     // Делаем документ активным
     Документ = Word.ActiveDocument();

          Таб = Документ.Tables.Add(Документ.characters.last, 2, 2);
     Таб.Cell(1, 1).Range.Text = «»;
     Таб.Cell(1, 2).Range.Text =»»;
     Таб.Cell(1, 2).Range.ParagraphFormat.Alignment=2; // право

          Таб.Cell(2, 1).Range.Text = «г. Иркутск, б. Постышева 18Б»;
     Таб.Cell(2, 2).Range.Text = «Отдел по работе с претензиями»;
     Таб.Cell(2, 2).Range.ParagraphFormat.Alignment = 2; // Выравнивание в право

          // Добавим параграф
     Документ.Paragraphs.Add();
     НомерПараграфа = Документ.Paragraphs.Count();
     Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(«Претензия № «);

          Документ.Paragraphs.Add(); // Отступ

          Документ.Paragraphs.Add();
     НомерПараграфа = Документ.Paragraphs.Count();

          ПечТема = «»;
         ПечТема = «Тема: Адресная система распространения»;   

          Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(ПечТема);
     Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта
     Документ.Paragraphs(НомерПараграфа).Range.Font.Bold = -1; // жирный шрифт

          Документ.Paragraphs.Add();
     НомерПараграфа = Документ.Paragraphs.Count();
     Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(«на «);
     Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта
     Документ.Paragraphs(НомерПараграфа).Range.Font.Bold = -1; // жирный шрифт

               Документ.Paragraphs.Add(); // Отступ

          ПечТовар = «» + » (» + «)»;
     ПечНомерИздания = «»;
     ПечЗаказ = «№ » + » от «;

          ПечИсполнитель = «123»;
     ПечТелефон = «123»;

               Документ.Paragraphs.Add();
     НомерПараграфа = Документ.Paragraphs.Count();
     //Документ.Paragraphs(НомерПараграфа).Format.SpaceAfter = 24;
     Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(»    Направляем для проверки запрос о неполучении «);
     Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта
     Документ.Paragraphs(НомерПараграфа).Range.Font.Bold = 0; // обычный шрифт   
     Документ.Paragraphs.Item(НомерПараграфа).Format.Alignment=0; // лево

          Документ.Paragraphs.Add();
     НомерПараграфа = Документ.Paragraphs.Count();
     Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(»    Просим сообщить данные отправительных документов на указанное издание или сообщить причину неполучения посыла.»);
     Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта
     Документ.Paragraphs(НомерПараграфа).Range.Font.Bold = 0; // обычный шрифт   
     Документ.Paragraphs.Item(НомерПараграфа).Format.Alignment=0; // лево

               Документ.Paragraphs.Add(); // Отступ
     Документ.Paragraphs.Add(); // Отступ

          Документ.Paragraphs.Add();
     НомерПараграфа = Документ.Paragraphs.Count();
     Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(«ФИО исполнителя: » + ПечИсполнитель + » _____________ подпись»);
     Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта
     Документ.Paragraphs(НомерПараграфа).Range.Font.Bold = 0; // обычный шрифт   
     Документ.Paragraphs.Item(НомерПараграфа).Format.Alignment=0; // лево

          Документ.Paragraphs.Add();
     НомерПараграфа = Документ.Paragraphs.Count();
     Документ.Paragraphs(НомерПараграфа).Range.InsertAfter(«Контактный телефон: » + ПечТелефон);
     Документ.Paragraphs(НомерПараграфа).Range.Font.Size = 12; // размер шрифта
     Документ.Paragraphs(НомерПараграфа).Range.Font.Bold = 0; // обычный шрифт   
     Документ.Paragraphs.Item(НомерПараграфа).Format.Alignment=0; // лево

          Документ.Paragraphs.Add(); // Отступ

          Word.Activate();

          // Сохранить и закрыть документ
     //Документ.Save();
     //Документ.SaveAs(»c:\Akt.doc»);
     //Word.ActiveDocument.Close();
КонецПроцедуры

Понравилась статья? Поделить с друзьями:
  • 1с excel формат файла не поддерживается
  • 1с excel построитель отчета
  • 1с excel ошибка метода контекст open
  • 1с excel не устанавливая
  • 1с excel методы доступа