Функция ВыгрузитьДопКартинки:
[I]Функция ВыгрузитьДопКартинки(Номенклатура, КаталогНаДиске, Постфикс)
СтруктураРезультата = Новый Структура;
СтруктураРезультата.Вставить("Адрес", "");
СтруктураРезультата.Вставить("Размер", "0");
Картинка = Номенклатура.Хранилище.Получить();
Если ТипЗнч(Картинка) <> Тип("Картинка") Тогда
Возврат СтруктураРезультата;
КонецЕсли;
ФорматКартинкиРазрешен = Истина;
РасширениеФайлаКартинки = "";
#Если Клиент Тогда
ФорматКартинкиОбъекта = Картинка.Формат();
Если ФорматКартинкиОбъекта = ФорматКартинки.НеизвестныйФормат Тогда
ФорматКартинкиРазрешен = Ложь;
Иначе
Если НЕ (ФорматКартинкиОбъекта = ФорматКартинки.GIF
ИЛИ ФорматКартинкиОбъекта = ФорматКартинки.JPEG
ИЛИ ФорматКартинкиОбъекта = ФорматКартинки.PNG) Тогда
Попытка
ФорматКартинкиОбъекта = Картинка.Преобразовать(ФорматКартинки.JPEG);
Исключение
СообщитьОбИсключительнойОшибке(Истина, "Не удалось преобразовать формат картинки. Номенклатура: " + Номенклатура + ". Преобразование из " + Строка(ФорматКартинкиОбъекта) + " в JPEG");
Возврат СтруктураРезультата;
КонецПопытки;
КонецЕсли;
РасширениеФайлаКартинки = Строка(ФорматКартинкиОбъекта);
КонецЕсли;
#Иначе // СЕРВЕР
// На сервере проверка формата файла по сигнатуре файла:
// JPEG: FF D8 xx xx xx xx 4A 46 49 46 00
// GIF: 47 49 46
// PNG: 89 50 4e 47 0d 0a 1a 0a
//
// -1 - значит байт игнорируется.
// Код должен быть не более 127(dec) для совместимости Unicode-ASCII
СигнатураJPEG = Новый Массив;
СигнатураJPEG.Добавить(-1);
СигнатураJPEG.Добавить(-1);
СигнатураJPEG.Добавить(-1);
СигнатураJPEG.Добавить(-1);
СигнатураJPEG.Добавить(-1);
СигнатураJPEG.Добавить(-1);
СигнатураJPEG.Добавить(74);
СигнатураJPEG.Добавить(70);
СигнатураJPEG.Добавить(73);
СигнатураJPEG.Добавить(70);
СигнатураJPEG.Добавить(0);
СигнатураGIF = Новый Массив;
СигнатураGIF.Добавить(71);
СигнатураGIF.Добавить(73);
СигнатураGIF.Добавить(70);
СигнатураPNG = Новый Массив;
СигнатураPNG.Добавить(-1);
СигнатураPNG.Добавить(80);
СигнатураPNG.Добавить(78);
СигнатураPNG.Добавить(71);
СигнатураPNG.Добавить(13);
СигнатураPNG.Добавить(10);
СигнатураPNG.Добавить(26);
СигнатураPNG.Добавить(10);
РазрешенныеСигнатуры = Новый Соответствие;
РазрешенныеСигнатуры.Вставить("GIF" , СигнатураGIF);
РазрешенныеСигнатуры.Вставить("JPEG", СигнатураJPEG);
РазрешенныеСигнатуры.Вставить("PNG" , СигнатураPNG);
МаксДлинаСигнатуры = 0;
Для каждого Сигнатура Из РазрешенныеСигнатуры Цикл
ДлинаСигнатуры = Сигнатура.Значение.Количество();
Если МаксДлинаСигнатуры < ДлинаСигнатуры Тогда
МаксДлинаСигнатуры = ДлинаСигнатуры;
КонецЕсли;
КонецЦикла;
ИмяВремФайла = ПолучитьИмяВременногоФайла();
Попытка
Картинка.Записать(ИмяВремФайла);
Исключение
СообщитьОбИсключительнойОшибке(Истина, "Не удалось записать файл " + ИмяВремФайла + " для определения формата картинки. Номенклатура: " + Номенклатура);
Возврат СтруктураРезультата;
КонецПопытки;
ТекстФайлКартинки = Новый ЧтениеТекста;
Попытка
ТекстФайлКартинки.Открыть(ИмяВремФайла,,,Символы.ПС);
Исключение
СообщитьОбИсключительнойОшибке(Истина, "Не удалось прочитать файл " + ИмяВремФайла + " для определения формата картинки. Номенклатура: " + Номенклатура);
Возврат СтруктураРезультата;
КонецПопытки;
ТекстКартинки = ТекстФайлКартинки.Прочитать(МаксДлинаСигнатуры);
ТекстФайлКартинки.Закрыть();
Если ТекстКартинки = "" Тогда
СообщитьПользователю("Не удалось получить сигнатуру файла картинки. Номенклатура: " + Номенклатура, Истина, СтатусСообщения.Информация);
Возврат СтруктураРезультата;
КонецЕсли;
ФорматКартинкиРазрешен = Ложь;
Для каждого Сигнатура Из РазрешенныеСигнатуры Цикл
ДлинаСигнатуры = Сигнатура.Значение.Количество();
СигнатураРаспознана = Истина;
Для Сч = 1 По ДлинаСигнатуры Цикл
ТекБайтСигнатуры = Сигнатура.Значение[Сч - 1];
Если ТекБайтСигнатуры = -1 Тогда
Продолжить;
КонецЕсли;
ТекБайтФайла = КодСимвола(ТекстКартинки, Сч);
Если НЕ ТекБайтСигнатуры = ТекБайтФайла Тогда
СигнатураРаспознана = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
Если СигнатураРаспознана Тогда
ФорматКартинкиРазрешен = Истина;
РасширениеФайлаКартинки = Сигнатура.Ключ;
Прервать;
КонецЕсли;
КонецЦикла;
#КонецЕсли
Если НЕ ФорматКартинкиРазрешен Тогда
СообщитьПользователю("Формат основного изображения неизвестен или запрещен. Номенклатура: " + Номенклатура, Истина, СтатусСообщения.Информация);
Возврат СтруктураРезультата;
КонецЕсли;
ИмяФайлаКартинки = Строка(Номенклатура.Объект.УникальныйИдентификатор())+"Dop"+Постфикс+"." + НРег(РасширениеФайлаКартинки);
КаталогПоИмени = Лев(ИмяФайлаКартинки, 9);
КаталогКартинки = КаталогНаДиске + "\" + ПодкаталогКартинок + "\" + КаталогПоИмени;
СоздатьКаталог(КаталогКартинки);
ПолноеИмяФайлаКартинки = КаталогКартинки + "\" + ИмяФайлаКартинки;
ФайлКартинкиНаДиске = Новый Файл(ПолноеИмяФайлаКартинки);
Попытка
Картинка.Записать(ПолноеИмяФайлаКартинки);
Исключение
СообщитьОбИсключительнойОшибке(Истина, "Не удалось записать файл картинки на диск. Номенклатура: " + Номенклатура);
Возврат СтруктураРезультата;
КонецПопытки;
СтруктураРезультата.Адрес = ПодкаталогКартинок + "/" + КаталогПоИмени + "/" + ИмяФайлаКартинки;
СтруктураРезультата.Размер = Формат(ФайлКартинкиНаДиске.Размер(), "ЧГ=");
Возврат СтруктураРезультата;
КонецФункции [/I]
[B]Пришлось увеличить длину создаваемой папки для выгрузки картинок с 2-х (как было сделанно разработчиками) до 9-ти , а то были задвоения !!! [/B]