Использование абсолютных картинок в управляемых формах не рекомендуется

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

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

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

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

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

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

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

dev att forms 14 01 min

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

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

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

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

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

dev att forms 14 02 min

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

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

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

dev att forms 14 03 min

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

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

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

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

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

dev att forms 14 04 min

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

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

dev att forms 14 05 min

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

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

dev att forms 14 06 min

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

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

dev att forms 14 07 min

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

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

dev att forms 14 08 min

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

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

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

dev att forms 14 09 min

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

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

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

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

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

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

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

dev att forms 14 10 min

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

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

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

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

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

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

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

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

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

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

Источник

Diachok’s IT blog

Thursday, July 16, 2015

1С управляемые формы и отображение картинки.

В 1С работают извращенцы, полные, вот мне честно хочется посмотреть тому дятлу который придумал работу в управляемых формах с картинками и спросить «Ты нормальный?»
Это под какой травкой такое надо было придумать.

В общем задача: отобразить на управляемой форме картинку, отобразить. Карл.

и итог 3 часа ковыряния как отобразить картинку.

в управляемых формах принцип следующий:

Простой пример справочника с картинкой

Отображения картинки текущего элемента списка

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

Картинка как и раньше (8.1) хранится в базе в реквизите (реквизите ТЧ) с типом ХранилищеЗначения, но записать данные в реквизит с этим типом обычном способом нельзя, запись производится в предопределенной процедуре «ПередЗаписьюНаСервере».

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

Ниже приведен код части примера:

Код 1C v 8.2 УП
&НаКлиенте

Процедура ЗагрузитьФотографию(Команда)
Перем ВыбранноеИмя,АдресВременногоХранилища;
Если ПоместитьФайл(АдресВременногоХранилища, «», ВыбранноеИмя, Истина, УникальныйИдентификатор) Тогда
АдресКартинки = АдресВременногоХранилища;
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры

АдресКартинки = ПолучитьНавигационнуюСсылку(ТекущийОбъект.Ссылка, «Фото»);
КонецПроцедуры

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

В процедуре ПриЗаписиНаСервере на первый взгляд можно убрать код удаление из временного хранилища т.к. ф. ПоместитьФайл вызывается с параметром УникальныйИдентификатор формы т.е. объект хранилища будет существовать до закрытия формы, но рекумендуется освобождать ресурсы сразу (если пользователь загрузит картинку и нажмет записать, форма не закрыта и объект будет существовать до закрытия).

Источник

Вывод картинок в строках таблиц формы в управляемом приложении

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

Вставим в нашу форму динамический список, поставим флажок произвольного запроса и зададим запрос в следующем виде:

2

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

3

В результате у нас выведется список в следующем виде:

4

Т.е. в данном случае, картинка будет выводится в первой, по порядку, колонке списка. Но иногда возникает необходимость вывести картинку в определенной колонке или, в общем случае, различные картинки в нескольких колонках. Давайте выведем нашу картинку не в колонке «Наименование», а в колонке «Код» (заодно вернем стандартную картинку списка справочника). Для возврата стандартной картинки в вышеупомянутых свойствах «ПутьКДаннымКартинкиСтрок» и «КартинкаСтрок» возвращаем первоначальные значения.

5

Теперь создаем новую группу колонок в таблице вывода динамического списка и перемещаем туда колонки «Код» и «ИндексКартинки». Для группы колонок задаем группировку «В ячейке».

6

Для колонки «ИндексКартинки» задаем вид «Поле картинки» и в появившееся свойство «КартинкаЗначений» указываем нашу картинку. Ну и уберем заголовок, чтоб не отсвечивал 🙂

Источник

управляемая форма и картинка

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

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

вот как делал в обычной форме

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

Управляемая форма обработки
Есть обработка (не внешняя, а в конфигурации), есть её форма. 2 процедуры: &НаКлиенте.

Не изменяется управляемая форма
проблема такая. есть УТ в ней обработка. я сделал ее как внешнюю обработку и изменил в том числе.

tickГорячие клавиши управляемая форма
Ребят, может в курсе кто: каким образом на управляемой форме можно поменять горячую клавишу для.

Управляемая форма. Не работает форма списка документа
Здравствуйте! Создал форму списка документа, сделал ее основной формой списка. В конфигураторе все.

Источник

Вывод картинки в форме списка в управляемых формах 1С

%D1%84%D0%BE%D1%82%D0%BE

Как добавить столбец в форму списка описано тут.

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

В нашем случае о том, что по клиенту есть какие-то новые сообщения.

image 20

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

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

image 22

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

image 23

Примечание
Для колонки данных типа Булево значения инвертируются, т. е. Истина означает индекс 0, а Ложь – индекс 1 (это реализовано для удобства отображения картинок-флажков, когда у некоторых строк картинка по некоторому условию есть, а у других её нет).

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

image 24

Выводим колонку на форму и в настройках:

image 25

Вид: Поле картинки

ПоложениеЗаголовка: Нет

КартинкаЗначения, выбираем нужную картинку.

Источник

Adblock
detector