|
|
|
Подружить 1С с WORD | ☑ | ||
|---|---|---|---|---|
|
0
etern1ty
18.08.08
✎
12:25
|
Здравствуйте! Необходимо реализовать следующий механизм:
Есть вордовский документ, содержащий текст договора. В нем имеются текстовые данные, которые являются шаблонными, т.е. отформатированы в одном нужном виде и содержащие текст и другую статичную информацию. Также в договоре имеется информация (адреса, суммы и тп), которая моет быть динамической. Так вот нужно чтобы средствами 1С можно было открывать этот документ, редактировать в нем динамическую информацию, и, при закрытии, те данные, которые были изменены, сохранялись в БД 1С. Я знаю, что есть возможность посредством ActiveX манипулировать вордовским документом как объектом в 1С, но можно реализовать только "выдачу" отредактированного документа отдельно в ворде. А вот как сделать чтобы открыть через 1С (причем в режиме Предприятие) этот документ, отредактировать нужные блоки информации, и, при закрытии документа, эта информация обновилась и в бд 1с - не понятно. Можно и не открывать ворда вообще, а использовать его как макет внутри 1С, соответствено с функциямизагрузки и сохранения в БД этих самых документов с возможностью их изменения средствами api ворда, НО в режиме 1С Предприятия. Ткните носом, где почитать, или посоветуйте как и какими средствами проще это реализвать. пс. Предпочтение ворда объясню тем, что очень много людей завязаны в работе именно с ним, и идеологически их трудно переубедить пользоваться другими решениями. Жду мыслей, спасибо. |
|||
|
1
ТелепатБот
гуру
18.08.08
✎
12:25
|
||||
|
2
Fragster
гуру
18.08.08
✎
12:29
|
править в 1с, ибо в нем должно все храниться, по идее... а при выводе - заполнять шаблон вордовский, и печатать, сохранять в файл и т.д.... а описанный метод - сродни удалению гланд через анус
|
|||
|
3
etern1ty
18.08.08
✎
12:32
|
(2) В таком случае возможно реализация без затрагивания возможностей vba?
|
|||
|
4
dk
18.08.08
✎
12:33
|
активх, макет - тема по 8-ке наверно?
|
|||
|
5
big
18.08.08
✎
12:34
|
(3) весь "ВБА" пишется в 1С. Всё весьма просто.
|
|||
|
6
etern1ty
18.08.08
✎
12:35
|
(4) усп, да. вроде выбрал v8. перенесите плз!
|
|||
|
7
big
18.08.08
✎
12:35
|
(4) 7 - это вам не 8! :))
|
|||
|
8
etern1ty
18.08.08
✎
12:37
|
(5) Какие функции нужно использовать? Нужно получать COMОбъект?
|
|||
|
9
Serg_1960
18.08.08
✎
12:56
|
Рисуешь макет с типом Ворда, а в нем текст размещаешь как надо. В нужных местах "ключевые" слова в фразе, например: "...Работник <ФИОработника> обязуется..."
А потом типа так: АктивныйДокумент = ПолучитьМакет(ИмяМакета); Документ = АктивныйДокумент.Получить(); Заменить = Документ.Content.Find; Заменить.Execute("<ФИОработника>", Ложь, Истина, Ложь, , , Истина, , Ложь, СокрЛП(ЭтотОбъект.ФизЛицо)); Документ.Application.Visible = Истина; Документ.Activate(); |
|||
|
10
etern1ty
18.08.08
✎
13:12
|
(9) Спасибо огромное! Сейчас попробую... :)
|
|||
|
11
Serg_1960
18.08.08
✎
13:18
|
(10) + Эй! Эй - не так быстро! Это я пояснил "просто и доступно" :) Вам, вообще-то, доступны все команды Ворда как ком-объекта.
PS: (0) править и хранить документы надо в 1С, а Ворд - только для печати "красивого" документа :) |
|||
|
12
etern1ty
18.08.08
✎
13:34
|
(11) Вот я сейчас в данный момент пробую по Вашему примеру. Посмотрим что выйдет :)
|
|||
|
13
etern1ty
18.08.08
✎
13:40
|
(11) С Вашим примером я разобрался. Действительно простой. А как насчет манипулирования документов "внутри" 1С в режиме предприятие?
|
|||
|
14
etern1ty
18.08.08
✎
13:49
|
Интересует "обратная" связь из ворда в 1с. Такое вообще возможно штатными средствами?
|
|||
|
15
Serg_1960
18.08.08
✎
14:06
|
1С --> Word не проблема, в Ворде все доступно :)по моему я это уже говорил :(
Word --> 1С о_о Это сложнее будет :(( VBA еще Microsoft Office поддерживает... Флаг Вам в руки и барабанные палочки в... PS: А Вы, батенька, извращаться, однако любите :о) Бросьте это неблагодарное занятие!!! А то мы с Вами до Си++ договоримся :((( |
|||
|
16
etern1ty
18.08.08
✎
14:30
|
(5) Есть какой-нибудь пример, типа (9) ?
|
|||
|
17
etern1ty
18.08.08
✎
14:32
|
(15) Ну вот господин из поста (5) говорит что все можно сделать средствами 1С, без вба... )
|
|||
|
18
Serg_1960
18.08.08
✎
14:36
|
(17) Читай внимательно! Ключевые слова в (5) "без ВБА из 1С"
|
|||
|
19
etern1ty
18.08.08
✎
14:39
|
(18) Что-то не наблюдаю в (5) этого словосочетания :)
|
|||
|
20
MistK
18.08.08
✎
14:42
|
(0) смотри в сторону ДобавитьОбработчик. вот пример из СП:
msword = Новый COMОбъект("Word.Application"); ДобавитьОбработчик msword.DocumentChange, ПриИзмененииДокумента; Процедура ПриИзмененииДокумента() Сообщить("Документ изменен"); КонецПроцедуры |
|||
|
21
Serg_1960
18.08.08
✎
14:57
|
Может Вам вот это поможет с правильной ориентацией разобраться:
Windows Script Host (WSH). Коллекция ссылок Книга знаний: v8: Заполнение полей документа Word (шаблон Active Document) Источник информации: Книга Знаний http://www.kb.mista.ru/ |
|||
|
22
etern1ty
18.08.08
✎
15:17
|
(21) Вот! Спасибо за ссылки. Про WHS, в частности работа с ActiveX - там битая ссылка, на самом сайте не смог найти инфу. По поводу книги знаний, хоть там примеры все тогоже 1c->Word, но там подкинули интересную идею насчет переменных ворда (DocVariable). Смогу я прочитать данные этих переменных в 1С? Разумеется через COMОбъект?
|
|||
|
23
etern1ty
18.08.08
✎
15:18
|
(20) Я так понял это пример проверки, изменялся ли документ?
|
|||
|
24
MistK
18.08.08
✎
15:22
|
(23) Да
аналогично вешается обработчик на закрытие документа соответственно получается: открыли документ, юзер чего-то подредактировал, закрыл его. мы этот момент отловили и дальше делаем с документом что хотим подобный пример есть в книге "1С:Предприятие: от 8.0 к 8.1" |
|||
|
25
etern1ty
18.08.08
✎
15:23
|
Хмм, и не понятно как в ворде задавать им значение, имя можно а вот значение..
|
|||
|
26
vde69
18.08.08
✎
15:27
|
В ворде вставляешь переменную
Вставка->Поле далее выбираешь тип "DOCVARIABLE" и указываешь имя, далее из 1с ты можешь напрямую обращаться к этой пременной, и читать и писать |
|||
|
27
etern1ty
18.08.08
✎
15:29
|
Я к тому чтобы отказаться от парсинга документа (чтобы прочитать динамические данные и записать их в бд 1с, на случай если они были изменены). Т.е. если будет возможность читать с помощью COMОбъекта значения этих самых DocVariables, и самому юзеру можно будет вписывать в них значения) - этого будет вполне достаточно. Дальше разберусь сам думаю...
(23) Хорошая идея. Спасибо |
|||
|
28
etern1ty
18.08.08
✎
15:29
|
(26) Вот! То что мне надо знать!! А визуально в ворде эта переменная никак не отображается как я понял, Даже никакими элементами форматирования... Это действительно так? Спасибо за помощь..
|
|||
|
29
etern1ty
18.08.08
✎
15:48
|
(26) Подскажи пожалуйста пример записи и чтения в такую переменную (DocVariable). Что-то я не нашёл...
|
|||
|
30
vde69
18.08.08
✎
15:52
|
янедекс у нас запрещен?
с itlend взято Попытка Word = СоздатьОбъект("Word.Application"); Word.Documents.Add(ФайлШаблона); Word.Visible = 1; Doc = Word.ActiveDocument; Исключение Сообщить(ОписаниеОшибки(),"!!!"); Word.Quit(); Возврат; КонецПопытки; Для сч=1 По Doc.Variables.Count Цикл Имя = Doc.Variables(сч).Name; Значение = СписокПеременных.Получить(Имя); Если ПустоеЗначение(Значение)=1 Тогда Сообщить("Внимание! Значение переменной "+Имя+" не найдено!", "!"); Иначе Doc.Variables(сч).Value = Строка(Значение); КонецЕсли; КонецЦикла; Doc.Fields.Update(); Doc.Fields.UnLink(); |
|||
|
31
etern1ty
18.08.08
✎
17:19
|
(30) Спасибо! Попробую...
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |