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]
Достаточно спорное утверждение. Я бы больше доверял оригинальному дистрибутиву, чем какой-то сборке, из которой вполне могли повыкидывать «ненужные» вещи.
3 — 03.11.17 — 01:34
(0) попробуйте другую папку. c:temp_pm — очень сомнительное место, вряд ли там откроет файл ворд.
4 — 03.11.17 — 06:46
(1) конечно, открывает и отображает 🙂 Я же не первый день замужем. И даже ЗапуститьПриложение(ИмяФайла), я уверен, будет работать.
(3) и папка эта — не первая, до неё я использовал подкаталог во временной папке (пробовал разные). Разумеется, права доступа — всем на всё.
Ещё раз повторю, что на локальном компьютере с W7 при такой же структуре папок и том же дистрибутиве Офиса (только без сервера приложений) всё работает.
Мне кажется, подвох в Windows 2016.
Другой вариант — в сервере приложений.
Третьего не дано.
5 — 03.11.17 — 09:02
(4) Подвох возможно кроется в битности офиса, 1С.
Допустим офис 64x, а 1С 32x и наоборот.
6 — 03.11.17 — 09:05
нафиг вам этот офис вообще уперся. распаковал, засунул в xml чо хочешь, запаковал и все дела. быстро, дешево и сердито.
7 — 03.11.17 — 09:30
Курить «профиль безопасности» в программе «Администрирование серверов 1С Предприятия». По умолчанию использование COM на сервере 1С запрещено. Не советую работать с вордом екселем и тд. на сервере. Зависнет ворд вместе с ним 1с сеанс, что будете делать?
8 — 03.11.17 — 09:46
попробуйте написать сценарий и из него управлять вордлм,а уже этот сценарий запустите из 1ц,если что-то пойдет не так можно убить сценарий и ворд из самой 1с
а сервер,кстати,обычно 64-битный
9 — 03.11.17 — 10:16
(8) Зачем такой изврат, можно просто фоновым заданием, мне кажется.
10 — 03.11.17 — 11:08
(4) Подвохов там масса. Начиная от того под кем выполняется. Если ушло на сервер значит выполняется под серверным userV8 значит у него должен быть доступ к dcom объекту. Лезешь в dcom офиса и выдаешь ему там все права.
Но лучше сделать по другому. docx это упакованные в zip xml. на просторах интернета есть уже готовый код. Также реализацию и можно посмотреть в 1С Договорчики.
Фактически docx распаковывается, в нужном xml правится, пакуется обратно. Сам понимаешь никаких проблем с COM и офис не нужен.
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 — это интересно, но на будущее. Я уже написал код, который быстро работает на файловой базе. Теперь задача — заставить его выполняться на сервере.
12 — 03.11.17 — 11:20
(11) «а ссылку?» я писал про XML и ZIP
13 — 03.11.17 — 11:36
(11) В самом объекте dcom дал права?
Администрирование ? Службы компонентов ? *** ? Настройка DCOM ? Документ Microsoft Word 97–2003 ? безопасность.
14 — 03.11.17 — 11:53
(0) Сборки Офиса 2013 — от Кролика, с самыми последними обновлениями, сами понимаете, это бренд
Кто все эти люди?
15 — 03.11.17 — 12:03
(14) уголовники
16 — 09.11.17 — 17:05
(13) конечно
(14) весьма уважаемые люди. Робин Гуды наших дней.
(15) руководствуясь вашей логикой, уголовниками можно обозвать 99,9% граждан России, пользующихся компьютерами.
17 — 09.11.17 — 17:07
(16) Обиделся, уголовник?
Dedal
18 — 09.11.17 — 17:16
(16) показывай что у тебя между:
ОбъектВорд = Новый COMОбъект(«Word.Application»);
ДокументВорд = ОбъектВорд.Documents.Add(ИмяФайлаПаспортаЗаявки);
В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.
В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.
Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:

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

Использование шаблонов Word в 1С
Далее необходимо в файл шаблона для 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С
Информацию по методам 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();
КонецФункции
Пример выгрузки информации в ворд из 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();
КонецПроцедуры
Автор bestname, 29 апр 2016, 15:35
0 Пользователей и 1 гость просматривают эту тему.
Здравствуйте. Формирую 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): Отсутствует доступ к отдельным строкам, поскольку таблица имеет ячейки, объединенные по вертикали
Может кто подскажет?
|
0 — 18.04.2017 — 10:49 |
Сетевая Торговля 7.7 Обработка, которая заполняет файл шаблон Word выдает сообщение. Док=NewDoc.Add(сокрЛП(ИмяДокСПутем)); Microsoft Word: Приложению Word не удалось открыть документ, так как пользователь не обладает достаточными правами. Эта ошибка не зависит от прав пользователя в 1С, а только от компьютера. На компьютере главбуха ошибки нет, независимо от того под кем входишь в 1С. На остальных компьютерах ошибка.
|
|
|
1 — 18.04.2017 — 11:07 |
Так, может быть, ворды разные?
|
|
|
3 — 18.04.2017 — 11:26 |
(1)+
|
|
|
4 — 18.04.2017 — 12:16 |
Word случаем не 64 бита «у НЕ ГЛАВБУХА»?
|
|
|
5 — 18.04.2017 — 13:37 |
(3) об рассказал сам ТС… Только он, похоже, напрочь забанен в гугле. Ибо если фразу из сообщения ТС задать гуглю, то получаем четкую причину невозможности открытия документа
|
|
|
6 — 14.06.2017 — 12:12 |
Уточнение к вопросу.
|
|
|
7 — 14.06.2017 — 15:07 |
Цитата:
Сообщение от narv Как сделать так, чтобы пользователи не имеющие прав администратора в Windows могли заполнять файл шаблон Word с помощью 1С обработки Сохранить шаблон в той папке, где у пользователя есть все нужные права.
|
|
|
8 — 14.06.2017 — 17:12 |
Шаблоны лежат папке с базой 1С на которую у всех полные права. Файлы Word прекрасно открываются в ручном режиме. Проблема именно при открытии обработкой 1С:
|
|
|
9 — 16.06.2017 — 10:11 |
права на 1С каталог и на темпы полные поставь
|
|
Ermak27 4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
||||
|
1 |
||||
|
1C 8.x 25.06.2019, 11:26. Показов 8308. Ответов 17 Метки нет (Все метки)
Добрый день!
__________________
0 |
|
198 / 158 / 45 Регистрация: 23.08.2014 Сообщений: 807 |
|
|
25.06.2019, 12:42 |
2 |
|
Процедура клиент, сервер ?
0 |
|
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
|
25.06.2019, 14:39 [ТС] |
3 |
|
1. Процедура сервер
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 |
|||
|
Модуле формы. Процедура срабатывает при нажатии кнопки
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 |
|
У меня вообщем ничего не стоит перед процедурой. Нет &НаСервере и &НаКлиенте. ну не стоит и не стоит. где процедура выполняется, когда не стоит? в воздухе? вряд ли.
0 |
|
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
|
26.06.2019, 08:40 [ТС] |
12 |
|
dggrom, выдаёт ошибку Поле объекта не обнаружено (Documents) Добавлено через 2 минуты
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 |
|
по мне так проблема в этом: запутал с какой-то целью. поэтому и нет там сейвас, что применяется не к тому к чему надо. чехарда. имена переменных закончились?
0 |
|
4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
|
|
26.06.2019, 13:51 [ТС] |
16 |
|
Yulunga, я закомментировал Word=Докум;, теперь выдаёт ошибку Метод объекта не обнаружен (Range)
0 |
|
Yulunga 1117 / 671 / 195 Регистрация: 22.04.2013 Сообщений: 5,072 Записей в блоге: 1 |
||||
|
26.06.2019, 17:47 |
17 |
|||
ну вот чем не код для рыбы. сейвас должен быть для активного документа
0 |
|
Ermak27 4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
||||
|
27.06.2019, 11:22 [ТС] |
18 |
|||
|
Yulunga, как мне мой код поправить? Код который в самом начале, он так и выводит как надо, но встала задача сохранить эти вордовские документы по индексу, вот тут проблема и появилась у меня. Вчера я переделал немного код
Можете подсказать как мне сделать чтобы два значения выводила. Миниатюры
0 |
Оглавление (нажмите, чтобы раскрыть)
Вставка таблицы в документ Word
Пример вставки таблицы в Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //создаем новый документ Doc = Word.Documents.Add(); //определяем место вставки Range = Doc.Range(0); //создаем таблицу 2х2 Table = Doc.Tables.Add(Range, 2, 2); Table.Style = "Сетка таблицы"; //определяем ширину столбцов Table.columns(1).Width = 20; Table.columns(2).Width = 50; //заполняем первую строку Table.Cell(1, 1).Select(); Word.Selection.Font.Bold = Истина; Word.Selection.TypeText("1"); Table.Cell(1, 2).Select(); Word.Selection.TypeText("Один"); //заполняем вторую строку Table.Cell(2, 1).Select(); Word.Selection.Font.Bold = Истина; Word.Selection.TypeText("2"); Table.Cell(2, 2).Select(); Word.Selection.TypeText("Два"); //показываем документ на экране Word.Visible = Истина;
Вставка текста в документ Word
Пример вставки текста в документ Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //добавляем пустой документ Doc = Word.Documents.Add(); //добавляем 10 параграфов Для Н = 1 По 10 Цикл Par = Doc.Paragraphs.Add(); Par.Range.InsertBefore("Параграф №" + Н); КонецЦикла; //вставляем текст в начало докуменета Range = Doc.Range(0); Range.InsertBefore("Начало!" + Символы.ПС); //вставляем текст после 16-го символа Range = Doc.Range(16, 16); Range.InsertAfter("[Вставка]"); //показываем документ на экране Word.Visible = Истина;
Выделение текста
Пример выделения текста в документе Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //создаем новый документ Doc = Word.Documents.Add(); //добавляем параграф Par = Doc.Paragraphs.Add(); Par.Range.InsertBefore("Выделяемый текст"); //выделяем первое слово Doc.Range(0, 10).Select(); //копируем выделение в буфер обмена Word.Selection.Copy(); //меняем размер шрифта и т.д. Word.Selection.Font.Size = 16; //показываем документ на экране Word.Visible = Истина;
Выравнивание текста
Пример выравнивания текста в документе Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //создаем новый документ Doc = Word.Documents.Add(); //добавляем параграф Par = Doc.Paragraphs.Add(); Par.Range.InsertBefore("Заголовок"); Par = Doc.Paragraphs.Add(); Par.Range.InsertBefore("Выравниваем этот текст"); //0 - по левому краю //1 - по центру //2 - по правому краю //3 - по ширине //текущей параграф по центру Par.Alignment = 1; //заголовок по правому краю Doc.Paragraphs(1).Alignment = 2; //показываем документ на экране Word.Visible = Истина;
Замена текста в документе Word
Пример замены текста в документе Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //создаем новый документ Doc = Word.Documents.Add(); //добавляем параграф Par = Doc.Paragraphs.Add(); Par.Range.InsertBefore("Сбербанк ИНН/КПП: [ИНН]/[КПП]"); //заменяем ИНН Word.Selection.Find.Text = "[ИНН]"; Word.Selection.Find.Replacement.Text = "7707083893"; Word.Selection.Find.Execute(, , , , , , , , , , 2); //заменяем КПП Word.Selection.Find.Text = "[КПП]"; Word.Selection.Find.Replacement.Text = "773601001"; Word.Selection.Find.Execute(, , , , , , , , , , 2); //показываем документ на экране Word.Visible = Истина;
Открытие документа Word
Пример открытия документа Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //открываем документ C:tmp1.docx Word.Documents.Add("C:tmp1.docx"); //показываем документ на экране Word.Visible = Истина;
Преобразование в таблицу
Пример преобразования документа Word в таблицу из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //создаем новый документ Doc = Word.Documents.Add(); //добавляем параграф Par = Doc.Paragraphs.Add(); Par.Range.InsertBefore("Таблица умножения:"); //формируем строку с разделителями Сторока = ""; Для Н1 = 1 По 9 Цикл Для Н2 = 1 По 9 Цикл Сторока = Сторока + Н1 * Н2 + ?( Н2 = 9, "", Символы.Таб); КонецЦикла; Сторока = Сторока + Символы.ПС; КонецЦикла; Par.Range.InsertAfter(Сторока); //переходим на строчку вниз Word.Selection.MoveDown(5, 1, 0); //выделяем таблицу Word.Selection.MoveDown(5, 9, 1); //конвертируем текст в таблицу Word.Selection.ConvertToTable(1, 9, 9, 0); Word.Selection.Tables(1).Style = "Сетка таблицы"; //показываем документ на экране Word.Visible = Истина;
Создание документа Word
Пример создания документа Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //создаем новый документ Doc = Word.Documents.Add(); //показываем документ на экране Word.Visible = Истина;
Сохранение документа
Пример сохранения документа Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //создаем новый документ Doc = Word.Documents.Add(); //добавляем параграф Par = Doc.Paragraphs.Add(); Par.Range.InsertBefore("Сохраняемый текст"); //сохраняем документ в файл Doc.SaveAs("C:tmp2.docx"); //закрываем документ Doc.Close(); Word.Quit();
Удаление текста из документа Word
Пример удаления текста из документа Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //создаем новый документ Doc = Word.Documents.Add(); //добавляем параграф Par = Doc.Paragraphs.Add(); Par.Range.InsertBefore("Некоторый текст"); //удаляем слово некоторый и пробел Range = Doc.Range(0, 10); Range.Text = ""; //показываем документ на экране Word.Visible = Истина;
Форматирование текста в документе Word
Пример форматирования текста в документе Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //создаем новый документ Doc = Word.Documents.Add(); //добавляем параграф Par = Doc.Paragraphs.Add(); Par.Range.InsertBefore("Форматируем этот текст"); //меняем размер шрифта Par.Range.Font.Size = 15; //меняем название шрифта Par.Range.Font.Name = "Verdana"; //выбираем слово "этот" Range = Doc.Range(12, 16); //меняем шрифт на ширный Range.Font.Bold = Истина; //курсив Range.Font.Italic = Истина; //подчеркнутый Range.Font.Underline = Истина; //красный Range.Font.Color = 13311; //показываем документ на экране Word.Visible = Истина;
Чтение текста документа Word
Пример чтения текста из документа Word из 1С
//создаем объект для работы с Word Word = Новый COMОбъект("Word.Application"); //открываем документ C:tmp1.docx Doc = Word.Documents.Open("C:tmp1.docx"); //читаем весь текст документа Text = doc.Content.Text; Сообщить(Text); //читаем с 6-го по 10-й символ From = 6; To = 10; Range = Doc.Range(From, To); Text = Range.Text; Сообщить(Text); //закрыть документ Doc.Close(); Word.Quit();
Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.
2017-12-19T18:36:38+00:00<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Скачать шаблон bill.dotx, который используется в примерах ниже.
Как создавать такие шаблоны самому.
Оглавление (нажмите, чтобы раскрыть)
/// Как создать документ Word на основе шаблона из 1с 8.3, 8.2 &НаКлиенте Функция КакСоздатьДокументWordНаОсновеШаблона(ПутьКШаблону) // В шаблоне уже расставлены поля с определенными // именами, например, org_name, inn, kpp и т.д. // Наша задача - заполнить эти поля и сохранить // этот шаблон в виде вордовкского файла с // расширением docx; // Сам шаблон мы создали по инструкции отсюда: // helpme1s.ru/kak-sozdavat-shablony-word-dlya-ispolzovaniya-v-1s // Или взяли готовым отсюда: // helpme1s.ru/files/ref/bill.dotx ПриложениеВорд = Новый COMОбъект("Word.Application"); ОбъектШаблон = ПриложениеВорд.Documents.Add(ПутьКШаблону); Для Каждого Поле Из ОбъектШаблон.Fields Цикл ПолноеИмяПоля = Поле.Code.Text; // Наши предопределенные поля имеют такой // вид: " MERGEFIELD org_name * MERGEFORMAT". // Наша задача - вытащить из этой конструкции org_name // (ну или другое имя, которое мы задали в ворде). Если (Найти(ПолноеИмяПоля, " MERGEFIELD") = 1) Тогда ПозицияСлеша = Найти(ПолноеИмяПоля, "*"); КороткоеИмяПоля = СокрЛП(Сред(ПолноеИмяПоля, 12, ПозицияСлеша - 12)); ЗначениеПоля = ""; Если КороткоеИмяПоля = "id" Тогда ЗначениеПоля = "1"; ИначеЕсли КороткоеИмяПоля = "bill_date" Тогда ЗначениеПоля = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy"); ИначеЕсли КороткоеИмяПоля = "org_name" Тогда ЗначениеПоля = "ООО ""Ромашка"""; ИначеЕсли КороткоеИмяПоля = "inn" Тогда ЗначениеПоля = "1234567890"; ИначеЕсли КороткоеИмяПоля = "kpp" Тогда ЗначениеПоля = "123456789"; Иначе // ... и так все нужные поля КонецЕсли; Если ЗначениеПоля <> "" Тогда Поле.Select(); ОбъектШаблон.Application.Selection.TypeText(ЗначениеПоля); КонецЕсли; КонецЕсли; КонецЦикла; // Запишем файл в папку "Мои документы" пользователя ФайлДляЗаписи = КаталогДокументов() + "helpme1c_ru_word_test.docx"; // Если такой файл уже существует - удалим его. УдалитьФайлы(ФайлДляЗаписи); // Сохраняем шаблон как документ Word с расширением docx. ОбъектШаблон.SaveAs(ФайлДляЗаписи); // Не забываем закрыть приложение Word. ОбъектШаблон.Application.Quit(); Возврат ФайлДляЗаписи; КонецФункции /// Скачать и выполнить эти примеры на компьютере
Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)
Скачать шаблон bill.dotx, который используется в примерах ниже.
Как создавать такие шаблоны самому.
Работа с Word в языке 1С 8.3, 8.2 (в примерах)
<<< XML ZIP WORD DBF HTTP FTP ТекстовыйДокумент ТабличныйДокумент
С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

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