Имя: Пароль:
1C
1С v8
Записать отредактированный файл Word в БД
0 techguru
 
29.02.12
10:42
Открываю doc-файл из хранилища значений в 1С. Как определить, редактировался ли документ пользователем и если да - записать обновленную версию файла в БД? Заранее благодарю за дельные советы!
1 techguru
 
29.02.12
13:22
up! Неужели ни у кого нет рабочего механизма на такой случай? Поделитесь, plz!
2 GenV
 
29.02.12
13:23
(0) Сравнивать дату изменения файла в базе и в каталоге. Можно еще и размер.
3 BigRoma
 
29.02.12
13:24
по дате изменения файла
4 Wobland
 
29.02.12
13:24
(0) для зачем? пиши безусловно
5 techguru
 
29.02.12
13:27
(4) то есть после каждого открытия файла - обновлять хранилище? Тоже вариант. Сейчас попробую.
6 GenV
 
29.02.12
13:30
(5) лучше сделай с нормальным захватом для редактирования (и пометкой файла как редактируемого) и последующим обновлением при завершении редактирования.
ЗЫ Может пользователь напортачил в файле еще не закончил редактировать, а ты его по умолчанию затрешь в базе )
7 techguru
 
29.02.12
13:35
(6) а как захватить для редактирования?
8 GenV
 
29.02.12
13:37
(7) Добавляешь реквизит "Редактируется" булево. И кнопки "редактировать" и "закончить редактирование", которые будет нажимать пользователь.
ЗЫ Если лень самому думать можешь посмотреть БСП или на инфостарте поищи готовое.
9 techguru
 
29.02.12
14:09
Почему-то не отрабатывают обработчики событий:

ДобавитьОбработчик Word.DocumentBeforeClose, ПередЗакрытиемДокументаWord;
ДобавитьОбработчик Word.Quit, ВыходИзWord;

Процедуры ВыходИзWord и ПередЗакрытиемДокументаWord тупо не вызываются. С чем это может быть связано? WORD 2010.
10 techguru
 
29.02.12
15:11
Ничего не понимаю... В отладчике строки с ДобавитьОбработчик пролетают без ошибок, но нет редиректа на нужные мне процедуры. Почему? Что за бред? Помогите разобраться, пожалуйста!
11 andrewks
 
29.02.12
15:17
используй хэш
12 techguru
 
29.02.12
15:18
(11) можно поподробнее?
13 techguru
 
29.02.12
15:19
(11) мне надо отследить момент закрытия документа Word, предварительно открытого из ХЗ 1С. ДобавитьОбработчик в обозначенном выше виде не работает - строки кода пролетают до сохранения и закрытия документа. Как может помочь хэш?
14 andrewks
 
29.02.12
15:19
15 andrewks
 
29.02.12
15:20
(13) это к (0), а не к (9)
16 techguru
 
29.02.12
15:39
(14) Не годится, к сожалению. Файлы открываются во временных папка и - главное - как их сравнить, если заведомо неизвестно, когда пользователь закроет Word?
17 GenV
 
29.02.12
15:45
(16) А если ворд зависнет?
Не придумывай велосипед - пусть пользователь сам подтверждает, что закончил редактировать файл.
18 andrewks
 
29.02.12
15:46
(16) это легко можно сделать из-под твоей формы, откуда ты "отдаёшь" файл на редактирование - при закрытии и перед записью проверяй наличие изменённого файла и отсутствие сигнального файла мсворда (его наличие означает, что редактирование до сих пор продолжается), ну, и дальше по обстоятельствам - уточняй у юзера, записывай, отказывай в закрытии формы, и т.п.
19 aleks-id
 
29.02.12
15:51
Перем ДокументИзменен;

.....
Попытка
   Word = Новый COMОбъект("Word.Application");
       Word.Documents.Open(ПолноеИмяФайла);
         Word.Visible = Истина;
       
   ДобавитьОбработчик Word.DocumentBeforeClose, ПередЗакрытиемДокументаOffice;
   ДобавитьОбработчик Word.DocumentBeforeSave, ПередСохранениемДокументаOffice;
Исключение
   ЗапуститьПриложение(ПолноеИмяФайла);
КонецПопытки;
.....
Процедура ПередЗакрытиемДокументаOffice(Документ, Отмена)
   
   Если (НЕ Документ.Saved) ИЛИ (ДокументИзменен) Тогда
       Документ.Save();
       msOffice = Документ.Application;
       Документ.Close();
       msOffice.Quit();
           
       ТекОбъект = ЭлементыФормы.Файлы.ТекущиеДанные.Ссылка.ПолучитьОбъект();
       ТекОбъект.Хранилище = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ПолноеИмяФайла), Новый СжатиеДанных());
       ТекОбъект.Записать();
   КонецЕсли;
   ДокументИзменен = Ложь;
   
КонецПроцедуры


Процедура ПередСохранениемДокументаOffice(Документ, СохранитьКак, Отмена)

   ДокументИзменен = Истина;
   
КонецПроцедуры
20 techguru
 
29.02.12
16:02
(17) Реализовал сохранение с предупреждением пользователя. Действительно, так и проще, и надежнее. Спасибо!
21 BigRoma
 
29.02.12
18:07
(20) кстати, такой функционал уже есть в БСП, аж две подсистемы :)