gifts2017

Изображение Основного Средства

Опубликовал Николай Глаголев (NickOmskiy2) в раздел Программирование - Работа с интерфейсом

Возможность добавлять изображения основных средств.

Бухгалтерия попросила добавить возможность загрузки картинок для основных средств. Взял за основу несколько строк из "Профессиональной разработки", слегка переделал. В результате добавил управляемую форму элемента справочника ОС, в которой загружаем и просматриваем изображение ОС. В обычных формах (типовых) добавил кнопки для открытия Управляемой Формы. Если при очередном обновлении конфигурации кнопки пропадут, достаточно их будет восстановить.

Сразу оговорюсь что можно пункты с 1 по 6 выполнить через объединение с файлом конфигурации. Итак:

1) в справочник ОС добавляем реквизит "ФайлКартинки" с типом "СправочникСсылка.ХранилищеДополнительнойИнформации"

2) для справочника ОС создаем Управляемую форму элемента справочника.

3) для формы добавляем два реквизита "ИмяФайлаКартинки" и "СсылкаНаКартинку" с типом Строка

4) в форму добавляем ПолеФормы, имеющий вид Поле картинки и связываем с реквизитом формы "СсылкаНаКартинку" (ПутьКДанным). В этом поле будет отображаться картинка ОС.

5) для загрузки и сохранения изображения добавляем две локальные команды ЗагрузитьСДиска и СохранитьНаДиск:

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

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

6) в модуль формы добавляем следующие процедуры:

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

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

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

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

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

7) В основных формах справочника добавляем кнопки для открытия нашей формы:

-для формы списка

 СсылкаНаОС = ЭлементыФормы.СправочникСписок.ТекущаяСтрока;

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

-для формы элемента

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

8) Для реквизита Объект справочника ХранилищеДополнительнойИнформации  добавляем тип СправочникСсылка.ОсновныеСредства

 

Можно просто в конфигураторе через сравнение и объединение с конфигурацией из файла 1Cv8.cf добавить нашу упрвляемую форму, и добавить кнопки (пункт 7) и тип СправочникСсылка.ОсновныеСредства для реквизита Объект спр. ХранилищеДополнительнойИнформации (пункт 8). Внимание! При сравнении галочки ставим как на фотографии 3.png


P.S. Аналогично можно для любого справочника добавить возможность сохранять изображения.

 


Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
1Cv8.cf
.cf 33,67Kb
07.05.13
12
.cf 33,67Kb 12 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Т. (CratosX) 17.05.13 12:23
(0) В рубрикаторе сразу не приметил назначение - для БГУ, лучше укажи это отдельно в статье.
И правильнее называть свои объекты и свойства со своим префиксом, например
NickOmskiy2_ИмяФайлаКартинки и
NickOmskiy2_СсылкаНаКартинку
2. Александр Федоров (Sasha255n) 30.08.13 18:54
Вообщем то как частный случай могу допустить что данное ТЗ кому то и могло быть поставлено.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа