картинка в заголовке формы 1с
Программная установка картинки заголовка страницы панели на УФ
Пытаюсь программно установить картинку на странице.
Делается это в процедуре события ПриАктивизацииСтроки таблицы на форме.
Код простейший.
Если ВыбКартинка = 4 Тогда
Элементы.СтраницаОписаниеДетали.Картинка = БиблиотекаКартинок.ВосклицательныйЗнакКрасный;
ИначеЕсли ВыбКартинка = 3 Тогда
Элементы.СтраницаОписаниеДетали.Картинка = БиблиотекаКартинок.Остановить12;
ИначеЕсли ВыбКартинка = 2 Тогда
Элементы.СтраницаОписаниеДетали.Картинка = БиблиотекаКартинок.Внимание16;
КонецЕсли;
Однако, при использовании этого кода программа впадает в бесконечный цикл.
По всей видимости, значение Картинка устанавливается на сервере, после чего происходит возврат на клиента, и при обновлении отображения снова вызов события ПриАктивизацииСтроки.
Собственно вопрос. Как это обойти?
(4). Так я про то и говорю. Указанная строка отрабатывает в процедуре ПриАктивизацииСтроки и бесконечного цикла не вызывает. А другие строки, делающие то же самое, только с другим значением, вызывают.
Кстати по (1). НЕ РАБОТАЕТ. Бесконечный цикл все равно появляется. Правда, здесь форма получается доступна, т.к. из процедуры ПриАктивизацииСтроки она все-таки выходит. Но 90% времени висит ожидание.
Собственно, все логично. При установке картинки она все равно уходит на сервер, потом возвращается и снова вызывает Активизацию строки. А потом эта процедура снова вызывает обработчик ожидания. И так до бесконечности.
Не рекомендуется в обработчике «ПриАктивизацииСтроки» обращаться на сервер. Если без этого нельзя обойтись, то следует помнить, что если в серверном вызове были изменены свойства элементов, которые влияют на внешний вид формы, то на клиент вернётся новое описание формы, и будет заново вызван обработчик «ПриАктивизацииСтроки».
Вероятно, другие значения вызывают обращение к серверу.
Я её победил!
Изврат, но простой.
Делается общая переменная, глобальная для модуля.
Куда пишем Истина, если процедуру уже вызывали, и Ложь, если вызова еще не было.
В начале процедуры ПриАктивизацииСтроки нужно проверить ее на значение Истина, и если это значение установлено, то из процедуры выйти. Так мы отсекаем повторный вызовы этой процедуры.
Дальше нужные нам обработки, в том числе и установки картинок.
А в конце процедуры в эту переменную записываем Истина.
И в этой же процедуре разово вызываем обработчик ожидания, который должен сбросить нашу глобальную переменную в Ложь.
Примерно так:
Решение задач по управляемым формам – тема № 14:
Как реализовать отображение картинок на форме и хранение их в базе
Работа с графическими изображениями повышает наглядность и удобство работы с программой. Поэтому в платформе «1С:Предприятие» реализована работа с изображениями.
Для удобства пользователей в базе можно хранить изображения различных объектов. Это могут быть фотографии товаров, сканы документов, копии документов физических лиц и так далее. Также сохраненные изображения можно отображать на формах документов, справочников и других объектов.
Кроме того, в современных типовых конфигурациях фирмы «1С» есть возможность выбора места хранения прикрепленных изображений – в самой информационной базе или в отдельном каталоге на жестком диске. Это связано с тем, что графические изображения могут занимать достаточно много места, следовательно, размер информационной базы может сильно увеличиться.
Однако приемы работы с изображениями не меняются в зависимости от способа хранения этих изображений. Далее рассмотрим пример задачи, который может встретиться на экзамене:
Необходимо обеспечить возможность прикреплять изображение к элементу справочника Номенклатура. Изображения следует хранить в информационной базе. Прикрепленное изображение номенклатуры должно отображаться на форме элемента.
На форме элемента справочника «Номенклатура» разместить кнопку «Загрузить картинку». При нажатии на эту кнопку пользователь выбирает файл на диске, который будет прикреплен к карточке номенклатуры:
Рисунок 1 – Отображение картинки на форме номенклатуры
Как организовать хранение изображений в базе
Для хранения произвольных данных в платформе «1С:Предприятие» предназначен специальный тип ХранилищеЗначений. Этот тип позволяет хранить в информационной базе любые двоичные данные – изображения, электронные таблицы, PDF-файлы и так далее.
Важно, что поля такого типа хранятся непосредственно в информационной базе. Значит, они будут сохранены в файле с расширением dt при создании выгрузки базы, а также в резервной копии, созданной средствами СУБД. Дополнительное резервное копирование файлов с изображениями не потребуется.
Для решения поставленной задачи организуем хранение прикрепленных изображений непосредственно в справочнике Номенклатура. Для этого создадим в справочнике реквизит Изображение (тип – ХранилищеЗначения):
Рисунок 2 – Реквизит справочника «Номенклатура» для хранение картинки
Как отобразить изображение на форме
Реквизит с типом ХранилищеЗначения нельзя отобразить на управляемой форме, поэтому воспользуемся временным хранилищем для размещения двоичных данных картинки:
Рисунок 3 – Использование временного хранилища для отображения картинки на форме
Двоичные данные изображения поместим во временное хранилище. Адрес этого временного хранилища сохраним в строковом реквизите на форме. Добавим на форму поле с видом Поле картинки. В свойстве Путь к данным этого элемента управления укажем строковый реквизит, где хранится адрес временного хранилища. При таких настройках платформа сможет отобразить на форме изображение, расположенное во временном хранилище.
Последовательно произведем описанные выше действия.
Как настроить форму для отображения на ней картинки
Создадим на форме элемента справочника Номенклатура реквизит АдресКартинки с типом Строка:
Рисунок 4 – Создание реквизита формы «Адрес картинки»
Перенесем созданный реквизит на форму:
Рисунок 5 – Создание элемента формы «Адрес картинки»
Для поля АдресКартинки установим свойство Вид в значение «Поле картинки»:
Рисунок 6 – Установка значения свойства Вид для поля «АдресКартинки»
Создадим команду формы ЗагрузитьКартинку:
Рисунок 7 – Команда формы «Загрузить картинку»
Перенесем команду на форму:
Рисунок 8 – Размещение команды «Загрузить картинку» на форме
Реализуем обработчик команды. При нажатии на кнопку «Загрузить картинку» отобразим диалог выбора файла с картинкой. Выбранное пользователем изображение поместим во временное хранилище.
В свойствах конфигурации режим модальности не используется:
Рисунок 9 – Свойство конфигурации «Режим использования модальности»
Поэтому для помещения файла во временное хранилище используется метод глобального контекста НачатьПомещениеФайла. Процедура ЗагрузитьКартинку будет иметь следующий код:
После того, как выбранный пользователем файл будет помещен во временное хранилище, система вызывает процедуру ЗагрузитьКартинкуЗавершение, указанную в описании оповещения. В ней реквизиту формы АдресКартинки присваивается адрес временного хранилища, куда была помещена картинка.
Поскольку при выполнении рассмотренного программного кода не изменяются значения реквизитов объекта, при закрытии формы система не спросит, следует ли сохранить выполненные изменения. Чтобы не потерять отображающуюся на форме, но еще не записанную в базу картинку, признак модифицированности формы установим в значение Истина.
Важно, что при вызове процедуры НачатьПомещениеФайла обязательно требуется указать уникальный идентификатор управляемой формы. Таким образом временное хранилище будет связано с формой, то есть будет существовать до тех пор, пока существует сама форма.
Если не указать идентификатор формы, временное хранилище будет уничтожено при следующем серверном вызове. Такой вариант не подходит, поскольку по условию задачи далее нужно будет записать данные картинки в реквизит справочника.
В пользовательском режиме откроем форму элемента справочника «Номенклатура». Нажмем кнопку Загрузить картинку, выберем файл с изображением с диска, после чего картинка отобразится на форме:
Рисунок 10 – Загрузка изображения с диска
Модифицированность формы отображается при помощи символа (*) в заголовке формы.
Обратите внимание – сейчас картинка отображается на форме, но в информационной базе она еще не сохранена. Дело в том, что в базе изображение хранится в реквизите справочника «Номенклатура». Поскольку элемент справочника еще не записан, в базе данных этого изображения еще нет. Оно располагается только во временном хранилище. При записи элемента справочника необходимо данные из временного хранилища сохранить в реквизит справочника.
Как сохранить изображение в базу
Ранее была реализована загрузка изображения из файла во временное хранилище, а также отображение картинки на форме. Теперь обеспечим хранение изображения в информационной базе. Для этого необходимо данные из временного хранилища перенести в реквизит Изображение справочника «Номенклатура».
Поскольку работа с временным хранилищем доступна только на Сервере, создадим в модуле формы элемента справочника Номенклатура обработчик события ПередЗаписьюНаСервере:
Если в реквизите формы АдресКартинки содержится адрес временного хранилища, записываем в реквизит Изображение данные картинки, находящиеся во временном хранилище.
При открытии формы нужно отображать сохраненную в базе картинку на форме. Для этого в модуле формы элемента справочника Номенклатура реализуем обработчик события ПриСозданииНаСервере. Код обработчика будет выглядеть следующим образом:
При помощи метода глобального контекста ПолучитьНавигационнуюСсылку получаем навигационную ссылку на реквизит Изображение текущей позиции номенклатуры. Полученную ссылку присваиваем реквизиту формы АдресКартинки. Это позволит платформе отобразить на форме в поле картинки изображение номенклатуры.
Таким образом, поставленная задача решена. Реализовано хранение изображения в информационной базе, а также его отображение на форме.
Вывод картинок в строках таблиц формы в управляемом приложении
Начинающие программисты на платформе 8.2 иногда сталкиваются с проблемой вывода картинок в различных таблицах формы. На платформе 8.1 зачастую это делалось программно в обработке события ПриПолученииДанных либо ПриВыводеСтроки. В 8.2 же ничего программировать не надо, а лишь достаточно правильно заполнить значения свойств интерфейсных объектов. Ключевым моментом является то, что в итоговой таблице у нас должна быть отдельная колонка, содержащая индекс выводимой картинки. Попробуем вывести картинку. Есть у нас, например, справочник пользователей, в котором есть реквизит «ЕстьВИнформационнойБазе» типа булево, и нам бы хотелось выводить картинку пользователя в цвете, если пользователь есть, и серую, если его нет в информационной базе .
Вставим в нашу форму динамический список, поставим флажок произвольного запроса и зададим запрос в следующем виде:
Поставим реквизиту «ИндексКартинки» флажок «Использовать всегда», т.к. на форму мы выводить его не будем. Теперь добавим наш динамический список на форму и зададим свойства «ПутьКДаннымКартинкиСтрок» и «КартинкаСтрок»
В результате у нас выведется список в следующем виде:
Т.е. в данном случае, картинка будет выводится в первой, по порядку, колонке списка. Но иногда возникает необходимость вывести картинку в определенной колонке или, в общем случае, различные картинки в нескольких колонках. Давайте выведем нашу картинку не в колонке «Наименование», а в колонке «Код» (заодно вернем стандартную картинку списка справочника). Для возврата стандартной картинки в вышеупомянутых свойствах «ПутьКДаннымКартинкиСтрок» и «КартинкаСтрок» возвращаем первоначальные значения.
Теперь создаем новую группу колонок в таблице вывода динамического списка и перемещаем туда колонки «Код» и «ИндексКартинки». Для группы колонок задаем группировку «В ячейке».
Для колонки «ИндексКартинки» задаем вид «Поле картинки» и в появившееся свойство «КартинкаЗначений» указываем нашу картинку. Ну и уберем заголовок, чтоб не отсвечивал 🙂
Картинки во внешней печатной форме (Шапка и табличная часть)
Доброго времени суток.
Недавно столкнулся с задачей вывода картинок на печать из табличной части документа (Заказ клиента, картинки из описания номенклатуры)
Google выдал довольно много вариантов исполнения, но ни один из них у меня не сработал.
Поэтому решил написать эту статью, думаю начинающим специалистам будет полезно.
Итак есть два способа задать место для картинки в макете:
1) Вставить картинку в макет, как отдельный объект, обращение будет происходить по Имени
2) Привязать её к конкретной ячейке, обращение будет происходить по Параметру Картинки
В первом случае картинка не может быть больше выделенной области и при этом может быть перемещена пользователем при просмотре печатной формы.
-Пример перемещения картинки при просмотре:
-Вот так будет выглядеть изменение размера в свойствах картинки с Пропорционально на Реальный размер
Во втором случае картинка будет жестко привязана к ячейке и может растягиваться пропорционально ширине колонки. (*будет растягиваться по ширине картинки пропорционально ширине ячейки. )
Ниже пример с картинками разных размеров и пропорций.
Далее перейдем непосредственно к коду обработки
Функция, формирующая печатную форму:
Здесь нас интересует только вторая и третья (закомментированная) строки.
необходима для того, чтобы картинки не выходили за границы листа при печати
позволят распечатать макет в альбомной ориентации по умолчанию.
Вывод картинки на форму рассмотрим на примере табличной части так как в обоих случаях код практически идентичен.
В 4ой строке находим файл картинки в базе
“ФайлКартинки” – Наименование реквизита содержащего картинку
В 5ой строке проверяем наличие картинки в вышеуказанном реквизите. Без этого при попытке печати форма выдаст ошибку, если хоть одна из картинок не заполнена.
С 6-ой по 13-ую строки (как и 4-ая) фрагмент типового кода УТ 11.4 отвечающего за печать картинок
И наконец непосредственно помещение картинки на макет:
Для первого способа:
Для второго способа:
Вывод картинки в форме списка в управляемых формах 1С
Как добавить столбец в форму списка описано тут.
Иногда есть необходимость вывода картинки в столбце формы списка, например для наглядной сигнализации о чем либо.
В нашем случае о том, что по клиенту есть какие-то новые сообщения.
Текстовый столбец бы затерялся, а вот на картинку взгляд падает сразу.
И так, выбираем динамический список формы списка, если формы списка нет, то создаем ее.
Открываем настройки списка и генерируем столбец, который будет указывать на индекс изображения.
Примечание
Для колонки данных типа Булево значения инвертируются, т. е. Истина означает индекс 0, а Ложь – индекс 1 (это реализовано для удобства отображения картинок-флажков, когда у некоторых строк картинка по некоторому условию есть, а у других её нет).
После появится столбец “Индекс картинки”, ставим ему значение Использовать всегда.
Выводим колонку на форму и в настройках:
Вид: Поле картинки
ПоложениеЗаголовка: Нет
КартинкаЗначения, выбираем нужную картинку.