Импорт картинки в 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 1С:ERP Управление предприятием 2 Платные (руб)

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

2400 руб.

29.06.2020    18234    25    6    

39

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

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    12811    mrXoxot    43    

113

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

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    6170    smielka    37    

98

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

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

27.12.2023    13532    816    elcoan    47    

114

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

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

2 стартмани

10.04.2023    11212    160    acces969    31    

121

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

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

1 стартмани

05.07.2022    5061    kalyaka    6    

33

Работа с интерфейсом Программист Пользователь Платформа 1С v8.3 8.3.14 Конфигурации 1cv8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

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

1 стартмани

01.07.2022    22976    370    rpgshnik    65    

93
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. glek 120 14.03.23 16:19 Сейчас в теме
БСП не позволяет религия использовать? Обязательно изобретать велосипет?
bayselonarrend; SergeRSA; bilex; +3 1 Ответить
3. krisstya2000 14 14.03.23 17:15 Сейчас в теме
(1) примите к сведению, что на этом форуме ищут помощь не только опытные программисты, но и студенты, от которых требуют вначале именно этого "велосипеда")
4. glek 120 15.03.23 07:43 Сейчас в теме
(3) Вот и не надо обучать с велосипедов. Надо обучать правильно. А то потом приходят на работу и вместо БСП пишут "гибкие решения"
SergeRSA; bilex; +2 Ответить
5. romasna 323 19.03.23 10:59 Сейчас в теме
Вот ведь заели автора статьи.... :) Она права, не все начинают программировать с изучения БСП. Помню, как я рылся в интернете, выискивая информацию именно по добавлению картинок в БД через УФ, для меня это было актуально применительно к небольшой самописной конфигурации.
ЗЫ:Если бы товарищ Габец А.П. со своей книгой "1С-Предприятие8.1. Простые примеры разработки" держал равнение на опытных программистов, то и книги не было бы.
2. awk 744 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];
				
				ЗавершениеЗагрузки = Новый ОписаниеОповещения("ЗавершениеЗагрузкиФайлаНаСервер",ЭтаФорма);
				НачатьПомещениеФайлаНаСервер(ЗавершениеЗагрузки, , , ,ИмяФайла,УникальныйИдентификатор);
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

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

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


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

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

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