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

Обновлено: 06.07.2024

Картинка - это двоичные данные, и в базе они хранятся в виде реквизитов с типом ХранилищеЗначения. Значения такого типа недоступны на клиенте. Поэтому не совсем очевидно, как же с ними работать. На самом деле всё очень просто, разработчики платформы придумали изящное решение данной проблемы.

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

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

Заполняется реквизит обычно в обработчике события ПриСозданииНаСервере . Вот пример, когда само изображение хранится в реквизите объекта под названием Изображение :

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

Изменить картинку несложно - достаточно просто записать в реквизит формы новый идентификатор картинки. Вот пример того, как на клиенте можно загрузить картинку из указанного файла:

Здесь мы загружаем картинку стандартным способом - соответствующим конструктором объекта типа Картинка. Далее, помещаем её во временное хранилище и запоминаем идентификатор в реквизите формы. Последняя строка нужна если при замене картинки требуется устанавливать флаг изменения в форме. Как вариант - можно установить свойство "Сохраняемые данные" реквизита формы.

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

Здесь мы получаем данные из временного хранилища, помещаем их в реквизит типа ХранилищеЗначения с именем Изображение . Не забываем записать объект!

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

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

Управляемая форма.Собственно сабж. Можно ли также установить разные картинки для разных строк таблицы формы.

Спасибо за внимание. За ответы и советы премного благодарен.

(1)я посмотрел, там указать можно только одну картинку. Для разных строк можно ди разные ? И если не затруднит покажи кусоче кода :)
(2) у меня в картинке содержится несколько картинок, она длинная такая. я просто задал ПутьКДаннымКартинкиСтроки и по индексу картинки сами выбираются
(9) добавь колонку, в которой будешь задавать индекс нужной картинки и читай (4)
(8)Установил "портянку картинок", задал ПутьКДаннымКартинкиСтроки. Читаем справку: "Для получения картинки строк в таблице может быть указана колонка c типом Число или Булево", т.е. надо создавать доп. колонку ДЗ ?
(11) да, либо, например, можно указать колонку со справочником, у которого выбрать реквизит типа число
(13) извините, но у меня такая же ситуация. подскажите, как вы сделали. моя ветка v8: КА 8.2 Управляемы формы. Табличное поле
как реализовали? не совсем понятны фразы "у меня в картинке содержится несколько картинок, она длинная такая. я просто задал ПутьКДаннымКартинкиСтроки и по индексу картинки сами выбираются " и "Установил "портянку картинок", задал ПутьКДаннымКартинкиСтроки. Читаем справку: "Для получения картинки строк в таблице может быть указана колонка c типом Число или Булево", т.е. надо создавать доп. колонку ДЗ ?"

у меня есть Таблица (элемент формы) - в ней несколько элементов - строк таблицы. встаю на свойство поля элемента - где у него ПутьКДаннымКартинкиСтроки. не вижу, хоть убейте, или где вообще картинки для поля элемента задаются. есть: КартинкаШапки, КратинкаПодвала, КартинкаКнопкиВыбора. где и что задать нужно, подскажите, пожалуйста.
нашла ПутьКДаннымКартинкиСтроки и КартинкаСтрок. нужно было не на элементе свойства открывать, а на Таблице.
теперь вопрос такой: "я просто задал ПутьКДаннымКартинкиСтроки и по индексу картинки сами выбираются" как задать несколько картинок для одного пути, у меня получается 4 варинта картинок. как установить эту саму "портянку картинок"?
(15) есть картинки, а есть коллекции картинок, там их несколько и нужную можно получить по индексу 0, 1.
ПутьКДаннымКартинкиСтроки в свойствах элемента Таблица, в секции Использование.
у меня ПутьКДаннымКартинкиСтроки - Объект.Таблица.Проведен.
Проведен - тип число. другой тип данных задать?
(17) нашла ПутьКДаннымКартинкиСтроки. так я должна в этом пути выбрать не строку таблицы, а другой тип данных картинок? не совсем понятно.
(19) тебе осталось найти коллекцию из двух твоих картинок. или сделать ее самой с помощью редактора картинок.
(17) хорошо, получается, что нужно иметь файл-коллекции? а где тогда я буду условие задавать, какую картинку выбрать?
например, если Объект.Таблица.Проведен = 1 тогда такая-то картинка
вот смотрите, в ПутьКДаннымКартинкиСтроки выбрала Объект.Таблица.Проведен. а в КартинкаСтрока должна выбрать картинку файл-коллекции? так? а условие, по которому картинка будет выбираться, где нужно написать? в модуле формы?
(22) не надо ничего писать, у тебя это автоматом будет Проведен = 1, а Не Проведен = 0
(23) ааа, т.е. все зависит от той последоваельности, в какой будут идти картинки друг за другом. так?
вопрос второй как сделать этот файл-коллекции? (боже мой, я не художник)
мне нужно четыре картинки:
ПолеКартинкиНеПроведен
ПолеКартинкиПроведен
ПолеКартинкиУдален
ПолеКартинкиУдаленПроведен

спасибо большое, Mitriy, что помог разобраться.

по теме нашла вот еще:
Всобытия управляемых формах отсутствуют события ПриВыводеСтроки, ПриПолученииДанных, которые в неуправляемых формах успешно использовались для отображения картинок. Теперь работа с картинками ТЧ в управляемых формах основана на механизмах КартинкаСтрок и ПутьКДаннымКартинкиСтрок. Работа с картинками выглядит это примерно так:
КартинкаСтрок - содержит коллекцию картинок которые будут использоватся в ТЧ.
ПутьКДаннымКартинкиСтроки - указывает, откуда система будет барть индексы для картинок.

Весь фокус в том, что у колонки, которая является данными для индексов картинок(ПутьКДаннымКартинкиСтроки) обязательно должно быть в свойствах списка стоять галочка Использовать всегда.

но где файл-коллекции взять, так и не сказано.

(27) на ИТС есть коллекция картинок для 8.2, можно там что-нибудь присмотреть.
создала на вкладке КартинкаСтрок - Подбор из файла-коллекции 4 нужных мне кратинки из файла. нажимаю Ок, пишет - Использование абсолютных картинок в управляемых формах не рекомендуется. захожу в обработку через предприятие - ничего не изменилось, картинок нет( что делаю не так?

(29) вставь в конфигурацию, в Общие - Картинки.

на ИТС еще две статьи есть:
Как установить нестандартную картинку строки и Как показать собственные картинки в табличной части или динамическом списке.

Библиотека картинок в:
. \1CIts\EXE\PictLib

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

спасибо большое за ссылку на ИТС.

нашла, установила базу, там два справоника Картинки и Категории картинок. в Общие - Общие картинки ничего нет. что делать дальше?

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

Применимость

В статье рассматривается платформа «1С:Предприятие» редакции 8.3. Представленная информация актуальна для текущих релизов платформы.

Работа с файлами (картинками) в интерфейсе Такси

Для увеличения нажмите на изображение.

Однако, если разрешить модальные окна, то мы столкнемся с проблемами при работе в web-клиенте.

Во-вторых, о работе с картинками в управляемых формах часто спрашивают.

Для увеличения нажмите на изображение.

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

Далее, займемся формой. Как видно на картинке, реквизит с типом хранилище значений в форме недоступен.

Форма элемента - ХранилищеЗначения

Для увеличения нажмите на изображение.

Для увеличения нажмите на изображение.

Для увеличения нажмите на изображение.

Для увеличения нажмите на изображение.

Для увеличения нажмите на изображение.

Пару комментариев к вышеописанному коду:

Для увеличения нажмите на изображение.

Процедура ПередЗаписьюНаСервере

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

Для увеличения нажмите на изображение.

Процедура ПриСозданииНаСервере

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

Для увеличения нажмите на изображение.

Вот и все. Готовую базу можно взять тут.

PDF-версия статьи для участников группы ВКонтакте

Статья в PDF-формате

Комментарии / обсуждение (64):

// Данные = РегистрыСведений.СопоставлениеДанных.Данные;
КонецПроцедуры

А как ето зделать ? Какие елементы формы должны присутвовать ? Может ето и без етого справочника можно зделать ?

1. Создаем в конфигураторе новый справочник, подчиненный Номенклатуре (например, назовем его ПрисоединенныеКартинки). Добавляем для него реквизит ДанныеКартинки. Добавление картинки выполняем аналогично, как в статье, только работаем не со справочником Номенклатура, а с новым справочником ПрисоединенныеКартинки. Получится, что для одного элемента справочника Номенклатура можно создать несколько подчиненных элементов в справочнике ПрисоединенныеКартинки, в каждом из которых будет храниться своя картинка.
2. Вместо справочника можно использовать, например, регистр сведений для хранения данных картинок.

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

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

Программное создание команд в упр форме
Пишу &НаКлиенте Процедура Скомпоновать(Команда) СкомпоноватьНаСервере(); КонецПроцедуры .

От Новичка: 8.2 поле переключателя в упр.форме ?
Имеется форма на нее выведено поле переключателя, связанного с реквизитом справочника типа строка.

От Новичка: Поле ввода в упр.форме ?
Есть в упр.форме поле ввода и назначен обработчик "по завершении ввода" (как то так называется) в.

Читай справку хотя бы иногда.

ПоместитьВоВременноеХранилище (PutToTempStorage)
Синтаксис:

ПоместитьВоВременноеХранилище(<Данные>, <Адрес>)
Параметры:

Тип: Произвольный.
Данные, которые необходимо поместить во временное хранилище.
<Адрес> (необязательный)

Тип: УникальныйИдентификатор; Строка.
Уникальный идентификатор формы, во временное хранилище которой надо поместить данные и вернуть новый адрес. Или адрес во временном хранилище, по которому надо поместить данные. Адрес должен получен ранее с помощью данного метода.
В случае, если передается УникальныйИдентификатор формы или адрес в хранилище, то значение будет автоматически удалено после закрытия этой формы.
Если передан УникальныйИдентификатор, не являющийся уникальным идентификатором формы, то значение будет удалено после завершения сеанса пользователя.
Если параметр не указан, помещенное значение будет удалено после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы.
Возвращаемое значение:

Тип: Строка.
Адрес во временном хранилище.
Описание:

Сохраняет сериализуемое значение во временное хранилище.

Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).
Примечание:

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

ПолеФормы (FormField)
Доступность (Enabled)
Использование:

Чтение и запись.
Описание:

Тип: Булево.
Управляет доступностью поля.
Истина - доступна.

Тонкий клиент, веб-клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
Изменение свойства на клиенте может потребовать обращения к серверу.

Добавлено через 1 минуту
Передай UUID формы вторым параметром

Добавлено через 9 секунд
Передай UUID формы вторым параметром

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