Имя: Пароль:
1C
 
Подружить 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) Спасибо! Попробую...
2 + 2 = 3.9999999999999999999999999999999...