вывод картинки на управляемую форму
Вывод картинок в строках таблиц формы в управляемом приложении
Начинающие программисты на платформе 8.2 иногда сталкиваются с проблемой вывода картинок в различных таблицах формы. На платформе 8.1 зачастую это делалось программно в обработке события ПриПолученииДанных либо ПриВыводеСтроки. В 8.2 же ничего программировать не надо, а лишь достаточно правильно заполнить значения свойств интерфейсных объектов. Ключевым моментом является то, что в итоговой таблице у нас должна быть отдельная колонка, содержащая индекс выводимой картинки. Попробуем вывести картинку. Есть у нас, например, справочник пользователей, в котором есть реквизит «ЕстьВИнформационнойБазе» типа булево, и нам бы хотелось выводить картинку пользователя в цвете, если пользователь есть, и серую, если его нет в информационной базе .
Вставим в нашу форму динамический список, поставим флажок произвольного запроса и зададим запрос в следующем виде:
Поставим реквизиту «ИндексКартинки» флажок «Использовать всегда», т.к. на форму мы выводить его не будем. Теперь добавим наш динамический список на форму и зададим свойства «ПутьКДаннымКартинкиСтрок» и «КартинкаСтрок»
В результате у нас выведется список в следующем виде:
Т.е. в данном случае, картинка будет выводится в первой, по порядку, колонке списка. Но иногда возникает необходимость вывести картинку в определенной колонке или, в общем случае, различные картинки в нескольких колонках. Давайте выведем нашу картинку не в колонке «Наименование», а в колонке «Код» (заодно вернем стандартную картинку списка справочника). Для возврата стандартной картинки в вышеупомянутых свойствах «ПутьКДаннымКартинкиСтрок» и «КартинкаСтрок» возвращаем первоначальные значения.
Теперь создаем новую группу колонок в таблице вывода динамического списка и перемещаем туда колонки «Код» и «ИндексКартинки». Для группы колонок задаем группировку «В ячейке».
Для колонки «ИндексКартинки» задаем вид «Поле картинки» и в появившееся свойство «КартинкаЗначений» указываем нашу картинку. Ну и уберем заголовок, чтоб не отсвечивал 🙂
Вывод изображения на управляемую форму
Небольшая задача
В тестовой конфигурации для элементов справочника «Сотрудники» был создан механизм прикрепления файлов изображений. Однако при открытии элемента текущее изображение можно посмотреть лишь открыв прикрепленный файл.
Как это было раньше
Прежде чем перейти к решению задачи, рассмотрим, как это реализовывалось бы для обычной формы. В тестовой конфигурации для справочника «Сотрудники» созданы два реквизита:
И, вуаля! При открытии отображается прикрепеленной ранее фото!
Вся задача решилась в два шага: добавляем поле картинки на форму, и перед открытием получаем картинку из реквизита элемента справочника и присваиваем элементу формы. С управляемой формой все немного сложнее.
На управляемой форме
На управляемой форме просто так получить картинку из хранилища значений не получится, а уж тем более поместить его на управляемую форму. Поскольку управляемые формы созданы для четкого разделения клиентской и серверной стороны, то и логика работы будет иной.
Для отображения изображения для начала добавим строковой реквизит формы «ФотоСотрудника», для которого на форме создадим элемент с типом «Поле картинки».
Теперь в обработчике формы «ПриСозданииНаСервере» добавим следующий программный код:
В результате при открытии элемента мы увидим следующее:
На этом задача полностью решена!
Задача решена
Задачу мы решили, но есть куда оптимизировать! Файл лучше вынести в отдельную таблицу, чтобы время открытия элемента справочника не возросло при прикреплении изображений больших размеров. Но оптимизация уже выходит за рамки статьи.
Скачать тестовую конфигурацию с примером из статьи.
Решение задач по управляемым формам – тема № 14:
Как реализовать отображение картинок на форме и хранение их в базе
Работа с графическими изображениями повышает наглядность и удобство работы с программой. Поэтому в платформе «1С:Предприятие» реализована работа с изображениями.
Для удобства пользователей в базе можно хранить изображения различных объектов. Это могут быть фотографии товаров, сканы документов, копии документов физических лиц и так далее. Также сохраненные изображения можно отображать на формах документов, справочников и других объектов.
Кроме того, в современных типовых конфигурациях фирмы «1С» есть возможность выбора места хранения прикрепленных изображений – в самой информационной базе или в отдельном каталоге на жестком диске. Это связано с тем, что графические изображения могут занимать достаточно много места, следовательно, размер информационной базы может сильно увеличиться.
Однако приемы работы с изображениями не меняются в зависимости от способа хранения этих изображений. Далее рассмотрим пример задачи, который может встретиться на экзамене:
Необходимо обеспечить возможность прикреплять изображение к элементу справочника Номенклатура. Изображения следует хранить в информационной базе. Прикрепленное изображение номенклатуры должно отображаться на форме элемента.
На форме элемента справочника «Номенклатура» разместить кнопку «Загрузить картинку». При нажатии на эту кнопку пользователь выбирает файл на диске, который будет прикреплен к карточке номенклатуры:
Рисунок 1 – Отображение картинки на форме номенклатуры
Как организовать хранение изображений в базе
Для хранения произвольных данных в платформе «1С:Предприятие» предназначен специальный тип ХранилищеЗначений. Этот тип позволяет хранить в информационной базе любые двоичные данные – изображения, электронные таблицы, PDF-файлы и так далее.
Важно, что поля такого типа хранятся непосредственно в информационной базе. Значит, они будут сохранены в файле с расширением dt при создании выгрузки базы, а также в резервной копии, созданной средствами СУБД. Дополнительное резервное копирование файлов с изображениями не потребуется.
Для решения поставленной задачи организуем хранение прикрепленных изображений непосредственно в справочнике Номенклатура. Для этого создадим в справочнике реквизит Изображение (тип – ХранилищеЗначения):
Рисунок 2 – Реквизит справочника «Номенклатура» для хранение картинки
Как отобразить изображение на форме
Реквизит с типом ХранилищеЗначения нельзя отобразить на управляемой форме, поэтому воспользуемся временным хранилищем для размещения двоичных данных картинки:
Рисунок 3 – Использование временного хранилища для отображения картинки на форме
Двоичные данные изображения поместим во временное хранилище. Адрес этого временного хранилища сохраним в строковом реквизите на форме. Добавим на форму поле с видом Поле картинки. В свойстве Путь к данным этого элемента управления укажем строковый реквизит, где хранится адрес временного хранилища. При таких настройках платформа сможет отобразить на форме изображение, расположенное во временном хранилище.
Последовательно произведем описанные выше действия.
Как настроить форму для отображения на ней картинки
Создадим на форме элемента справочника Номенклатура реквизит АдресКартинки с типом Строка:
Рисунок 4 – Создание реквизита формы «Адрес картинки»
Перенесем созданный реквизит на форму:
Рисунок 5 – Создание элемента формы «Адрес картинки»
Для поля АдресКартинки установим свойство Вид в значение «Поле картинки»:
Рисунок 6 – Установка значения свойства Вид для поля «АдресКартинки»
Создадим команду формы ЗагрузитьКартинку:
Рисунок 7 – Команда формы «Загрузить картинку»
Перенесем команду на форму:
Рисунок 8 – Размещение команды «Загрузить картинку» на форме
Реализуем обработчик команды. При нажатии на кнопку «Загрузить картинку» отобразим диалог выбора файла с картинкой. Выбранное пользователем изображение поместим во временное хранилище.
В свойствах конфигурации режим модальности не используется:
Рисунок 9 – Свойство конфигурации «Режим использования модальности»
Поэтому для помещения файла во временное хранилище используется метод глобального контекста НачатьПомещениеФайла. Процедура ЗагрузитьКартинку будет иметь следующий код:
После того, как выбранный пользователем файл будет помещен во временное хранилище, система вызывает процедуру ЗагрузитьКартинкуЗавершение, указанную в описании оповещения. В ней реквизиту формы АдресКартинки присваивается адрес временного хранилища, куда была помещена картинка.
Поскольку при выполнении рассмотренного программного кода не изменяются значения реквизитов объекта, при закрытии формы система не спросит, следует ли сохранить выполненные изменения. Чтобы не потерять отображающуюся на форме, но еще не записанную в базу картинку, признак модифицированности формы установим в значение Истина.
Важно, что при вызове процедуры НачатьПомещениеФайла обязательно требуется указать уникальный идентификатор управляемой формы. Таким образом временное хранилище будет связано с формой, то есть будет существовать до тех пор, пока существует сама форма.
Если не указать идентификатор формы, временное хранилище будет уничтожено при следующем серверном вызове. Такой вариант не подходит, поскольку по условию задачи далее нужно будет записать данные картинки в реквизит справочника.
В пользовательском режиме откроем форму элемента справочника «Номенклатура». Нажмем кнопку Загрузить картинку, выберем файл с изображением с диска, после чего картинка отобразится на форме:
Рисунок 10 – Загрузка изображения с диска
Модифицированность формы отображается при помощи символа (*) в заголовке формы.
Обратите внимание – сейчас картинка отображается на форме, но в информационной базе она еще не сохранена. Дело в том, что в базе изображение хранится в реквизите справочника «Номенклатура». Поскольку элемент справочника еще не записан, в базе данных этого изображения еще нет. Оно располагается только во временном хранилище. При записи элемента справочника необходимо данные из временного хранилища сохранить в реквизит справочника.
Как сохранить изображение в базу
Ранее была реализована загрузка изображения из файла во временное хранилище, а также отображение картинки на форме. Теперь обеспечим хранение изображения в информационной базе. Для этого необходимо данные из временного хранилища перенести в реквизит Изображение справочника «Номенклатура».
Поскольку работа с временным хранилищем доступна только на Сервере, создадим в модуле формы элемента справочника Номенклатура обработчик события ПередЗаписьюНаСервере:
Если в реквизите формы АдресКартинки содержится адрес временного хранилища, записываем в реквизит Изображение данные картинки, находящиеся во временном хранилище.
При открытии формы нужно отображать сохраненную в базе картинку на форме. Для этого в модуле формы элемента справочника Номенклатура реализуем обработчик события ПриСозданииНаСервере. Код обработчика будет выглядеть следующим образом:
При помощи метода глобального контекста ПолучитьНавигационнуюСсылку получаем навигационную ссылку на реквизит Изображение текущей позиции номенклатуры. Полученную ссылку присваиваем реквизиту формы АдресКартинки. Это позволит платформе отобразить на форме в поле картинки изображение номенклатуры.
Таким образом, поставленная задача решена. Реализовано хранение изображения в информационной базе, а также его отображение на форме.
Вывод картинки в форме списка в управляемых формах 1С
Как добавить столбец в форму списка описано тут.
Иногда есть необходимость вывода картинки в столбце формы списка, например для наглядной сигнализации о чем либо.
В нашем случае о том, что по клиенту есть какие-то новые сообщения.
Текстовый столбец бы затерялся, а вот на картинку взгляд падает сразу.
И так, выбираем динамический список формы списка, если формы списка нет, то создаем ее.
Открываем настройки списка и генерируем столбец, который будет указывать на индекс изображения.
Примечание
Для колонки данных типа Булево значения инвертируются, т. е. Истина означает индекс 0, а Ложь – индекс 1 (это реализовано для удобства отображения картинок-флажков, когда у некоторых строк картинка по некоторому условию есть, а у других её нет).
После появится столбец “Индекс картинки”, ставим ему значение Использовать всегда.
Выводим колонку на форму и в настройках:
Вид: Поле картинки
ПоложениеЗаголовка: Нет
КартинкаЗначения, выбираем нужную картинку.
Вывод картинок в строках в ТЗ на форме. 1С, 8.3 Вэб клиент
Здравствуйте, уважаемые. В интернете ответа на мою проблему не нашел, поэтому при решении решил поделиться с миром.
Статья будет короткая и вот в чем её суть:
Встал вопрос о выводе картинок в ТЗ на форме. Речь идет про 1С 8.3.
Вроде банальная проблема, но и тем не менее.
На форумах нашел ответ такого плана:
Нужно выводить в событие следующий текст:
Но в моем случае нет соответствующих событий. Итак, что мы делаем:
1) Создаем колонку с типом картинка.
2) Важно, что свойство картинки должно быть: Доступность=Ложь, ТолькоПросмотр=Истина;
Получится как-то так:
Специальные предложения
Обновление 25.01.18 15:16
См. также
Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо
В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.
12.12.2020 4365 Eugen-S 23
Инкремент, модуль и прочая магия, которая скрыта под символом «?»
21.10.2021 7468 SeiOkami 39
Полезные примеры СКД, ч.2
Еще несколько примеров решения задач в СКД.
06.04.2021 10573 Neti 8
Обзор полезных методов БСП 3.1.4
25.03.2021 39814 rayastar 51
Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)
27.01.2016 85589 Serginio 115
Звуковое управление в 1С 8.3
В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.
16.03.2021 7119 velemir 33
Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions
28.12.2020 8824 comol 31
Базовые вещи БСП, которые облегчат жизнь программисту 1С
В данной публикации я опишу полезные процедуры и функции модуля общего назначения библиотеки стандартных подсистем, обязательные к использованию любым программистом 1С.
30.08.2020 20011 quazare 34
Использование программных перечислений, ч.1: строковые константы Промо
Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?
10.12.2016 41068 unichkin 74
Форма выбора (подбор) в управляемых формах
Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.
08.05.2020 76983 user5300 19
Программная работа с настройками СКД
Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.
27.01.2020 65046 ids79 26
[СКД] Программное создание схемы компоновки данных
Сделаем отчет на СКД полностью программно, без использования макета «схема компоновки данных».
15.01.2020 43359 John_d 22
Вспомогательные инструкции в коде 1С Промо
Помогаем редактору кода 1С помогать нам писать и анализировать код.
15.10.2018 36056 tormozit 106
Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения
Собрал информацию о событиях/подписках/расширениях в одном месте.
30.12.2019 35039 kuzyara 38
25.12.2019 8418 brooho 19
Полезные процедуры и функции для программиста
Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.
07.10.2019 39568 HostHost 41
Оформление и рефакторинг сложных логических выражений Промо
В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.
20.09.2012 82798 tormozit 131
Таблица значений. Нюансы
Обзор некоторых аспектов использования общеизвестного инструмента 1С.
01.10.2019 52757 Yashazz 56
[Шпаргалка] Программное создание элементов формы
Программное создание практически всех популярных элементов формы.
06.09.2019 101312 rpgshnik 75
Агрегатные функции СКД, о которых мало кто знает
Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.
05.09.2019 77215 ids79 56
Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо
Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.
11.07.2007 54337 tormozit 51
Регистры бухгалтерии. Общая информация
Общая информация о внутреннем устройстве регистров бухгалтерии.
05.09.2019 46318 YPermitin 25
Три костыля. Сказ про фокусы в коде
Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.
03.09.2019 30163 YPermitin 81
Иерархия без «В ИЕРАРХИИ»
Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи «Уровни, глубина, прародители, циклы и аналоги запросом» [https://infostart.ru/public/160707/].
22.08.2019 15000 ildarovich 24
Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо
Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки
10.09.2017 51110 tormozit 74
Отслеживание выполнения фонового задания
Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.
17.08.2019 45034 ids79 22
Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив
Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.
08.08.2019 150927 ids79 75
Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.
02.08.2019 60329 avalakh 26
Выгрузка документа по условию Промо
Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий. А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.
25.04.2019 17997 m-rv 3
Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.
26.07.2019 104873 ids79 17
Обработчики событий при записи объектов. Зачем и что за чем?
Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта. Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.