Имя: Пароль:
1C
1С v8
Мобильное приложение 1с и сохранение фото в хранилище значений
0 arccos6pi
 
29.10.14
12:25
Есть документ с табличной частью "Присоединенные файлы"
у ТЧ есть реквизит - Файл с типом "Хранилище значений"
вот кусок кода
&НаКлиенте
Процедура ПрисоедниненныеФайлыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
    #Если МобильноеПриложениеКлиент  Тогда
        Если СредстваМультимедиа.ПоддерживаетсяФотоснимок() Тогда
            Фото = СредстваМультимедиа.СделатьФотоснимок();
            ДобавитьФайлНаСервере(Фото.ПолучитьДвоичныеДанные());
        КонецЕсли;
    #КонецЕсли
КонецПроцедуры

&НаСервере
Процедура ДобавитьФайлНаСервере(Фото)
    НовыйФайл = Объект.ПрисоединенныеФайлы.Добавить();
    НовыйФайл.ИмяФайла = "Проверка";
    НовыйФайл.Файл = Новый ХранилищеЗначения(Фото);
КонецПроцедуры

Ошибка - "Поле объекта не обнаружено(Файл)"
1 DexterMorgan
 
29.10.14
12:34
продолжайте наблюдения
2 arccos6pi
 
29.10.14
12:37
(1) дельный совет,как я сразу не додумался

и все же...как мне фото в док загрузить?
3 DmitrO
 
29.10.14
12:41
Суть в том, что тип ХранилищеЗначений не поддерживается в данных формы. И не только на мобильной платформе, а и вообще, для любой платформы.
Надо файл кинуть во временное хранилище, а при записи объекта, устанавливать уже в ТЧ ДокументОбъект-а.
4 mzelensky
 
29.10.14
12:42
(0) Изначально плохой подход! Фотографии (да вообще любые файлы) нельзя хранить в самом объекте. Для этого используют отдельный справочник или регистр.
5 mzelensky
 
29.10.14
12:46
(0) Так у тебя ошибка вот в этой строке:

"НовыйФайл.Файл = Новый ХранилищеЗначения(Фото);"

???

Сделай так:


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

  НовыйФайл = ТекОбъект.ПрисоединенныеФайлы.Добавить();
    НовыйФайл.ИмяФайла = "Проверка";
    НовыйФайл.Файл = Новый ХранилищеЗначения(Фото);

ЗначениеВРеквизитФормы(ТекОбъект, "Объект");
КонецПроцедуры
6 DmitrO
 
29.10.14
12:49
(5)угу, так будет работать без ошибок, но только файлы сохраняться не будут. :)
7 arccos6pi
 
29.10.14
12:53
(3),(5) спасибо,буду пробовать
(4) я понимаю что это не очень правильно,но если хранить эти данные в отдельном справочнике,мне его нужно будет завести в базе с которой обмениваюсь,и соответственно еще один справочник синхронизировать..а хочется это как-то минимизировать
8 mzelensky
 
29.10.14
13:14
(6) Почему нет? Я лично не пробовал (в своем случае пишу в регистр), но явных проблем, из-за которых файлы сохраняться не будут, не вижу.
9 arccos6pi
 
29.10.14
14:23
(3) не получается так
при записи вот такая ошибка
http://f6.s.qip.ru/YcnurqLM.png
10 DmitrO
 
29.10.14
15:35
(9)значит написал не правильно.
Делай так:
1)в данных формы в ТЧ ПрисоединенныеФайлы добавь колонку типа Строка с именем АдресФайла.

2)измени процедуру
&НаСервере
Процедура ДобавитьФайлНаСервере(Фото)
    НовыйФайл = Объект.ПрисоединенныеФайлы.Добавить();
    НовыйФайл.ИмяФайла = "Проверка";
    НовыйФайл.АдресФайла = ПоместитьВоВременноеХранилище(Фото, УникальныйИдентификатор);
КонецПроцедуры

3)добавь обработчик события в форме:
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    Индекс = 0;
    Для каждого СтрокаФормы из Объект.ПрисоединенныеФайлы Цикл
        Если ЗначениеЗаполнено(СтрокаФормы.АдресФайла) Тогда
            ТекущийОбъект.ПрисоединенныеФайлы[Индекс].Файл = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СтрокаФормы.АдресФайла));
        КонецЕсли;
        Индекс = Индекс+1;
    КонецЦикла;
КонецПроцедуры
11 arccos6pi
 
29.10.14
16:31
(10) так у меня и сделано
буду капать дальше