Как добавлять картинки в 1с
Перейти к содержимому

Как добавлять картинки в 1с

  • автор:

Картинки табличного документа 1С

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

Вставить картинку в табличный документ 1С

Научимся вставлять картинки в макет табличного документа 1С. Для того, чтобы вставить картинку в табличный документ необходимо воспользоваться командой «Картинка…» тогда, когда табличный документ открыть и на нем установлен фокус. Команда «Картинка…» находится по следующему пути в конфигураторе 1С: «Главное меню – Таблица — Рисунки».

Вставить картинку в табличный документ 1С

Откроется окно «Выбор картинки».

Вставить картинку в табличный документ 1С

В этом окне есть несколько вариантов выбора. В закладке «Из библиотеки» мы можем выбрать или общую картинку конфигурации, или стандартную картинку платформы 1С.

На закладке «Из файла» мы можем загрузить нужную картинку из файловой системы.

Вставим картинку из файла. Для этого на закладке «Из файла» следует нажать на кнопку «Выбрать файл».

Вставить картинку в табличный документ 1С

Найти нужный файл в открывшемся окне «Выбор картинки».

Вставить картинку в табличный документ 1С

После выбора рисунка, вы можете сделать белый цвет прозрачным. Для этого следует нажать на кнопку «Установить прозрачный цвет», после этого ваш курсор станет «карандашом», и этим курсором необходимо кликнуть по белому цвету картинки.

Вставить картинку в табличный документ 1С

В результате, белый цвет уйдет.

Вставить картинку в табличный документ 1С

После нажатия на кнопку «Ок» окна «Выбор картинки», картинка отобразится в табличном документе.

Картинки табличного документа 1С

Заметьте, что вокруг вставленной картинки имеется рамка. Для того, чтобы убрать эту рамку, откроем палитру свойств картинки.

И в свойстве Линия установим значение «Нет линии».

Картинки табличного документа 1С

В результате, рамки во круг картинки не станет.

Картинки табличного документа 1С

Добавим макету область, создадим форму, команду формы, в которой будем выводить табличный документ на просмотр.

&НаСервереБезКонтекста Функция ПолучитьТабличныйДокумент() Макет = Отчеты.ПримерСКартинками.ПолучитьМакет("Макет"); Область = Макет.ПолучитьОбласть("Картинка"); ТабДок = Новый ТабличныйДокумент; ТабДок.ТолькоПросмотр = Истина; ТабДок.Вывести(Область); Возврат ТабДок; КонецФункции // ПолучитьТабличныйДокумент() &НаКлиенте Процедура Печать(Команда) ТабДок = ПолучитьТабличныйДокумент(); ТабДок.Показать(); КонецПроцедуры 

И посмотрим, как выведется наш табличный документ с картинкой.

Картинки табличного документа 1С

Вывести картинку в табличный документ 1С

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

В этой статье Вы узнаете, как загружать и хранить картинки в хранилище значений:

В учебной конфигурации у справочника Контрагенты был создан реквизит Логотип, тип которого Хранилище значения.

Реквизит справочника

В этом реквизите хранятся картинки.

Картинка в справочнике 1С

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

Есть несколько способов вывода картинки на табличный документ, разберем один из них.

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

Макет табличного документа 1С

Теперь, в макет добавим пустую картинку. Нам следует выполнить команду «Рисунок…» по уже знакомому пути «Главное меню – Таблица — Рисунки», но не выбирать ни какую картинку ни где, а просто нажать на кнопку «Ок».

Вывести картинку в табличный документ 1С

Будет добавлена пуста картинка (скорее всего, она будет маленького размера).

Вывести картинку в табличный документ 1С

Откроем палитру свойств этой картинки, изменим имя, уберем рамку и установим авторазмер картинки.

Вывести картинку в табличный документ 1С

Всё! Макет готов, теперь создадим на управляемой форме реквизит Контрагент, поле ввода контрагента, а также команду для вывода табличного документа.

Управляемая форма 1С

