Как в справку 1с вставить картинку

Обновлено: 05.07.2024

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

На данный момент конфигурация из нашего примера имеет следующие недостатки (убедитесь сами):

  • если в открытой форме элемента справочника Сотрудники мы с помощью кнопки «Добавить картинку» будем последовательно выбирать несколько картинок (даже без выполнения команды «Записать»), то все эти картинки будут сохраняться в справочнике Файлы;
  • при выборе для Сотрудника новой картинки старая (которая была установлена до этого) не удаляется из справочника Файлы, а остается в нем;
  • если мы в открытой форме элемента справочника Сотрудники заменим фотографию сотрудника и попробуем закрыть форму, то форма закроется без каких-либо уведомлений – то есть система «не видит», что в элемент справочника внесены изменения и не спрашивает пользователя сохранять или нет эти изменения.

​ 1. Прежде чем приступ ить к исправлению имеющихся «глюков» давайте сделаем наш справочник Файлы более удобным и функциональным. Для этого по аналогии с шагами 6-8 первой части пошагового примера сделаем так, чтобы мы могли просматривать хранимые картинки в самом справочнике Файлы.

Создадим Форму элемента справочника Файлы:
Тип формы: Форма элемента справочника;
Реквизиты формы: Код, Наименование.

2. В конструкторе форм создайте новый реквизит формы Фото, тип – Строка, длина 0.


3. Мышкой перетащите созданный в шаге 2 реквизит Фото на Форму элемента справочника Файлы. В свойстве «Вид» получившегося поля меняем значение с «Поле ввода» на «Поле картинки».


4. Для отображения картинки на форме выделяем Форму, в свойствах нашей Формы переходим на закладку «События» и переходим к событию ПриСозданииНаСервере .


5. Напишем программный код процедуры ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) :

//устанавливаем автомасштаб для картинки
Элементы . Фото . РазмерКартинки = РазмерКартинки . АвтоРазмер ;
КонецПроцедуры

6. Запускаем систему в режиме 1С:Предприятие и смотрим что у нас получилось:


7. Теперь самое время приступить к исправлению найденных «глюков» при загрузке и хранении фотографий. Для этого в модуле формы справочника Сотрудники доработаем нашу серверную процедуру УстановитьКартинку() – см. 11 пункт 1 части пошагового примера. Для удобства добавленные строки программного кода выделены подчеркиванием:

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

//добавили во 2 ЧАСТИ ПРИМЕРА
// тут проверим была ли ранее установлена картинка и если да - то удалим ее из справочника Файлы
//вторая проверка Объект.Картинка.ПолучитьОбъект()<>Неопределено нужна чтобы проверить если ли в справочнике
//Файлы элемент, на который ссылается наш реквизит Картинка.
//Тем не менее, картинки может не быть по 2 причинам:
//1 если мы удалим картинку из справочника Файлы вручную
//2 если мы установим новую картинку, но откажемся от сохранения изменений в данный элемент

Если Объект . Картинка . Пустая () = Ложь и Объект . Картинка . ПолучитьОбъект ()<>Неопределено Тогда

СтарыйФайлКартинки = Объект . Картинка . ПолучитьОбъект ();
СтарыйФайлКартинки . Удалить ();
КонецЕсли;
//конец того, что добавили во 2 ЧАСТИ ПРИМЕРА

//устанавливаем значение реквизита Картинка Справочника Сотрудники
Объект . Картинка = НовыйФайлКартинки . Ссылка ;

//добавили во 2 ЧАСТИ ПРИМЕРА. Модифицированность. Программно укажем, что данный элемент справочника был изменен.
ЭтаФорма . Модифицированность =Истина;
//если модифицированности недостаточно, то можно использовать метод формы Записать (снять комментарий с последней строки)
//ЭтаФорма.Записать();

8. Внимательно прочитайте комментарии в программном коде нашей серверной процедуры УстановитьКартинку() .

9. Обратите внимание на следующую сроку кода:

ЭтаФорма . Модифицированность =Истина;

Тут мы свойству Формы «Модифицированность» присвоили значение истина. Так как ссылку на картинку (значение реквизита Картинка справочника Сотрудники) мы устанавливаем программно (в программном модуле, а не интерактивно), то программа «не видит» когда мы меняем значение данного реквизита. Но мы можем программно изменить данное свойство, что мы и делаем.

Теперь, если мы в открытой форме элемента справочника Сотрудники заменим фотографию сотрудника и попробуем закрыть форму, то система «увидит», что форма была модифицирована и задаст нам соответствующий вопрос:

Вывод изображения на управляемую форму

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

Изображение

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

Как это было раньше

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

Изображение

  • "Фото" - реквизит с типом "ХранилищеЗначений", в котором хранятся двоичные данные файла изображения.
  • "ИмяФайла" - строковой реквизит, в который записывается имя файла прикрепленного изображения.
На обычной форме добавляется элемент "ФотоСотрудника" с типом "Поле картинки". В событии "ПередОткрытием" формы добавляем следующий код:

И, вуаля! При открытии отображается прикрепеленной ранее фото!

Изображение

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

На управляемой форме

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

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

Изображение

Теперь в обработчике формы "ПриСозданииНаСервере" добавим следующий программный код:

Здесь методом "ПоместитьВоВременноеХранилище" мы помещаем двоичные данные из реквизита "Фото" элемента справочника во временное хранилище. Метод возвращает адрес помещенных данных во временном хранилище в виде строки. Подробнее о временном хранилище, его назначении и примеров работы с ним Вы можете прочитать по ссылке .

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

Изображение

На этом задача полностью решена!

Задача решена

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

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

Изображение

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

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

Изображение

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

Изображение

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

Изображение

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

Изображение

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

Изображение

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

Разрабатывая конфигурацию, задался вопросом: Как изменить картинку раздела "Главное" в интерфейсе Такси?

Сразу скажу, беглый поиск по настройкам не помог, но оказалось все не так сложно. В свойствах конфигурации есть пункт "Картинка основного раздела"


Разместил: all4cf  Версии: | 8.2 УП | 8.3 |  Дата: 01.04.2017   Прочитано: 18184

Распечатать

Похожие FAQ

1С Предприятие что это?  11
Что такое 1С? 1С — это фирма , у которой одно из направлений деятельности — разработка программного обеспечения для автоматизации бизнес-процессов предприятий. « 1С:Предприятие » - конкретный продукт, который выпускает компания 1С . Что такое Cодержимое указанного ниже веб-сайта в этом приложении блокируется. Aboutsecurity_1cv8c.exe  1
Проблема: После обновления на 1С:Бухгалтерию предприятия 3-й версии, при нажатии на закладку командного интерфейса 1С:предприятие, выскакивает ошибка: Aboutsecurity_1cv8c.exe или Aboutsecurity_1cv8.exe «Содержимое указанного ниже веб-узла в э Автоматическая архивация баз 1С с использованием Cobian Backup и VBS скриптов  8
Клиент попросил настроить автоматическую архивацию баз 1С раз в три дня и выгрузку архивов на Dropbox и на FTP Сервер. Кроме 1С нужно архивировать папку с рабочими документами. Хочет - так хочет, делаем: Первым делом настроим автоматическую архивац Вызов файла справки Window из 1С  0
Для включения интерактивной помощи в приложение на платформе 1С версии 7.7 достаточно добавить на форму кнопку вызова справки с формулой вида: глСправка(" ИмяЗакладки" ,Способ,ФайлаСправки) Ниже приведен состав глобальной процедуры глСправка: //** Горячие клавиши 1С Пользователю [ Предприятие]  5
Основные команды: Интерфейс: F6 - переключение между формами рабочего стола F10 - переход в главное меню окна Alt+1 - переход на панель Разделов Alt+2 - переход на панель Навигации Alt+3 - переход на панель Действий Alt+9 - переход Посмотреть все результаты поиска похожих

Еще в этой же категории

Запуск базы 1С в режиме запуска Обычное приложение или Управляемое приложение  27
Для принудительного запуска предприятия в Обычном или Управляемом приложении используются следующие ключи: /RunModeOrdinaryApplication запуск толстого клиента в обычном режиме, несмотря на настройки конфигурации и пользователя, от имени которого Как посмотреть движения документа в управляемом приложении?  5
При работе с документами в 1С очень часто возникает необходимость просматривать их движения по регистрам. И при работе с обычными формами в режиме толстого клиента никаких проблем не возникало. Кнопка Перейти и далее можно выбрать по какому регистру Использование модальных окон в данном режиме запрещено! Модальные окна не работают, как быть?  4
В конфигураторе в свойства конфигурации, есть параметр «Режим использования модальности» Если установить Не использовать , то - принципе весь код, который после ОткрытьФормуМодально() Вопрос(), Предупреждение(), Выборов и диалогов открытия-сохр Пример хранения изображений в базе (отдельный справочник), в интерфейсе Такси и без модальности  3
Часто разрабатывая некую конфигурацию, пользователи хотят прикреплять к элементу справочника фото и чтобы они хранились в базе данных. В этой статье я расскажу как к справочнику объекты строительства подключить хранилище фотографий в виде справочни Как из панели меню убрать пункт Вид и отключить Настройка панели?  3
Нужно чтобы пользователи не могли менять настроенный для них интерфейс! Решение: Для отключения нужно в правах доступа у корневого элемента конфигурации убрать право " Сохранение данных пользователя ". Отключатся настройка панелей и пункт ме Посмотреть все в категории 1С Общие вопросы - Управляемые формы и Такси

Читайте также: