gifts2017

Выгрузка - загрузка изображений из справочника "Хранилище дополнительной информации" 1С 8.1

Опубликовал Михаил (chastliviy) в раздел Обработки - Обработка справочников

"Управление торговлей", редакция 10.2 + производство 1.0
Столкнулся с тем, что пользователи продолжительное время загружали изображения в BMP. В результате база сильно раздута. Написана обработка, выгружающая Изображения в одном из выбранных форматов (из справочника "ХранилищеДополнительнойИнформации") в папку на жесткий диск. Имена файлов преобразуются в "УникальныйИдентификатор" элемента справочника. Далее сторонней программой (я использовал фотошоп с написанным скриптом автоматизации) файлы конвертировались в JPG. По такому же принципу ("УникальныйИдентификатор") Изображения загружались обратно в базу.  

В обработке можно выбрать количество выгружаемых изображений за раз (чтобы не "затормаживать" базу на продолжительное время)

Также Вы можете выбрать формат и расширение для выгружаемых / загружаемых изображений и каталоги.

-----------------------------------------------

Выкладываю код принципа работы обработки для тех, кто учится программировать самостоятельно. Без проверок и возможностей выбора.

Выборку из справочника быстрее, конечно, делать запросом.

 

 

 

Процедура СохранитьИзоНажатие()

    ВыборкаИзо = Справочники.ХранилищеДополнительнойИнформации.Выбрать();

    Пока ВыборкаИзо.Следующий() Цикл

       Если ВыборкаИзо.ВидДанных = Перечисления.ВидыДополнительнойИнформацииОбъектов.Изображение Тогда

       ЗапКартинка = Новый Картинка();
       ЗапКартинка = ВыборкаИзо.Хранилище.Получить();

       ФорматК = ЗапКартинка.Формат();

          Если ФорматК = ФорматКартинки.BMP Тогда

        
          ИмяК = Новый УникальныйИдентификатор;
          ИмяК = ВыборкаИзо.Ссылка.УникальныйИдентификатор();


          Попытка

           ЗапКартинка.Записать("C:\" + ИмяК + "." + ФорматК);
         
          Исключение
           Предупреждение("Ошибка при записи файла" + ВыборкаИзо.Наименование);

          КонецПопытки;

          КонецЕсли;

       КонецЕсли;

    КонецЦикла;



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

 


Процедура ЗагрузитьИзоНажатие()

    ФайлыИзо = НайтиФайлы("C:\", "*.jpg");

    Для Каждого ЭлементМассива Из ФайлыИзо Цикл

        УИН = Новый УникальныйИдентификатор(ЭлементМассива.ИмяБезРасширения);
        СсылкаХДИ = Справочники.ХранилищеДополнительнойИнформации.ПолучитьСсылку(УИН);

        ХДИ = СсылкаХДИ.ПолучитьОбъект();

        НКартинка = Новый Картинка (ЭлементМассива.ПолноеИмя, Ложь);
        ХДИ.Хранилище = Новый ХранилищеЗначения(НКартинка, Новый СжатиеДанных());
        ХДИ.Записать();

    КонецЦикла;

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


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

Наименование Файл Версия Размер Кол. Скачив.
СохранитьЗагрузитьИЗО.epf
.epf 9,30Kb
16.04.15
12
.epf v2 9,30Kb 12 Скачать

См. также

Contragent+ 5.0 от 2 500
Подписаться Добавить вознаграждение

Комментарии

1. Сергей Галюк (dj_serega) 09.04.15 23:06
1. А почему нет выбора каталога? (если диска D нет)
2. Сохраняем: BMP
Если ФорматК = ФорматКартинки.BMP Тогда
Загружаем:
ФайлыИзо = НайтиФайлы("D:\Temp_izo\1\", "*.jpg");
2. Михаил (chastliviy) 10.04.15 08:59
Выложил сам принцип, потому что не нашел похожего в интернете. Для создания своего каталога, воспользуйтесь: СоздатьКаталог(ИмяКаталога).
3. Сергей Галюк (dj_serega) 10.04.15 11:03
(2) chastliviy, так сделайте рабочий вариант без принципов. и тогда люди потянутся.
1. Выбор каталога.
2. Выбор типов файлов.
Это необходимый минимум.
4. Канат Джумадылов (Fox-trot) 10.04.15 21:45
Пока ВыборкаИзо.Следующий()=1 Цикл

впечатлен 8-0
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа