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

13.03.24

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

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

 

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

 

 

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

 

 

 

 

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

 

 

 

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

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

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

 

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

 

 

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

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

 

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

 

 

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

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

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

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

 

 
 Полный код

 

Тестировал: 

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

 

 

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

См. также

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

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

24.10.2024    1087    PROSTO-1C    0    

12

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

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    977    PROSTO-1C    4    

10

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

В статье рассмотрим пошаговую инструкцию создания дополнительного отчета с фоновым формированием результата.

04.10.2024    1829    MadRave    11    

24

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

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

10.09.2024    1816    MadRave    1    

17

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

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1253    n_mezentsev    10    

8

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

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4104    John_d    10    

52

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

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5354    PROSTO-1C    12    

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


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

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

releases.1c.ru/project/SSL31

v8.1c.ru/tekhnologii/standartnye-biblioteki/1s-biblioteka-standartnykh-podsistem/


Можно учебную версию БП скачать, там есть БСП.

online.1c.ru/catalog/programs/program/34690674/
Оставьте свое сообщение