![]() |
![]() |
![]() |
|
Как в Word открыть окно вопроса? | ☑ | ||
---|---|---|---|---|
0
253670489
14.10.09
✎
10:04
|
Можно ли в Ворде открыть окно вопроса?
Есть начало, а что дальше? MsOffice = Новый COMОбъект("Word.Application"); MsOffice.Documents.Open(ПолныйПуть); MsOffice.Visible = Истина; ДобавитьОбработчик MsOffice.DocumentBeforeSave, ОбработкаСобытияДокумента; Процедура ОбработкаСобытияДокумента(Doc, SaveAsUI, Cancel) Сообщить("Документ Сохранен"); //Что здесь должно быть, чтоб открыть окно вопроса? КонецПроцедуры // ПриСохраненииДокумента() В Visual Basic вопрос задается так MsgBox(prompt[, buttons] [, title] [, helpfile, context]) а как это вызвать в 1С? |
|||
1
Stim
14.10.09
✎
10:06
|
попробуй через помощника
|
|||
2
253670489
14.10.09
✎
10:40
|
(1) Не совсем понял, какого помощника? Если имеется ввиду синтакс-помощник, то там ничего нет!
|
|||
3
НЕА123
14.10.09
✎
10:56
|
(2)
Вопрос() |
|||
4
253670489
14.10.09
✎
11:14
|
(3) Вопрос() это вызывается окно вопроса в 1С:Преприятие, а мне нужно открыть окно вопроса в Вореде.
|
|||
5
also
14.10.09
✎
11:19
|
(4) Ну и попробуй в VB задать через Execute
|
|||
6
253670489
14.10.09
✎
11:26
|
(5) а можно немного поподробнее как это сделать?
|
|||
7
Stim
14.10.09
✎
11:28
|
(2)нет. Через помощника в Ворде, агента в 1С. В ворде это скрепка, например
|
|||
8
Stim
14.10.09
✎
11:29
|
+7 агент выскакивает поверх всех окон и управление идет через 1С. Правда, это не совсем подходит для деловой документации:)
|
|||
9
План счетов
14.10.09
✎
11:29
|
||||
10
План счетов
14.10.09
✎
11:33
|
И еще можно почитать: Из обработки 1С в Excel файл добавить макрос
|
|||
11
smaharbA
14.10.09
✎
11:34
|
Зачем ?(с)
|
|||
12
253670489
14.10.09
✎
11:44
|
(7) справка по Ворду мне также не помогла.
|
|||
13
Stim
14.10.09
✎
11:50
|
||||
14
smaharbA
14.10.09
✎
12:00
|
(12) что хотел то - точно можешь сказать, что за вопрос ?
|
|||
15
253670489
14.10.09
✎
12:02
|
(13) ясно, но помощник был в MSOffice только до 2000 верси, в 2007 его уже нет. А пользователь всегда может использовать новейшие версии.
(11), (14) мне при сохранении документа Word, который был открыт, нужно задать вопрос, и при его ответе сделать соответствующие действия в 1С. |
|||
16
253670489
14.10.09
✎
12:04
|
(9, 10) При создании макроса и его выполнении непосредственно в Ворде я в 1С не получу результата, который вернулся при ответе пользователя на вопрос.
|
|||
17
План счетов
14.10.09
✎
12:53
|
(16) дак ты из ворда запускай 1С по ОЛЕ и отправляй туда параметры.
|
|||
18
253670489
14.10.09
✎
13:21
|
(17) Пожалуйста не подскажите как это сделать? Как именно передать параметр и как его значение потом получить после выполнения макроса?
|
|||
19
253670489
14.10.09
✎
13:24
|
(17) я из 1С запускаю Ворд, и по Вашей ссылке создаю в нем макрос, но как получить результат выполнения макроса не знаю!
|
|||
20
Stim
14.10.09
✎
14:06
|
ну что, разобралсо?
|
|||
21
253670489
14.10.09
✎
14:17
|
(20) пока нет!
|
|||
22
План счетов
14.10.09
✎
14:24
|
(19) когда запускаешь ворд - он и работает сам по себе. Пропиши в макросах параметры базы из которой ты запустил ворд. Пользователь в ворде сделает необходимые действия и ворд запустит 1С и передаст туда что тебе надо - например внесет изменения в константе. а как из ворда передать параметр в 1С - я не делал но думаю не особо сложно: 1S = CreateObject("V77.Application") и т.д.
|
|||
23
Stim
14.10.09
✎
14:26
|
(22)ага.. но только в ворде нет процедры ПриЗакрытии() :)
|
|||
24
План счетов
14.10.09
✎
14:31
|
(23) как нету?
а Private Sub Document_Close() End Sub |
|||
25
План счетов
14.10.09
✎
14:43
|
Надо делать так.
Из 1С делаешь файл ворда с нужными данными и макросами. сохраняешь его и потом открываешь из 1С так ЗапуститьПриложение(<?>); RunApp(<?>); <romix> Пример: ЗапуститьПриложение("calc.exe"); //Запускает калькулятор Замечание: Если необходимо дождаться завершения программы и получить ее код возврата (что требуется, например, при запуске внешних архиваторов) лучше использовать метод run системного объекта WScript.Shell. Пример: Функция ЗапуститьПриложениеОжидая(cmdLine) WshShell = CreateObject("WScript.Shell"); Возврат WshShell.Run(cmdLine, 1, -1); КонецФункции </romix> это для 7-ки, для 8-ки думаю тоже такое есть. |
|||
26
253670489
14.10.09
✎
14:56
|
(25) Понятно спасибо, Но мне нужно было открыть Ворд, и вылавливать у него событие перед сохранением (DocumentBeforeSave), что я и делаю. Перед сохранением Ворда у меня в 1С вызывается процедура ОбработкаСобытияДокумента, где я должен был спросить пользователя что он дальше хочет делать (но вопрос должен задаваться не в программе 1С, а в Ворде) и дальше выполнить необходимые действия в Базе 1С. я думал что это будет примерно так:
Процедура ОбработкаСобытияДокумента(Doc, SaveAsUI, Cancel) ОтветНаВопрос = Doc.MsgBox("Ответьте на вопрос!", 4); Если ОтветНаВопрос = 6 Тогда Сообщить("На вопрос в Ворде был ответ ДА"); Иначе Сообщить("На вопрос в Ворде был ответ НЕТ"); КонецЕсли КонецПроцедуры // ПриСохраненииДокумента() Но оказалось не все так просто как я думал, и из ворда запускать заново приложение 1С у меня нет возможности (не известно какие параметры будут у 1С); |
|||
27
smaharbA
14.10.09
✎
15:03
|
(26) все гораздо просче
и от макроса в 1С ответ легко получается, но можно и без макроса |
|||
28
План счетов
14.10.09
✎
15:05
|
(27) продолжайте
|
|||
29
253670489
14.10.09
✎
15:05
|
(27) Очень интересно
|
|||
30
smaharbA
14.10.09
✎
15:30
|
В модуль дока ворд
В класс
Вот и отлавливай эту вариаблу |
|||
31
253670489
14.10.09
✎
15:55
|
(30) А как такой макрос вставить в ворд? И как их разделить одну часть в модуль документа Вор, а вторую в класс(я не понял что такое класс).Так не получается?
MsOffice = Новый COMОбъект("Word.Application"); MsOffice.Documents.Open(ПолныйПуть); MsOffice.Visible = Истина; i = MsOffice.VBE.ActiveVBProject.VBComponents.Count(); MsOffice.VBE.ActiveVBProject.VBComponents.Add (1); MsOffice.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (1, "Public WithEvents App As Word.Application"); MsOffice.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (2, "Private Sub App_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)"); MsOffice.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (3, "Dim intResponse As Integer"); MsOffice.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (4, "intResponse = MsgBox(""Do you really want to "", 4)"); MsOffice.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (5, "Doc.Variables.Add ""Test"", intResponse"); MsOffice.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (6, "Doc.Variables.Item(""Test"").Value = intResponse"); MsOffice.VBE.ActiveVBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (7, "End Sub"); И как на счет второго варианта? Без макросов? |
|||
32
253670489
14.10.09
✎
15:58
|
Хотелось бы конечно без макросов, а то пользователю придется включить исполнение макросов и ставить галочку "Доверять доступ к обектной модели проектов VBA". Что не каждый пользователь сделает!
|
|||
33
smaharbA
14.10.09
✎
18:18
|
С макросами примерно так
|
|||
34
253670489
15.10.09
✎
10:20
|
С использованием макроса я разобрался у меня получилось так:
Процедура ОткрытьФайлДокумента(ПолныйПуть) MsOffice = Новый COMОбъект("Word.Application"); MsOffice.Documents.Open(ПолныйПуть); MsOffice.Visible = Истина; ДобавитьОбработчик MsOffice.DocumentBeforeSave, ОбработкаСобытияДокумента; КонецПроцедуры Процедура ОбработкаСобытияДокумента(Doc, SaveAsUI, Cancel) Сообщить("Документ Сохранен"); i = Doc.VBProject.VBComponents.Count(); Doc.VBProject.VBComponents.Add (1); Doc.VBProject.VBComponents.Item(i + 1).CodeModule.InsertLines (1, "Sub Golif() | Dim intResponse As Integer | intResponse = MsgBox(""Do you really want to "", 4) | If ThisDocument.Variables.Count() = 0 Then | ThisDocument.Variables.Add ""Test"", intResponse | End If | ThisDocument.Variables.Item(""Test"").Value = intResponse | End Sub"); Doc.Application.Run("Golif"); Если НЕ Doc.Variables.Count() = 0 Тогда Если Doc.Variables.Item("Test").Value = "6" Тогда Сообщить("Ответили ДА"); Иначе Сообщить("Ответили НЕТ"); КонецЕсли; Иначе Сообщить("Вопроса не было!"); КонецЕсли; КонецПроцедуры // ПриСохраненииДокумента() Вот так вроде работает, но нужно еще удалять созданный макрос (иначе при закрытии Ворда предлагается сохранить его в формате dotm, а этого не надо). И вообще нужно переделывать чтоб не использовались макросы (если это вообще возможно!). А то пользователи не знают и не хотят включать возможность исполнения макросов и ставить галочку "Доверять доступ к обектной модели проектов VBA". |
|||
35
smaharbA
15.10.09
✎
10:49
|
(34) тогда можно и вариаблы не пользовать
|
|||
36
253670489
15.10.09
✎
11:56
|
(35) Это тоже хорошо, но все равно это будет роботать если только у пользователя стоит разрешение на исполнение макросов. А нужно без этого!
Но все равно огромное спасибо! |
|||
37
Parti
15.10.09
✎
12:04
|
когда это сделаешь, добавляй статью в КЗ
|
|||
38
253670489
15.10.09
✎
12:10
|
(37) Обязательно
|
|||
39
План счетов
15.10.09
✎
13:12
|
Может получится пописать макрос или сделать его внешним:
Можно ли запускать Excel с включенными макросами? |
|||
40
План счетов
15.10.09
✎
13:18
|
пописать = подписать
|
|||
41
smaharbA
15.10.09
✎
14:44
|
Вообще то можно и без подписания
а вариант без макросов до тупости прост :)
|
|||
42
253670489
15.10.09
✎
15:23
|
(41) ВСЁ РАБОТАЕТ!!!!
Спасибо smaharbA. Действительно все просто! Чувство было, что должно быть не так всё сложно, но незнание не дало найти рациональное решение! Всем спасибо за помощь! |
|||
43
253670489
09.11.09
✎
09:42
|
А что-нибудь бодобное WordBasic для Excel есть?
|
|||
44
ДенисЧ
09.11.09
✎
09:43
|
(43) Есть. VBA
|
|||
45
253670489
09.11.09
✎
09:46
|
(44) как я уже говорил VBA не подойдет, т.к. пользователю придется включить исполнение макросов и ставить галочку "Доверять доступ к обектной модели проектов VBA". Что не каждый пользователь сделает!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |