В справочнике есть табличная часть "товары".. в ней реквизит номенклатура. кроме того в таб части реквизит "ХранилищеИзображения" с типом ХранилищеЗначения.. Ещё на форме поле "АдресКартинки" с типом поле картинки и кнопка "Добавить изображение".. При нажатии на кнопку для активной строки номенклатуры должна происходить загрузка картинки. при активизации любой строки из ТЧ картинка должна выводиться в поле "АдресКартинки".. у меня загружается но при смене строки пропадает с поля.. в чём ошибка??? помогите пожалуйста..
// процедура нажатие на кнопку "Добавить изображение"
//
&НаКлиенте
Процедура ДобавитьИзображение(Команда)
ТекСтрока = Элементы.Товары.ТекущиеДанные;
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = "Изображения(*.bmp,*.jpg,*.png,*.jpeg)|*.bmp;*.jpg;*.png;*.jpeg";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";
Если Не ДиалогОткрытияФайла.Выбрать() Тогда
Возврат;
КонецЕсли;
ПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
АдресКартинки = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайла), ЭтотОбъект.УникальныйИдентификатор);
ДобавитьИзображениеНаСервере(ТекСтрока.НомерСтроки - 1, АдресКартинки);
КонецПроцедуры
&НаСервере
Процедура ДобавитьИзображениеНаСервере(ИдСтроки, АдресКартинки);
ТекОбъект = РеквизитФормыВЗначение("Объект");
текСтрока = ТекОбъект.Товары[ИдСтроки];
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресКартинки);
текСтрока.ХранилищеИзображения = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
ЗначениеВРеквизитФормы(ТекОбъект, "Объект");
КонецПроцедуры
//процедура при создании формы на сервере
//
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ТекСтрока = Элементы.Товары.ТекущаяСтрока;
ТекОбъект = РеквизитФормыВЗначение("Объект");
АдресКартинки = ПолучитьНавигационнуюСсылку(ТекОбъект.Ссылка, "Товары.ХранилищеИзображения", ТекСтрока);
КонецПроцедуры
//Отображение картинки при переходе по строкам
//
&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
ТекСтрока = Элемент.ТекущиеДанные;
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Товары.ХранилищеИзображения", ТекСтрока.НомерСтроки-1);
ТоварыПриАктивизацииСтрокиНаСервере(ТекСтрока.НомерСтроки-1);
КонецПроцедуры
&НаСервере
Процедура ТоварыПриАктивизацииСтрокиНаСервере(ИдСтроки)
ТекОбъект = РеквизитФормыВЗначение("Объект");
АдресКартинки = ПолучитьНавигационнуюСсылку(ТекОбъект, "Товары.ХранилищеИзображения", ИдСтроки);
КонецПроцедуры
вот скрин формы
Добавьте на форму (в табличную часть) реквизит формы "АдресКартинки".
Обратите внимание на процедуры "ПередЗаписью" и "ПередЗаписьюНаСервере".
Главная идея: не ганяем при каждом клике по строке клиента на сервер, а изначально ссылки на временные адреса храним у клиента, и только в момент записи передаем эти адреса на сервер и записываем их + при открытии апдейтим их.
Код не идеален, просто, за 15 минут, что успел -написал.
&НаКлиенте
Процедура ДобавитьИзображение(Команда)
ТекСтрока = Элементы.Товары.ТекущиеДанные;
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = "Изображения(*.bmp,*.jpg,*.png,*.jpeg)|*.bmp;*.jpg;*.png;*.jpeg";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";
ДиалогОткрытияФайла.Показать(Новый ОписаниеОповещения("ДобавитьИзображениеЗавершение", ЭтотОбъект, Новый Структура("ДиалогОткрытияФайла, ТекСтрока", ДиалогОткрытияФайла, ТекСтрока)));
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьИзображениеЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
ДиалогОткрытияФайла = ДополнительныеПараметры.ДиалогОткрытияФайла;
ТекСтрока = ДополнительныеПараметры.ТекСтрока;
Если Не (ВыбранныеФайлы <> Неопределено) Тогда
Возврат;
КонецЕсли;
ПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
АдресКартинки = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайла), ЭтотОбъект.УникальныйИдентификатор);
ТекСтрока = Элементы.Товары.ТекущиеДанные;
ТекСтрока.АдресКартинки = АдресКартинки;
КонецПроцедуры
//Отображение картинки при переходе по строкам
//
&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
ТекСтрока = Элемент.ТекущиеДанные;
Если ТекСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
АдресКартинки = ТекСтрока.АдресКартинки;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
инд = 1;
Для Каждого СтрокаТовары Из ТекущийОбъект.Товары Цикл
СсылкаНаКартинку = ПараметрыЗаписи["СтрокаТовары" + Формат(инд,"ЧГ=0")];
Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда
СтрокаТовары.ХранилищеИзображения = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СсылкаНаКартинку));
КонецЕсли;
инд = инд + 1;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
инд = 1;
Для Каждого СтрокаТовары Из Объект.Товары Цикл
ПараметрыЗаписи.Вставить("СтрокаТовары" + Формат(инд,"ЧГ=0"),СтрокаТовары.АдресКартинки);
инд = инд + 1;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Для Каждого СтрокаТовары Из Объект.Товары Цикл
СтрокаТовары.АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Товары.ХранилищеИзображения", СтрокаТовары.НомерСтроки - 1 );
КонецЦикла;
КонецПроцедуры
TipsyKID @ Вчера, 19:12
,
Большое спасибо!!!!!! Выручили сильно!!!!!!
vlad_ @ Сегодня, 11:43
,
немного модернизировал код.. процедура Перед записью не нужна, так как с серверной процедуры это доступно..
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
//инд = 1;
Для Каждого СтрокаТовары Из ТекущийОбъект.Товары Цикл
СсылкаНаКартинку = Объект.Товары[СтрокаТовары.НомерСтроки - 1].АдресКартинки; //ПараметрыЗаписи["СтрокаТовары" + Формат(инд,"ЧГ=0")];
Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда
СтрокаТовары.ХранилищеИзображения = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СсылкаНаКартинку));
КонецЕсли;
//инд = инд + 1;
КонецЦикла;
КонецПроцедуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua