Имя: Пароль:
1C
1С v8
Программно навесить вотермарки на фото
0 Kleopatra2803
 
22.08.14
09:30
Доброе утро!

Есть файл Excel с гиперссылками на картинки. Задача состоит в том, чтобы загрузить гиперссылки в 1С, затем в коде достать из них картинки (у меня они достаются во временные файлы), затем через внешнюю программу навесить на эти картинки вотермарки и сохранить в папке на компьютере.

Внешнюю программу я запускаю через ЗапуститьПриложение(...). В первый параметр передаю командную строку, во втором по справке должен быть текущий каталог (я переписываю его из командной строки). Но картинка в папке на компьютере не создается. Проверяю в отладчике, как доходит до строки ЗапуститьПриложение() сразу попадает в исключение (я делаю через попытку - исключение).

Если полученную в отладчике строчку копирую в командную строку, то картинка с вотермаркой создается. Подозреваю, что проблема может быть в параметре "ТекущийКаталог". Помогите найти ошибку, пожалуйста

РазбитьСсылку = ПарситьГиперссылку(Фото);
                    
                    Соединение=Новый HTTPСоединение(Строка(РазбитьСсылку.Сервер));
                    
                    ИмяВременногоФайла=ПолучитьИмяВременногоФайла(".jpg");
                    Соединение.Получить("/" + РазбитьСсылку.ПутьКФайлу,ИмяВременногоФайла);
                    ИмяФайлаСВотермаркой = "D:\Разработка\Фото\" + Номен.Код + ".jpg";
                    ЗапуститьПриложение("""D:\Разработка\ImageMagick\composite.exe"" -dissolve 20% -tile ""D:\Разработка\ImageMagick\WATERMARK_FILE.jpg"" " +
                          + """" + ИмяВременногоФайла + """" + " " + """" + ИмяФайлаСВотермаркой + """", "C:\Users\1ce");
1 manyak
 
22.08.14
09:36
убери исключение, посмотри описание ошибки
2 Kleopatra2803
 
22.08.14
09:38
(1) я в исключение пишу Сообщить(ОписаниеОшибки()) почему-то в исключение отладчик заходит, но описание ошибки не выдает
3 dk
 
22.08.14
09:41
попробуй сама в командной строке запустить то, что в 1с не получается запустить
-------
может проблема в кодировке, кавычках, пробелах, длине строки ...
4 manyak
 
22.08.14
09:43
(3)
"Если полученную в отладчике строчку копирую в командную строку, то картинка с вотермаркой создается"
типа робит говорит :)

(2) убери ветвление на исключение, и посмотри на ошибку на которую платформа ругаться будет
5 Kleopatra2803
 
22.08.14
09:43
(3)в командной строке все запускается и работает и картинка создается. Сначала у меня было без кавычек, потом решила добавить кавычки, в командной строке работает так и так
6 Kleopatra2803
 
22.08.14
09:45
(4) "типа робит говорит :)" это ты о чем?)
7 manyak
 
22.08.14
09:46
сделай переменную строка_запуска и в ней пропиши ручками без переменных скопированную строку
потом ЗапуститьПриложение(строка_запуска)
и проверь - если работает, значит ошибка в соединении строковых переменных
8 dk
 
22.08.14
09:47
код выполняется на сервере 1С? там другие пути )
9 Kleopatra2803
 
22.08.14
10:07
(8) Забыла сказать это все на управляемых формах УТ 11.1.4.10 в файловом режиме. Процедура с директивой на сервере
10 marty0701
 
22.08.14
10:16
Вот кусок г..., всмысле кода, попробуй использовать COM, все работает.

        Попытка
            Magick = Новый ComОбъект("ImageMagickObject.MagickImage.1");
        Исключение
            Сообщить("Не удалось создать COM объект ImageMagickObject, возможно библиотека не зарегистрирована в системе.", СтатусСообщения.Внимание);
            Предупреждение("Выполенние обработки завершено с ошибками.", 25);
            Возврат;
        КонецПопытки;
        
        Попытка
            ФайлКартинка = Новый COMОбъект("WIA.ImageFile");
        Исключение
            Сообщить("Не удалось создать COM объект WIA.ImageFile, возможно библиотека не зарегистрирована в системе.", СтатусСообщения.Внимание);
            Предупреждение("Выполенние обработки завершено с ошибками.", 25);
            Возврат;
        КонецПопытки;
    КонецЕсли;

    Для Каждого Файл Из МассивФайлов Цикл
        ОбработкаПрерыванияПользователя();
        н=н+1;
        Если н=1 ИЛИ Цел(н/10)=н/10 ИЛИ н=Всего Тогда
            ФормаПроцесса.ЭлементыФормы.ИндикаторПроцесса.Значение=н;
            ФормаПроцесса.ЭлементыФормы.ТекущийЭлемент.Заголовок=Файл.Имя;
        КонецЕсли;
        Код="";
        Попытка
            Выполнить("Код="+Выражение);
        Исключение
            Сообщить("Ошибка при выполнении выражения получения кода номенклатуры из имени файла."+Символы.ПС+ОписаниеОшибки(),СтатусСообщения.Внимание);
            Прервать;
        КонецПопытки;
        Если НЕ ФИменаФайлоВВвидеКода Тогда
            Код = Прав(Код, СтрДлина(Код) - Найти(Код, ")"));
            Код = СтрЗаменить(Код, Символы.НПП, " ");
            Код = СокрЛП(Лев(Код, СтрДлина(Код) - Найти(Код, " ")));
        КонецЕсли;
        
        ПутьКФайлу = Файл.ПолноеИмя;
        ВременныйИмяФайла = Файл.ИмяБезРасширения + "_WM" + ".jpg";
        ФайлСВЗ = КаталогИзображений + "\" + ВременныйИмяФайла;
        Если ВнедрятьВодянойЗнак Тогда
            Magick.Composite("-watermark", "5", "-gravity", "center", ПВВодянойЗнак, ПутьКФайлу, ФайлСВЗ);
        КонецЕсли;
11 Kleopatra2803
 
22.08.14
10:20
(7), (10) сейчас попробую
12 Kalambur
 
22.08.14
10:27
Вот смотрю как мучается с этим 1С умная,красивая. Нафиг тебе этот 1С? )
13 Kleopatra2803
 
22.08.14
10:32
(12) я же говорю, у меня какая-то нездоровая эйфория от 1Ски)))
14 katc
 
22.08.14
10:39
версия файловая или серверная?
Может для пользователя, под которым запущен  сервер 1С, запрещены действия или еще что
15 Kleopatra2803
 
22.08.14
10:43
(14) Файловая. Пользователь с полными правами
16 Kleopatra2803
 
22.08.14
15:55
Большое всем спасибо! Исправила. Сейчас у меня Фотки сохраняются в папку на компьютере, фотки с водяными знаками сохраняются в другую папку на компьютере. Проблема была в кавычках, и в том, что я командную строку переносила на другую строку, так как она была очень длинная. В общем, может кому-нибудь поможет:

МассивКартинок = НайтиФайлы("D:\Разработка\Фото\Foto1", "*.jpg");
    ФотоСВодянымЗнакомЗагружено = Ложь;
    Для Каждого ФайлКартинки Из МассивКартинок Цикл
        ПолноеИмяФайлаСВодянымЗнаком = "D:\Разработка\Фото\Foto2\" + ФайлКартинки.Имя;
        Попытка
            ЗапуститьПриложение("D:\Разработка\ImageMagick\composite.exe -dissolve 20% -tile D:\Разработка\ImageMagick\WATERMARK_FILE.jpg " + ФайлКартинки.ПолноеИмя + " " + ПолноеИмяФайлаСВодянымЗнаком);
            ФотоСВодянымЗнакомЗагружено = Истина;
        Исключение
            Сообщить("Для номенклатуры " + НайтиНоменклатуруПоКоду(ФайлКартинки.ИмяБезРасширения) + " фото с водяным знаком не загружено!");
            Сообщить(ОписаниеОшибки());
        КонецПопытки;                      
    КонецЦикла;
    Если ФотоСВодянымЗнакомЗагружено Тогда
        Сообщить("Фото номенклатуры с водяными знаками загружено в папку D:\Разработка\Фото\Foto2");
    КонецЕсли;
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой