Имя: Пароль:
1C
1C 7.7
v7: Вызвать процедуру или функцию из картинки на форме, как?
0 MWWRuza
 
гуру
20.04.18
12:46
Чего-то затупил конкретно... Собственно, сабж...
Подробнее: Форма(справочника, но, это не важно). В ней есть поле картинки. Как кликнув по картинке, вызвать процедуру модуля формы(в ней я хочу открывать картинку методом ЗапуститьПриложение(ПутьКФайлу))-???
В самой картинке есть только идентификатор... Чем отловить событие клика на этом поле?
1 Vippi
 
20.04.18
13:00
(0) FormEx
2 dk
 
20.04.18
13:03
штатно тока кнопку ниже картинки сделать и ее жмакать
3 MWWRuza
 
гуру
20.04.18
14:22
Ясно, спасибо. А я думал, что я туплю... Оказывается, действительно штатными методами нельзя.
4 Kigo_Kigo
 
20.04.18
14:49
можно сделать большую кнопку а на нее запилить картинку, на кнопку процедуру, а зачем ЗапуститьПриложение(ПутьКФайлу)) ?
если только рассмотреть картинку, можно вызвать обработку на форме которой лежит большая картинка и при открытии погружать нужную картинку
5 MWWRuza
 
гуру
20.04.18
14:58
Понятно... Сделал без особых извращений, кнопочку маленькую с буковкой "О", как во многих формах, где выбираемый реквизит можно просматривать, в стандартном стиле. Сабж был совсем не принципиален, скорее, для общего развития.
6 MWWRuza
 
гуру
20.04.18
15:01
А делать отдельную форму для просмотра большой картинки? Смысла особого не вижу, штатный виндовый "Просмотр изображений и факсов", вполне устраивает.
7 Kigo_Kigo
 
20.04.18
15:03
(6) это визовет открытие не нужных домолнительных окон вне 1с, на ворме только картинка с индентификатором картинка
вот код, у меня так

Процедура ПриОткрытии()
    ИмяФотографии = Форма.Параметр;
    ИмяФотографии = СокрЛП(ИмяФотографии);
    Если ПустаяСтрока(ИмяФотографии) = 1 Тогда
        Сообщить("Файл с фотографией не сопаставлен");
    Иначе
        Если ФС.СуществуетФайл(ИмяФотографии) =1 тогда
            Картинка.РежимРисования(3);
            Картинка.Загрузить(ИмяФотографии);
        Иначе
            Предупреждение("Отсутствует файл фотографии");
        КонецЕсли     
    КонецЕсли;
    
    
КонецПроцедуры
8 MWWRuza
 
гуру
20.04.18
15:15
Понятно. Окна вне 1С, мне особо не мешают, зато открывают картинку в исход сделал вот так:

В глобальнике, потому, что используется в нескольких местах, кроме справочника:

// Влад 19.01.2018
Функция НормализоватьАртикул(Арт) Экспорт
    Рез    = СокрЛП(Арт);
    Рез    = СтрЗаменить(Рез,"\","_");
    Рез    = СтрЗаменить(Рез,"/","_");
    Возврат Рез;
КонецФункции

Функция ВернутьИмяФайлаКартинки(Код, Артикул) Экспорт
    ИмяФайлаКартинки = КаталогИБ() + СокрЛП(Константа.КаталогКартинок)+ "\" + СокрЛП(Код) + "_" + НормализоватьАртикул(Артикул) + ".jpg";
    Возврат ИмяФайлаКартинки;
КонецФункции    
// Конец Влад 19.04.2018
Функция убирает слэши из Артикула, меняет на нижние подчеркивания, иначе "общая файловая ошибка".

В форме справочника:

// Влад 19.01.2018
Процедура ЗагрузитьКартинку()
    ИмяФайлаКартинки = ВернутьИмяФайлаКартинки(Код, Артикул);
    Если ФС.СуществуетФайл(ИмяФайлаКартинки) = 1 Тогда
        Картинка.Загрузить(ИмяФайлаКартинки);    
    КонецЕсли;    
КонецПроцедуры

Процедура УдалитьКартинку()
    Если Вопрос("Вы уверены, что хотите удалить картинку?",4,10) = 6 Тогда
        ИмяФайлаКартинки = ВернутьИмяФайлаКартинки(Код, Артикул);    
        ФС.УдалитьФайл(ИмяФайлаКартинки);
        ПустКартинка = СоздатьОбъект("Картинка");
        Картинка.УстановитьКартинку(ПустКартинка);
        Форма.Обновить(0);
    КонецЕсли;    
КонецПроцедуры

Процедура ЗагрузитьКартинкуВБазу()
    ИмяФайлаКартинки = ВернутьИмяФайлаКартинки(Код, Артикул);
    Если ФС.СуществуетФайл(ИмяФайлаКартинки) = 1 Тогда
        Если Вопрос("Вы уверены, что хотите изменить картинку?",4,10) <> 6 Тогда
            СтатусВозврата(0);
            Возврат;
        КонецЕсли;
    КонецЕсли;
    НоваяКартинка     = "";
    Если ФС.ВыбратьФайлКартинки(0,НоваяКартинка,КатЗагрКартинки,"Выберите файл картинки для текущего товара!","jpg",10) = 1 Тогда
        ФС.КопироватьФайл(КатЗагрКартинки + НоваяКартинка, ИмяФайлаКартинки, 0);    
    КонецЕсли;
    Картинка.Загрузить(ИмяФайлаКартинки);    
КонецПроцедуры

Процедура ПросмотрКартинки()
    ИмяФайлаКартинки = ВернутьИмяФайлаКартинки(Код, Артикул);
    ЗапуститьПриложение(ИмяФайлаКартинки);
КонецПроцедуры
// Конец работы с картинками Влад 19.04.2018

Картинки храню в папке, с именем заданным в константе, внутри ИБ.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший