0. GROOVY 2481 21.07.13 15:11 Сейчас в теме

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

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

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

Перейти к публикации

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

Как метод можно сделать поле ПолеHTML(Поле HTML документа) и
ПолеHTML = "<!DOCTYPE html><html><head></head><body><img src='"+СсылкаНаКартинку+"'/></body></html>";
10. GROOVY 2481 24.07.13 14:31 Сейчас в теме
(9) [Суть этого реквизита - ссылка на ресурс внутри 1С.] sikuda, так я вроде как и написал...
15. Den_D 51 29.07.13 10:54 Сейчас в теме
(10) Увидел публикацию, не посмотрел на автора и подумал, что кто-то с Вашего мастер-класса, оказался шустрее автора)))
53. 3762515 26.02.15 16:00 Сейчас в теме
У меня не получается, ошибка:
{Справочник.Лис_ТипыКонтейнеров.Форма.ФормаЭлемента.Форма(15)}: Ошибка при вызове конструктора (ОписаниеОповещения)
Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла", Объект);
по причине:
Не найден экспортируемый метод: ОбработатьВыборФайла
55. GROOVY 2481 06.03.15 23:36 Сейчас в теме
(53) 3762515, Надо, просто на 8.3 кодить.
11. Evil Beaver 6208 24.07.13 14:58 Сейчас в теме
Не только картинки, а вообще любые ХранилищаЗначения, которые нужно наполнять из управляемой формы требуют такого подхода. Суть проблемы - ХранилищеЗначения недоступно в данных формы. Если установить ему значение на сервере, то оно умрет при возврате на клиента. Нужно всегда использовать ВременноеХранилище, как промежуточный буфер, а в ПередЗаписьюНаСервере уже наполнять ТекущийОбъект нужными данными из временного хранилища.
msergeev79; NN2P; CratosX; AllexSoft; Elvisnya; teflon; +6 Ответить
21. sikuda 570 01.08.13 09:11 Сейчас в теме
(11) Я думаю они это сделали специально. Они не предоставили API для работы с большим объемом данных, поэтому сделали это асинхронно, как загрузка картинок на html страницу. Это не проблема, это фича.

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

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

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

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

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

Пока транзакция записи объекта не завершится, ваш код не может ничего сделать, где тут асинхрон? асинхрон по отношению к чему?
28. sikuda 570 07.08.13 09:29 Сейчас в теме
(24) Вернемся к асинхронному коду (11) Очень внимательно читаем справку:
"В тонком и толстом клиентах, в отличие от веб-клиента, метод блокирует исполнение кода языка. Тем не менее, по завершению помещения файла указанный обработчик оповещения также будет вызван, но до исполнения кода, размещенного после вызова метода."

И в код после НачатьПомещениеФайла вставим бесконечный цикл. В Тонком клиенте сначала выбор файла. Потом цикл.
А в web-клиенте наоборот сначала зависаем (браузер просит остановить цикл), потом выбор файла.
То есть в web-клиенте Оповещение работает как чистый callback javascript.
Именно это я пытаюсь вложить в фразу "код по сути своей асинхронный". И именно такое поведение стандартное для javascript на web страницах.
29. Evil Beaver 6208 07.08.13 10:47 Сейчас в теме
(28) sikuda, понял, мы говорим о совсем разных вещах, поэтому не понимаем друг-друга :)
12. OVladius 32 25.07.13 13:00 Сейчас в теме
Блин, я такой ложкой как на картинке в детстве борщи хлебал, ностальгия....
skel; AEVdovin; hornet_X; CSiER; GATTUSO; talych; gorevg; alex.msk; AllexSoft; +9 Ответить
13. Evil Beaver 6208 25.07.13 17:05 Сейчас в теме
14. AllexSoft 26.07.13 22:00 Сейчас в теме
(12) OVladius, я думал это намек на ложку дёгтя ... )
16. Den_D 51 29.07.13 10:55 Сейчас в теме
(12) OVladius, эта ложка которой 1С предлагает нам хлебануть г...на с "управляемыми" формами)))
Nuobu; bulpi; 3762515; +3 1 Ответить
17. ZLENKO 29.07.13 14:36 Сейчас в теме
Ложка весьма символично отражает тему статьи :-)
18. vano-ekt 441 30.07.13 13:17 Сейчас в теме
а в обычной уф разве не так? причем тут такси?
19. GROOVY 2481 30.07.13 13:26 Сейчас в теме
(18) vano-ekt,
1. Такси это и есть УФ.
2. В Такси отказались от модальных окон.
20. Evg-Lylyk 2603 31.07.13 08:58 Сейчас в теме
(0) Спасибо за публикацию, актуальная тема
Желательно выложить базу пример.
Нужна функция очистить картинку
25. GROOVY 2481 04.08.13 00:13 Сейчас в теме
(20) Evg-Lylyk, Зачем базу, тут 20 строк кода? Правда нужно?
26. Evg-Lylyk 2603 04.08.13 10:30 Сейчас в теме
(25) Думаю было бы полезно я вот хотел посмотреть как работает после Перечитать.
27. NickOmskiy2 48 04.08.13 12:35 Сейчас в теме
тоже в свое время брал пример из Профессиональной разработки" http://infostart.ru/public/185351/ с применением для БГУ, но можно и для прочего...
30. sa1m0nn 22 08.08.13 11:17 Сейчас в теме
Спасибо за статью.
Замечание: про размещение на форме строки с видом Картинка и навигационной ссылкой на данные картинки следовало бы описать в статье, что это методика изначально Управляемого приложения, т.е. с 8.2 так работает. А нового здесь - только немодальные "модальные" методы с описанием оповещения.
31. sikuda 570 13.08.13 09:56 Сейчас в теме
Удалил про html5 (Не будем смущать неокрепшие умы 1С-ников)
32. sikuda 570 23.12.13 16:58 Сейчас в теме
(0) ...(Убрал по просьбе автора)
33. GROOVY 2481 23.12.13 17:12 Сейчас в теме
(32) sikuda, на мой взгляд к моей статье это вообще только словом "картинка" привязать можно :)
34. Bukaska 130 23.12.13 17:26 Сейчас в теме
(33)
Как будем отображать картинку в форме? Нет, не декорацией с типом "картинка". А в виде реквизита формы с типом "строка". Да, да! Это очевидно, и странно, что мало кто об этом догадывается сам. ;)

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

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

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

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


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

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

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

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


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




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

В чем может быть проблема?
45. Smallrat 19 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 2481 15.01.15 20:38 Сейчас в теме
(45) Smallrat, ТекущаяСтрока элементов формы <> Индекс или номер строки данных. Нужно ссылаться именно на данные записанные в БД.
47. Smallrat 19 16.01.15 10:20 Сейчас в теме
(46) Там в третьем параметре надо указать индекс строки. "Элементы.ПечатныеФормы.ТекущаяСтрока" у меня даёт 0 - вполне себе индекс. я и просто число указывал, всё равно не работает. Причём при включенном режиме совместимости ошибок нет.
48. GROOVY 2481 16.01.15 17:53 Сейчас в теме
(47) Smallrat, еще раз, ТекущаяСтрока это НЕ индекс. И есть ли данные на которые ссылается текущая строка в базе?
52. Smallrat 19 21.01.15 10:56 Сейчас в теме
(48) Хорошо, действительно параметр ТекущаяСтрока некорректно использовать (хоть в моем случае это 0)
переписал так:

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

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

Всё равно валится с выключенным режимом совместимости, а с включенным 8.2 нет. Данные в базе есть - я могу их получить, поместить во временное хранилище и выгрузить на клиенте через адрес хранилища. Я покопал форумы - нигде решения нет, кроме как обходить.
37. clev 26 03.02.14 14:23 Сейчас в теме
Все, разобрался. Может, кому-то пригодится. Надо было сначала считать картинки объекта и поместить их во временное хранилище:

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
	Для Каждого СтрФайлы Из Объект.Файлы Цикл
		Хранилище=ТекущийОбъект.Файлы[СтрФайлы.НомерСтроки-1].ДанныеКартинки.Получить();
		
		СтрФайлы.фСсылкаНаКартинку=ПоместитьВоВременноеХранилище(Хранилище, УникальныйИдентификатор);
	КонецЦикла	
КонецПроцедуры
Показать
Smallrat; +1 Ответить
38. GROOVY 2481 03.02.14 16:30 Сейчас в теме
(37) clev, зачем картинку во временное хранилище пихать? Это же физическая запись на диск. Достаточно навигационную ссылку получить.
39. clev 26 05.02.14 03:30 Сейчас в теме
(38) не могу разобраться, почему код из (36) не работает. Не подскажете, что не так?
40. alexkon 92 05.02.14 16:35 Сейчас в теме
(39) clev, я процедуру ПриЧтенииНаСервере() заменил на ПриСозданииНаСервере(). На форме предварительно сделал реквизит типа "ТаблицаЗначений" с колонкой "АдресВременногоХранилища". В ПриСозданииНаСервере() получал данные картинок из ТЧ файлов и клал их во временное хранилище(только надо не забыть преобразовать реквизит формы в значение и после всего обратно в реквизит формы). Адреса временных хранилищ положил в созданный реквизит построчно. А в процедуре ПриАктивизацииСтроки() присваивал СсылкеНаКартинку адреса временных хранилищ(индексы совпадают), полученные из реквизита формы. А изначально платформу тоже вышибало.
41. clev 26 05.02.14 20:20 Сейчас в теме
(40) alexkon, Так в (37) я почти так и делаю.
Только не создаю новую ТЗ, а в табличной части формы добавил реквизит c типом "строка".
И при ПриЧтенииНаСервере() в этот реквизит записываю адрес во временном хранилище.
В этом варианте все работает. Но GROOVY в (38) говорит, что так не правильно.
56. vitaliy1911 26 20.03.15 19:53 Сейчас в теме
пишу
&НаКлиенте
Процедура КомандаОткрытьФайл(Команда)
	Адрес = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеФайла");
	ПолучитьФайл(Адрес);
КонецПроцедуры

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

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

П.С. Разобрался. Пытался поместить данные через реквизитформывзначение, запись в реквизит, затем значениевреквизитформы. так не правильно, потому что после обратного перехода в реквизит формы данные теряются. не повторяйте моих ошибок
42. alf2006x 25 18.03.14 14:49 Сейчас в теме
С файлом вроде более-менее понятно, но я не могу найти способ немодального "таксишного" выбора каталога. Может кто подскажет как это сделать?
Мне надо чтобы пользователь выбрал каталог, а после выбора строку каталога записать в реквизит справочника.
43. alf2006x 25 19.03.14 11:50 Сейчас в теме
(42) alf2006x,
Процедура ПутьКДНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
	Если ДиалогВыбораФайла.Выбрать() Тогда      //обработка файла Диалог.Каталог;
		Объект.ПутьКД = ДиалогВыбораФайла.Каталог;
	КонецЕсли;
КонецПроцедуры

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

Показать
LomayaZakat; +1 Ответить
49. aseiduldayev 18.01.15 11:26 Сейчас в теме
У меня такая же трабла. Кто может помоч ? При строке платформа проваливается

Объект.АдресКартинки=ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ТЧПрикрепленныеФайлы.ПрикрепленныйФайл",0);
51. GROOVY 2481 18.01.15 14:05 Сейчас в теме
(49) aseiduldayev, Какая "такая же"?
Куда проваливается платформа?
50. aseiduldayev 18.01.15 11:27 Сейчас в теме
Тут так и не разобрались. Т
54. 3762515 26.02.15 16:04 Сейчас в теме
А ещё в процедуре "ВыбратьФайлКартинки" ругается на "ЭтотОбъект"
58. androgin 26.01.16 01:26 Сейчас в теме
И получать картинки нужно в ПриЧтенииНаСервере
59. DrSMERTb 06.07.16 10:50 Сейчас в теме
А как теперь можно ещё сделать функцию сохранения на диск картинки из базы?
60. Гость 09.08.16 14:09
Здравствуйте!
Сделала так, как у вас написано. Картинка добавляется, но при последующем открытии элемента пропадает. Подскажите, пожалуйста, в чем может быть проблема?
61. deutsch2008 137 02.10.17 12:01 Сейчас в теме
не получилось! вообще не чего. одни ошибки (((((
62. deutsch2008 137 04.10.17 13:55 Сейчас в теме
{Справочник.Товары.Форма.ФормаЭлемента.Форма(5,64)}: Переменная не определена (ЭтотОбъект)
Оповещание = Новый ОписаниеОповещения("ОбработатьВыборФайла", <<?>>ЭтотОбъект); (Проверка: Толстый клиент (обычное приложение))
63. Mars2006 17.07.18 14:17 Сейчас в теме
Всё работает без ошибок. только картинка не отображается.
Можете подсказать. всё написано как в посте, ничего своего.

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

&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
	
	Если НЕ Результат Тогда 
		Возврат ;
	КонецЕсли;
	
	СсылкаНаКартинку = Адрес;

КонецПроцедуры

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ,СтандартнаяОбработка)
	СсылкаНаКартинку=ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ОсновноеИзображение");
КонецПроцедуры
Показать
64. ZloyProger 4 10.04.19 12:40 Сейчас в теме
Доброго времени суток,Коллеги.
Извиняюсь за некропостинг, но думаю новую тему не стоит ради такого пустяка заводить) Поясните ЧЯДНТ - есть самописка, с запрещенными модальными вызовами пишу а-ля:
&НаКлиенте
Процедура МояКоманда(СписокФайлов)
	МассивФайлов = Новый Массив;
	Для Каждого Файл Из СписокФайлов Цикл
		МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(Файл.Значение.ПолноеИмя, Файл));
	КонецЦикла;
	НачатьПомещениеФайлов(Новый ОписаниеОповещения("ПослеПомещенияФайлов", ЭтаФорма), МассивФайлов, Ложь, УникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура ПослеПомещенияФайлов(ПомещенныеФайлы, ДополнительныеПараметры) Экспорт
	ПрочитатьФайлыНаСервере(ПомещенныеФайлы);
КонецПроцедуры

&НаСервере
Процедура ПрочитатьФайлыНаСервере(ПомещенныеФайлы)
	//некоторые действия с файлами, выполняются на сервере, потому что необходим доступ к структуре метаданных конфигурации
Конец
Показать

СписокФайлов - соответственно список значений, где значения - файлы, представление - текстовой описание файла. Код отрабатывает, всё выполняется, но... выдает предупреждение, что использование синхронных методов запрещено... Кто и где синхронный-то?
65. vitaliy1911 26 10.04.19 14:21 Сейчас в теме
(64) вы уверены, что предупреждение именно на этот фрагмент кода? попробуйте выделить весь текст модуля и через контекстное меню "рефакторинг" выполнить замену всех синхронных методов, посмотрите что получится
66. ZloyProger 4 11.04.19 17:26 Сейчас в теме
(65) Спасибо коллега, действительно использовал НайтиФайлы, вместо НачатьПоискФайлов... Вот всё-таки неплохо бы в оповещение для таких "невнимательных" добавить что за метод))
И неистовые лучи добра разработчикам за асинхронную модель вызовов из-за которой 2 строчки простого, понятного, логичного вызова метода НайтиФайлы:
		МассивНайденныхФайлов = НайтиФайлы(ВыбКаталог, "Configuration.xml", Ложь);
		Для Каждого СтрокаРоли Из Объект.ТаблицаРолей.НайтиСтроки(Новый Структура("Отметка", Истина)) Цикл
			ИмяРоли					  = СтрокаРоли.Роль;
			МассивНайденныхФайловРоли = ?(МассивНайденныхФайлов.Количество() = 0, НайтиФайлы(ВыбКаталог, "Роль." + ИмяРоли + ".Права.xml", Ложь), НайтиФайлы(ВыбКаталог + "\Roles\" + ИмяРоли, "Rights.xml", Истина));
			Если МассивНайденныхФайловРоли.Количество() > 0 Тогда
				СписокФайлов.Добавить(МассивНайденныхФайловРоли[0], ИмяРоли);
				СписокПредставлений.Добавить(ИмяРоли, МассивНайденныхФайловРоли[0].ПолноеИмя);
			Иначе
				Сообщить("Не найдено описание роли " + ИмяРоли + ?(МассивНайденныхФайлов.Количество() = 0, "", " или подкаталог " + "\Roles\" + ИмяРоли));
			КонецЕсли;
		КонецЦикла;
		МассивФайлов = Новый Массив;
		Для Каждого Файл Из СписокФайлов Цикл
			//МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(Файл.Значение.ПолноеИмя, Файл));
			МассивФайлов.Добавить(Новый ОписаниеПередаваемогоФайла(Файл.Значение.ПолноеИмя,));
		КонецЦикла;
		СтруктПараметры = Новый Структура("СписокПредставлений", СписокПредставлений);
		НачатьПомещениеФайлов(Новый ОписаниеОповещения("ПослеПомещенияФайлов", ЭтаФорма, СтруктПараметры), МассивФайлов, Ложь, УникальныйИдентификатор);

Показать

превращаются в непойми что.. Мб сталкивался кто и менее ректально решил следующую задачу: есть некое табличное поле с отметками, необходимо в цикле обойти все помеченные строки и по имени реквизита в строке поискать файлы в определённом каталоге, если файлы найдены - добавить их в список значений, для дальнейшей передачи.. Суть проблемы в том, что используя асинхронные методы я не могу прервать выполнение кода, т.е. кусок
&НаКлиенте
Перем СписокФайлов;

&НаКлиенте
Процедура ПослеПоискаФайлов(НайденныеФайлы, ДополнительныеПараметры) Экспорт
	ИмяРоли = ДополнительныеПараметры.Имя;
	Если НайденныеФайлы.Количество() = 0 Тогда
		Сообщить("Не найдено описание роли " + ИмяРоли);
	Иначе
		СписокФайлов.Добавить(НайденныеФайлы[0], ИмяФайла);
	КонецЕсли;
КонецПроцедуры

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

почти отрабатывает, т.к. файлы ищет правильные, но вот со значением параметров просто беда, т.к. начинается поиск только после выхода из процедуры и в структуре остается только последняя строка из выбранных (т.е. например в табличном поле 2 отмеченных строки с именами например "Администратор" и "ПолныеПрава" идешь в отладку и оба вызова ПослеПоискаФайлов показывают что ДополнительныеПараметры.Имя = "ПолныеПрава").. В результате приходится из имени файла выдергивать, а это примерно то же самое что дергать зубы, через задний проход... Не помогает ни рекурсия с Знач, чтобы не менялся фактический параметр, ни подключение обработчика ожидания.. Буду весьма благодарен за идею как в текущих реалиях подойти к данной задаче :-)
ЗЫ. Возможно про лучи добра и погорячился, просто эмоции ... переполняют после дня ломания мозга в попытках понять, как эту траблу обойти :-) Всем бобра))
67. mentozavr 30 30.04.19 10:47 Сейчас в теме
Спасибо за мануал. помог. Пытаюсь отобразить загруженный пдф док на форме в web-клиенте.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	АдресМ = ПолучитьНавигационнуюСсылку(Объект.Ссылка,"ДанныеРезюме");
	//сообщить (АдресМ);
	#Если ВебКлиент Тогда
       Если Не ПодключитьРасширениеРаботыСФайлами() Тогда
        УстановитьРасширениеРаботыСФайлами();
        ПодключитьРасширениеРаботыСФайлами();
       КонецЕсли;
    #КонецЕсли
	Реквизит1 = "<html><EMBED id='PDF' width=100% height=100% type=""application/pdf"" src="""+АдресМ+"""></EMBED></html>";
	//Реквизит1 = АдресМ;
КонецПроцедуры
Показать

Поле появляется и пишет, что невозможно отобразить pdf документ. на толстом клиенте все работает изумительно
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Владивосток
зарплата от 60 000 руб. до 90 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист 1С
Москва
зарплата от 120 000 руб.
Полный день

Руководитель проекта, аналитик, консультант
Санкт-Петербург
По совместительству

Программист 1С
Самара
зарплата от 100 000 руб. до 150 000 руб.
Полный день