gifts2017

Работа с файлами (картинками) в интерфейсе Такси

Опубликовал Павел Чистов (GROOVY) в раздел Программирование - Работа с интерфейсом

Рассмотрим алгоритм работы с файлами и картинками в новом интерфейсе 1С:Предприятие 8.3 "Такси".

Во-первых, почему я решил написать эту статью: Новая концепция 1С - отказ от модальных окон, следовательно все методы и объекты, которые порождали открытие модальных окон в новом интерфейсе работать не смогут, точнее смогут, только если в свойствах конфигурации разрешить модальные окна.
Рассмотрим алгоритм работы с файлами и картинками в новом интерфейсе 1С:Предприятие 8.3 "Такси".

Во-первых, почему я решил написать эту статью: Новая концепция 1С - отказ от модальных окон, следовательно все методы и объекты, которые порождали открытие модальных окон в новом интерфейсе работать не смогут, точнее смогут, только если в свойствах конфигурации разрешить модальные окна.

 

Однако, если разрешить модальные окна, то мы столкнемся с проблемами при работе в web-клиенте.
 
 
Во-вторых, о работе с картинками в управляемых формах часто спрашивают.
 
Итак, задача: в справочнике "Товары" необходимо сохранять и отображать в форме фотографию товара.
Исходная конфигурация не содержит ничего, кроме самого справочника с товарами, выкладывать ее не буду, просто создайте пустую конфигурацию в 8.3.
 
Для хранения самого графического файла, в справочнике создадим реквизит "ДанныеКартинки", с типом "Хранилище значений".
 
 
Если планируете выгружать картинку (файл) из информационной базы обратно в файловую систему, то добавьте еще реквизит, который будет хранить исходное имя файла и его тип.
 
Далее, займемся формой. Как видно на картинке, реквизит с типом хранилище значений в форме недоступен.
 
 
Как будем отображать картинку в форме? Нет, не декорацией с типом "картинка". А в виде реквизита формы с типом "строка". Да, да! Это очевидно, и странно, что мало кто об этом догадывается сам. ;)
 
Все дело в том, что если на форму вынести реквизит с типом "строка", который будет содержать навигационную ссылку на графические данные или адрес временного хранилища которое содержит такие данные, то форма сможет отобразить сами графические данные.
Добавим реквизит формы с именем "СсылкаНаКартинку", тип "строка", длина не ограничена. И поместим его в реквизиты формы.
 
 
По умолчанию, строка в форме будет выглядеть как поле ввода, нам нужно поменять это, в свойствах элемента формы. Выберем в свойстве "Вид" "Поле картинки".
 
 
Интерфейсная часть готова. Займемся кодингом. Создадим команду формы "ВыбратьФайлКартинки", в виде кнопки расположим ее на форме.
 
 
В модуле опишем обработчик события "Действие" для созданной команды формы:



Пару комментариев к вышеописанному коду:
Если бы мы не обращали внимание на режим модальности приложения, то могли вполне использовать метод "ПоместитьФайл", однако цель статьи показать работу с файлами именно в таком режиме.
Метод НачатьПомещениеФайла помещает выбранный файл во временное хранилище (если выбор файла был произведен) и вызывает процедуру "ОбработатьВыборФайла" в этом же модуле.
Обращаю внимание на выделенный "УникальныйИдентификатор", этим свойством мы связали временное хранилище с текущей формой. В противном случае файл в хранилище помещен будет, но само хранилище при серверном вызовет будет уничтожено, а нам оно еще понадобится, для записи файла в реквизит справочника.

Опишем процедуру "ОбработатьВыборФайла":


Если пользователь не отказался от выбора файла, то в реквизит формы "СсылкаНаКартинку" помещаем адрес во временном хранилище, куда были помещены данные картинки.

 
Вуаля!
 
 
Так, осталось теперь при записи элемента справочника записать данные из временного хранилища в реквизит элемента справочника. Описываем событие ПередЗаписьюНаСервере:

Проверяем в реквизите формы у нас что? Если адрес временного хранилища, пишем данные в реквизит элемента справочника, обращаясь к "ТекущийОбъект", "ТекущийОбъект" - это сконвертированные данные формы, которые пишутся в базу в этот момент времени.

Осталось описать открытие формы, для отображения картинки уже сохраненной в реквизите элемента справочника.

 
Актуальную версию статьи и выгрузку базы с примером можно найти тут.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Maxim k (maxis33) 22.07.13 10:09
Просто и доступно, спасибо!
2. Епрст (Ёпрст) 22.07.13 10:13
что такое "модельных окон" ?
3. Павел Чистов (GROOVY) 22.07.13 13:30
4. Епрст (Ёпрст) 22.07.13 13:35
(3) тогда исправляй везде, а не только в заголовке темы.
:)
5. Walter (WalterMort) 24.07.13 09:01
Вроде как диалоги открытия/закрытия файлов из браузера не требуют отключения блокировки всплывающих окон. Нафиг с ними то так заморочились?
6. Юрий Пермитин (YPermitin) 24.07.13 09:01
Принцип остался тот же, что и для управляемых форм.
Так получается?
7. Евгений (Algiz) 24.07.13 09:06
8. Павел Чистов (GROOVY) 24.07.13 12:02
Так это и есть управляемые формы.
9. Сергей Кудашкин (sikuda) 24.07.13 14:23
- Как будем отображать картинку в форме? Нет, не декорацией с типом "картинка". А в виде реквизита формы с типом "строка"...
Суть этого реквизита - ссылка на ресурс внутри 1С. Если близко рассмотреть текст страницы это то что попадает в поле src тега <img>.

Как метод можно сделать поле ПолеHTML(Поле HTML документа) и
ПолеHTML = "<!DOCTYPE html><html><head></head><body><img src='"+СсылкаНаКартинку+"'/></body></html>";
10. Павел Чистов (GROOVY) 24.07.13 14:31
(9) [Суть этого реквизита - ссылка на ресурс внутри 1С.] sikuda, так я вроде как и написал...
11. Андрей Овсянкин (Evil Beaver) 24.07.13 14:58
Не только картинки, а вообще любые ХранилищаЗначения, которые нужно наполнять из управляемой формы требуют такого подхода. Суть проблемы - ХранилищеЗначения недоступно в данных формы. Если установить ему значение на сервере, то оно умрет при возврате на клиента. Нужно всегда использовать ВременноеХранилище, как промежуточный буфер, а в ПередЗаписьюНаСервере уже наполнять ТекущийОбъект нужными данными из временного хранилища.
NN2P; CratosX; AllexSoft; Elvisnya; teflon; +5 Ответить 2
12. Владислав Охотников (OVladius) 25.07.13 13:00
Блин, я такой ложкой как на картинке в детстве борщи хлебал, ностальгия....
skel; AEVdovin; hornet_X; CSiER; GATTUSO; talych; gorevg; alex.msk; AllexSoft; +9 Ответить 3
13. Андрей Овсянкин (Evil Beaver) 25.07.13 17:05
14. Алексей Белоусов (AllexSoft) 26.07.13 22:00
(12) OVladius, я думал это намек на ложку дёгтя ... )
15. Денис (Den_D) 29.07.13 10:54
(10) GROOVY, Увидел публикацию, не посмотрел на автора и подумал, что кто-то с Вашего мастер-класса, оказался шустрее автора)))
16. Денис (Den_D) 29.07.13 10:55
(12) OVladius, эта ложка которой 1С предлагает нам хлебануть г...на с "управляемыми" формами)))
Nuobu; bulpi; 3762515; +3 1 Ответить
17. ZLENKO.PRO (ZLENKO) 29.07.13 14:36
Ложка весьма символично отражает тему статьи :-)
18. Ivan Khorkov (vano-ekt) 30.07.13 13:17
а в обычной уф разве не так? причем тут такси?
19. Павел Чистов (GROOVY) 30.07.13 13:26
(18) vano-ekt,
1. Такси это и есть УФ.
2. В Такси отказались от модальных окон.
20. Евгений Люлюк (Evg-Lylyk) 31.07.13 08:58
(0) Спасибо за публикацию, актуальная тема
Желательно выложить базу пример.
Нужна функция очистить картинку
21. Сергей Кудашкин (sikuda) 01.08.13 09:11
(11) Я думаю они это сделали специально. Они не предоставили API для работы с большим объемом данных, поэтому сделали это асинхронно, как загрузка картинок на html страницу. Это не проблема, это фича.

И есть повод понять что 1С внутри уже другое - Это же асинхронный код!!!
Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФАйла", ЭтотОбъект);
НачатьПомещениеФайла(Оповещение, , , Истина, УникальныйИдентификатор);
22. Андрей Овсянкин (Evil Beaver) 01.08.13 09:19
(21) sikuda, Нету там асинхронного кода. А не сделали они это да, специально. Я не говорю, что это косяк. Просто нужно понимать упр. форму и знать такую особенность с хранилищем значения.

А про асинхронку - ОбработкаОповещения - это не совсем то. Она не асинхронна в прямом смысле. Параллельно ничего не выполняется. Callback оповещения стоит в очереди и вызывается, когда это будет можно, но синхронно с остальным кодом.
Внутри 1С может быть и другое (я не видел), но нам, смертным, асинхронного исполнения не видать еще долго. Имхо.
23. Сергей Кудашкин (sikuda) 01.08.13 10:00
(22) Согласен в текущем состоянии все загоняется в буфер и выпоняется последовательно. Какой то частью мы управляем, а какая-то(хранилище значений) делается без нас.

Я именно хочу обратить внимание, что выше приведенных код по сути своей асинхронный. И такой код будет все больше и больше проникать в типовые конфигурации, а дальше дело 1С как правильно включить паралельную работу. Асинхронный код это не подарок, это головная боль разработчика...

Говорить, что в 1С нет паралельной работы я бы не стал:
ЭтаФорма.СкомпоноватьРезультат(РежимКомпоновкиРезультата.Фоновый);
24. Андрей Овсянкин (Evil Beaver) 01.08.13 10:53
(23) sikuda,
РежимКомпоновкиРезультата.Фоновый

Знаете, что тут происходит? Запускается отдельный сеанс с базой данных. Самостоятельный, управляемый планировщиком фоновых заданий. Да, по отношению к вашему коду он будет выполнен параллельно, но ограничений куча же. Все равно не понимаю, какое отношение имеет реквизит управляемой формы "ХранилищеЗначения" и асинхронное исполнение?

Пока транзакция записи объекта не завершится, ваш код не может ничего сделать, где тут асинхрон? асинхрон по отношению к чему?
25. Павел Чистов (GROOVY) 04.08.13 00:13
(20) Evg-Lylyk, Зачем базу, тут 20 строк кода? Правда нужно?
26. Евгений Люлюк (Evg-Lylyk) 04.08.13 10:30
(25) Думаю было бы полезно я вот хотел посмотреть как работает после Перечитать.
27. Николай Глаголев (NickOmskiy2) 04.08.13 12:35
тоже в свое время брал пример из Профессиональной разработки" http://infostart.ru/public/185351/ с применением для БГУ, но можно и для прочего...
28. Сергей Кудашкин (sikuda) 07.08.13 09:29
(24) Вернемся к асинхронному коду (11) Очень внимательно читаем справку:
"В тонком и толстом клиентах, в отличие от веб-клиента, метод блокирует исполнение кода языка. Тем не менее, по завершению помещения файла указанный обработчик оповещения также будет вызван, но до исполнения кода, размещенного после вызова метода."

И в код после НачатьПомещениеФайла вставим бесконечный цикл. В Тонком клиенте сначала выбор файла. Потом цикл.
А в web-клиенте наоборот сначала зависаем (браузер просит остановить цикл), потом выбор файла.
То есть в web-клиенте Оповещение работает как чистый callback javascript.
Именно это я пытаюсь вложить в фразу "код по сути своей асинхронный". И именно такое поведение стандартное для javascript на web страницах.
29. Андрей Овсянкин (Evil Beaver) 07.08.13 10:47
(28) sikuda, понял, мы говорим о совсем разных вещах, поэтому не понимаем друг-друга :)
30. Семен Слепаков (sa1m0nn) 08.08.13 11:17
Спасибо за статью.
Замечание: про размещение на форме строки с видом Картинка и навигационной ссылкой на данные картинки следовало бы описать в статье, что это методика изначально Управляемого приложения, т.е. с 8.2 так работает. А нового здесь - только немодальные "модальные" методы с описанием оповещения.
31. Сергей Кудашкин (sikuda) 13.08.13 09:56
Удалил про html5 (Не будем смущать неокрепшие умы 1С-ников)
32. Сергей Кудашкин (sikuda) 23.12.13 16:58
(0) ...(Убрал по просьбе автора)
33. Павел Чистов (GROOVY) 23.12.13 17:12
(32) sikuda, на мой взгляд к моей статье это вообще только словом "картинка" привязать можно :)
34. Елена Пименова (Bukaska) 23.12.13 17:26
(33) GROOVY,
Как будем отображать картинку в форме? Нет, не декорацией с типом "картинка". А в виде реквизита формы с типом "строка". Да, да! Это очевидно, и странно, что мало кто об этом догадывается сам. ;)

Спасибо! Я всегда пользовалась как раз декарацией(в всяком случае в 8.2)

По умолчанию, строка в форме будет выглядеть как поле ввода, нам нужно поменять это, в свойствах элемента формы. Выберем в свойстве "Вид" "Поле картинки".

ну это уж даже самое главное ..

Правильно я понимаю, что если бы я сделала реквизит типа не строка, а хранилище значения, и указала бы у поля путь к нему.. Пришлось бы мучаться с таким функционалом, как ДанныеФормыВЗначение и ЗначениеВДанныеФормы?
35. Павел Чистов (GROOVY) 23.12.13 17:40
Правильно я понимаю, что если бы я сделала реквизит типа не строка, а хранилище значения, и указала бы у поля путь к нему.. Пришлось бы мучаться с таким функционалом, как ДанныеФормыВЗначение и ЗначениеВДанныеФормы?


Строка - это реквизит формы. Как Вы собрались реквизит формы с типом ХранилищеЗначения сделать?
36. V (clev) 03.02.14 12:23
Спасибо за прием работы с файлами!
Помогите разобраться с такой проблемой:

При активизации строки табличной части пытаюсь отобразить картинку на форме:

&НаСервере
Функция ПолучитьКартинку(ТекСтрока)
	Возврат ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Файлы.ДанныеКартинки", ТекСтрока-1);
КонецФункции

&НаКлиенте
Процедура ФайлыПриАктивизацииСтроки(Элемент)
	Если Элемент.ТекущиеДанные=Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если ЭтоАдресВременногоХранилища(Элемент.ТекущиеДанные.фСсылкаНаКартинку) Тогда
		СсылкаНаКартинку=Элемент.ТекущиеДанные.фСсылкаНаКартинку;
	Иначе
		СсылкаНаКартинку=ПолучитьКартинку(Элемент.ТекущиеДанные.НомерСтроки);
	КонецЕсли;
КонецПроцедуры
...Показать Скрыть


В момент присвоения СсылкаНаКартинку=ПолучитьКартинку(Элемент.ТекущиеДанные.НомерСтроки); платформа падает.




СсылкаНаКартинку в этот момент содержит текст:
"e1cib/data/БизнесПроцесс.СогласованиеДоговора.Файлы.ДанныеКартинки?ref=8711be1ed620b4fc11e38ca646b858c4&index=0"

В чем может быть проблема?
37. V (clev) 03.02.14 14:23
Все, разобрался. Может, кому-то пригодится. Надо было сначала считать картинки объекта и поместить их во временное хранилище:

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	Для Каждого СтрФайлы Из Объект.Файлы Цикл
		Хранилище=ТекущийОбъект.Файлы[СтрФайлы.НомерСтроки-1].ДанныеКартинки.Получить();
		
		СтрФайлы.фСсылкаНаКартинку=ПоместитьВоВременноеХранилище(Хранилище, УникальныйИдентификатор);
	КонецЦикла	
КонецПроцедуры
...Показать Скрыть
38. Павел Чистов (GROOVY) 03.02.14 16:30
(37) clev, зачем картинку во временное хранилище пихать? Это же физическая запись на диск. Достаточно навигационную ссылку получить.
39. V (clev) 05.02.14 03:30
(38) GROOVY, не могу разобраться, почему код из (36) не работает. Не подскажете, что не так?
40. Алексей Кондратьев (alexkon) 05.02.14 16:35
(39) clev, я процедуру ПриЧтенииНаСервере() заменил на ПриСозданииНаСервере(). На форме предварительно сделал реквизит типа "ТаблицаЗначений" с колонкой "АдресВременногоХранилища". В ПриСозданииНаСервере() получал данные картинок из ТЧ файлов и клал их во временное хранилище(только надо не забыть преобразовать реквизит формы в значение и после всего обратно в реквизит формы). Адреса временных хранилищ положил в созданный реквизит построчно. А в процедуре ПриАктивизацииСтроки() присваивал СсылкеНаКартинку адреса временных хранилищ(индексы совпадают), полученные из реквизита формы. А изначально платформу тоже вышибало.
41. V (clev) 05.02.14 20:20
(40) alexkon, Так в (37) я почти так и делаю.
Только не создаю новую ТЗ, а в табличной части формы добавил реквизит c типом "строка".
И при ПриЧтенииНаСервере() в этот реквизит записываю адрес во временном хранилище.
В этом варианте все работает. Но GROOVY в (38) говорит, что так не правильно.
42. Алексей (alf2006x) 18.03.14 14:49
С файлом вроде более-менее понятно, но я не могу найти способ немодального "таксишного" выбора каталога. Может кто подскажет как это сделать?
Мне надо чтобы пользователь выбрал каталог, а после выбора строку каталога записать в реквизит справочника.
43. Алексей (alf2006x) 19.03.14 11:50
(42) alf2006x,
Процедура ПутьКДНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
	Если ДиалогВыбораФайла.Выбрать() Тогда      //обработка файла Диалог.Каталог;
		Объект.ПутьКД = ДиалогВыбораФайла.Каталог;
	КонецЕсли;
КонецПроцедуры
...Показать Скрыть

Вопрос снят.
44. Денис Лашев (911service) 24.10.14 10:45
А как в данном способе применить фильтр на тип файла (Расширение)?
45. N (Smallrat) 15.01.15 16:19
(36) clev,
Вот тоже с похожим случаем столкнулся при изменении режима совместимости конфы:
Есть два случая - получаю файл из реквизита ссылки:
	Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Данные");
	ПолучитьФайл(Адрес, Объект.ИмяФайла, Истина);

и получаю из реквизита табличной части ссылки:
	Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ПечатныеФормы.Данные", Элементы.ПечатныеФормы.ТекущаяСтрока);
	ПолучитьФайл(Адрес, Элементы.ПечатныеФормы.ТекущиеДанные.ИмяФайла, Истина);

Меняю режим совместимости с 8.2.13 на "не использовать" (для плафтормы 8.3.5), и первый код так и остаётся рабочим, зато второй начинает падать:
"Неправильный путь к файлу 'e1c://server/SRV-1С:3541/TestGD/e1cib/data/Справочник.ВариантыДоговоров.ПечатныеФормы.Данные?ref=b5df0025900ab87711e233d403d247a3&index=0'"
помогает только если переписать с получения ссылки на помещение в хранилище, причем если не использовать метод Получить() (спасибо (37)), то полученный адрес тоже будет нерабочим. Отчего такая беда, непонятно (((
46. Павел Чистов (GROOVY) 15.01.15 20:38
(45) Smallrat, ТекущаяСтрока элементов формы <> Индекс или номер строки данных. Нужно ссылаться именно на данные записанные в БД.
47. N (Smallrat) 16.01.15 10:20
(46) Там в третьем параметре надо указать индекс строки. "Элементы.ПечатныеФормы.ТекущаяСтрока" у меня даёт 0 - вполне себе индекс. я и просто число указывал, всё равно не работает. Причём при включенном режиме совместимости ошибок нет.
48. Павел Чистов (GROOVY) 16.01.15 17:53
(47) Smallrat, еще раз, ТекущаяСтрока это НЕ индекс. И есть ли данные на которые ссылается текущая строка в базе?
49. aitbay seiduldayev (aseiduldayev) 18.01.15 11:26
У меня такая же трабла. Кто может помоч ? При строке платформа проваливается

Объект.АдресКартинки=ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ТЧПрикрепленныеФайлы.ПрикрепленныйФайл",0);
50. aitbay seiduldayev (aseiduldayev) 18.01.15 11:27
Тут так и не разобрались. Т
51. Павел Чистов (GROOVY) 18.01.15 14:05
(49) aseiduldayev, Какая "такая же"?
Куда проваливается платформа?
52. N (Smallrat) 21.01.15 10:56
(48) GROOVY, Хорошо, действительно параметр ТекущаяСтрока некорректно использовать (хоть в моем случае это 0)
переписал так:

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

&НаКлиенте
Процедура ВыгрузитьФайл(Команда)
	Адрес = ПолучитьАдресХранилища();
	ПолучитьФайл(Адрес, Элементы.ПечатныеФормы.ТекущиеДанные.ИмяФайла, Истина);
КонецПроцедуры
...Показать Скрыть

Всё равно валится с выключенным режимом совместимости, а с включенным 8.2 нет. Данные в базе есть - я могу их получить, поместить во временное хранилище и выгрузить на клиенте через адрес хранилища. Я покопал форумы - нигде решения нет, кроме как обходить.
53. Юрий Вячеславович (3762515) 26.02.15 16:00
У меня не получается, ошибка:
{Справочник.Лис_ТипыКонтейнеров.Форма.ФормаЭлемента.Форма(15)}: Ошибка при вызове конструктора (ОписаниеОповещения)
Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", Объект);
по причине:
Не найден экспортируемый метод: ОбработатьВыборФайла
54. Юрий Вячеславович (3762515) 26.02.15 16:04
А ещё в процедуре "ВыбратьФайлКартинки" ругается на "ЭтотОбъект"
55. Павел Чистов (GROOVY) 06.03.15 23:36
(53) 3762515, Надо, просто на 8.3 кодить.
56. vitaliy pozdnyakov (vitaliy1911) 20.03.15 19:53
пишу
&НаКлиенте
Процедура КомандаОткрытьФайл(Команда)
	Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайла");
	ПолучитьФайл(Адрес);
КонецПроцедуры
...Показать Скрыть

ругается
{Справочник.sd_Файлы.Форма.ФормаЭлемента.Форма(37)}: Ошибка при вызове метода контекста (ПолучитьФайл)
ПолучитьФайл(Адрес, Объект.Наименование);
по причине:
Неправильный путь к файлу 'e1c://filev/C/bases/desktopSD/e1cib/data/Справочник.sd_Файлы.ДанныеФайла?ref=bdda4487fca76d4611e4cd932712cf62'

ДанныеФайла - хранилище значений с данными файла
что я делаю не так? (8.3.5.1460)

П.С. Разобрался. Пытался поместить данные через реквизитформывзначение, запись в реквизит, затем значениевреквизитформы. так не правильно, потому что после обратного перехода в реквизит формы данные теряются. не повторяйте моих ошибок
57. Родион (lamdth) 02.09.15 16:26
(44) 911service,
Фильтр по расширению:
	ДиалогОткрытияФайла							= Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ДиалогОткрытияФайла.Фильтр					= "Формат JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|";
	ДиалогОткрытияФайла.МножественныйВыбор		= Ложь;
	ДиалогОткрытияФайла.ПредварительныйПросмотр	= Истина;
	ДиалогОткрытияФайла.Заголовок				= Нстр("ru='Выберите файл с фотографией'");
	
	ОповещениеОбработатьВыборФайла = Новый ОписаниеОповещения("ОбработатьВыборФайла", ЭтотОбъект);
	НачатьПомещениеФайлов(ОповещениеОбработатьВыборФайла, , ДиалогОткрытияФайла, Истина, УникальныйИдентификатор);

...Показать Скрыть
58. Виктор Назаров (androgin) 26.01.16 01:26
И получать картинки нужно в ПриЧтенииНаСервере
59. Андрей Переп (DrSMERTb) 06.07.16 10:50
А как теперь можно ещё сделать функцию сохранения на диск картинки из базы?
60. Гость 09.08.16 14:09
Здравствуйте!
Сделала так, как у вас написано. Картинка добавляется, но при последующем открытии элемента пропадает. Подскажите, пожалуйста, в чем может быть проблема?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа