|
|
COM объект MS Word (отловить закрытие окна) |
☑ |
|
0
CodeNull
11.05.12
✎
08:13
|
Приветствую участников форума.
Пытаюсь решить такую задачу: есть некий dot шаблон который процентов на 70 заполняется данными в 1С (использую COM объект MS Word), когда документ по шаблону сформирован то он передается пользователю для дальнейшего редактирования,т.е. открывается окно Word.
Могу ли я как-то отловить момент когда пользователь закроет окно Word? Чтобы получить отредактированный документ и автоматически сохранить его в системе 1С?
|
|
|
1
ЧеловекДуши
11.05.12
✎
08:17
|
Зачем?
Не заморачивайся, делай как есть.
Если пользователь закрыл, то это уже его проблема :)
|
|
|
2
ЧеловекДуши
11.05.12
✎
08:18
|
+ Рекомендуется вообще то окно всегда открывать.
|
|
|
3
ЧеловекДуши
11.05.12
✎
08:19
|
+ К тому же ты используешь шаблон, т.е. по большей части все должно заполняться быстренько :)
|
|
|
4
Wobland
11.05.12
✎
08:21
|
(1) чтобы сохранить в базе. пускай юзер свои данные вводит в 1С, а вордовский файл потом сформируешь, не?
|
|
|
5
CodeNull
11.05.12
✎
08:29
|
К сожалению, пока нет возможности полностью автоматически заполнять документ. Но требуется сохранять его после завершения правок пользователем.
Да,можно заставить пользователя вручную прикреплять документы в 1С,НО требование заказчика - чтобы данная операция совершалась автоматически.
Теперь сижу,ломаю голову.
Насколько я понимаю, через COM-объект отследить когда пользователь закроет окно или сохранит файл - невозможно?
|
|
|
6
aleks-id
11.05.12
✎
08:35
|
Процедура ОткрытьДокументВорд(ПолноеИмяФайла)
Попытка
Word = Новый COMОбъект("Word.Application");
Word.Documents.Open(ПолноеИмяФайла);
Word.Visible = Истина;
ДобавитьОбработчик Word.DocumentBeforeClose, ПередЗакрытиемДокументаOffice;
ДобавитьОбработчик Word.DocumentBeforeSave, ПередСохранениемДокументаOffice;
Исключение
ЗапуститьПриложение(ПолноеИмяФайла);
КонецПопытки;
КонецПроцедуры
Процедура ПередЗакрытиемДокументаOffice(Документ, Отмена)
Если РазрешеныОперацииСВложением() Тогда
Если (НЕ Документ.Saved) ИЛИ (ДокументИзменен) Тогда
Документ.Save();
msOffice = Документ.Application;
Документ.Close();
msOffice.Quit();
ТекОбъект = ЭлементыФормы.Файлы.ТекущиеДанные.Ссылка.ПолучитьОбъект();
ТекОбъект.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПолноеИмяФайла), Новый СжатиеДанных());
ТекОбъект.Записать();
КонецЕсли;
Иначе
Если (НЕ Документ.Saved) ИЛИ (ДокументИзменен) Тогда
Сообщить("Запрещено редактирование прикрепленных файлов утвержденных документов. Изменения не сохранены.", СтатусСообщения.Важное);
КонецЕсли;
КонецЕсли;
ДокументИзменен = Ложь;
КонецПроцедуры
Процедура ПередСохранениемДокументаOffice(Документ, СохранитьКак, Отмена)
ДокументИзменен = Истина;
КонецПроцедуры
|
|
|
7
CodeNull
11.05.12
✎
08:40
|
aleks-id, спасибо за код! Попробую переложить на свою задачу.
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший