Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 3, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Вывод картинки товара в поле картинки          
vlad_ Подменю пользователя
сообщение 11.10.16, 13:25
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

В справочнике есть табличная часть "товары".. в ней реквизит номенклатура. кроме того в таб части реквизит "ХранилищеИзображения" с типом ХранилищеЗначения.. Ещё на форме поле "АдресКартинки" с типом поле картинки и кнопка "Добавить изображение".. При нажатии на кнопку для активной строки номенклатуры должна происходить загрузка картинки. при активизации любой строки из ТЧ картинка должна выводиться в поле "АдресКартинки".. у меня загружается но при смене строки пропадает с поля.. в чём ошибка??? помогите пожалуйста..


// процедура нажатие на кнопку "Добавить изображение"
//
&НаКлиенте
Процедура ДобавитьИзображение(Команда)
    
    ТекСтрока = Элементы.Товары.ТекущиеДанные;
    
    Если ТекСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    Фильтр = "Изображения(*.bmp,*.jpg,*.png,*.jpeg)|*.bmp;*.jpg;*.png;*.jpeg";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";
    
    Если Не ДиалогОткрытияФайла.Выбрать() Тогда
        
        Возврат;
        
    КонецЕсли;
    
    ПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
    
    АдресКартинки = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайла), ЭтотОбъект.УникальныйИдентификатор);
    
    ДобавитьИзображениеНаСервере(ТекСтрока.НомерСтроки - 1, АдресКартинки);  
    
КонецПроцедуры

&НаСервере
Процедура ДобавитьИзображениеНаСервере(ИдСтроки,  АдресКартинки);    
    
    
    ТекОбъект = РеквизитФормыВЗначение("Объект");
    текСтрока = ТекОбъект.Товары[ИдСтроки];
    
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресКартинки);
    текСтрока.ХранилищеИзображения = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
    
    
    ЗначениеВРеквизитФормы(ТекОбъект, "Объект");
        
КонецПроцедуры


//процедура при создании формы на сервере
//
&НаСервере                                                          
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ТекСтрока = Элементы.Товары.ТекущаяСтрока;
    
    
    ТекОбъект = РеквизитФормыВЗначение("Объект");
    АдресКартинки = ПолучитьНавигационнуюСсылку(ТекОбъект.Ссылка, "Товары.ХранилищеИзображения", ТекСтрока);
        
КонецПроцедуры

//Отображение картинки при переходе по строкам
//
&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
    
    ТекСтрока = Элемент.ТекущиеДанные;
    Если ТекСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;    
    
    АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Товары.ХранилищеИзображения", ТекСтрока.НомерСтроки-1);
    
    ТоварыПриАктивизацииСтрокиНаСервере(ТекСтрока.НомерСтроки-1);
        
КонецПроцедуры

&НаСервере
Процедура ТоварыПриАктивизацииСтрокиНаСервере(ИдСтроки)
    
    ТекОбъект = РеквизитФормыВЗначение("Объект");
    АдресКартинки = ПолучитьНавигационнуюСсылку(ТекОбъект, "Товары.ХранилищеИзображения", ИдСтроки);
    
КонецПроцедуры

vlad_ Подменю пользователя
сообщение 11.10.16, 16:51
Сообщение #2

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

вот скрин формы




TipsyKID Подменю пользователя
сообщение 11.10.16, 18:12
Сообщение #3

Оратор
Иконка группы
Группа: Местный
Сообщений: 408
Из: Киев
Спасибо сказали: 160 раз
Рейтинг: 0

Добавьте на форму (в табличную часть) реквизит формы "АдресКартинки".
Обратите внимание на процедуры "ПередЗаписью" и "ПередЗаписьюНаСервере".

Главная идея: не ганяем при каждом клике по строке клиента на сервер, а изначально ссылки на временные адреса храним у клиента, и только в момент записи передаем эти адреса на сервер и записываем их + при открытии апдейтим их.

Код не идеален, просто, за 15 минут, что успел -написал.

&НаКлиенте
Процедура ДобавитьИзображение(Команда)
    
    ТекСтрока = Элементы.Товары.ТекущиеДанные;
    
    Если ТекСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Режим = РежимДиалогаВыбораФайла.Открытие;
    ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
    ДиалогОткрытияФайла.ПолноеИмяФайла = "";
    Фильтр = "Изображения(*.bmp,*.jpg,*.png,*.jpeg)|*.bmp;*.jpg;*.png;*.jpeg";
    ДиалогОткрытияФайла.Фильтр = Фильтр;
    ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
    ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";
    
    ДиалогОткрытияФайла.Показать(Новый ОписаниеОповещения("ДобавитьИзображениеЗавершение", ЭтотОбъект, Новый Структура("ДиалогОткрытияФайла, ТекСтрока", ДиалогОткрытияФайла, ТекСтрока)));  
    
КонецПроцедуры

&НаКлиенте
Процедура ДобавитьИзображениеЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
    
    ДиалогОткрытияФайла = ДополнительныеПараметры.ДиалогОткрытияФайла;
    ТекСтрока = ДополнительныеПараметры.ТекСтрока;
    
    
    Если Не (ВыбранныеФайлы <> Неопределено) Тогда
        
        Возврат;
        
    КонецЕсли;
    
    ПолноеИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
    
    АдресКартинки = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПолноеИмяФайла), ЭтотОбъект.УникальныйИдентификатор);
    
    ТекСтрока = Элементы.Товары.ТекущиеДанные;
    ТекСтрока.АдресКартинки = АдресКартинки;

КонецПроцедуры

//Отображение картинки при переходе по строкам
//
&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
    
    ТекСтрока = Элемент.ТекущиеДанные;
    Если ТекСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    АдресКартинки = ТекСтрока.АдресКартинки;
    
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    инд = 1;
    Для Каждого СтрокаТовары Из ТекущийОбъект.Товары Цикл
        СсылкаНаКартинку = ПараметрыЗаписи["СтрокаТовары" + Формат(инд,"ЧГ=0")];
        Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда
            СтрокаТовары.ХранилищеИзображения = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СсылкаНаКартинку));
        КонецЕсли;
        инд = инд + 1;
    КонецЦикла;
    
КонецПроцедуры

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    инд = 1;
    Для Каждого СтрокаТовары Из Объект.Товары Цикл
        ПараметрыЗаписи.Вставить("СтрокаТовары" + Формат(инд,"ЧГ=0"),СтрокаТовары.АдресКартинки);  
        инд = инд + 1;
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    Для Каждого СтрокаТовары Из Объект.Товары Цикл
        СтрокаТовары.АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Товары.ХранилищеИзображения", СтрокаТовары.НомерСтроки - 1 );
    КонецЦикла;    
КонецПроцедуры



Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

Спасибо сказали: vlad_,

vlad_ Подменю пользователя
сообщение 12.10.16, 11:23
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 10
Спасибо сказали: 0 раз
Рейтинг: 0

TipsyKID @ Вчера, 19:12 * ,

Большое спасибо!!!!!! Выручили сильно!!!!!!


vlad_ @ Сегодня, 11:43 * ,
немного модернизировал код.. процедура Перед записью не нужна, так как с серверной процедуры это доступно..
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    //инд = 1;
    Для Каждого СтрокаТовары Из ТекущийОбъект.Товары Цикл
        СсылкаНаКартинку = Объект.Товары[СтрокаТовары.НомерСтроки - 1].АдресКартинки; //ПараметрыЗаписи["СтрокаТовары" + Формат(инд,"ЧГ=0")];
        Если ЭтоАдресВременногоХранилища(СсылкаНаКартинку) Тогда
            СтрокаТовары.ХранилищеИзображения = Новый ХранилищеЗначения(ПолучитьИзВременногоХранилища(СсылкаНаКартинку));
        КонецЕсли;
        //инд = инд + 1;
    КонецЦикла;
    
КонецПроцедуры

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 29.11.20, 16:04
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!