[БСП] Присоединенные файлы. Добавляем и обновляем картинку и вывод ее на форму документа

13.03.24

Разработка - БСП (Библиотека стандартных подсистем)

Используя механизм БСП можно загружать, обновлять и хранить скриншот, выводить его на форму документа.
 

 

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

 

 

Добавим кнопку "Загрузить скриншот" и событие "ПриОткрытии"

 

 

 

 

При нажатии кнопки "ЗагрузитьСкриншот" выберем файл и сразу отобразим его на форме

 

 

 

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

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

	СкриншотЗаявки = Адрес; 
	
	ДвоичныеДанные = Новый ДвоичныеДанные(ВыбранноеИмяФайла);
	Расширение = Прав(ВыбранноеИмяФайла,3); 
	Если Лев(Прав(ВыбранноеИмяФайла,5),1) = "." Тогда
		Расширение = Прав(ВыбранноеИмяФайла,4);	
	КонецЕсли;	
	ДобавитьФайлНаСервере(ДвоичныеДанные,Расширение);
	
КонецПроцедуры

 

Также после выбора добавим или обновим его в присоединенных файлах. Сделаем это методами БСП ДобавитьФайл() и ОбновитьФайл() 

 

 

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

&НаСервере
Функция ПолучитьСкриншотЗаявкиНаСервере()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ЗаявкаКлиентаПрисоединенныеФайлы.Ссылка КАК ПрисоединенныйФайл
		|ИЗ
		|	Справочник.ЗаявкаКлиентаПрисоединенныеФайлы КАК ЗаявкаКлиентаПрисоединенныеФайлы
		|ГДЕ
		|	ЗаявкаКлиентаПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла
		|	И ЗаявкаКлиентаПрисоединенныеФайлы.Наименование = ""СкриншотЗаявки""
		|	И НЕ ЗаявкаКлиентаПрисоединенныеФайлы.ПометкаУдаления";
	
	Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Если ВыборкаДетальныеЗаписи.Следующий() Тогда
    	Возврат ВыборкаДетальныеЗаписи.ПрисоединенныйФайл;
	КонецЕсли;
	
КонецФункции

 

"ПриОткрытии" будем получать методом БСП ПолучитьПрисоединенныйФайл() картинку и выводить ее на форму

 

 

&НаКлиенте
Процедура ПолучитьСкриншотЗаявкиНаКлиенте()

	ПрисоединенныйФайл = ПолучитьСкриншотЗаявкиНаСервере();   
	Если НЕ ЗначениеЗаполнено(ПрисоединенныйФайл) Тогда
		Возврат;	
	КонецЕсли;
	
	ДополнительныеПараметры = Новый Структура;   
	ДанныеФайла = ПолучитьДанныеФайла(ПрисоединенныйФайл, УникальныйИдентификатор);

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

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

 

 
 Полный код

 

Тестировал: 

  • 1С:Комплексная автоматизация 2 (2.4.13.209)
  • Платформа 1С:Предприятие 8.3 (8.3.19.1467)

 

 

БСП Присоединенные файлы

См. также

Шаблон многопоточного выполнения фонового задания

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Пример шаблона для многопоточного выполнения фонового задания на основе БСП. Шаблоны сделаны для процедуры и функции.

2 стартмани

03.05.2024    784    11    Hitcher    2    

8

БСП. Добавляем отчет в меню Отчеты

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    3735    John_d    10    

96

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    2353    dimanich70    8    

14

Заполнение поля адреса в своей обработке [БСП]

Механизмы платформы 1С БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Небольшая шпаргалка по функциям БСП касательно адреса. Так скажем, еще один способ помимо https://infostart.ru/1c/articles/1060970/

12.02.2024    911    FilippovRI    0    

17

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2890    YA_418728146    11    

49

1С:БСП Дополнительные реквизиты и сведения

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Бесплатно (free)

В этой статье расскажем об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С: БСП).

19.01.2024    7965    PROSTO-1C    5    

47

Бесплатный митап 9 февраля «Библиотеки и фреймворки на 1С и всё, что с этим связано»

БСП (Библиотека стандартных подсистем) Мероприятия Бесплатно (free)

Митап посвящен вопросам создания, использования и поддержке переиспользуемого кода при разработке решений на платформе 1С:Предприятие 8.

15.01.2024    4037    0    Infostart    0    

21
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. bayselonarrend 1353 13.03.24 11:42 Сейчас в теме
Есть принципиальное отличие между использованием РаботаСФайлами и просто ПоместитьВоВременноеХранилище/ПолучитьИзВременногоХранилища ?
2. John_d 5444 13.03.24 11:45 Сейчас в теме
(1) Основное различие между ними заключается в том, что РаботаСФайлами используется для работы с физическими файлами на сервере (например, документами, изображениями), в то время как временное хранилище предназначено для временного хранения любых объектов в памяти.
3. bayselonarrend 1353 13.03.24 11:51 Сейчас в теме
(2)
РаботаСФайлами используется для работы с физическими файлами на сервере


Не очень понимаю. Оно перезаписывает файлы на сервере двоичными, полученными из диалога?
11. Дмитрий74Чел 235 01.04.24 09:22 Сейчас в теме
(3) ПоместитьВоВременноеХранилище/ПолучитьИзВременногоХранилища - методы платформы. Они помещают файл во внутреннее хранилище в файлах вида "srvinfo\1540\reg_1541\snccntx98b49131-88d8-4684-800d-af9714705f24\snccntx.dat"
РаботаСФайлами - методы библиотеки БСП. Они как правило используются чтобы хранить файлы в базе, в справочниках вида <ИмяОбъекта>ПрисоединенныеФайлы (РеализацииТоваровПрисоединенныеФайлы)).
Чаще всего библиотека это обертка над платформенными методами, например чтобы не писать самому код по передаче файлов с клиента на сервер и обратно.

ПоместитьВоВременноеХранилище помещает данные по указанному адресу (если передаем произвольный ГУИД), или если ГУИд не передаем - то платформа сама его генерирует и возвращает в качестве адреса. Перезапись файла сохраненного в хранилище произойдет если вы повторно вызываете ПоместитьВоВременноеХранилище(старый ГУИД).
4. Fox-trot 158 13.03.24 18:09 Сейчас в теме
а не проще мышкой махать?
Прикрепленные файлы:
video5427237717379402410.mp4
EMelihoff; dsdred; +2 Ответить
5. John_d 5444 13.03.24 22:06 Сейчас в теме
(4) кому-то может так будет неудобно
6. Fox-trot 158 13.03.24 22:38 Сейчас в теме
(5) согласен. нет ничего идеального, но нужно стремиться ))
ubnkfl; dsdred; +2 Ответить
7. ubnkfl 14.03.24 11:28 Сейчас в теме
(6) Ну так выложили бы код обработчиков событий перетаскивания для сообщества ))
baracuda; +1 Ответить
8. Fox-trot 158 14.03.24 12:46 Сейчас в теме
(7) гитхаб и поиск в помощь
9. DrAku1a 1724 16.03.24 03:20 Сейчас в теме
8.3.24 вышла - пора делать кнопку "Вставить скриншот из буфера обмена" :-)
10. John_d 5444 19.03.24 09:56 Сейчас в теме
(9) Спасибо, хороший совет
12. Spyke123 30.04.24 13:04 Сейчас в теме
Может ли кто-нибудь подсказать, где можно бесплатно достать БСП для учебной версии 1С 8.3? Я занимаюсь разработкой проекта по 1С и мне нужно сделать форму для режима 1С предприятия, на которой должны отображаться фото и ФИ активного пользователя. Преподаватель посоветовал сделать через БСП, а вот где его найти к сожалению не подсказал. Сам только учусь, поэтому многого ещё не знаю. Буду очень рад, если кто-нибудь сможет помочь с этим. За ранее спасибо.
Оставьте свое сообщение