Имя: Пароль:
1C
1С v8
Добавить фильтр при выборе картинки
0 deskut
 
16.02.26
17:50
Понадобилось добавить картинку в документ. В документе создал реквизит Картинка (хранилище значения), на форме документа создал реквизит АдресКартинки. Создал кнопку прикрепления картинки, повесил на нее процедуру.

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

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

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

Это основная часть кода, есть еще парочка проверок, кнопка удаления картинки и тд. Всё работает идеально. Но мне нужно, чтобы когда открывается проводник с выбором файла, там стоял фильтр (только изображения), а не вся куча файлов. Помогите, пожалуйста.
1 ass1c
 
16.02.26
17:56
Как пример:
	ОписаниеОповещенияОЗавершении  = Новый ОписаниеОповещения("ОбработатьВыбранныеФайлы", ЭтаФорма);
	
	Фильтр = "Excel файлы(*.xml;*.xmlx)|*.xml;*.xmlx";
	ДиалогПомещенияФайлов = новый ПараметрыДиалогаПомещенияФайлов("Выберите картинку", Ложь, Фильтр);
	
	НачатьПомещениеФайловНаСервер(ОписаниеОповещенияОЗавершении, , ,ДиалогПомещенияФайлов , ЭтаФорма.УникальныйИдентификатор);
2 shuhard
 
16.02.26
17:59
(0) &НаКлиенте
Процедура ФайлДанныхНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    д = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    д.Заголовок = "Выберите файл";
    д.МножественныйВыбор = Ложь;
    д.ПроверятьСуществованиеФайла = Истина;
    д.Фильтр = "Файлы Excel (*.xlsx, *.xls)|*.xlsx;*.xls";
    д.ПредварительныйПросмотр = Ложь;
    д.Показать(Новый ОписаниеОповещения("ОбработкаВыбораПользователя", ЭтаФорма, "ФайлДанныхНачалоВыбора"));
    
КонецПроцедуры
3 deskut
 
16.02.26
18:14
Сейчас немного обнаглею, но... не могли бы показать на примере моего кода? Оба варианта не понял... :(
4 ass1c
 
16.02.26
18:21
(3) ну есть такое. какая версия платформы? Юзай:

Глобальный контекст (Global context)
НачатьПомещениеФайла (BeginPutFile)
Не рекомендуется использовать, начиная с версии 8.3.15.
Рекомендуется использовать:
НачатьПомещениеФайлаНаСервер

Вариант синтаксиса: С диалогом выбора файла
Синтаксис:
НачатьПомещениеФайлаНаСервер(<ОписаниеОповещенияОЗавершении>, <ОписаниеОповещенияОХодеВыполнения>, <ОписаниеОповещенияПередНачалом>, <Адрес>, <ПараметрыДиалога>, <УникальныйИдентификаторФормы>)

Используй актуальные способы и методы. Можно еще дальше пойти через Асинх...
5 ass1c
 
16.02.26
18:27
Не тестил, но примерно так:

&НаКлиенте
Процедура Загрузка(Команда)
	
	ОписаниеОповещенияОЗавершении  = Новый ОписаниеОповещения("ОбработатьВыбранныеФайлы", ЭтаФорма);
	
	Фильтр = "Файл изображения(*.png,*.jpg)|*.png;*.jpg";
	ДиалогПомещенияФайлов = новый ПараметрыДиалогаПомещенияФайлов("Выберите свое фото", Ложь, Фильтр);
	
	НачатьПомещениеФайловНаСервер(ОписаниеОповещенияОЗавершении, , ,ДиалогПомещенияФайлов , ЭтаФорма.УникальныйИдентификатор);
	
КонецПроцедуры 

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

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

КонецПроцедуры
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой