Имя: Пароль:
1C
1С v8
Загрузка и выгрузка файлов.
0 antihacker
 
17.11.16
06:13
Вснм привет ! Вот так я загружаю файл в базу

&НаКлиенте
Процедура ПутьКфайлуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
        #Если ВебКлиент Тогда
            Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда
                    УстановитьРасширениеРаботыСФайлами();
                    ПодключитьРасширениеРаботыСФайлами();
            КонецЕсли;    
        #КонецЕсли

        СтандартнаяОбработка=ложь;      
        Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
        Диалог.Заголовок = "Выберите файл";
        Диалог.ПолноеИмяФайла = "";
        Фильтр = "DOCX (*.docx)|*.docx";
        Диалог.Фильтр = Фильтр;
        Диалог.МножественныйВыбор = Ложь;
        Диалог.Каталог = "E:\";
      
    ЕСЛИ Диалог.Выбрать() ТОГДА

          ПутьКФайлу = СокрЛП(Диалог.ПолноеИмяФайла);

          #Если НЕ ВебКлиент Тогда

          ПомещамыеФайлы = Новый Массив;
          ПомещамыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу,""));
          ПомещенныеФайлы = Новый Массив;

         Если НЕ ПоместитьФайлы(ПомещамыеФайлы,ПомещенныеФайлы,,Ложь,УникальныйИдентификатор) Тогда
                 сообщить("Ошибка прикрепление файла: " +ОписаниеОшибки());
         Иначе
                 ПрикрепитьФайлСервер(ПомещенныеФайлы,Диалог.ПолноеИмяФайла,Истина);
         КонецЕсли;            
          #Иначе
        
          ПомещамыеФайлы = Новый Массив;
          ПомещамыеФайлы.Добавить(Новый ОписаниеПередаваемогоФайла(ПутьКФайлу,""));
          ПомещенныеФайлы = Новый Массив;

         Если НЕ ПоместитьФайлы(ПомещамыеФайлы,ПомещенныеФайлы,,Ложь,УникальныйИдентификатор) Тогда
                 сообщить("Ошибка прикрепление файла: " +ОписаниеОшибки());
         Иначе
                 ПрикрепитьФайлСервер(ПомещенныеФайлы,Диалог.ПолноеИмяФайла,Истина);
         КонецЕсли;    
         #КонецЕсли
    

    КОНЕЦЕСЛИ;
    
КонецПроцедуры

&НаСервере
Процедура ПрикрепитьФайлСервер(Данные, вхИмяФайла, ЭтоВебКлиент = Ложь)
    
    Если ЭтоВебКлиент Тогда
         АдресПрикрепленныйФайл = Данные[0].Хранение;
         ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресПрикрепленныйФайл);    
     Иначе
         АдресПрикрепленныйФайл = Данные[0].Хранение;
         ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресПрикрепленныйФайл);
    КонецЕсли;    

    НоваяСтрока = Объект.ТЧДокументыДоговора.Добавить();
    
    НоваяСтрока.ИмяФайла = вхИмяФайла;
    НоваяСтрока.АдресВременногоХранилища = АдресПрикрепленныйФайл;
    УдалитьИзВременногоХранилища(АдресПрикрепленныйФайл);

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

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

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


А так стараюсь выгрузить

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
     ДокументОбъект = РеквизитФормыВЗначение("Объект");
    
    Для Каждого ТекСтрока Из ДокументОбъект.ТЧДокументыДоговора Цикл
                ТекСтрока.АдресВременногоХранилища = ПоместитьВоВременноеХранилище(ТекСтрока.Файл,УникальныйИдентификатор);
    КонецЦикла;

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

&НаКлиенте
Процедура ФТЧДокументыДоговораВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

          СтрокаТабличнойЧасти = Элементы.ФТЧДокументыДоговора.ТекущиеДанные;
          НомерСтроки = СтрокаТабличнойЧасти.НомерСтроки;

          ФТЧДокументыДоговораВыборНаСервере(НомерСтроки-1);
          ПолучитьФайл(Элементы.ФТЧДокументыДоговора.ТекущиеДанные.АдресВременногоХранилища, "1213.doc", Истина);

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


Пишет что

{БизнесПроцесс.БПДоговора.Форма.ФормаБизнесПроцесса.Форма(309)}: Ошибка при вызове метода контекста (ПолучитьФайл)
          ПолучитьФайл(Элементы.ФТЧДокументыДоговора.ТекущиеДанные.АдресВременногоХранилища, "1213.doc", Истина);
по причине:
Неправильный путь к файлу 'e1c://server/здесь имя моего сервера/ABPDB/e1cib/tempstorage/e1782b61-b9dc-43c7-9e52-78974ba64d28'

Форма управляемая ! Клиент тонкий и веб.

В чем дело ?
1 Рэйв
 
17.11.16
06:18
Или в пути ошибка или прав не хватает за уазанную папку
2 antihacker
 
17.11.16
06:22
Как я могу ошибаться в пути, елси я не указываю вручную. Все пути система сама определает как ивдно.
3 JeHer
 
17.11.16
06:29
(2) в (1) кроме пути написано, что прав не хватает за указанную папку, у сервера.
4 antihacker
 
17.11.16
06:32
Это что я должен делать ? Что за папка на сервер ?
5 JeHer
 
17.11.16
06:33
(4) учетка, под которой запускается Служба Сервера 1С. Ей тоже нужны права на изменение на этот каталог.
6 antihacker
 
17.11.16
06:36
Блин ШО за каталог ?
7 antihacker
 
17.11.16
06:50
НИчего ни трогал. Права не менял. Пробую так.
&НаСервере
Функция СформироватьФайл()
    ИмяВременногоФайла = "C:\TMPatch.log";
    //Тут создаем наш файл и записываем его в ИмяВременногоФайла
    //C:\TMPatch.log
    //Возвращаем на клиент адрес во временном хранилище
    Возврат ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайла), УникальныйИдентификатор);
КонецФункции

&НаКлиенте
Процедура Команда2(Команда)
        Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда
        Попытка
            УстановитьРасширениеРаботыСФайлами();
        Исключение
            Сообщить(ОписаниеОшибки());
            Возврат;
        КонецПопытки;
    КонецЕсли;

    Если ПодключитьРасширениеРаботыСФайлами() Тогда
        СсылкаСкачивания = СформироватьФайл();
        сообщить(СсылкаСкачивания);
        ПолучитьФайл(СсылкаСкачивания, "МойФайл");
    КонецЕсли;
КонецПроцедуры

И открываеться . НЕ могу понять. ПриСозданиеНаСервере косячок ?
8 JeHer
 
17.11.16
06:56
А здесь у тебя что? ФТЧДокументыДоговораВыборНаСервере
9 antihacker
 
17.11.16
07:07
Просто лищняя строка. Не мешает. Можно убрать. Дело в том что все работает. Загружаеться и выгружаеться без проблем. Но пока не переоткроешь документ. Все таки где то в ПриСозданиеНаСервере
10 JeHer
 
17.11.16
07:19
(9) ЗначениеВРеквизитФормы()?
11 antihacker
 
17.11.16
07:24
Без него делаю так


&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    

    Для Каждого ТекСтрока Из Объект.ТЧДокументыДоговора Цикл
        Если ЭтоАдресВременногоХранилища(ТекСтрока.АдресВременногоХранилища) Тогда
             ДвоичныеДанные = ПолучитьИзВременногоХранилища(ТекСтрока.АдресВременногоХранилища);
             ТекСтрока.Файл = Новый ХранилищеЗначения(ДвоичныеДанные);
              
        КонецЕсли;
    КонецЦикла;

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


Но ругаеться что поле ТекСтрока.Файл не обноружен хотя он есть. Не могу понять почему у табличной части есть реквизит с типом ХранилищеЗначения, он не доступен.