|
Excel документ в ХранилищеЗначений. Как можно редактировать? | ☑ | ||
---|---|---|---|---|
0
Плот
13.02.13
✎
08:44
|
Привет! Ребята подскажите пжл, как можно редактировать файл екселя который помещен в хранидище значения? Открываю его вот таким способом:
СтандартнаяОбработка = ложь; МойФайл = ПутьКФайлу.Получить(); Если МойФайл = неопределено тогда Предупреждение("Здесь нет файла!",10); Возврат; КонецЕсли; ИмяВременногоФайла = ПолучитьИмяВременногоФайла()+РасширениеФайла; МойФайл.Записать(ИмяВременногоФайла); ЗапуститьПриложение(ИмяВременногоФайла); ЗаписатьВБазуФайл(ИмяВременногоФайла); |
|||
1
Нуф-Нуф
13.02.13
✎
08:53
|
Открой докуметооборот. Там такое есть
|
|||
2
kotletka
13.02.13
✎
08:58
|
странная процедура ЗаписатьВБазуФайл , синтакс помощник про неё не знает
|
|||
3
kotletka
13.02.13
✎
08:58
|
опиши как помещаешь в хранилище
|
|||
4
Плот
13.02.13
✎
09:00
|
Процедура ЗаписатьВБазуФайл(ИмяВыбФайла)
ВыбФайл = Новый Файл(ИмяВыбФайла); ДвоичныеДанные = Новый ДвоичныеДанные(ИмяВыбФайла); ХранилищеФайлов = Новый ХранилищеЗначения(ДвоичныеДанные,Новый СжатиеДанных(9)); ПутьКФайлу = ХранилищеФайлов; РасширениеФайла = ВыбФайл.Расширение; КонецПроцедуры |
|||
5
Wobland
13.02.13
✎
09:00
|
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) НЗ=РегистрыСведений.ФайлыЗаданий.СоздатьНаборЗаписей(); НЗ.Отбор.Задание.Установить(Объект.Ссылка); НЗ.Прочитать(); Если НЗ.Количество() Тогда Данные=НЗ[0].Файл.Получить(); РасширениеФайла=НЗ[0].Расширение; Иначе Данные=Неопределено; Расширение=""; КонецЕсли; Если Данные<>Неопределено Тогда АдресФайла=ПоместитьВоВременноеХранилище(Данные, УникальныйИдентификатор); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Показать(Команда) #Если ВебКлиент Тогда Предупреждение("Не доделано, не додумано"); #Иначе Если НЕ ЭтоАдресВременногоХранилища(АдресФайла) Тогда Возврат; КонецЕсли; ВременноеИмя=ПолучитьИмяВременногоФайла(РасширениеФайла); ПолучитьФайл(АдресФайла, ВременноеИмя, Ложь); ЗапуститьПриложение(ВременноеИмя); #КонецЕсли КонецПроцедуры |
|||
6
kotletka
13.02.13
✎
09:09
|
(4)см(5) чтобы что то извлечь из хранилища ты должен хранить "адрес", т.е какой то объект с реквизитом типа ХранилищеЗначения
|
|||
7
Плот
13.02.13
✎
09:10
|
(6,5) Спасиб. Ушел разбираться.
|
|||
8
Плот
13.02.13
✎
12:05
|
(5) Правильно я понял что файл нужно хранить где то на диске?
|
|||
9
Плот
13.02.13
✎
12:06
|
(8) Затупил. Вопрос снят.
|
|||
10
Плот
13.02.13
✎
12:21
|
(5) Вопрос то был, как после того как был поправлен файл записать его снова в ХранилищеЗначений?
|
|||
11
alexei366
13.02.13
✎
12:30
|
Тебе надо цепляться к событию некому, к примеру к событию закрытия формы, где ты изначально открываешь файл на редактирование, в момент открытия ты считываешь MD5 файла выгруженного на диск и вместе с MD5 запоминаешь и путь к файлу в какойто переменной на клиенте. Затем при закрытии формы ты сверяешь MD5 , и если они не совпадают значится файл изменили , ну и записываешь новую версию.
Сам я делал когда-то таким способом, имелась таблица файлов, и сотрудник кликая два раза на строку открывал файл (и пофиг на формат) в этот момент выводился вопрос "сохранить изменения в файле или нет", сотрудник делает изменения, закрывает файл, нажимает "Да" в вопросе, там далее сравнивается MD5 и если он изменился то записываем в ХЗ новый файл |
|||
12
Wobland
13.02.13
✎
12:33
|
(10) да мне не жалко. оттуда же
&НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если НЕ ЭтоАдресВременногоХранилища(АдресФайла) Тогда Возврат; КонецЕсли; НЗ=РегистрыСведений.ФайлыЗаданий.СоздатьНаборЗаписей(); НЗ.Отбор.Задание.Установить(Объект.Ссылка); Запись=НЗ.Добавить(); //к этому моменту ссылка не должна быть пустой Запись.Задание=Объект.Ссылка; Запись.Файл=Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресФайла)); Запись.Расширение=РасширениеФайла; НЗ.Записать(); КонецПроцедуры &НаКлиенте Процедура Загрузить(Команда) Диалог=Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); Диалог.МножественныйВыбор=Ложь; Диалог.Фильтр="Документы Word|*.doc|Все файлы|*.*"; Если Диалог.Выбрать() Тогда АдресФайла=ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(Диалог.ПолноеИмяФайла), УникальныйИдентификатор); Ф=Новый Файл(Диалог.ПолноеИмяФайла); РасширениеФайла=Сред(Ф.Расширение, 2); Модифицированность=Истина; КонецЕсли; КонецПроцедуры |
|||
13
Плот
13.02.13
✎
12:33
|
(11) То что нужно! Спасибо!
|
|||
14
Плот
13.02.13
✎
12:35
|
А если я всегда буду записывать файл после открытия, не смотря на что правлен или не правлен, наверное не есть гуд?
|
|||
15
alexei366
13.02.13
✎
12:40
|
Да не, просто если изменений не было, выводиться сообщение пользователю "Файл не изменён", а то вдруг в Экселе сохранил через "Сохранить как" и на рабочий, и тогда ясен фиг не увидешь ничего.
Ну если у тя предполагается исключительно Эксель, то можно запускать Ком объект и отобразить пользователю через visible, и в обработчике ожидания на форме следить когда ком объект сдохнет и проверять новую сохраненную версию. |
|||
16
alexei366
13.02.13
✎
13:21
|
На
Функция РедактироватьФайл(СтруктураФайла , Отредактирован, ОписаниеОшибки) Экспорт Попытка Отредактирован = Ложь; ИмяФайла = ПолучитьИмяВременногоФайла(СтруктураФайла.Формат); СтруктураФайла.Данные.Записать(ИмяФайла); ЗапуститьПриложение(ИмяФайла); МД5 = РаботаССерверомВызов.ВычислитьМД5(СтруктураФайла.Данные); СЗ = Новый СписокЗначений; СЗ.Добавить("ДА","Да"); СЗ.Добавить("НЕТ","Нет"); Ответ = Вопрос(СтруктураФайла.Наименование+" : сохранить изменения",СЗ); Если Ответ = "ДА" Тогда ДвДанные = Новый ДвоичныеДанные(ИмяФайла); НовыйМД5 = РаботаССерверомВызов.ВычислитьМД5(ДвДанные); Если МД5 = НовыйМД5 Тогда Предупреждение("Файл не изменился"); Отредактирован = Ложь; Попытка УдалитьФайлы(ИмяФайла); Исключение КонецПопытки; Возврат Истина; Иначе СтруктураФайла.Данные = ДвДанные; Отредактирован = Истина; Попытка УдалитьФайлы(ИмяФайла); Исключение КонецПопытки; Возврат Истина; КонецЕсли; Иначе Отредактирован = Ложь; Попытка УдалитьФайлы(ИмяФайла); Исключение КонецПопытки; Возврат Истина; КонецЕсли; Исключение Попытка УдалитьФайлы(ИмяФайла); Исключение КонецПопытки; ОписаниеОшибки = ОписаниеОшибки(); Возврат Ложь; КонецПопытки; КонецФункции Функция ВычислитьМД5(ДвДанные) Экспорт ХешДан = Новый ХешированиеДанных(ХешФункция.MD5); ХешДан.Добавить(ДвДанные); МД5 = СтрЗаменить(Строка(ХешДан.ХешСумма)," ",""); Возврат МД5; КонецФункции |
|||
17
Плот
13.02.13
✎
14:05
|
(16) Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |