Имя: Пароль:
1C
1С v8
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, спасибо за код! Попробую переложить на свою задачу.
Ошибка? Это не ошибка, это системная функция.