Как реализовать в форме элемента справочника выбор картинок

Рассмотрим ситуацию на таком примере: в конфигурации есть сотрудники, нужно, чтобы к каждому сотруднику «цеплялась» его фотография. Исходные фотографии в формате jpg храним в папке photo внутри папки с базой. Последовательность действий по шагам:
1) Сначала нужно в глобальном модуле объявить глобальную переменную КаталогФотографий:
Перем КаталогФотографий Экспорт;
2) Затем в предопределенной процедуре глобального модуля ПриНачалеРаботыСистемы() нужно подготовиться к работе с фотографиями:
КаталогФотографий = КаталогБазыДанных()+“photo\”;
Если (ФС.СуществуетФайл(КаталогФотографий+”.“)=0) Тогда
ФС.СоздатьКаталог(КаталогФотографий);
КонецЕсли;

Здесь мы присваиваем начальное значение переменной КаталогФотографий и создаем папку photo внутри папки с базой, если таковой нет.
3) В справочник «Сотрудники» добавляем новый реквизит ИмяВыбрФайла (строка длиной 50 символов) – здесь мы будем хранить имя выбранного файла с фотографией сотрудника.
4) Открываем форму элемента справочника Сотрудники, вкладку Диалог. Создаем в диалоге новый элемент форме с типом Картинка и идентификатором Фотография, под ним кнопку с заголовком Фотография и вызовом функции Фото() в поле Формула: на закладке «Дополнительно», а также вторую кнопку со знаком Х в поле «Заголовок» и вызовом функции УдалитьФото() в поле Формула: на закладке «Дополнительно».
5) Займемся кодом. Код вставляется на вкладке Модуль формы элемента справочника.
Как должно быть понятно из п.4, нам нужны две функции: Фото() и УдалитьФото().
Вот код первой из них:
Процедура Фото()
Если ФС.ВыбратьФайлКартинки(0, ИмяВыбрФайла, ИмяПути, “Выберите файл”, “jpg”, )=1 тогда
Фотография.Загрузить(ИмяПути+ИмяВыбрФайла);
КонецЕсли;
Фотография.РежимРисования(3);
КонецПроцедуры

Вот код второй процедуры:
Процедура УдалитьФото()
ИмяВыбрФайла = “”;
ИмяПути = “”;
А=СоздатьОбъект(“Картинка”);
Фотография.УстановитьКартинку(А);
КонецПроцедуры

6) Теперь нам осталось внести изменения в предопределенную процедуру ПриОткрытии() формы элемента справочника:
Если ПустоеЗначение(ИмяВыбрФайла) = 0 тогда
ФайлФото=КаталогФотографий+СокрЛП(ИмяВыбрФайла);
Если ФС.СуществуетФайл(ФайлФото)=1 Тогда
Фотография.Загрузить(КаталогФотографий+ФС.НайтиПервыйФайл(ФайлФото));
КонецЕсли;
КонецЕсли;

Эту вставку можно сделать в самом конце процедуры ПриОткрытии(), перед КонецПроцедуры. Если в вашей конфигурации в модуле формы выбранного справочника процедура ПриОткрытии() отсутствует, то ее нужно создать в таком виде:
Процедура ПриОткрытии()
Если ПустоеЗначение(ИмяВыбрФайла) = 0 тогда
ФайлФото=КаталогФотографий+СокрЛП(ИмяВыбрФайла);
Если ФС.СуществуетФайл(ФайлФото)=1 Тогда
Фотография.Загрузить(КаталогФотографий+ФС.НайтиПервыйФайл(ФайлФото));
КонецЕсли;
КонецЕсли;
КонецПроцедуры

| опубликовано: 17 Февраль 2009, 16:39

Комментирование этой статьи закрыто