Имя: Пароль:
1C
1С v8
Вывод картинки номенклатуры в подбор товара УТ 11.1
0 drey1912
 
22.06.15
17:42
Здравствуйте, делаю внешнюю обработку подбора товара, понадобилось вывести картинки в подбор, но никак не получается. Пробовал смотреть как это сделано в карточке номенклатуры из присоединенных файлов но не прокатило.
Подскажите как это лучше реализовать?
1 D_E_S_131
 
22.06.15
17:44
Ищи "как вывести картинку на управляемую форму".
2 Aceforg
 
22.06.15
17:48
Как раз не давно делал
АдресКартинки = НавигационнаяСсылкаКартинки(Номенклатура.ФайлКартинки, УникальныйИдентификатор);
3 Aceforg
 
22.06.15
17:49
АдресКартинки = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ФайлКартинки, ИдентификаторФормы).СсылкаНаДвоичныеДанныеФайла;
4 Fragster
 
гуру
22.06.15
17:54
(2) а в динамический список как?
5 Aceforg
 
22.06.15
17:56
(4) Делал при активации строки через обработчик ожидания, чтоб не тормозило
6 Лодырь
 
22.06.15
18:11
(5) Аналогично, у меня сделано через обработчик ожидания.
7 Fragster
 
гуру
22.06.15
18:14
(5)(6) не РЯДОМ с динамическим списком, а в сам список
8 D_E_S_131
 
22.06.15
18:21
(7) "Ловите наркомана!" ©
9 Aceforg
 
22.06.15
18:22
(7) Задачи делать галерею картинок не было. Даже при 5 картинок время ответа неприемлемое. А так все довольны.
10 Лодырь
 
22.06.15
18:41
11 Maniac
 
22.06.15
18:55
В точности также как оно реализовано в карточке товара - там весь готовый код.

Создаешь реквизит на форме для вывода картинки. См форму элемента.

И процедурку для ее показа. Только в списке ты будешь обращаться к ТекущимДанным строки для того чтобы передать ссылку.
12 Fragster
 
гуру
22.06.15
19:15
(10) интересно, надо попробовать.

(11) не угадал
13 Лодырь
 
22.06.15
19:52
(12) там проблема именно в одинаковом размере картинок, иначе получается бардак полнейший. надо какой то ресайзер автоматический прикручивать. как вариант, для галереи использовал программное создание элементов формы и табличный документ на форме. но это конечно не динамический список.
14 PRO100 NigGaZ
 
22.06.15
20:11
(5) Почему по активации строки не ОбработчикОжидания?
15 drey1912
 
23.06.15
09:33
Подскажите еще, как подключить обработку чтобы кнопка ее вызова находилась рядом с кнопкой типового подбора. У меня она пишет, что обработка должна вызываться только из документа.
16 drey1912
 
23.06.15
10:55
Ошибку нашел в этой процедуре, "Параметры.Документ" недоступны из внешней обработки т.е. мне надо получить форму и передать ее вместо ПараметрыДокумент!? Или сам документ?

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

    УстановитьУсловноеОформление();
    
    // Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
    Если Параметры.Свойство("АвтоТест") Тогда
        Возврат;
    КонецЕсли;
    
    Если Параметры.Документ = Неопределено Тогда
        ВызватьИсключение НСтр("ru='Предусмотрено открытие обработки только из документов.'");
    КонецЕсли;
    
    КодФормы = "Обработка_ПодборТоваровВДокументПродажи_Форма";
    
    ЭтоБазовая = ПолучитьФункциональнуюОпцию("БазоваяВерсия");
    
    ПодборТоваровСервер.ПриСозданииФормыПодбораНаСервере(ЭтаФорма);
    
    Если Параметры.Свойство("ОтборПоТипуНоменклатуры") И ЗначениеЗаполнено(Параметры.ОтборПоТипуНоменклатуры) Тогда
        Если ТипЗнч(Параметры.ОтборПоТипуНоменклатуры) = Тип("ФиксированныйМассив") Тогда
            ОтборПоТипуНоменклатуры.ЗагрузитьЗначения(Новый Массив(Параметры.ОтборПоТипуНоменклатуры));
        ИначеЕсли ТипЗнч(Параметры.ОтборПоТипуНоменклатуры) = Тип("ПеречислениеСсылка.ТипыНоменклатуры") Тогда
            ОтборПоТипуНоменклатуры.Добавить(Параметры.ОтборПоТипуНоменклатуры);
        Иначе
            ОтборПоТипуНоменклатуры.ЗагрузитьЗначения(Параметры.ОтборПоТипуНоменклатуры);
        КонецЕсли;
    КонецЕсли;
    ЗапретРедактированияСоставаНабора = Параметры.ЗапретРедактированияСоставаНабора;
    ЗапретРедактированияЦеныНабора    = Параметры.ЗапретРедактированияЦеныНабора;
    
    Если Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовНоменклатуры") Тогда
        Элементы.ВариантНавигации.СписокВыбора.Удалить(Элементы.ВариантНавигации.СписокВыбора.НайтиПоЗначению("ПоСвойствам"));
    КонецЕсли;
    
КонецПроцедуры
17 drey1912
 
23.06.15
14:31
Так будет выглядеть вывод картинки? &НаСервереБезКонтекста
Функция НавигационнаяСсылкаКартинки(ФайлКартинки, УникальныйИдентификатор)
    
    УстановитьПривилегированныйРежим(Истина);
    
    Попытка
        АдресКартинки = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ФайлКартинки, УникальныйИдентификатор).СсылкаНаДвоичныеДанныеФайла;
    Исключение
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
        АдресКартинки = "";
    КонецПопытки;
    
    Возврат АдресКартинки;
    
КонецФункции
18 Aceforg
 
23.06.15
14:44
(17)Да, у меня точно так же
19 drey1912
 
23.06.15
14:58
(18) Но ничего не выводит. Обработка внешняя, у вас тоже?
20 drey1912
 
23.06.15
15:00
Вот более полный код, с вызовом.
&НаКлиенте
Процедура ПодборТаблицаХарактеристикиПриАктивизацииСтроки(Элемент)
    
    ПодборТоваровКлиент.ПриАктивизацииСтрокиТаблицыХарактеристик(ЭтаФорма, Элемент);
    НавигационнаяСсылкаКартинки(ФайлКартинки, ИдентификаторФормы);
КонецПроцедуры

&НаСервереБезКонтекста
Функция НавигационнаяСсылкаКартинки(ФайлКартинки, ИдентификаторФормы)
    
    УстановитьПривилегированныйРежим(Истина);
    
    Попытка
        АдресКартинки = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ФайлКартинки, ИдентификаторФормы).СсылкаНаДвоичныеДанныеФайла;
    Исключение
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
        АдресКартинки = "";
    КонецПопытки;
    
    Возврат АдресКартинки;
    
КонецФункции
21 drey1912
 
23.06.15
15:01
Если использовать ИдентификаторФормы как в спр. Номенклатура в типовом коде, то ругается на "переменная не определена"
22 Aceforg
 
23.06.15
15:43
(21) Смотри (2)
АдресКартинки = НавигационнаяСсылкаКартинки(Номенклатура.ФайлКартинки, УникальныйИдентификатор);
23 drey1912
 
23.06.15
15:52
(22) Номенклатура.ФайлКартинк так нельзя обратиться, пишет Номенклатура не определена
24 Aceforg
 
23.06.15
15:54
(22)Так ты на клиенте.
У меня вызывается в обработчике ожидания на СЕРВЕРЕ
25 Aceforg
 
23.06.15
16:01
(23) Если не понятно, то держи весь код, надеюсь разберешься

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


&НаКлиенте
Процедура СписокПриАктивизацииСтрокиОбработчикОжидания()
    
    ПодборТоваровКлиент.УстановитьТекущуюСтрокуИерархииНоменклатуры(ЭтаФорма);
        
    ОтобразитьКартинку();    
    
    ПоказатьОстатки();
    
КонецПроцедуры

&НаКлиенте
Процедура ОтобразитьКартинку()
    
    ЭтоФормаПодбора = ПодборТоваровКлиентСервер.ЭтоФормаПодбора(ЭтаФорма);
    
    ИмяСпискаНоменклатуры = ПодборТоваровКлиентСервер.ИмяСпискаНоменклатурыПоВариантуПоиска(ЭтаФорма);

    ТекущаяСтрока = ЭтаФорма.Элементы[ИмяСпискаНоменклатуры].ТекущаяСтрока;
    Если ТекущаяСтрока = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Если ТипЗнч(ТекущаяСтрока) = Тип("СтрокаГруппировкиДинамическогоСписка") Тогда
        Возврат;
    КонецЕсли;
    
    Если ЭтоФормаПодбора И ЭтаФорма.НавигацияПоХарактеристикам Тогда
        Возврат;
    КонецЕсли;
    
    ТекущиеДанные = ЭтаФорма.Элементы[ИмяСпискаНоменклатуры].ТекущиеДанные;
    
    Если ТекущиеДанные = Неопределено Тогда
        Возврат;
    КонецЕсли;

    ОтобразитьКартинкуНаСервере(ТекущиеДанные.Ссылка);
    
    
КонецПроцедуры



Процедура ПриАктивизацииСтрокиСпискаНоменклатуры(Форма) Экспорт
    
    Форма.ПодключитьОбработчикОжидания("СписокПриАктивизацииСтрокиОбработчикОжидания", 0.1, Истина);
    
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ОтобразитьКартинкуНаСервере(Номенклатура);
    Если Не Номенклатура.ФайлКартинки.Пустая() Тогда
        АдресКартинки = НавигационнаяСсылкаКартинки(Номенклатура.ФайлКартинки, УникальныйИдентификатор);
    Иначе
        АдресКартинки = "";
    Конецесли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция НавигационнаяСсылкаКартинки(ФайлКартинки, ИдентификаторФормы)
    
    УстановитьПривилегированныйРежим(Истина);
    
    Попытка
        АдресКартинки = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ФайлКартинки, ИдентификаторФормы).СсылкаНаДвоичныеДанныеФайла;
    Исключение
        ОбщегоНазначенияКлиентСервер.СообщитьПользователю(КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
        АдресКартинки = "";
    КонецПопытки;
    
    Возврат АдресКартинки;
    
КонецФункции
26 drey1912
 
23.06.15
16:24
(25) ты изменял общие модули?
27 drey1912
 
23.06.15
16:55
(25) Вроде бы сделал все аналогично, но ругается что {Форма.Форма.Форма(769,80)}: Переменная не определена (УникальныйИдентификатор)
        АдресКартинки = НавигационнаяСсылкаКартинки(Номенклатура.ФайлКартинки, <<?>>УникальныйИдентификатор); (Проверка: Сервер)
28 drey1912
 
24.06.15
09:11
(25) Ну от ошибок избавился, но картинка в подборе не отображается...