Картинки 1С программно выводят на управляемую форму через поле картинки: элемент связывают со строковым реквизитом формы, а в реквизит записывают адрес во временном хранилище или навигационную ссылку. Ниже — общий модуль подготовки картинки, превью в списке номенклатуры, загрузка с диска с проверкой, галерея товара со сменой картинки и масштаб поля. Код для платформы 8.3, имена регистров и своих модулей условные, имена БСП сверены по УТ 11.4 и КА 2.5.
Картинки в форме 1С обычно просят в карточке товара, рядом со списком номенклатуры, в обработке загрузки фото и там, где сотрудник сверяет скан документа. В УТ 11.4 и КА 2.5 карточка номенклатуры картинку уже показывает, а форма списка — нет, поэтому превью в списке — частая доработка.
Для вывода картинки из базы или файла у формы есть поле вида «Поле картинки», привязанное к реквизиту типа Строка. Картинка в реквизите не лежит — там адрес, по которому клиент сам запросит данные у сервера. Чем заполнить адрес, зависит от источника:
| Источник | Что записать в реквизит поля |
|---|---|
| Реквизит ХранилищеЗначения записанного объекта | ПолучитьНавигационнуюСсылку(Ссылка, "Картинка") |
| Ресурс регистра сведений | Навигационную ссылку по ключу записи и имени ресурса или адрес во временном хранилище |
| Хранилище в константе или в выборке запроса | Получить() на сервере, затем ПоместитьВоВременноеХранилище |
| Файл с диска пользователя | Адрес из ПоместитьФайлНаСерверАсинх |
Присоединённый файл БСП (ФайлКартинки в УТ 11 и КА 2) | РаботаСФайлами.ДвоичныеДанныеФайла и временное хранилище |
| Общая картинка конфигурации, стандартная картинка платформы | Не поле, а свойство Картинка декорации или кнопки |
Навигационная ссылка на реквизит-хранилище в форме элемента разобрана в статье про хранилище значения. Здесь — случаи, когда картинку надо подготовить на сервере: распаковать, проверить, уменьшить или выбрать из нескольких файлов.
Чтобы вывести картинку, добавьте в реквизиты формы АдресКартинки типа Строка неограниченной длины, перетащите его в дерево элементов и в свойстве «Вид» выберите «Поле картинки». Главные свойства поля картинки 1С:
РазмерКартинки — как вписать картинку: Пропорционально для превью, РеальныйРазмер для просмотра один к одному, Растянуть — с искажением пропорций;ТекстНевыбраннойКартинки — надпись, пока адрес пустой;Гиперссылка — при Истина щелчок по полю вызывает событие Нажатие;Масштабировать и Масштаб — прокрутка и увеличение, о них ниже.Так устроена карточка товара в УТ 11.4 и КА 2.5. В конфигураторе откройте Справочники → Номенклатура → Формы → ФормаЭлемента: поле ФайлКартинки привязано к реквизиту формы АдресКартинки, адрес заполняет ОбновитьАдресКартинки через РаботаСФайлами.ДанныеФайла(Объект.ФайлКартинки, УникальныйИдентификатор).СсылкаНаДвоичныеДанныеФайла. Щелчок по пустому полю добавляет картинку, по заполненному — открывает файл.
Главное правило: передавайте в ПоместитьВоВременноеХранилище уникальный идентификатор формы, тогда данные живут, пока форма открыта. Без второго параметра значение удаляется после очередного вызова сервера, и картинка пропадает при первом действии пользователя. Подготовку картинки удобно собрать в общем серверном модуле:
// Общий модуль РаботаСКартинками (имя условное), флажок «Сервер».
// Функции вызываются из серверных процедур модулей форм.
// Приводит картинку к двоичным данным. Источник — ДвоичныеДанные, Картинка
// или ХранилищеЗначения. Неопределено — если картинки нет.
Функция ДвоичныеДанныеКартинки(Знач Источник) Экспорт
Если ТипЗнч(Источник) = Тип("ХранилищеЗначения") Тогда
Источник = Источник.Получить(); // пустое хранилище вернёт Неопределено
КонецЕсли;
Если ТипЗнч(Источник) = Тип("Картинка") Тогда
Возврат Источник.ПолучитьДвоичныеДанные();
ИначеЕсли ТипЗнч(Источник) = Тип("ДвоичныеДанные") Тогда
Возврат Источник;
КонецЕсли;
Возврат Неопределено;
КонецФункции
// Истина, если в данных картинка известного платформе формата.
Функция ЭтоКартинка(Знач ДанныеФайла) Экспорт
Возврат КартинкаИзДанных(ДанныеФайла) <> Неопределено;
КонецФункции
// Уменьшает JPEG, PNG и BMP так, чтобы большая сторона была не длиннее
// МаксимальнаяСторона пикселей. Остальные форматы возвращает как есть.
Функция УменьшеннаяКопия(Знач ДанныеКартинки, Знач МаксимальнаяСторона = 1200) Экспорт
Картинка = КартинкаИзДанных(ДанныеКартинки);
Если Картинка = Неопределено Тогда
Возврат Неопределено; // не картинка: показывать нечего
КонецЕсли;
ФорматИсходника = Картинка.Формат();
Если ФорматИсходника <> ФорматКартинки.JPEG
И ФорматИсходника <> ФорматКартинки.PNG
И ФорматИсходника <> ФорматКартинки.BMP Тогда
Возврат ДанныеКартинки; // SVG, GIF, TIFF и значки не трогаем
КонецЕсли;
Ширина = Картинка.Ширина();
Высота = Картинка.Высота();
Если Ширина = Неопределено Или Макс(Ширина, Высота) <= МаксимальнаяСторона Тогда
Возврат ДанныеКартинки;
КонецЕсли;
Обработка = Новый ОбрабатываемаяКартинка(Картинка); // 8.3.14+, сервер и толстый клиент
Если Ширина >= Высота Тогда
Обработка.УстановитьРазмер(МаксимальнаяСторона); // высоту платформа посчитает сама
Иначе
Обработка.УстановитьРазмер(, МаксимальнаяСторона);
КонецЕсли;
Если ФорматИсходника = ФорматКартинки.BMP Тогда
Обработка.УстановитьФормат(ФорматКартинки.JPEG); // BMP без сжатия в разы тяжелее
КонецЕсли;
Возврат Обработка.ПолучитьКартинку().ПолучитьДвоичныеДанные();
КонецФункции
// Кладёт картинку во временное хранилище формы и возвращает адрес для реквизита поля.
// Прежний адрес освобождает. Неопределено вместо данных очищает поле.
Функция АдресДляПоля(Знач ДанныеКартинки, Знач ИдентификаторФормы, Знач ПрежнийАдрес = "") Экспорт
Если ЭтоАдресВременногоХранилища(ПрежнийАдрес) Тогда
УдалитьИзВременногоХранилища(ПрежнийАдрес);
КонецЕсли;
Если ДанныеКартинки = Неопределено Тогда
Возврат ""; // поле покажет ТекстНевыбраннойКартинки
КонецЕсли;
// с идентификатором формы данные живут, пока форма открыта
Возврат ПоместитьВоВременноеХранилище(ДанныеКартинки, ИдентификаторФормы);
КонецФункции
// Картинка из двоичных данных или Неопределено, если в данных не картинка.
Функция КартинкаИзДанных(ДанныеФайла)
Если ТипЗнч(ДанныеФайла) <> Тип("ДвоичныеДанные") Тогда
Возврат Неопределено;
КонецЕсли;
Попытка
Картинка = Новый Картинка(ДанныеФайла);
Исключение
Возврат Неопределено; // платформа не разобрала данные
КонецПопытки;
Если Картинка.Формат() = ФорматКартинки.НеизвестныйФормат Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Картинка;
КонецФункцииДвоичныеДанныеКартинки принимает то, что обычно хранится в базе: хранилище значения, объект Картинка или двоичные данные. Пустое хранилище даёт Неопределено, и поле очищается.КартинкаИзДанных перехватывает исключение конструктора и проверяет Формат(): PDF, переименованный в .jpg, картинкой не считается.ОбрабатываемаяКартинка (с 8.3.14) уменьшает фото на сервере. УстановитьРазмер с одной заданной стороной считает вторую по пропорции. Векторный SVG функция не трогает: ПолучитьКартинку на векторном результате выдаёт ошибку. Многокадровые GIF и TIFF тоже показываются как есть.АдресДляПоля удаляет прежний адрес, иначе каждая показанная картинка остаётся во временном хранилище до закрытия формы.&НаСервереБезКонтекста.В тонком и веб-клиенте типа ХранилищеЗначения нет: по синтакс-помощнику он доступен на сервере, в толстом клиенте и во внешнем соединении. Поэтому хранилище распаковывают на сервере, а на форму отдают адрес. Пример — превью товара справа от списка номенклатуры, фото лежат в регистре сведений:
// Форма списка справочника Номенклатура. Фото лежат в регистре сведений
// КартинкиНоменклатуры (имя условное): измерение Номенклатура, ресурс Данные
// типа ХранилищеЗначения. Рядом со списком — поле Картинка, реквизит АдресКартинки (Строка).
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
// пока пользователь листает стрелками, сервер не вызываем
ОтключитьОбработчикОжидания("ОбновитьКартинкуТекущейСтроки");
ПодключитьОбработчикОжидания("ОбновитьКартинкуТекущейСтроки", 0.2, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьКартинкуТекущейСтроки()
АдресКартинки = АдресКартинкиНоменклатуры(Элементы.Список.ТекущаяСтрока,
УникальныйИдентификатор, АдресКартинки);
КонецПроцедуры
// Вызов без контекста: данные формы на сервер не передаются.
&НаСервереБезКонтекста
Функция АдресКартинкиНоменклатуры(Знач Номенклатура, Знач ИдентификаторФормы, Знач ПрежнийАдрес)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КартинкиНоменклатуры.Данные КАК Данные
|ИЗ
| РегистрСведений.КартинкиНоменклатуры КАК КартинкиНоменклатуры
|ГДЕ
| КартинкиНоменклатуры.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();
ДанныеКартинки = Неопределено;
Если Выборка.Следующий() Тогда
ДанныеКартинки = РаботаСКартинками.ДвоичныеДанныеКартинки(Выборка.Данные);
КонецЕсли;
// на клиент уходит превью, а не исходное фото
Превью = РаботаСКартинками.УменьшеннаяКопия(ДанныеКартинки, 400);
Возврат РаботаСКартинками.АдресДляПоля(Превью, ИдентификаторФормы, ПрежнийАдрес);
КонецФункцииИстина.ПриАктивизацииСтроки хватит АдресКартинки = ПолучитьНавигационнуюСсылку(Элементы.Список.ТекущаяСтрока, "Картинка") с проверкой, что текущая строка есть.Пользователь выбирает фото в диалоге или бросает файл мышью на поле. Файл уходит на сервер, там проверяется и уменьшается, а поле показывает готовую картинку.
// Модуль формы. Реквизит АдресКартинки (Строка) привязан к полю Картинка.
// В свойствах поля: РазрешитьПеретаскивание = Истина, СпособПеретаскиванияФайлов =
// КакСсылкаНаФайл, обработчики событий ПроверкаПеретаскивания и Перетаскивание.
&НаКлиенте
Асинх Процедура ЗагрузитьКартинку(Команда)
Диалог = Новый ПараметрыДиалогаПомещенияФайлов;
Диалог.Заголовок = "Выберите картинку";
Диалог.Фильтр = "Картинки|*.jpg;*.jpeg;*.png;*.gif;*.bmp;*.tif;*.tiff;*.svg";
ПередНачалом = Новый ОписаниеОповещения("ПроверитьРазмерФайла", ЭтотОбъект);
Описание = Ждать ПоместитьФайлНаСерверАсинх(, ПередНачалом, , Диалог, УникальныйИдентификатор);
ПринятьФайл(Описание);
КонецПроцедуры
&НаКлиенте
Процедура КартинкаПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТипЗначения = ТипЗнч(ПараметрыПеретаскивания.Значение);
Если ТипЗначения <> Тип("СсылкаНаФайл") И ТипЗначения <> Тип("Массив") Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена; // принимаем только файлы
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КартинкаПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Значение = ПараметрыПеретаскивания.Значение;
Если ТипЗнч(Значение) = Тип("Массив") И Значение.Количество() > 0 Тогда
Значение = Значение[0]; // бросили несколько файлов — берём первый
КонецЕсли;
Если ТипЗнч(Значение) = Тип("СсылкаНаФайл") Тогда
ЗагрузитьПеретащенныйФайл(Значение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Асинх Процедура ЗагрузитьПеретащенныйФайл(СсылкаНаФайл)
ПередНачалом = Новый ОписаниеОповещения("ПроверитьРазмерФайла", ЭтотОбъект);
Описание = Ждать ПоместитьФайлНаСерверАсинх(, ПередНачалом, , СсылкаНаФайл, УникальныйИдентификатор);
ПринятьФайл(Описание);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьРазмерФайла(ПомещаемыйФайл, ОтказОтПомещенияФайла, ДополнительныеПараметры) Экспорт
Если ПомещаемыйФайл.Размер() > 10 * 1024 * 1024 Тогда
ОтказОтПомещенияФайла = Истина; // файл не уйдёт на сервер
ПоказатьПредупреждение(, "Картинка больше 10 МБ, выберите файл поменьше.");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПринятьФайл(Описание)
Если Описание = Неопределено Или Описание.ПомещениеФайлаОтменено Тогда
Возврат; // диалог закрыт или файл отклонён по размеру
КонецЕсли;
ТекстОшибки = ПоказатьЗагруженнуюКартинку(Описание.Адрес);
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ПоказатьПредупреждение(, ТекстОшибки);
Иначе
Модифицированность = Истина; // в форме объекта картинку сохранят при записи
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПоказатьЗагруженнуюКартинку(Знач АдресФайла)
ДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайла);
УдалитьИзВременногоХранилища(АдресФайла); // исходник больше не нужен
Если Не РаботаСКартинками.ЭтоКартинка(ДанныеФайла) Тогда
Возврат "Файл не распознан как картинка.";
КонецЕсли;
// фото с телефона уменьшаем: форма открывается быстрее, в базу ляжет меньший файл
ДанныеКартинки = РаботаСКартинками.УменьшеннаяКопия(ДанныеФайла, 1600);
АдресКартинки = РаботаСКартинками.АдресДляПоля(ДанныеКартинки, УникальныйИдентификатор, АдресКартинки);
Возврат "";
КонецФункцииПоместитьФайлНаСерверАсинх (с 8.3.18) с ПараметрыДиалогаПомещенияФайлов открывает диалог, а со СсылкаНаФайл передаёт перетащенный файл. В режиме совместимости ниже 8.3.18 те же параметры принимает НачатьПомещениеФайлаНаСервер (с 8.3.15), первым у него идёт описание оповещения о завершении.СсылкаНаФайл: Размер() проверяет файл до передачи, а ОтказОтПомещенияФайла = Истина отменяет помещение, и тяжёлый файл не идёт по сети.ПроверкаПеретаскивания со СтандартнаяОбработка = Ложь разрешает бросить файл на поле, а для прочих значений ставит ДействиеПеретаскивания.Отмена. В веб-клиенте при КакСсылкаНаФайл проверка вызывается один раз, при отпускании кнопки мыши.ЭтоКартинка.ПередЗаписьюНаСервере: ПолучитьИзВременногоХранилища(АдресКартинки) и новое хранилище значения в реквизит. Передача файлов между клиентом и сервером подробнее — в статье про двоичные данные.Фото с телефона весит несколько мегабайт; перед записью в базу его стоит ужать — как уменьшить размер картинки в 1С.
В УТ 11.4 и КА 2.5 реквизит ФайлКартинки справочника Номенклатура ссылается на справочник НоменклатураПрисоединенныеФайлы. Фото у товара бывает несколько, а карточка показывает одно основное. Галерея перебирает все картинки товара кнопками «Предыдущая» и «Следующая»:
// Форма «Картинки товара» для УТ 11 и КА 2 (обработка в расширении, имена условные).
// Параметр формы Номенклатура. Реквизиты: АдресКартинки (Строка) — к нему привязано
// поле Картинка, ФайлыКартинок (СписокЗначений), ИндексКартинки (Число).
// Команды Предыдущая и Следующая.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ЗаполнитьФайлыКартинок(Параметры.Номенклатура);
ПоказатьКартинкуПоИндексу(0);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьФайлыКартинок(Номенклатура)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ФайлыТовара.Ссылка КАК Ссылка,
| ФайлыТовара.Наименование КАК Наименование,
| ФайлыТовара.Расширение КАК Расширение,
| ВЫБОР
| КОГДА ФайлыТовара.Ссылка = ФайлыТовара.ВладелецФайла.ФайлКартинки
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ КАК Приоритет
|ИЗ
| Справочник.НоменклатураПрисоединенныеФайлы КАК ФайлыТовара
|ГДЕ
| ФайлыТовара.ВладелецФайла = &Номенклатура
| И НЕ ФайлыТовара.ЭтоГруппа
| И НЕ ФайлыТовара.ПометкаУдаления
|
|УПОРЯДОЧИТЬ ПО
| Приоритет,
| ФайлыТовара.ДатаСоздания";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();
Расширения = СтрРазделить("jpg,jpeg,png,gif,bmp,tif,tiff,svg", ",");
ФайлыКартинок.Очистить();
Пока Выборка.Следующий() Цикл
// к товару прикладывают и PDF, и сертификаты: берём только картинки
Если Расширения.Найти(НРег(Выборка.Расширение)) <> Неопределено Тогда
ФайлыКартинок.Добавить(Выборка.Ссылка, Выборка.Наименование);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПоказатьКартинкуПоИндексу(Индекс)
Количество = ФайлыКартинок.Количество();
ДанныеФайла = Неопределено;
Если Количество = 0 Тогда
Заголовок = "У товара нет картинок";
Иначе
ИндексКартинки = Индекс;
ЭлементСписка = ФайлыКартинок[Индекс];
// Ложь: если файл потерян, вернётся Неопределено, а не исключение
ДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(ЭлементСписка.Значение, Ложь);
Заголовок = СтрШаблон("%1 (%2 из %3)", ЭлементСписка.Представление, Индекс + 1, Количество);
КонецЕсли;
Превью = РаботаСКартинками.УменьшеннаяКопия(ДанныеФайла);
АдресКартинки = РаботаСКартинками.АдресДляПоля(Превью, УникальныйИдентификатор, АдресКартинки);
КонецПроцедуры
&НаКлиенте
Процедура Следующая(Команда)
Количество = ФайлыКартинок.Количество();
Если Количество > 1 Тогда
ПоказатьКартинкуПоИндексу((ИндексКартинки + 1) % Количество);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Предыдущая(Команда)
Количество = ФайлыКартинок.Количество();
Если Количество > 1 Тогда
ПоказатьКартинкуПоИндексу((ИндексКартинки - 1 + Количество) % Количество);
КонецЕсли;
КонецПроцедурыРАЗРЕШЕННЫЕ пропускает файлы, закрытые ограничением доступа, вместо ошибки запроса.НРег: регистр букв в нём бывает разным, а к товару прикладывают и PDF.РаботаСФайлами.ДвоичныеДанныеФайла читает данные и из базы, и из тома на диске. С параметром Ложь потерянный файл даёт Неопределено вместо исключения.ОткрытьФорму и параметром Номенклатура, см. статью про открытие формы.Уменьшенная копия на сервере экономит трафик и место в базе, а свойства поля меняют только отображение. Перечисление РазмерКартинки в тонком клиенте недоступно, а смена РазмерКартинки и Масштабировать на клиенте всё равно идёт через сервер, поэтому режим переключает серверная процедура, а Масштаб меняют на клиенте. Реквизит и поле в примере созданы из кода, как в расширении:
// Модуль формы. Реквизит и поле создаются из кода, например в расширении.
// Если поле Картинка уже есть в конфигураторе, оставьте только настройку свойств.
// Команды Увеличить и Уменьшить добавлены на форму в конфигураторе.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовыеРеквизиты = Новый Массив;
НовыеРеквизиты.Добавить(Новый РеквизитФормы("АдресКартинки", Новый ОписаниеТипов("Строка")));
ИзменитьРеквизиты(НовыеРеквизиты);
Поле = Элементы.Добавить("Картинка", Тип("ПолеФормы"));
Поле.Вид = ВидПоляФормы.ПолеКартинки;
Поле.ПутьКДанным = "АдресКартинки";
Поле.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
Поле.ТекстНевыбраннойКартинки = "Картинки нет";
Поле.Ширина = 40;
Поле.Высота = 15;
Поле.РазмерКартинки = РазмерКартинки.Пропорционально;
Поле.Гиперссылка = Истина;
Поле.УстановитьДействие("Нажатие", "КартинкаНажатие");
КонецПроцедуры
// Реквизит создан из кода, поэтому в модуле он доступен только через ЭтотОбъект.
&НаСервере
Процедура ПоказатьВПоле(Знач ДанныеКартинки)
ЭтотОбъект.АдресКартинки = РаботаСКартинками.АдресДляПоля(ДанныеКартинки,
УникальныйИдентификатор, ЭтотОбъект.АдресКартинки);
КонецПроцедуры
&НаКлиенте
Процедура КартинкаНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПереключитьРазмерКартинки(); // щелчок: вписать в поле или показать 1:1
КонецПроцедуры
&НаСервере
Процедура ПереключитьРазмерКартинки()
// перечисление РазмерКартинки в тонком клиенте недоступно — режим меняем на сервере
Поле = Элементы.Картинка;
Если Поле.РазмерКартинки = РазмерКартинки.Пропорционально Тогда
Поле.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
Поле.Масштабировать = Истина; // полосы прокрутки и масштаб в контекстном меню
Иначе
Поле.РазмерКартинки = РазмерКартинки.Пропорционально;
Поле.Масштабировать = Ложь;
Поле.Масштаб = 100;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Увеличить(Команда)
ИзменитьМасштаб(1.25);
КонецПроцедуры
&НаКлиенте
Процедура Уменьшить(Команда)
ИзменитьМасштаб(0.8);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьМасштаб(Коэффициент)
// Масштаб есть с 8.3.15: проценты к масштабу формы, по умолчанию 100
Поле = Элементы.Картинка;
Поле.Масштаб = Макс(25, Мин(400, Окр(Поле.Масштаб * Коэффициент)));
КонецПроцедурыИзменитьРеквизиты, обращайтесь ЭтотОбъект.АдресКартинки: присваивание по имени создаст локальную переменную, и поле останется пустым. Подробнее — в статье про программное изменение формы.Масштабировать = Истина даёт полосы прокрутки для картинки, которая не помещается в поле, и команды масштаба в контекстном меню.Масштаб (с 8.3.15) — дополнительный к масштабу формы масштаб картинки в процентах, по умолчанию 100. В режиме совместимости 8.3.6 и ниже его изменение игнорируется.УникальныйИдентификатор.&НаКлиенте, а оба типа есть только на сервере и в толстом клиенте. Конструктор Новый Картинка(ДвоичныеДанные) не работает в веб-клиенте. Готовьте картинку и меняйте режим поля на сервере.ТекстНевыбраннойКартинки не используется, а Гиперссылка игнорируется — так в синтакс-помощнике. Открытие картинки из строки делайте через событие таблицы Выбор (двойной щелчок или Enter).ПоместитьВоВременноеХранилище(Данные, Адрес). По этому адресу значение уже удалили, а для удалённого адреса метод генерирует исключение. Берите новый адрес, как АдресДляПоля.РаботаСФайлами.ДанныеФайла завершилась исключением: данных файла нет ни в базе, ни в томе. Проверьте, доступен ли серверу каталог тома хранения файлов.Присвойте элементу свойство Картинка: Элементы.Статус.Картинка = БиблиотекаКартинок.ДиалогВосклицание;. Общие картинки конфигурации доступны так же, по имени. Поле картинки и временное хранилище нужны для картинок из данных: файлов, хранилищ, присоединённых файлов.
ПоместитьВоВременноеХранилище(Данные, Адрес) кладёт данные по прежнему адресу, и строка в реквизите не меняется. Вызовите на клиенте Элементы.Картинка.Обновить() — метод заново получает картинку для поля со строковыми данными. АдресДляПоля такой проблемы не создаёт: адрес каждый раз новый.
Для реквизита-хранилища — в ПередЗаписьюНаСервере: ТекущийОбъект.Картинка = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(АдресКартинки)). В УТ и КА картинку добавляют присоединённым файлом: РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресКартинки), параметры — из РаботаСФайлами.ПараметрыДобавленияФайла() с заполненными ВладелецФайлов, ИмяБезРасширения и РасширениеБезТочки. Так делает форма номенклатуры УТ 11.4 в ПослеЗаписиНаСервере для нового товара.
Скачайте её на сервере через HTTPСоединение и HTTPЗапрос, возьмите Ответ.ПолучитьТелоКакДвоичныеДанные() и передайте в АдресДляПоля. Перед этим проверьте данные через ЭтоКартинка: вместо картинки сайт может вернуть страницу с ошибкой.
Превью в списке номенклатуры, галерея в карточке товара, пересжатие уже загруженных фото — небольшие доработки, но в типовой их делают расширением, чтобы не мешать обновлениям. Такие задачи берут исполнители раздела отчёты и обработки 1С. Опишите конфигурацию и что должно отображаться — разместите задачу, оценка бесплатная, ответ в течение рабочего дня.
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.