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(ИмяФайлаПаспортаЗаявки);
При выполнении кода
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С
Далее необходимо в файл шаблона для 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(); КонецФункции
Автор 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С
Для решения этой проблемы достаточно установить пользователя под которым будут выполняться регламентные задания.
1С
Функция пропорционально распределяет сумму на необходимое количество
1С
В тех случаях, когда возникает необходимость отключить авторегистрацию объектов, при записи объекта следует устанавливать дополнительное свойство.
1С
В статье рассмотрено несколько основных алгоритмов удаления строк из табличной части по условию. Каждый из вариантов по своему хорош, вам…
1С
Примеры программного заполнения параметров и отборов для отчетов СКД
1С
Примеры создания простых типов в 1С. Числа, строки ,логические, символы.
1С
Данная функция преобразовывает Фамилию Имя Отчество в Фамилия И.О.
1С
Примеры работы с деревом значений в 1С. Добавление, удаление, перемещение строк, создание копии, сортировка данных и др.
1С
Примеры создания дерева значений, массивов, словарей, списка значений, структуры, таблицы значений
1С
Примеры использования условий отбора в запросе 1С. Отборы по дате, по объектам, по параметрам и др.
Ermak27 4 / 4 / 0 Регистрация: 16.01.2013 Сообщений: 1,228 |
||||
1 |
||||
1C 8.x 25.06.2019, 11:26. Показов 9089. Ответов 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 |
1155 / 702 / 203 Регистрация: 22.04.2013 Сообщений: 5,215 Записей в блоге: 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 |
1155 / 702 / 203 Регистрация: 22.04.2013 Сообщений: 5,215 Записей в блоге: 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 1155 / 702 / 203 Регистрация: 22.04.2013 Сообщений: 5,215 Записей в блоге: 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 |
Пример выгрузки информации в ворд из 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();
КонецПроцедуры