|
УФ. Хранение файла в справочнике | ☑ | ||
---|---|---|---|---|
0
Wobland
12.09.12
✎
16:51
|
Что-то я совсем запутался в этих УФ, направьте на путь истинный, плз.
Исходная задача: хранить вордовский документ в справочнике, по кнопке его показывать. Ради этого завёл реквизит справочника типа ХЗ, загружаю так: &НаКлиенте
элемент справочника, есессно, записываю. но, когда хочу потом получить значение, выходит неопределено: &НаКлиенте
что я не так делаю? |
|||
1
and2
12.09.12
✎
16:52
|
в справочнике нехорошо.
в РС выносят. или в подчиненный справочник |
|||
2
lavryshev
12.09.12
✎
16:58
|
попробуй так
&НаСервере Процедура Сохранить(Данные) об=РеквизитФормыВЗначение("Объект"); об.Файл=Новый ХранилищеЗначения(Данные); ЗначениеВРеквизитФормы(об, "Объект"); КонецПроцедуры |
|||
3
Wobland
12.09.12
✎
16:59
|
(1) чем нехорошо? вообще задача такова. есть пара-тройка документов, надо их куда-то деть. не более.
|
|||
4
Wobland
12.09.12
✎
17:00
|
(2) картина та же
|
|||
5
Cmyk32
12.09.12
✎
17:02
|
&НаКлиенте
Процедура Загрузить() Перем Имя, Адрес; Если ПоместитьФайл(Адрес, "", Имя, Истина, ЭтаФорма.УникальныйИдентификатор) тогда ПоместитьФайлОбъекта(Адрес) КонецЕслиК КонецПроцедуры &НаСервере Процедура ПоместитьФайлОбъекта(АдресВХ) Спр = РеквизитФормыВЗначение("Объект"); ДвоичныеДанные = ПолучитьИЗВременногоХранилища(Адрес); Спр.Файл = Новый ХранилищеЗначения(ДвоичныеДанные); УдалитьИзВременногоХранилища(Адрес); ЗначениеВРеквизитФормы(Спр, "Объект"); КонецПроцедуры (1) +1 |
|||
6
Cmyk32
12.09.12
✎
17:04
|
(5) Естессно, в процедуре ПоместитьФайлОбъекта параметр не АдресВХ, а Адрес.
|
|||
7
mikecool
12.09.12
✎
17:04
|
(3) тем, что постоянно будешь хранилище за ссылкой таскать, если 1С читает его автоматом
|
|||
8
Wobland
12.09.12
✎
17:05
|
(5) про ПоместитьФайл не знал, код, видимо, рабочий, спасибо, буду думать
(7) спасибо, понял |
|||
9
Wobland
12.09.12
✎
17:18
|
хм. а ведь я и раньше в загрузке видел, что в Файле двоичные данные. а прочитать не мог. и сейчас не могу. то есть в (0) и (5) всё отрабатывает, по всей видимости, просто я не могу достать? как достать тогда?
&НаКлиенте
|
|||
10
Cmyk32
12.09.12
✎
17:21
|
(9) На клиенте "нет" хранилища значений. Т.е. присвоить значение реквизиту ты сможешь только на сервере, но для этого тебе нужно передать его с клиента. Для этого и предназначено временное хранилище. Погугли форум по запросам: "Временное хранилище" или "ПоместитьФайл".
|
|||
11
Wobland
12.09.12
✎
17:21
|
(10) дык вон же, с тебя скопипастил
|
|||
12
Cmyk32
12.09.12
✎
17:24
|
(11) Можно так
&НаКлиенте Процедура ОткрытьФайл(Команда) АдресФайла = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Файл"); ПолучитьФайл(АдресФайла, <<ИмяФайла>>, ИСТИНА); КонецПроцедуры |
|||
13
Wobland
12.09.12
✎
17:26
|
не записывает.
Сообщить(СтрокаРезультата.Файл.Получить()=Неопределено); говорит, да. консоль запросов с обработкой результата |
|||
14
Cmyk32
12.09.12
✎
17:26
|
(9) Смотря что ты собираешься делать с файлом.
У меня есть конфигурация, которую я готовила для публикации по работе с файлами. Могу переслать. |
|||
15
Wobland
12.09.12
✎
17:27
|
(14) спасибо, думаю, смысла нет. хочу тупо хранить и показывать. чтобы документы за базой не таскать
|
|||
16
Learn_
12.09.12
✎
17:28
|
(15) я долго буду ждать ответа?
|
|||
17
Wobland
12.09.12
✎
17:30
|
(12) {Справочник.Задания.Форма.ФормаЭлемента.Форма(22)}: Ошибка при вызове метода контекста (ПолучитьФайл)
ПолучитьФайл(АдресФайла,"c:\temp\00", Ложь); по причине: Ошибка при выполнении файловой операции 'e1c://filev/e/1c/портфолио/e1cib/data/Справочник.Задания.Файл?ref=9ab700158315a39b11e1fcd7983ac7ee' видимо, это тоже говорит от том, что там пусто |
|||
18
Wobland
12.09.12
✎
17:30
|
(16) какой вид ответа мадам предпочитает в это время суток?
|
|||
19
Learn_
12.09.12
✎
17:31
|
(18) я там тебе все написала
|
|||
20
Wobland
12.09.12
✎
17:31
|
я, конечно, сделаю на православном РС это всё. но очень интересно понять, почему вот так не работает
|
|||
21
Wobland
12.09.12
✎
17:32
|
(19) у меня ТАМ только рассылка от анекдот.ру
|
|||
22
Cmyk32
12.09.12
✎
17:33
|
(17) перед УдалитьИзВременногоХранилища(Адрес);
вставь Об.Записать() |
|||
23
Wobland
12.09.12
✎
17:35
|
(19) ах, вон оно что. от я дундук. я после сотни быстро в угадай мелодию убежал негров слушать. отвечаю: недолго
|
|||
24
palpetrovich
12.09.12
✎
17:35
|
сильно не вникал, вот из конфы, которую я рисовал, изучая УФ (тут про картинку, надеюсь с ДОК-ом аналогично), может поможет:
&НаКлиенте Процедура ЗагрузитьСДиска(Команда) Перем ВыбранноеИмя, АдресВременногоХранилища; Если ПоместитьФайл(АдресВременногоХранилища, "*.gif;*.jpg", ВыбранноеИмя, Истина, УникальныйИдентификатор) Тогда Файл = НОВЫЙ Файл(ВыбранноеИмя); ИмяФайлаКартинки = Файл.Имя; СсылкаНаКартинку = АдресВременногоХранилища; Модифицированность = Истина; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СохранитьНаДиск(Команда) Если НЕ Объект.ИмяФайлаКартинки = "" Тогда СсылкаНаКартинкуВБазе = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ФайлКартинки"); ПолучитьФайл(СсылкаНаКартинкуВБазе, Объект.ИмяФайлаКартинки); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда ДвоичныеДанные = ПолучитьИзВременногоХранилища(СсылкаНаКартинку); ТекущийОбъект.ФайлКартинки = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9)); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда УдалитьИзВременногоХранилища(СсылкаНаКартинку); КонецЕсли; СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(ТекущийОбъект.Ссылка, "ФайлКартинки"); КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(ТекущийОбъект.Ссылка, "ФайлКартинки"); КонецПроцедуры &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если НЕ Объект.ИмяФайлаКартинки = "" Тогда СсылкаНаКартинкуВБазе = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ФайлКартинки"); КонецЕсли; КонецПроцедуры |
|||
25
Wobland
12.09.12
✎
17:37
|
(22) так в об.Файл.Получить() уже что-то есть. это прикол такой у ХЗ - записывать сразу надо?
|
|||
26
Learn_
12.09.12
✎
17:38
|
(23) ТАМ пост 184
|
|||
27
Wobland
12.09.12
✎
17:39
|
(26) именно это я и имел в виду под дундуком ;)
|
|||
28
Vladal
12.09.12
✎
17:40
|
(27) А дай ссылко от Learn_
|
|||
29
Wobland
12.09.12
✎
17:40
|
(25) плин, а как (5) работало? а (5) работало?
(24) спасибо, выглядит очень похожим на то, что нужно |
|||
30
Wobland
12.09.12
✎
17:41
|
(28) чо?
|
|||
31
Cmyk32
12.09.12
✎
17:43
|
(29) Да, конфу подняла - у меня там еще Записать() стояло.
|
|||
32
Learn_
12.09.12
✎
17:45
|
(30) че в аське не отвечаеш
|
|||
33
Wobland
12.09.12
✎
18:38
|
в итоге вышло вот так:
&НаКлиенте Процедура Загрузить(Команда) Перем Адрес, Имя; Если ПоместитьФайл(Адрес, "", Имя, Истина, ЭтаФорма.УникальныйИдентификатор) Тогда Сохранить(Адрес, Имя); КонецЕсли; КонецПроцедуры &НаСервере Процедура Сохранить(Адрес, Имя) поз=Найти(Имя, "."); Пока поз>0 Цикл Имя=Прав(Имя, СтрДлина(Имя)-поз); поз=Найти(Имя, "."); КонецЦикла; НЗ=РегистрыСведений.ФайлыЗаданий.СоздатьНаборЗаписей(); Запись=НЗ.Добавить(); Запись.Задание=Объект.Ссылка; Запись.Расширение=Имя; Запись.Файл=Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(Адрес)); УдалитьИзВременногоХранилища(Адрес); НЗ.Записать(); КонецПроцедуры &НаКлиенте Процедура Показать(Команда) Расширение=""; Адрес=ДобытьФайл(Расширение); ВременноеИмя=ПолучитьИмяВременногоФайла(Расширение); ПолучитьФайл(Адрес, ВременноеИмя, Ложь); ЗапуститьПриложение(ВременноеИмя); КонецПроцедуры &НаСервере Функция ДобытьФайл(Расширение) НЗ=РегистрыСведений.ФайлыЗаданий.СоздатьНаборЗаписей(); НЗ.Отбор.Задание.Установить(Объект.Ссылка); НЗ.Прочитать(); Если НЗ.Количество() Тогда Данные=НЗ[0].Файл.Получить(); Расширение=НЗ[0].Расширение; Иначе Данные=Неопределено; Расширение=""; КонецЕсли; Возврат ПоместитьВоВременноеХранилище(Данные, ЭтаФорма.УникальныйИдентификатор); КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |