Имя: Пароль:
1C
1С v8
Ошибка доступа к файлу
0 As-Pin
 
08.10.13
09:37
Есть процедурка, выполняется на сервере, необходимо с фтп выгрузить файл с картинкой и потом записать его в справочник файлы, ошибка доступа к файлу, потому, что выполняется на сервере, как же мне быть, есть ли способ с фтп получить двоичные данные файла???
&НаСервере
Процедура ПроверкаФайла(ЭлементС,КартинкаМ, КартинкаБ);
    
    Путь = "/isoft74.ru/docs";
    Соединение = УстановитьСоединение();
    ПутьКартинкаМ = Путь+КартинкаМ;
    ПутьКартинкаБ = Путь+КартинкаБ;
    
    Расширение = КартинкаМ;
    Пока Найти(Расширение, ".")>0 Цикл
        Расширение = Сред(Расширение,Найти(Расширение, ".")+1);
    КонецЦикла;
    Пока Найти(КартинкаМ, "/")>0 Цикл
        КартинкаМ = Сред(КартинкаМ,Найти(КартинкаМ, "/")+1);
    КонецЦикла;
    Картинка = Лев(КартинкаМ, Найти(КартинкаМ, ".")-1);    
    
    Файл = Новый Картинка;
    Файл.Записать("C:/temp.file");
    
    Соединение.Получить(ПутьКартинкаМ,"C:/temp.file");
            
    ДвоичДанные = Новый ДвоичныеДанные("C:/temp.file");
    //ДвоичДанные = ПолучитьФайлСФТП();

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

    КонецЕсли;    
//ЭлементС.Записать();
УдалитьФайлы("temp.file");
    
КонецПроцедуры
1 hhhh
 
08.10.13
09:45
ну путь

    Файл.Записать("C:/temp.file");

поменять на другой. Вряд ли на сервере он доступен для 1с.
2 As-Pin
 
08.10.13
10:21
ставил просто

Файл.Записать("temp.file");

по идее создается в папке с платформой, не помогло
Еще новичок в этом деле, база хранится на сервере и путь к ней  ws="http://192.168.0.2/isoft";
на локальной базе с моего компа, Файл.Записать("temp.file"); нормально работает, а там пишет ошибка доступа, видел решение запустить от администратора, но как удаленно это сделать то :D , или у меня только один способ, запускать обработку на самом сервере?
3 Wobland
 
08.10.13
10:22
получи временный каталог