INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Ольга Петровская | Директор | ООО "Решения будущего"

«И опыт, сын ошибок трудных…» или как с нуля создать свою фирму 1С-франчайзи. Реальный опыт, успехи и неудачи»

1. Зачем что-то менять, имея высокооплачиваемую работу «на дядю» 2. Чего мелочиться? Давай сразу ООО 3. Выстраивание взаимоотношений с партнерами-соучредителями «на берегу» 4. Делегирование и «золотая лопата» руководителя 5. Поиск клиентов и как не захлебнуться в проектах 6. Баланс бизнеса и личной жизни 7. Минимальные инструменты управления ИТ-компанией Анализ допущенных ошибок и советы начинающим этот путь

Обработка изображений номенклатуры в УТ 10.3

Обработки - Обработка справочников

21
Данная обработка предназначения для уменьшения основных изображений номенклатуры, загруженных в информационную базу конфигурации Управление торговлей 10.3.

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

Чревато это увеличенными (раздутыми) объемами бэкапов, а также большой нагрузкой на обмены (в случае наличия распределенных баз).

В большинстве случаев, таких как вывод картинки в прайс-лист, либо выгрузки ее на сайт, достаточно даже изображений размером не больше 800x600 пикселей. Объем картинок, сохраненных в таком размере, обычно не превышает и 100 Кбайт, в то время, как исходное изображение может достигать 5-10 Мбайт (в случае загрузки его с цифрового фотоаппарата без изменения настроек по-умолчанию).

Данная обработка работает следующим образом:
1. Регистрируется библиотека GFLAx (архив для х32 и х64 ОС Windows прилагаю)
2. Открываете обработку, указываете группу номенклатуры, которую необходимо обработать
2. Устанавливаете максимальный размер (в байтах) для основного изображения, максимальную ширину и высоту изображения, до которого будет уменьшена картинка
3. После запуска будет отобрана вся номенклатура в указанной группе
4. Если размер основного изображения будет превышать указанный нами, то картинка сохраняется на жесткий диск (во временный каталог, или каталог, заданный вами вручную)
5. При помощи компоненты GFLAx производится пропорциональное уменьшение ширины и высоты изображения до максимально допустимого
6. Изображение сохраняется в формате JPEG с качеством 75 (в большинстве случаев этого более чем достаточно, в противном случае код обработки открыт и вы всегда этот момент можете доработать)
7. Сохраненное изображение загружается обратно в базу

Так же имеется возможность вывести небольшой отчет, с результатом работы обработки.

 

Что побудило меня на написание этой обработки? :) Звонок с филиала, с вопросом "Почему не происходит обмен". Начав разбираться, выясняю, что файл обмена в сжатом состоянии занимает больше 300МБайт. Т.к. обмен у нас осуществляется раз в полчаса, то со стороны филиала (интернет там не особо быстрый) сервер не успевал загрузить файл обмена с FTP, он перезаписывался в головном офисе, и обмен останавливался с ошибкой чтения файла. Причина разросшегося файла обмена была выяснена не сразу. Когда нашел - выяснил, что по новой номенклатуре от поставщика изображений нет, и был выделен специально для этого зеркальный фотоаппарат. Картинки загружались "как есть" с разрешением больше 3к пикселей в ширину и размером более 5МБайт.

Наткнулся на обработку уменьшения картинок для УТ 11: //infostart.ru/public/93278/

Однако для УТ 10.3 она конечно не подходит, т.к. томов файлов тут нет. Взял ее за основу. Скачал библиотеки GFLAx для 32 и 64-разрядных ОС. Установил и зарегистрировал библиотеки согласно описанию. Взлетело без проблем.

 

На всякий случай приведу алгоритм регистрации библиотеки GFLAx.

Скачиваете и распаковываете GflAX-binaries-3.0.zip

Если у вас 32-разрядная ОС:
1. Копируете папку Unicode Release.Win32 в директорию C:\Windows\System32
2. Запускаете командную строку от имени администратора и выполняете команду C:\Windows\system32\regsvr32.exe "Unicode Release.Win32\GflAX.dll"

Если у вас 64-разрядная ОС:
1. Копируете папку Unicode Release.Win32 в директорию C:\Windows\SysWOW64\
2. Копируете папку Unicode Release.x64 в директорию C:\Windows\System32
3. Запускаете командную строку от имени администратора и выполняете команду C:\Windows\system32\regsvr32.exe "Unicode Release.x64\GflAX.dll"
4. Выполняете команду C:\Windows\SysWOW64\regsvr32.exe "Unicode Release.Win32\GflAX.dll"

P.S. На своем примере обработав 1 группу номенклатуры размер изображений был уменьшен со 100 до 14МБайт, что считаю довольно существенным.

Обновление от 25.02.2016: Добавил возможность указания качества сжатия JPEG. Если исходная картинка в базе имеет более низкое качество и не происходит изменения ее размеров, то пересохраняться в более высоком качестве она не будет, т.к. фактически картинка останется та же, а размер ее вырастет.

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

21

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

Наименование Файл Версия Размер
Обработка уменьшения картинок номенклатуры
.epf 11,24Kb
30.05.18
126
.epf 11,24Kb 126 Скачать
Библиотека GFLAx для 32 и 64-разрядных ОС Windows
.zip 1,71Mb
30.05.18
108
.zip 1,71Mb 108 Скачать

См. также

Комментарии
Сортировка: Древо
1. gull22 83 19.11.14 12:12 Сейчас в теме
2. astronavt006 60 19.02.15 12:57 Сейчас в теме
Большое спасибо за разработку. Реально помогла)))
3. insurgut 179 19.02.15 13:20 Сейчас в теме
(2) astronavt006, рад, что пригодилась ;)
4. osd2006 25.02.16 06:14 Сейчас в теме
Спасибо огромное, удалось сжать картинки в базе на 127 мб.
5. insurgut 179 25.02.16 08:46 Сейчас в теме
Добавил возможность указания качества сжатия JPEG. Если исходная картинка в базе имеет более низкое качество и не происходит изменения ее размеров, то пересохраняться в более высоком качестве она не будет, т.к. фактически картинка останется та же, а размер ее вырастет.
Так же добавлена возможность обработки всех изображений номенклатуры, которые добавлены в файлах номенклатуры.
6. Jelbock 08.04.16 13:36 Сейчас в теме
Здравствуйте. Подскажите, я так понимаю, дополнительные изображения не получится пережать?
7. insurgut 179 08.04.16 17:31 Сейчас в теме
(6) Jelbock, получится, эта возможность была добавлена 25.02.2016.
8. Jelbock 12.04.16 21:56 Сейчас в теме
9. S@V 07.06.16 07:32 Сейчас в теме
Спасибо большое за обработку ))) ужал на 200 метров базу )))
10. Voblhned 32 09.06.16 20:30 Сейчас в теме
ужал базу с 5,4 гигадо, до 980 метров, а теперь скажи на реальной базу стоит делать? Как она дружит с РИБом, если центральную ужать, то потом ужимать узлы или нет?
11. insurgut 179 10.06.16 22:04 Сейчас в теме
(10) Voblhned, по РИБу картинки спокойно перейдут с обменом из центральной базы в распределенные. Но нужно учитывать факт размера файла обмена - картинки в архиве практически не сжимаются. Поэтому обрабатывать нужно по порционно, прогоняя обмен после обработки очередной порции.
12. Voblhned 32 14.06.16 22:55 Сейчас в теме
(11) Я примерно так и думал, проверил уже, так и есть, файл обмена стал огромным, по категориям разбил, хорошо перенеслось. Плюс тебе в карму.
14. user689645_gb 22.04.17 11:28 Сейчас в теме
(11)Добрый день!Подскажите,как зарегистрировать компоненту не на диске С ,а на диске D ,например.Пожалуйста,напишите,как должна выглядеть команда в командной строке.Заранее благодарю.
15. insurgut 179 22.04.17 15:58 Сейчас в теме
(14) что-то вроде C:\Windows\system32\regsvr32.exe "D:\моя_директория\Unicode Release.Win32\GflAX.dll"
16. _n26__ 09.07.18 05:44 Сейчас в теме
Добрый день!
Спасибо большое за обработку. Очень помогла. Возник такой вопрос. А как-то можно узнать, что загружены новые изображения, и применить уменьшение именно к новым, а не заново все изображения элементов номенклатуры обрабатывать?
17. insurgut 179 09.07.18 07:11 Сейчас в теме
(16) стандартно такой возможности нет, самый простой вариант - это доработка конфигурации.
В номенклатуре добавляем реквизит ДатаИзменения с типом Дата. В модуле при записи номенклатуры добавляем строку:

ДатаИзменения = ТекущаяДата();


В самой обработке добавляем на форму реквизит ДатаИзменения и в условии отбора прописать примерно так:

	Запрос = Новый Запрос("ВЫБРАТЬ
	|	Номенклатура.Ссылка
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	|	НЕ Номенклатура.ЭтоГруппа " + ?(ЗначениеЗаполнено(ДатаИзменения), "И Номенклатура.ДатаИзменения >= &ДатаИзменения", "") + "
	|	И Номенклатура.Ссылка В ИЕРАРХИИ(&ГруппаНоменклатуры)");
	Запрос.УстановитьПараметр("ГруппаНоменклатуры", ГруппаНоменклатуры);
	Если ЗначениеЗаполнено(ДатаИзменения) Тогда
		Запрос.УстановитьПараметр("ДатаИзменения", ДатаИзменения);
	КонецЕсли;
Показать
18. _n26__ 09.07.18 21:29 Сейчас в теме
(17) Спасибо за ответ!
К сожалению, не разрешено дорабатывать конфигурацию. Пришел в голову вариант, делать через файл. В котором указывать, код элемента номенклатуры, имя изображения и его размер. И потом проверять, было ли у номенклатуры изображение с таким размером обработано или нет.
19. insurgut 179 09.07.18 22:22 Сейчас в теме
(18) можно и вовсе без файлов и без доработки конфигурации - добавить дополнительный реквизит "Размер изображения", которое сохранять после обработки и проверять перед обработкой. Но там чуть побольше кода потребуется уже в самой обработке добавлять :)
20. _n26__ 10.07.18 11:04 Сейчас в теме
(19) Спасибо большое за совет! Так будет гораздо проще.
13. NushaN 10 07.07.16 11:36 Сейчас в теме
insurgut, шикарно, спасибо! работает в лёт! Применима и для УПП 1.3
2.61 Гб -> 900 Мб
21. chukawata 10 08.08.18 10:59 Сейчас в теме
Подскажите, пожалуйста, каким методом GflAX.dll менять качество JPEG?
22. insurgut 179 08.08.18 19:28 Сейчас в теме
(21) не метод, свойство, которое заполняется перед сохранением:
Картинка.SaveJPEGQuality = КачествоJPEG;

где КачествоJPEG - число от 0 до 100
Оставьте свое сообщение