|
Редактирование и сохранение .doc файлов в базе | ☑ | ||
---|---|---|---|---|
0
demmix
23.06.14
✎
10:53
|
Привет всем.
Есть база в которой хранятся doc файлы. Как реализовать возможность редактирование таких файлов? т.е. добавили к документу файлик, потом открыли его, сохранили, и он заменился бы в базе на новый. Файлы хранятся внутри другой sql базы в формате base64, открываются через временные файлы. |
|||
1
Fish
23.06.14
✎
10:55
|
(0) А в чём собственно проблема?
|
|||
2
demmix
23.06.14
✎
10:56
|
Проблема в том что я не могу придумать как. Получили мы строку с base64, преобразовали в двоичные данные, создали временный файл, заполнили его и открыли. Все код в 1с перестал выполняться, как отловить перезапись этого временного файла?
|
|||
3
Wobland
23.06.14
✎
10:57
|
сделай себе кнопку загрузить
|
|||
4
demmix
23.06.14
✎
10:58
|
(3) Кнопка загрузить уже есть, это не катит. Лишние действия придется пользователю делать, сохранять отредактированный файл и заново его загружать в базу
|
|||
5
Wobland
23.06.14
✎
11:00
|
>как отловить перезапись этого временного файла?
имя есть. пускай юзер явно об этом тычет в 1Ске |
|||
6
Иешуа
23.06.14
✎
11:01
|
(0) Я давно-давно такое дело делал на 1С-Архиве. Там версионирование штатно работает и получалось открывать файлы в 1С. Но это была семерка и лет семь назад. Но, думаю, что и сейчас есть нечто аналогичное
|
|||
7
demmix
23.06.14
✎
11:02
|
(5) НУ как то некрасиво получиться. Юзера бы вообще оградить от лишних действия
|
|||
8
Лодырь
23.06.14
✎
11:03
|
(7) А иначе не отловить.
|
|||
9
demmix
23.06.14
✎
11:03
|
(6) Хм, открыть в 1с не пробовал еще, спасибо за подсказку.
|
|||
10
Лодырь
23.06.14
✎
11:05
|
(7) Типовая подсистема хранения присоединенных файлов принципиально не устраивает именно этим?
|
|||
11
demmix
23.06.14
✎
11:06
|
(10) Да, во первых храниться в базе ток один тип файлов с одним и тем же разрешением, а во вторых нужно редактирование
|
|||
12
Лодырь
23.06.14
✎
11:07
|
(11) Ну.. как бы там оно реализовано.
|
|||
13
demmix
23.06.14
✎
11:10
|
(12) Нет,там нельзя редактировать файлы. Они автоматом не заменяються
|
|||
14
Lama12
23.06.14
✎
11:13
|
(4) Несколько вариантов.
1. Скрипт в шаблоне документа. Открывать файл с параметром и в качестве параметра передавать ссылку на форму из которой происходит открытие. При закрытие делать оповещение. 2. Отдельная папка на сервере. Папка расшарена для всех. Скрыта. С документами пользователь работает из этой расшаренной папки. Измененные файлы "подбирает" регламентное задание. Естественно имена у файлов служебные. 3, 4 и т.д. есть еще пару идей, но их писать долго :) |
|||
15
demmix
23.06.14
✎
11:15
|
(14) Вот насчет 1 варианта я тоже так думал, сейчас тоже попробую так, 2 вариант оригинальный)) а если будет желание то 3 и 4 вариант тоже озвуч, будет крайне полезно)) иии СПАСИБО!)
|
|||
16
Лодырь
23.06.14
✎
11:15
|
(13) Ну как же. Вот я беру в типовой УТ присоединяю файлик. Далее тыкаю редактировать - он редактируется и все изменения сохраняются несмотря на закрытие ворда.
|
|||
17
МихаилМ
23.06.14
✎
11:16
|
еще варианты
сравнивать дату изменения подписка на wmi событие либо открывать word как activx контейнер |
|||
18
demmix
23.06.14
✎
11:17
|
(16) хм, я брал функционал из БСП, не работает там редактирование...сейчас в ут посмотрю
|
|||
19
Лодырь
23.06.14
✎
11:21
|
(18) Вот ролик процесса. Специально не поленился записать. http://screencast.com/t/SxUfN4WpZ36
|
|||
20
Cube
23.06.14
✎
11:24
|
О, костылей-то напредлагали... =))
Вообще-то есть прямой путь - ДобавитьОбработчик. Подробнее в СП 1С и в MSDN: http://msdn.microsoft.com/ru-ru/library/office/ff834271(v=office.15).aspx Пример для УФ: &НаКлиенте Процедура ОткрытьМакетДляРедактирования(Команда) Адрес = ПоместитьФайлМакетаВоВременноеХранилище(); Если Адрес = Неопределено Тогда Предупреждение(НСтр("ru = 'Нет данных для обработки.'")); Возврат; КонецЕсли; Если НЕ ПолучитьФайл(Адрес, КаталогВременныхФайлов() + Объект.ИмяФайлаМакета, Ложь) Тогда Возврат; КонецЕсли; Попытка MSWord = ПолучитьCOMОбъект(, "Word.Application"); //Если Word уже открыт, то покажем предупреждение - нефиг десять документов редактировать. Предупреждение("Для редактирования макета, закройте другие документы Microsoft Word."); Возврат; Исключение Попытка MSWord = Новый COMОбъект("Word.Application"); //Открываем Word. Исключение Сообщить("Ошибка при открытии макета. Скорее всего на Вашем компьютере не установлен Microsoft Word.", СтатусСообщения.Внимание); Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание); Возврат; КонецПопытки; КонецПопытки; Документ = MSWord.Documents.Open(КаталогВременныхФайлов() + Объект.ИмяФайлаМакета); MSWord.Visible = Истина; MSWord.Activate(); ДобавитьОбработчик MSWord.DocumentBeforeClose, ПередЗакрытиемДокументаWord; ДобавитьОбработчик MSWord.Quit, ВыходИзWord; КонецПроцедуры //ОткрытьМакетДляРедактирования() &НаКлиенте Процедура ПередЗакрытиемДокументаWord(Документ, Отмена) Если НЕ Документ.Saved Тогда Документ.Save(); Модифицированность = Истина КонецЕсли; КонецПроцедуры //ПередЗакрытиемДокументаWord() &НаКлиенте Процедура ВыходИзWord() АдресВоВременномХранилище = ""; Если Модифицированность И ПоместитьФайл(АдресВоВременномХранилище, КаталогВременныхФайлов() + Объект.ИмяФайлаМакета, , Ложь) Тогда Объект.ДатаЗагрузкиМакета = ТекущаяДата(); ЗарегистрироватьМакет(АдресВоВременномХранилище); ОбновитьИнформациюОФайле(); КонецЕсли; УдалитьФайлы(КаталогВременныхФайлов() + Объект.ИмяФайлаМакета); КонецПроцедуры //ВыходИзWord() Работает сто лет - проблемы не было ни одной. |
|||
21
Cube
23.06.14
✎
11:25
|
+(20) И не надо лохматить бабушку...
|
|||
22
demmix
23.06.14
✎
11:25
|
(19) Я уже сам развернул ут и посмотрел))
|
|||
23
Лодырь
23.06.14
✎
11:26
|
(21) Чо сказать - молодец )
|
|||
24
Cube
23.06.14
✎
11:26
|
+(20) Ах, да, это не чистый УФ. Это работает в толстом клиенте в УПП =)) Переписать под читый УФ пока лень, а потребности нет...
|
|||
25
demmix
23.06.14
✎
11:26
|
(21) ООО, вот за это лучи добра тебе!)
|
|||
26
demmix
23.06.14
✎
11:30
|
В общем ветку можно считать ЗАКРЫТОЙ! Всем огромное спасибо)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |