При нажатии кнопки "ЗагрузитьСкриншот" выберем файл и сразу отобразим его на форме
&НаКлиенте
Процедура ЗагрузитьСкриншот(Команда)
Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайла",ЭтотОбъект);
НачатьПомещениеФайла(Оповещение,,,Истина, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла,ДополнительныйПараметр) Экспорт
Если НЕ Результат Тогда
Возврат;
КонецЕсли;
СкриншотЗаявки = Адрес;
ДвоичныеДанные = Новый ДвоичныеДанные(ВыбранноеИмяФайла);
Расширение = Прав(ВыбранноеИмяФайла,3);
Если Лев(Прав(ВыбранноеИмяФайла,5),1) = "." Тогда
Расширение = Прав(ВыбранноеИмяФайла,4);
КонецЕсли;
ДобавитьФайлНаСервере(ДвоичныеДанные,Расширение);
КонецПроцедуры
Также после выбора добавим или обновим его в присоединенных файлах. Сделаем это методами БСП ДобавитьФайл() и ОбновитьФайл()
&НаСервере
Процедура ДобавитьФайлНаСервере(ДвоичныеДанные,Расширение) Экспорт
ПрисоединенныйСкриншот = ПолучитьСкриншотЗаявкиНаСервере();
ПутьККаталогу = КаталогВременныхФайлов();
ИмяБезРасширения = "СкриншотЗаявки";
ИмяФайла = ПутьККаталогу + ИмяБезРасширения + "." + Расширение;
АдресФайлаВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
ПараметрыФайла = Новый Структура;
ПараметрыФайла.Вставить("ВладелецФайлов", Объект.Ссылка);
ПараметрыФайла.Вставить("Автор", Неопределено);
ПараметрыФайла.Вставить("ИмяБезРасширения", ИмяБезРасширения);
ПараметрыФайла.Вставить("РасширениеБезТочки", Расширение);
ПараметрыФайла.Вставить("ВремяИзменения", Неопределено);
ПараметрыФайла.Вставить("ВремяИзмененияУниверсальное", Неопределено);
Если ЗначениеЗаполнено(ПрисоединенныйСкриншот) Тогда
ПараметрыФайла.Вставить("АдресФайлаВоВременномХранилище", АдресФайлаВХранилище);
ПараметрыФайла.Вставить("АдресВременногоХранилищаТекста", "");
РаботаСФайлами.ОбновитьФайл(ПрисоединенныйСкриншот,ПараметрыФайла);
Иначе
РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресФайлаВХранилище);
КонецЕсли;
УдалитьФайлы(ИмяФайла);
КонецПроцедуры
&НаСервере
Функция ПолучитьСкриншотЗаявкиНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗаявкаКлиентаПрисоединенныеФайлы.Ссылка КАК ПрисоединенныйФайл
|ИЗ
| Справочник.ЗаявкаКлиентаПрисоединенныеФайлы КАК ЗаявкаКлиентаПрисоединенныеФайлы
|ГДЕ
| ЗаявкаКлиентаПрисоединенныеФайлы.ВладелецФайла = &ВладелецФайла
| И ЗаявкаКлиентаПрисоединенныеФайлы.Наименование = ""СкриншотЗаявки""
| И НЕ ЗаявкаКлиентаПрисоединенныеФайлы.ПометкаУдаления";
Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.ПрисоединенныйФайл;
КонецЕсли;
КонецФункции
"ПриОткрытии" будем получать методом БСП ПолучитьПрисоединенныйФайл() картинку и выводить ее на форму
&НаКлиенте
Процедура ПолучитьСкриншотЗаявкиНаКлиенте()
ПрисоединенныйФайл = ПолучитьСкриншотЗаявкиНаСервере();
Если НЕ ЗначениеЗаполнено(ПрисоединенныйФайл) Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДанныеФайла = ПолучитьДанныеФайла(ПрисоединенныйФайл, УникальныйИдентификатор);
Оповещение = Новый ОписаниеОповещения(
"ЗагрузитьСкриншотЗаявки",
ЭтотОбъект,
ДополнительныеПараметры);
РаботаСФайламиКлиент.ПолучитьПрисоединенныйФайл(
Оповещение,
ПрисоединенныйФайл,
УникальныйИдентификатор,
Новый Структура("ДанныеФайла, ДляРедактирования", ДанныеФайла, Ложь));
КонецПроцедуры
&НаКлиенте
Функция ЗагрузитьСкриншотЗаявки(Результат, ДополнительныеПараметры) Экспорт
Если НЕ ПустаяСтрока(Результат.ОписаниеОшибки) Тогда
ВызватьИсключение Результат.ОписаниеОшибки;
КонецЕсли;
ДвоичныеДанные = Новый ДвоичныеДанные(Результат.ПолноеИмяФайла);
СкриншотЗаявки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
КонецФункции
Тестировал:
- 1С:Комплексная автоматизация 2 (2.4.13.209)
- Платформа 1С:Предприятие 8.3 (8.3.19.1467)