Импорт картинки в 1С

14.03.23

Разработка - Работа с интерфейсом

Довольно часто появляется потребность отображения всевозможных картинок в справочниках. Так, например, нам может потребоваться отображать фотографии нашей продукции в справочнике Товары или фото наших сотрудников в справочнике Сотрудники. Понятно, что такие фотографии лучше всего хранить непосредственно в базе данных 1С. И сегодня мы разберемся, как добавлять и хранить фотографии в базе данных 1С 8.3, а также как отображать данные фотографии в справочниках.

1. Добавляем реквизит "Картинка" к справочнику Тренеры тип "ХранилищеЗначения"

 

 

2. Создаем форму элемента в справочнике Тренеры.

 

 

На этой форме добавляем реквизит "СсылкаНаКартинку". И перетаскиваем на форму. Нажимаем на этот объект на форме и ставим свойства: Вид - поле картинки и устанавливаем свойство гиперссылка для возможности добавления картинки по нажатию 

 

 

3. Создаем процедуру нажатия на поле картинки. Выбираем "Создать на клиенте"

 

 

В данный обработчик вставляем следующий код, который будет вызывать диалог открытия файла с расширением jpg, png, jpeg

СтандартнаяОбработка = ложь;
    ДиалогОткрытия = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогОткрытия.ПолноеИмяФайла = "";
    ДиалогОткрытия.Фильтр = "Файл JPG, PNG, JPEG |*.jpg; *.png; *.jpeg";
    ДиалогОткрытия.МножественныйВыбор = ложь;
    ДиалогОткрытия.Заголовок = "Выбор изображения";
    ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗагрузкиФайла", ЭтаФорма); 
    ДиалогОткрытия.Показать(ОписаниеОповещения);

 

4. Опишем процедуру ПослеЗагрузкиФайла, которую указали в описании оповещения, в этой процедуре, если пользователь выбрал файл, мы будем помещать его во временное хранилище при помощи метода НачатьПомещениеФайлаНаСервер.

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

 

5. Следующим шагом, необходимо в процедуре ПослеПеремещенияФайлаНаСервер, которая указана в описании оповещения процедуры ПослеЗагрузкиФайла, присвоить реквизиту формы «СсылкаНаКартинку» адрес временного хранилища.

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

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

Для того, чтобы картинка хранилась в базе, нам необходимо сохранить картинку в реквизит объекта, делать мы это будем в событии формы ПередЗаписьюНаСервере. Создадим это событие. 

6. Через события формы создаем процедуру "ПередЗаписьюНаСервере". Соответственно выбираем "Создание на сервере" 

 

 

Чтобы картинка никуда не делась, после сохранения нужно получить адрес с реквизита объекта, поскольку у нас реквизиту формы присвоен адрес во временном хранилище

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

Последнее, что нам осталось сделать, это появление нашей картинки при открытии формы, если картинку мы уже добавили в базу


7.  Через события формы создаем процедуру "ПриСозданииНаСервере". "Создать на сервере"

СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Картинка");

 

Теперь при открытии формы появится поле для добавления картинки в заданных форматах через диалоговое окно. 

 

Для редактирования масштаба отображаемой картинки необходимо в свойствах поля "Ссылка на картинку" указать подходящий масштаб. Например 30 

импорт

См. также

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    61795    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54402    16    21    

42

Управление дашбордами

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    16697    21    4    

35

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    10736    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    9613    151    acces969    31    

118

Модель состояния для MVC

Работа с интерфейсом Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    3665    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12080    1    5    

10
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. glek 119 14.03.23 16:19 Сейчас в теме
БСП не позволяет религия использовать? Обязательно изобретать велосипет?
bayselonarrend; SergeRSA; bilex; +3 1 Ответить
3. krisstya2000 11 14.03.23 17:15 Сейчас в теме
(1) примите к сведению, что на этом форуме ищут помощь не только опытные программисты, но и студенты, от которых требуют вначале именно этого "велосипеда")
4. glek 119 15.03.23 07:43 Сейчас в теме
(3) Вот и не надо обучать с велосипедов. Надо обучать правильно. А то потом приходят на работу и вместо БСП пишут "гибкие решения"
SergeRSA; bilex; +2 Ответить
5. romasna 321 19.03.23 10:59 Сейчас в теме
Вот ведь заели автора статьи.... :) Она права, не все начинают программировать с изучения БСП. Помню, как я рылся в интернете, выискивая информацию именно по добавлению картинок в БД через УФ, для меня это было актуально применительно к небольшой самописной конфигурации.
ЗЫ:Если бы товарищ Габец А.П. со своей книгой "1С-Предприятие8.1. Простые примеры разработки" держал равнение на опытных программистов, то и книги не было бы.
2. awk 741 14.03.23 16:36 Сейчас в теме
(0) Вы бы хотя бы код оформили согласно стандарту, что ли...
6. SergeRSA 22.03.23 09:02 Сейчас в теме
Такое решение подходит только, как элемент изучения 1С, но не как рабочий вариант.
7. user700522_lerner584 25.03.23 13:17 Сейчас в теме
К вопросу что это для начинающих. Хорошая «школа» сразу приучать людей двоичные данные в основном объекте хранить…
8. user1909675 27.03.23 15:35 Сейчас в теме
Процедура ДобавитьКартинку(Команда)
	
	ИмяФайла = "";
	
	Если ПоместитьФайл(ПутьКФайлу,,ИмяФайла,Истина) = Истина Тогда
		
		Картинка = ПутьКФайлу;
		УстановитьКартинку();   
		
	КонецЕсли;
	
КонецПроцедуры    

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Картинка = ПолучитьНавигационнуюСсылку(Объект.Картинка, "Файл");
	Элементы.Картинка.РазмерКартинки = РазмерКартинки.АвтоРазмер;
КонецПроцедуры
Показать
9. пользователь 18.05.23 07:41
Сообщение было скрыто модератором.
...
10. пользователь 21.05.23 18:19
Сообщение было скрыто модератором.
...
11. пользователь 24.05.23 05:28
Сообщение было скрыто модератором.
...
12. пользователь 17.06.23 19:31
Сообщение было скрыто модератором.
...
13. пользователь 18.06.23 18:25
Сообщение было скрыто модератором.
...
14. пользователь 18.06.23 21:49
Сообщение было скрыто модератором.
...
15. пользователь 19.06.23 17:17
Сообщение было скрыто модератором.
...
16. пользователь 20.06.23 12:00
Сообщение было скрыто модератором.
...
17. Deylon 13.03.24 15:19 Сейчас в теме
у меня вот такой код получился в модуле формы объекта
&НаКлиенте
Процедура ДобавитьФото(Команда)
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Диалог.ПолноеИмяФайла = "";
	Диалог.МножественныйВыбор = Ложь;
	Диалог.Фильтр = "Выберите файл .gif|*.gif";
	Диалог.Заголовок = "Выберите фотографию";
	
	Оповещение = Новый ОписаниеОповещения("ЗавершениеВыбораФайла", ЭтаФорма);
	Диалог.Показать(Оповещение);
КонецПроцедуры

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

КонецПроцедуры

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

&НаСервере
Процедура ОбработкаФайлаНаСервере(АдресФайла)
	Если ЭтоАдресВременногоХранилища(АдресФайла)Тогда
		ХранениеФотографии = АдресФайла;
	КонецЕсли;	

КонецПроцедуры

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ХранениеФотографии = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Фото");
КонецПроцедуры
Показать
18. YourAlinochka 13.03.24 15:58 Сейчас в теме
ДанныеКартинки имеет тип ХранилищеЗначения

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

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

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

&НаСервере
Процедура ОбработкаФайлаНаСервере(АдресФайла)
	Если ЭтоАдресВременногоХранилища(АдресФайла)Тогда
		СсылкаНаКартинку = АдресФайла; //СсылкаНаКартинку Это реквизит формы
	КонецЕсли;   
КонецПроцедуры


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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	СсылкаНаКартинку = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеКартинки"); //СсылкаНаКартинку Это реквизит формы, ДанныеКартинки это реквизит Справочника
КонецПроцедуры

Показать
Оставьте свое сообщение