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

13.03.24

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

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

 

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

 

 

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

 

 

 

 

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

 

 

 

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

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

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

 

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

 

 

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

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

 

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

 

 

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

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

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

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

 

 
 Полный код

 

Тестировал: 

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

 

 

Синтакс-помощник БСП

Решение «Синтакс-помощник БСП» помогает разработчикам быстро находить нужные методы, модули и примеры реализации в рамках Библиотеки стандартных подсистем (БСП). Полезен как новичкам, так и опытным специалистам — ускоряет разработку и повышает качество кода благодаря готовым шаблонам и примерам решений.

Вступайте в нашу телеграмм-группу Инфостарт

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

БСП (Библиотека стандартных подсистем) Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Абонемент ($m)

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

1 стартмани

23.11.2018    48435    ids79    30    

194

БСП (Библиотека стандартных подсистем) Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Не секрет, что в БСП не реализована функция получения изображений посредством WIA-драйвера. Однако такая потребность частенько появляется. К примеру, сетевые принтеры и веб-камеры, работающие через стандартный Windows-интерфейс WIA, остаются не у дел. Давайте исправим такую несправедливость!

06.07.2018    13057    nuctoh    3    

31

БСП (Библиотека стандартных подсистем) Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Продолжение статьи «БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному». Пойдем от финального примера той статьи и сделаем несколько шагов навстречу к универсальному решению.

2 стартмани

21.05.2018    27129    dsdred    17    

79

БСП (Библиотека стандартных подсистем) Программист 1С:Предприятие 8 1С:Библиотека стандартных подсистем Абонемент ($m)

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    93375    dsdred    50    

342

БСП (Библиотека стандартных подсистем) Программист 1С:Предприятие 8 1С:Бухгалтерия 3.0 Абонемент ($m)

Печатные формы на внешних обработках скоро канут в лету. На смену им приходят ПФ, реализованные в виде расширений конфигурации. Не нашел на сайте примеров таких расширений. Привожу пример подобного расширения для БП 3.0.

1 стартмани

06.12.2017    39564    66    kwazi    6    

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


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

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

как будто чего то не хватает... оно нигде не используется
Для отправки сообщения требуется регистрация/авторизация