Имя: Пароль:
1C
1С v8
Открыть файл из Хранилище Значения
,
0 Gobo
 
07.09.13
21:31
Доброе время суток !

Имеется справочник СпрФайлов. Там есть реквизит Док с типом ХранилищеЗначения. В него были загружены файлы Word.
Как его можно получить и открыть ?
Тут читал - http://kb.mista.ru/article.php?id=72
Но не понял.
Подскажите пожалуйста.
1 grayshadow
 
07.09.13
21:35
док.получить()
2 Gobo
 
07.09.13
21:47
В форме элемента справочника создал команду ПросмотрФайла
и
написал так:

&НаКлиенте
Процедура ПросмотрФайла(Команда)
    ТекФайл=ОткрДок();
    ЗапуститьПриложение(ТекФайл);
КонецПроцедуры

&НаСервере
Функция ОткрДок()
    СпрФайл = Справочники.СпрФайлов;
    ТекЭлем = СпрФайл.НайтиПоКоду(Объект.Код);
    ТекФайл=ТекЭлем.Док.Получить();
    Возврат ТекФайл;
КонецФункции

Но получаю ошибку:
Несоответствие типов (параметр номер '1')

в строке ЗапуститьПриложение
3 grayshadow
 
07.09.13
21:49
шо за приложение?
ЗапуститьПриложение(<СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>, <КодВозврата>)
Параметры:

<СтрокаКоманды> (обязательный)

Тип: Строка.
Командная строка для запуска приложения либо имя файла, ассоциированного с некоторым приложением.

тип Строка а не хранилище
разве что в хранилище записана строка? но это изврат...
4 Gobo
 
07.09.13
21:51
Сообщить(ТипЗнч(ТекФайл));

Возвращает:
Двоичные данные
5 Gobo
 
07.09.13
21:51
Там файл Word.
6 grayshadow
 
07.09.13
21:52
щас скину рабочий код для запуска ворда через комобъект
7 grayshadow
 
07.09.13
22:03
это должно помочь
http://help1c.com/faq/view/587.html
сначала сохранить файл из хранилища на диск, потом его вордом открыть

либо в твоем варианте запуститьприложение("c:\programfiles\msoffice.winword.exe") но это по-индусски, ибо зависит от версий ворда и ОС

(сорри, у меня маленько по-другому, вордовский файл делается из макета...)
8 grayshadow
 
07.09.13
22:06
если работать с макетом, то суем вордовский док в 1с (тип ActiveDocument)
а потом
    Договор = ПолучитьМакет("МакетВорд");
    ОбъектWord = Договор.Получить();
9 Gobo
 
07.09.13
22:12
Если хочу без сохранения файла на диск.
Надо использовать ActiveDocument ?
10 grayshadow
 
07.09.13
22:19
может есть и другие варианты, но я их не знаю:)
кагбе логично, что прежде чем запускать ворд, надо куда-то сохранить для него док, из 1скиного хранилища он док не достанет:)
а с ActiveDocument - ничего никуда не сохраняется, открывается ворд с несохраненным доком Док1

делаем всякие манипуляции с доком, а в конце пишем
ОбъектWord.Application.Visible = Истина;
ОбъектWord.Activate();
11 grayshadow
 
07.09.13
22:22
если у тебя не шаблон, а некоторый произвольный файл в хранилище, возьми типовую УТ (10 или 11 по вкусу), прицепи файл к контрагенту и посмотри отладчиком, как оно его открывает:)
12 Gobo
 
07.09.13
22:45
У меня есть только Бухгалтерия типовая.
Наверное придется сохранить во временных каталог, потом открыть.
13 Euguln
 
07.09.13
22:52
(12) На сервере из ХранилищеЗначения помещаешь во временное хранилище, на клиенте из временного хранилища записываешь на диск, например в каталог временных файлов
14 grayshadow
 
07.09.13
22:55
в бухне скудно с присоединенными файлами:(
тем не менее смотрим общие модули ПрисоединенныеФайлы***
насчет того как получить из хранилища
но да, записать на диск самый простой способ:)
15 Gobo
 
07.09.13
23:09
Сделал так:

&НаКлиенте
Процедура ПросмотрФайла(Команда)
    ТекФайл=ОткрДок();
    Если ТипЗнч(ТекФайл) = Тип("Неопределено") Тогда
        Предупреждение("Файл отсутствует в базе !");
        Возврат;
    КонецЕсли;     
    ИмяВременногоФайла = КаталогВременныхФайлов() + Объект.Наименование;
    ТекФайл.Записать(ИмяВременногоФайла);
    ЗапуститьПриложение(ИмяВременногоФайла);
КонецПроцедуры

У меня в реквизите Наименование, справочника указано имя файла.