Создадим обработчик команды и функцию, в которой будем выводить в табличный документ данные контрагента.

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

Мы получили данные контрагента через запрос. Обращаю ваше внимание на поле «Контрагенты.Логотип КАК Логотип», так мы получаем хранилище значения. Пока все вывели табличный документ без рисунка. Реализуем возможность вывода рисунка. Для этого, вставим после вывода параметров области (ИНН,КПП, название) следующий код.

КартинкаВПамяти = Выборка.Логотип.Получить();//1 КартинкаОбъект = Новый Картинка(КартинкаВПамяти,Истина); //2 Область.Рисунки.КартинкаЛоготипа.Картинка = КартинкаОбъект; //3 

В этом коде, из хранилища значений, которое в поле Логотип выборки, получим двоичный файл (//1). Потом создадим объект Картинка конструктором на основе двоичных данных (//2), вторым параметром Истина мы установили прозрачность картинки. И присвоим свойству Картинка рисунку области табличного документа, который мы добавили пустым, созданную картинку (//3).

По сути, мы программным способом «загрузили» картинку в свойство Картинка созданного нами пустого рисунка.

Картинка табличного документа 1С

Если мы сейчас попробуем показать этот табличный документ, то на нем отобразится картинка.

Картинка табличного документа 1С

Рассмотрим ещё, как программным способом вывести общую картинку. Например, в моей конфигурации имеется общая картинка под названием «Общий логотип».

Общая картинка конфигурации 1С

Выведем эту картинку в уже созданный ранее табличный документ.

Для этого, также как и в первый раз, добавим на табличный документ пустую картинку, которую назовем ОбщийЛоготип, и у которой уберем обводку.

Картинка табличного документа 1С

Нам осталось вывести эту картинку при формировании табличного документа. Делается это гораздо проще, чем с картинкой из хранилища значений: просто присваиваем свойству Картинка, вновь добавленному рисунку табличного документа, общую картинку из библиотеки картинок.

Область.Рисунки.ОбщийЛоготип.Картинка = БиблиотекаКартинок.ОбщийЛоготип; 

После этого, общая картинка будет выведена в табличный документ.

Картинка табличного документа 1С

Другие статьи про табличные документы в 1С:

Более подробно и основательно разработка в 1С дается в моей книге: «Программировать в 1С за 11 шагов»

Это изображение имеет пустой атрибут alt; его имя файла - 1C-в-желтом-цвете-3D-221x300.png

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»

Это изображение имеет пустой атрибут alt; его имя файла - 1_в-желтом-цвете-3D-маленькая-221x300.jpg

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Картинка в 1С 8.3 — программная работа

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

Для демонстрации работы с картинками решим простую задачу: в нашей условной базе имеется справочник Номенклатура, наш заказчик хочет, чтобы к каждой номенклатуре можно было привязать картинку этой номенклатуры. Реализуем эту задачу.

Первым делом у справочника Номенклатура создадим реквизит Картинка с типом ХранилищеЗначений.

Реквизит с типом ХранилищеЗначений

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

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

Создадим управляемую форму элемента справочника, у этой формы создадим реквизит СсылкаНаКартинку с типом Строка.

Реквизит управляемой формы

Поместим этот реквизит на форму в виде поля, а вид у данного поля установим «Поле картинки».

Поле управляемой формы с видом Поле картинки

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

Свойство гиперссылка поля формы

Создадим клиентский обработчик для события Нажатие этого поля.

Событие нажатие поля формы

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

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

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

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

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

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

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

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

Событие управляемой формы ПередЗаписьюНаСервере

В обработчике события проверим, что реквизит формы СсылкаНаКартинку является адресом временного хранилища, и если это так, то получим файл картинки из временного хранилища и запишем его в реквизит Картинка нашего объекта. В конце удалим картинку из временного хранилища, а поскольку у нас реквизиту формы присвоен адрес во временном хранилище, то нужно получить адрес с реквизита объекта, чтобы картинка никуда не делась после сохранения.

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

И последний штрих: нам нужно сделать так, чтобы при открытии формы, картинка появлялась на форме, если она есть в базе (в хранилище).

Для этого, создадим обработчик для события ПриСозданииНаСервере формы.

Событие ПриСозданииНаСервере управляемой формы

И в этом обработчике будем получать навигационную ссылку на картинку.

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

Всё! Задача выполнена. Теперь мы можем загружать картинку на форму с помощью диалога открытия файлов, сохранять картинку в базу, и выводить картинку на форму при открытии, если она имеется в базе.

Загрузка картинки на управляемую форму

Загрузка картинки на управляемую форму

Мой опыт преподавания показывает, что многие начинающие и не очень разработчики всё еще слабо программируют в управляемом приложении, теряются во многих вопросах.
Книга «Основы разработки в 1С: Такси» научила программировать под управляемым приложением 300+ начинающих программистов 1С.
И Вы обязательно освоите все тонкости разработки под управляемым приложением 1С 8.3.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Только для читателей моего блога,
промо-код на скидку в 150 рублей — blog

Для тех же, кто только начинает:
общие вопросы по разработке в 1С подробно и основательно даются в книге «Программировать в 1С за 11 шагов»

Стартуйте в изучении 1С программирования в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Только для читателей моего блога, промо-код на скидку в 150 рублей — blog

Эти книги плюс книга по разработке оперативного учёт имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

8 Replies to “Картинка в 1С 8.3 — программная работа”

Подскажыте плз а как зделать штоб к 1 товару из справочника номенклатура можна привязать несколько картинок товара не обезательно штоб оны отображались просто штоб были привязаны к одному товару. Вот пример кода который помещает одну картинку как из него зделать несколько картинок ? &НаКлиенте Процедура ПрикрепитьФайл(Команда) // ОбъектТекущий = РеквизитФормыВЗначение(“Объект”); Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогОткрытияФайла.ПолноеИмяФайла = “”; ДиалогОткрытияФайла.Расширение = “”; ДиалогОткрытияФайла.МножественныйВыбор = Ложь; // ДиалогОткрытияФайла.ВыбранныеФайлы = “”; ДиалогОткрытияФайла.Заголовок = “Выберите файлы”; Если ДиалогОткрытияФайла.Выбрать() Тогда ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла; // Получение двоичные данные файла //ПутьКФайлу = ДиалогОткрытияФайла.Расширение; ДвоичныеДанные = Новый ДвоичныеДанные(ПутьКФайлу); // Имя = Новый ДвоичныеДанные(ПутьКФайлу); //Разширение = Новый ДвоичныеДанные(ПутьКФайлу); // Передача двоичных данные на сервер ПрикрепитьФайлНаСервере(ДвоичныеДанные); Иначе Текст = “ru = “”Файл(ы) не выбран!””; en = “”File(s) not selected!”””; Предупреждение(НСтр(Текст)); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПрикрепитьФайлНаСервере(ДвоичныеДанные) // Трансформируем объект формы в справочник-объект ОбъектТекущий = РеквизитФормыВЗначение(“Объект”); // Присваиваем новое значение реквизиту “Данные” //РегистрыСведений.СопоставлениеДанных. = Новый ХранилищеЗначения(ДвоичныеДанные); ОбъектТекущий.Картинка = Новый ХранилищеЗначения(ДвоичныеДанные); //ОбъектТекущий.КартинкаИмя = Новый ХранилищеЗначения(Имя); //ОбъектТекущий.КартинкаРазширение = Новый ХранилищеЗначения(Разширение); //ОбъектТекущий.Данные = Новый ХранилищеЗначения(ДвоичныеДанные); //ОбъектТекущий.РегистрыСведений.СопоставлениеДанных.Данные = Новый ХранилищеЗначения(ДвоичныеДанные); // Сохраняем изменения ОбъектТекущий.Записать(); // Данные = РегистрыСведений.СопоставлениеДанных.Данные; КонецПроцедуры

Решение задач по управляемым формам – тема № 14:
Как реализовать отображение картинок на форме и хранение их в базе

Работа с графическими изображениями повышает наглядность и удобство работы с программой. Поэтому в платформе «1С:Предприятие» реализована работа с изображениями.

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

Кроме того, в современных типовых конфигурациях фирмы «1С» есть возможность выбора места хранения прикрепленных изображений – в самой информационной базе или в отдельном каталоге на жестком диске. Это связано с тем, что графические изображения могут занимать достаточно много места, следовательно, размер информационной базы может сильно увеличиться.

Более подробно вопросы хранения изображений и вывода изображения на форму рассматриваются в курсе Профессиональная разработка интерфейсов и форм в 1С:Предприятие 8.3» (См. Занятие 26).

Однако приемы работы с изображениями не меняются в зависимости от способа хранения этих изображений. Далее рассмотрим пример задачи, который может встретиться на экзамене:

Необходимо обеспечить возможность прикреплять изображение к элементу справочника Номенклатура. Изображения следует хранить в информационной базе. Прикрепленное изображение номенклатуры должно отображаться на форме элемента.

На форме элемента справочника «Номенклатура» разместить кнопку «Загрузить картинку». При нажатии на эту кнопку пользователь выбирает файл на диске, который будет прикреплен к карточке номенклатуры:

Отображение картинки на форме номенклатуры

Рисунок 1 – Отображение картинки на форме номенклатуры

Как организовать хранение изображений в базе

Для хранения произвольных данных в платформе «1С:Предприятие» предназначен специальный тип ХранилищеЗначений. Этот тип позволяет хранить в информационной базе любые двоичные данные – изображения, электронные таблицы, PDF-файлы и так далее.

Важно, что поля такого типа хранятся непосредственно в информационной базе. Значит, они будут сохранены в файле с расширением dt при создании выгрузки базы, а также в резервной копии, созданной средствами СУБД. Дополнительное резервное копирование файлов с изображениями не потребуется.

Для решения поставленной задачи организуем хранение прикрепленных изображений непосредственно в справочнике Номенклатура. Для этого создадим в справочнике реквизит Изображение (тип – ХранилищеЗначения):

Реквизит справочника «Номенклатура» для хранение картинки

Рисунок 2 – Реквизит справочника «Номенклатура» для хранение картинки

Как отобразить изображение на форме

Реквизит с типом ХранилищеЗначения нельзя отобразить на управляемой форме, поэтому воспользуемся временным хранилищем для размещения двоичных данных картинки:

Использование временного хранилища для отображения картинки на форме

Рисунок 3 – Использование временного хранилища для отображения картинки на форме

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

Последовательно произведем описанные выше действия.

Как настроить форму для отображения на ней картинки

Создадим на форме элемента справочника Номенклатура реквизит АдресКартинки с типом Строка:

Создание реквизита формы «Адрес картинки»

Рисунок 4 – Создание реквизита формы «Адрес картинки»

Перенесем созданный реквизит на форму:

Создание элемента формы «Адрес картинки»

Рисунок 5 – Создание элемента формы «Адрес картинки»

Для поля АдресКартинки установим свойство Вид в значение «Поле картинки»:

Установка значения свойства Вид для поля «АдресКартинки»

Рисунок 6 – Установка значения свойства Вид для поля «АдресКартинки»

Создадим команду формы ЗагрузитьКартинку:

Команда формы «Загрузить картинку»

Рисунок 7 – Команда формы «Загрузить картинку»

Перенесем команду на форму:

Размещение команды «Загрузить картинку» на форме

Рисунок 8 – Размещение команды «Загрузить картинку» на форме

Реализуем обработчик команды. При нажатии на кнопку «Загрузить картинку» отобразим диалог выбора файла с картинкой. Выбранное пользователем изображение поместим во временное хранилище.

В свойствах конфигурации режим модальности не используется:

Свойство конфигурации «Режим использования модальности»

Рисунок 9 – Свойство конфигурации «Режим использования модальности»

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

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

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

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

Важно, что при вызове процедуры НачатьПомещениеФайла обязательно требуется указать уникальный идентификатор управляемой формы. Таким образом временное хранилище будет связано с формой, то есть будет существовать до тех пор, пока существует сама форма.

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

В пользовательском режиме откроем форму элемента справочника «Номенклатура». Нажмем кнопку Загрузить картинку, выберем файл с изображением с диска, после чего картинка отобразится на форме:

Загрузка изображения с диска

Рисунок 10 – Загрузка изображения с диска

Модифицированность формы отображается при помощи символа (*) в заголовке формы.

Обратите внимание – сейчас картинка отображается на форме, но в информационной базе она еще не сохранена. Дело в том, что в базе изображение хранится в реквизите справочника «Номенклатура». Поскольку элемент справочника еще не записан, в базе данных этого изображения еще нет. Оно располагается только во временном хранилище. При записи элемента справочника необходимо данные из временного хранилища сохранить в реквизит справочника.

Как сохранить изображение в базу

Ранее была реализована загрузка изображения из файла во временное хранилище, а также отображение картинки на форме. Теперь обеспечим хранение изображения в информационной базе. Для этого необходимо данные из временного хранилища перенести в реквизит Изображение справочника «Номенклатура».

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

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

Если в реквизите формы АдресКартинки содержится адрес временного хранилища, записываем в реквизит Изображение данные картинки, находящиеся во временном хранилище.

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

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

При помощи метода глобального контекста ПолучитьНавигационнуюСсылку получаем навигационную ссылку на реквизит Изображение текущей позиции номенклатуры. Полученную ссылку присваиваем реквизиту формы АдресКартинки. Это позволит платформе отобразить на форме в поле картинки изображение номенклатуры.

Таким образом, поставленная задача решена. Реализовано хранение изображения в информационной базе, а также его отображение на форме.

Загрузка картинки в 1С 8.3

Для демонстрации работы с картинками решим простую задачу: в нашей условной базе имеется справочник Номенклатура, наш заказчик хочет, чтобы к каждой номенклатуре можно было привязать картинку этой номенклатуры. Реализуем эту задачу. Первым делом у справочника Номенклатура создадим реквизит Картинка с типом ХранилищеЗначений. В учебной задаче мы будем хранить картинки непосредственно в справочнике Номенклатура, в реальных же задачах для хранения картинок и других бинарных файлов необходимо создавать или подчиненный справочник, или регистр сведений. Сделаем управляемую форму элемента справочника, на которой реализуем следующий функционал: на форме будет размещено поле с картинкой, если картинка не хранится в справочнике, то оно будет пустое, а иначе при открытии формы в 1С необходимо будет получить картинку из базы автоматически, т.е. на форме нужно организовать вывод картинки. Пользователь может загрузить в 1С файл картинки, для этого он должен кликнуть на поле картинки, после этого будет открыта форма выбора файла формата jpg, а после выбора нужного файла, картинка появится на форме. При сохранении элемента, картинка должна будет записаться в базу. Создадим управляемую форму элемента справочника, у этой формы создадим реквизит СсылкаНаКартинку с типом Строка. Поместим этот реквизит на форму в виде поля, а вид у данного поля установим «Поле картинки». Сделаем так, чтобы мы могли загружать картинку по клику мышки на это поле, для этого установим в свойство поле Гиперссылка. Создадим клиентский обработчик для события Нажатие этого поля. В этом обработчике напишем код, который будет вызывать диалог открытия файла с расширением jpg.

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

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

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

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

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

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

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

И последний штрих: нам нужно сделать так, чтобы при открытии формы, картинка появлялась на форме, если она есть в базе (в хранилище). Для этого, создадим обработчик для события ПриСозданииНаСервере формы. И в этом обработчике будем получать навигационную ссылку на картинку.

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

Всё! Задача выполнена. Теперь мы можем загружать картинку на форму с помощью диалога открытия файлов, сохранять картинку в базу, и выводить картинку на форму при открытии, если она имеется в базе.

Добавить комментарий

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